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

Commit 6e1cdfc

Browse files
committed
handle extraction of loggers in both global and single api cases
1 parent 0c39c9d commit 6e1cdfc

File tree

2 files changed

+46
-7
lines changed

2 files changed

+46
-7
lines changed

src/APIM_ARMTemplate/apimtemplate/Commands/Extract.cs

Lines changed: 45 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,9 @@ private void GenerateARMTemplate(string apimname, string resourceGroup, string f
6767

6868
Console.WriteLine("{0} API's found ...", ((JContainer)oApi["value"]).Count.ToString());
6969

70-
GenerateNamedValuesTemplate(resourceGroup, apimname, fileFolder, singleApiName);
71-
GenerateLoggerTemplate(resourceGroup, apimname, fileFolder, singleApiName);
70+
// store api and operation policies as well as diagnostics for the time being in order to extract loggers correctly
71+
List<PolicyTemplateResource> policyResources = new List<PolicyTemplateResource>();
72+
List<DiagnosticTemplateResource> diagnosticResources = new List<DiagnosticTemplateResource>();
7273

7374
List<TemplateResource> templateResources = new List<TemplateResource>();
7475

@@ -173,6 +174,8 @@ private void GenerateARMTemplate(string apimname, string resourceGroup, string f
173174
operationPolicyResource.dependsOn = new string[] { $"[resourceId('Microsoft.ApiManagement/service/apis/operations', parameters('ApimServiceName'), '{oApiName}', '{operationResourceName}')]" };
174175

175176
templateResources.Add(operationPolicyResource);
177+
// add the operation policy resource to the list used to extract loggers later on
178+
policyResources.Add(operationPolicyResource);
176179
}
177180
catch (Exception)
178181
{
@@ -194,6 +197,8 @@ private void GenerateARMTemplate(string apimname, string resourceGroup, string f
194197
apiPoliciesResource.dependsOn = new string[] { $"[resourceId('Microsoft.ApiManagement/service/apis', parameters('ApimServiceName'), '{apiName}')]" };
195198

196199
templateResources.Add(apiPoliciesResource);
200+
// add the api policy resource to the list used to extract loggers later on
201+
policyResources.Add(apiPoliciesResource);
197202
}
198203
catch (Exception)
199204
{
@@ -254,6 +259,8 @@ private void GenerateARMTemplate(string apimname, string resourceGroup, string f
254259
}
255260

256261
templateResources.Add(diagnosticResource);
262+
// add the diagnostic resource to the list used to extract loggers later on
263+
diagnosticResources.Add(diagnosticResource);
257264

258265
}
259266

@@ -269,6 +276,9 @@ private void GenerateARMTemplate(string apimname, string resourceGroup, string f
269276
}
270277
}
271278

279+
GenerateNamedValuesTemplate(resourceGroup, apimname, fileFolder, singleApiName, policyResources, diagnosticResources);
280+
GenerateLoggerTemplate(resourceGroup, apimname, fileFolder, singleApiName, policyResources, diagnosticResources);
281+
272282
if (singleApiName == null)
273283
{
274284
fileWriter = new FileWriter();
@@ -383,7 +393,7 @@ private List<TemplateResource> GenerateSchemasARMTemplate(string apimServiceName
383393
return templateResources;
384394
}
385395

386-
private async void GenerateLoggerTemplate(string resourceGroup, string apimname, string fileFolder, string singleApiName)
396+
private async void GenerateLoggerTemplate(string resourceGroup, string apimname, string fileFolder, string singleApiName, List<PolicyTemplateResource> policyResources, List<DiagnosticTemplateResource> diagnosticResources)
387397
{
388398
Console.WriteLine("------------------------------------------");
389399
Console.WriteLine("Getting loggers from service");
@@ -397,7 +407,6 @@ private async void GenerateLoggerTemplate(string resourceGroup, string apimname,
397407
foreach (var extractedLogger in oLoggers["value"])
398408
{
399409
string loggerName = ((JValue)extractedLogger["name"]).Value.ToString();
400-
Console.WriteLine("'{0}' Logger found", loggerName);
401410

402411
string fullLoggerResource = await loggerExtractor.GetLogger(apimname, resourceGroup, loggerName);
403412
LoggerTemplateResource loggerResource = JsonConvert.DeserializeObject<LoggerTemplateResource>(fullLoggerResource);
@@ -406,15 +415,45 @@ private async void GenerateLoggerTemplate(string resourceGroup, string apimname,
406415
loggerResource.apiVersion = "2018-06-01-preview";
407416
loggerResource.scale = null;
408417

409-
templateResources.Add(loggerResource);
418+
if(singleApiName == null)
419+
{
420+
// if the user is extracting all apis, extract all the loggers
421+
Console.WriteLine("'{0}' Logger found", loggerName);
422+
templateResources.Add(loggerResource);
423+
} else
424+
{
425+
// if the user is extracting a single api, extract the loggers referenced by its diagnostics and api policies
426+
bool isReferencedInPolicy = false;
427+
bool isReferencedInDiagnostic = false;
428+
foreach (PolicyTemplateResource policyTemplateResource in policyResources)
429+
{
430+
if (policyTemplateResource.properties.policyContent.Contains(loggerName))
431+
{
432+
isReferencedInPolicy = true;
433+
}
434+
}
435+
foreach (DiagnosticTemplateResource diagnosticTemplateResource in diagnosticResources)
436+
{
437+
if (diagnosticTemplateResource.properties.loggerId.Contains(loggerName))
438+
{
439+
isReferencedInPolicy = true;
440+
}
441+
}
442+
if(isReferencedInPolicy == true || isReferencedInDiagnostic == true)
443+
{
444+
// logger was used in policy or diagnostic, extract it
445+
Console.WriteLine("'{0}' Logger found", loggerName);
446+
templateResources.Add(loggerResource);
447+
}
448+
};
410449
}
411450

412451
armTemplate.resources = templateResources.ToArray();
413452
FileWriter fileWriter = new FileWriter();
414453
fileWriter.WriteJSONToFile(armTemplate, @fileFolder + Path.DirectorySeparatorChar + apimname + "-loggers.json");
415454
}
416455

417-
private async void GenerateNamedValuesTemplate(string resourceGroup, string apimname, string fileFolder, string singleApiName)
456+
private async void GenerateNamedValuesTemplate(string resourceGroup, string apimname, string fileFolder, string singleApiName, List<PolicyTemplateResource> policyResources, List<DiagnosticTemplateResource> diagnosticResources)
418457
{
419458
Console.WriteLine("------------------------------------------");
420459
Console.WriteLine("Getting named values from service");

src/APIM_ARMTemplate/apimtemplate/Properties/launchSettings.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"profiles": {
33
"apimtemplate": {
44
"commandName": "Project",
5-
"commandLineArgs": "extract --name apiphany --resourceGroup vlvinogr-apim --fileFolder C:\\Users\\lucashh\\Desktop\\Projects\\APIM-ARM\\ExtractedTemplates"
5+
"commandLineArgs": "extract --name apiphany --resourceGroup vlvinogr-apim --fileFolder C:\\Users\\lucashh\\Desktop\\Projects\\APIM-ARM\\ExtractedTemplates --apiName http-bin-dot-org"
66
}
77
}
88
}

0 commit comments

Comments
 (0)