Skip to content
This repository was archived by the owner on Feb 23, 2024. It is now read-only.

Commit 8736572

Browse files
authored
Fix ApiLoggerId (when extract single Api)(#339)
1 parent f7db8e2 commit 8736572

File tree

3 files changed

+51
-32
lines changed

3 files changed

+51
-32
lines changed

src/APIM_ARMTemplate/apimtemplate/Extractor/EntityExtractors/LoggerExtractor.cs

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
namespace Microsoft.Azure.Management.ApiManagement.ArmTemplates.Extract
1010
{
11-
public class LoggerExtractor: EntityExtractor
11+
public class LoggerExtractor : EntityExtractor
1212
{
1313
public async Task<string> GetLoggersAsync(string ApiManagementName, string ResourceGroupName)
1414
{
@@ -30,25 +30,24 @@ public async Task<string> GetLoggerDetailsAsync(string ApiManagementName, string
3030
return await CallApiManagementAsync(azToken, requestUrl);
3131
}
3232

33-
public async Task<Template> GenerateLoggerTemplateAsync(string apimname, string resourceGroup, string singleApiName, List<TemplateResource> apiTemplateResources, string policyXMLBaseUrl, string policyXMLSasToken)
33+
public async Task<Template> GenerateLoggerTemplateAsync(Extractor exc, string singleApiName, List<TemplateResource> apiTemplateResources, Dictionary<string, Dictionary<string, string>> apiLoggerId)
3434
{
3535
Console.WriteLine("------------------------------------------");
3636
Console.WriteLine("Extracting loggers from service");
37-
Template armTemplate = GenerateEmptyTemplateWithParameters(policyXMLBaseUrl, policyXMLSasToken);
37+
Template armTemplate = GenerateEmptyTemplateWithParameters(exc.policyXMLBaseUrl, exc.policyXMLSasToken);
3838

3939
// isolate product api associations in the case of a single api extraction
40-
var diagnosticResources = apiTemplateResources.Where(resource => resource.type == ResourceTypeConstants.APIDiagnostic);
4140
var policyResources = apiTemplateResources.Where(resource => (resource.type == ResourceTypeConstants.APIPolicy || resource.type == ResourceTypeConstants.APIOperationPolicy || resource.type == ResourceTypeConstants.ProductPolicy));
4241

4342
List<TemplateResource> templateResources = new List<TemplateResource>();
4443

4544
// pull all loggers for service
46-
string loggers = await GetLoggersAsync(apimname, resourceGroup);
45+
string loggers = await GetLoggersAsync(exc.sourceApimName, exc.resourceGroup);
4746
JObject oLoggers = JObject.Parse(loggers);
4847
foreach (var extractedLogger in oLoggers["value"])
4948
{
5049
string loggerName = ((JValue)extractedLogger["name"]).Value.ToString();
51-
string fullLoggerResource = await GetLoggerDetailsAsync(apimname, resourceGroup, loggerName);
50+
string fullLoggerResource = await GetLoggerDetailsAsync(exc.sourceApimName, exc.resourceGroup, loggerName);
5251

5352
// convert returned logger to template resource class
5453
LoggerTemplateResource loggerResource = JsonConvert.DeserializeObject<LoggerTemplateResource>(fullLoggerResource);
@@ -75,9 +74,12 @@ public async Task<Template> GenerateLoggerTemplateAsync(string apimname, string
7574
isReferencedInPolicy = true;
7675
}
7776
}
78-
foreach (DiagnosticTemplateResource diagnosticTemplateResource in diagnosticResources)
77+
string validApiName = ExtractorUtils.GenValidParamName(singleApiName, "Api");
78+
if (apiLoggerId.ContainsKey(validApiName))
7979
{
80-
if (diagnosticTemplateResource.properties.loggerId.Contains(loggerName))
80+
Dictionary<string, string> curDiagnostic = apiLoggerId[validApiName];
81+
string validDName = ExtractorUtils.GenValidParamName(loggerResource.properties.loggerType, "Diagnostic").ToLower();
82+
if (curDiagnostic.ContainsKey(validDName) && curDiagnostic[validDName].Contains(loggerName))
8183
{
8284
isReferencedInDiagnostic = true;
8385
}

src/APIM_ARMTemplate/apimtemplate/Extractor/EntityExtractors/MasterTemplateExtractor.cs

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -345,7 +345,7 @@ public string[] GenerateAPIRevisionDependencies(string curRevTemplate)
345345
return revDependsOn.ToArray();
346346
}
347347

348-
public async Task<Template> CreateMasterTemplateParameterValues(List<string> apisToExtract, Extractor exc)
348+
public async Task<Template> CreateMasterTemplateParameterValues(List<string> apisToExtract, Extractor exc, Dictionary<string, Dictionary<string, string>> apiLoggerId)
349349
{
350350
// used to create the parameter values for use in parameters file
351351
// create empty template
@@ -445,26 +445,9 @@ public async Task<Template> CreateMasterTemplateParameterValues(List<string> api
445445
}
446446
if (exc.paramApiLoggerId)
447447
{
448-
Dictionary<string, Dictionary<string, string>> ApiLoggerId = new Dictionary<string, Dictionary<string, string>>();
449-
APIExtractor apiExc = new APIExtractor(new FileWriter());
450-
foreach (string curApiName in apisToExtract)
451-
{
452-
Dictionary<string, string> loggerIds = new Dictionary<string, string>();
453-
string diagnostics = await apiExc.GetAPIDiagnosticsAsync(exc.sourceApimName, exc.resourceGroup, curApiName);
454-
JObject oDiagnostics = JObject.Parse(diagnostics);
455-
foreach (var diagnostic in oDiagnostics["value"])
456-
{
457-
string diagnosticName = ((JValue)diagnostic["name"]).Value.ToString();
458-
string loggerId = ((JValue)diagnostic["properties"]["loggerId"]).Value.ToString();
459-
loggerIds.Add(ExtractorUtils.GenValidParamName(diagnosticName, "Diagnostic"), loggerId);
460-
}
461-
if (loggerIds.Count != 0) {
462-
ApiLoggerId.Add(ExtractorUtils.GenValidParamName(curApiName, "Api"), loggerIds);
463-
}
464-
}
465448
TemplateServiceUrlProperties loggerIdProperties = new TemplateServiceUrlProperties()
466449
{
467-
value = ApiLoggerId
450+
value = apiLoggerId
468451
};
469452
parameters.Add("ApiLoggerId", loggerIdProperties);
470453
}

src/APIM_ARMTemplate/apimtemplate/Extractor/Utilities/ExtractorUtils.cs

Lines changed: 39 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -67,14 +67,24 @@ public static async Task GenerateTemplates(
6767

6868
// Get all Apis that will be extracted
6969
List<string> apisToExtract = new List<string>();
70-
if (singleApiName != null) {
70+
if (singleApiName != null)
71+
{
7172
apisToExtract.Add(singleApiName);
72-
} else if (multipleApiNames != null) {
73+
}
74+
else if (multipleApiNames != null)
75+
{
7376
apisToExtract.AddRange(multipleApiNames);
74-
} else {
77+
}
78+
else
79+
{
7580
List<string> allApis = await apiExtractor.GetAllAPINamesAsync(exc.sourceApimName, exc.resourceGroup);
7681
apisToExtract.AddRange(allApis);
7782
}
83+
Dictionary<string, Dictionary<string, string>> apiLoggerId = null;
84+
if (exc.paramApiLoggerId)
85+
{
86+
apiLoggerId = await GetAllReferencedLoggers(apisToExtract, exc);
87+
}
7888

7989
// extract templates from apim service
8090
Template globalServicePolicyTemplate = await policyExtractor.GenerateGlobalServicePolicyTemplateAsync(sourceApim, resourceGroup, policyXMLBaseUrl, policyXMLSasToken, dirName);
@@ -85,7 +95,7 @@ public static async Task GenerateTemplates(
8595
List<TemplateResource> apiTemplateResources = apiTemplate.resources.ToList();
8696
Template apiVersionSetTemplate = await apiVersionSetExtractor.GenerateAPIVersionSetsARMTemplateAsync(sourceApim, resourceGroup, singleApiName, apiTemplateResources, policyXMLBaseUrl, policyXMLSasToken);
8797
Template authorizationServerTemplate = await authorizationServerExtractor.GenerateAuthorizationServersARMTemplateAsync(sourceApim, resourceGroup, singleApiName, apiTemplateResources, policyXMLBaseUrl, policyXMLSasToken);
88-
Template loggerTemplate = await loggerExtractor.GenerateLoggerTemplateAsync(sourceApim, resourceGroup, singleApiName, apiTemplateResources, policyXMLBaseUrl, policyXMLSasToken);
98+
Template loggerTemplate = await loggerExtractor.GenerateLoggerTemplateAsync(exc, singleApiName, apiTemplateResources, apiLoggerId);
8999
Template productTemplate = await productExtractor.GenerateProductsARMTemplateAsync(sourceApim, resourceGroup, singleApiName, apiTemplateResources, policyXMLBaseUrl, policyXMLSasToken, dirName);
90100
List<TemplateResource> productTemplateResources = productTemplate.resources.ToList();
91101
Template namedValueTemplate = await propertyExtractor.GenerateNamedValuesTemplateAsync(singleApiName, apiTemplateResources, exc);
@@ -94,7 +104,7 @@ public static async Task GenerateTemplates(
94104
Template backendTemplate = await backendExtractor.GenerateBackendsARMTemplateAsync(sourceApim, resourceGroup, singleApiName, apiTemplateResources, namedValueResources, policyXMLBaseUrl, policyXMLSasToken);
95105

96106
// create parameters file
97-
Template templateParameters = await masterTemplateExtractor.CreateMasterTemplateParameterValues(apisToExtract, exc);
107+
Template templateParameters = await masterTemplateExtractor.CreateMasterTemplateParameterValues(apisToExtract, exc, apiLoggerId);
98108

99109
// write templates to output file location
100110
string apiFileName = fileNameGenerator.GenerateExtractorAPIFileName(singleApiName, sourceApim);
@@ -330,5 +340,29 @@ public static async Task<Dictionary<string, List<string>>> GetAllAPIsDictionary(
330340
}
331341
return apiDictionary;
332342
}
343+
344+
// this function generate all reference loggers in all extracted apis
345+
public static async Task<Dictionary<string, Dictionary<string, string>>> GetAllReferencedLoggers(List<string> apisToExtract, Extractor exc)
346+
{
347+
Dictionary<string, Dictionary<string, string>> ApiLoggerId = new Dictionary<string, Dictionary<string, string>>();
348+
APIExtractor apiExc = new APIExtractor(new FileWriter());
349+
foreach (string curApiName in apisToExtract)
350+
{
351+
Dictionary<string, string> loggerIds = new Dictionary<string, string>();
352+
string diagnostics = await apiExc.GetAPIDiagnosticsAsync(exc.sourceApimName, exc.resourceGroup, curApiName);
353+
JObject oDiagnostics = JObject.Parse(diagnostics);
354+
foreach (var diagnostic in oDiagnostics["value"])
355+
{
356+
string diagnosticName = ((JValue)diagnostic["name"]).Value.ToString();
357+
string loggerId = ((JValue)diagnostic["properties"]["loggerId"]).Value.ToString();
358+
loggerIds.Add(ExtractorUtils.GenValidParamName(diagnosticName, "Diagnostic"), loggerId);
359+
}
360+
if (loggerIds.Count != 0)
361+
{
362+
ApiLoggerId.Add(ExtractorUtils.GenValidParamName(curApiName, "Api"), loggerIds);
363+
}
364+
}
365+
return ApiLoggerId;
366+
}
333367
}
334368
}

0 commit comments

Comments
 (0)