private async void GenerateLoggerTemplate(string resourceGroup, string apimname, string fileFolder) { Console.WriteLine("------------------------------------------"); Console.WriteLine("Getting loggers from service"); LoggerExtractor loggerExtractor = new LoggerExtractor(); Template armTemplate = GenerateEmptyTemplateWithParameters(); List <TemplateResource> templateResources = new List <TemplateResource>(); string loggers = loggerExtractor.GetLoggers(apimname, resourceGroup).Result; JObject oLoggers = JObject.Parse(loggers); foreach (var extractedLogger in oLoggers["value"]) { string loggerName = ((JValue)extractedLogger["name"]).Value.ToString(); Console.WriteLine("'{0}' Logger found", loggerName); string fullLoggerResource = await loggerExtractor.GetLogger(apimname, resourceGroup, loggerName); LoggerTemplateResource loggerResource = JsonConvert.DeserializeObject <LoggerTemplateResource>(fullLoggerResource); loggerResource.name = $"[concat(parameters('ApimServiceName'), '/{loggerName}')]"; loggerResource.type = "Microsoft.ApiManagement/service/loggers"; loggerResource.apiVersion = "2018-06-01-preview"; loggerResource.scale = null; templateResources.Add(loggerResource); } armTemplate.resources = templateResources.ToArray(); FileWriter fileWriter = new FileWriter(); fileWriter.WriteJSONToFile(armTemplate, @fileFolder + Path.DirectorySeparatorChar + apimname + "-loggers.json"); }
private async void GenerateLoggerTemplate(string resourceGroup, string apimname, string fileFolder, string singleApiName, List <TemplateResource> armTemplateResources) { Console.WriteLine("------------------------------------------"); Console.WriteLine("Getting loggers from service"); LoggerExtractor loggerExtractor = new LoggerExtractor(); Template armTemplate = GenerateEmptyTemplateWithParameters(); // isolate product api associations in the case of a single api extraction var diagnosticResources = armTemplateResources.Where(resource => resource.type == ResourceTypeConstants.APIDiagnostic); var policyResources = armTemplateResources.Where(resource => (resource.type == ResourceTypeConstants.APIPolicy || resource.type == ResourceTypeConstants.APIOperationPolicy)); List <TemplateResource> templateResources = new List <TemplateResource>(); string loggers = loggerExtractor.GetLoggers(apimname, resourceGroup).Result; JObject oLoggers = JObject.Parse(loggers); foreach (var extractedLogger in oLoggers["value"]) { string loggerName = ((JValue)extractedLogger["name"]).Value.ToString(); string fullLoggerResource = await loggerExtractor.GetLogger(apimname, resourceGroup, loggerName); LoggerTemplateResource loggerResource = JsonConvert.DeserializeObject <LoggerTemplateResource>(fullLoggerResource); loggerResource.name = $"[concat(parameters('ApimServiceName'), '/{loggerName}')]"; loggerResource.type = ResourceTypeConstants.Logger; loggerResource.apiVersion = "2018-06-01-preview"; loggerResource.scale = null; if (singleApiName == null) { // if the user is extracting all apis, extract all the loggers Console.WriteLine("'{0}' Logger found", loggerName); templateResources.Add(loggerResource); } else { // if the user is extracting a single api, extract the loggers referenced by its diagnostics and api policies bool isReferencedInPolicy = false; bool isReferencedInDiagnostic = false; foreach (PolicyTemplateResource policyTemplateResource in policyResources) { if (policyTemplateResource.properties.policyContent.Contains(loggerName)) { isReferencedInPolicy = true; } } foreach (DiagnosticTemplateResource diagnosticTemplateResource in diagnosticResources) { if (diagnosticTemplateResource.properties.loggerId.Contains(loggerName)) { isReferencedInPolicy = true; } } if (isReferencedInPolicy == true || isReferencedInDiagnostic == true) { // logger was used in policy or diagnostic, extract it Console.WriteLine("'{0}' Logger found", loggerName); templateResources.Add(loggerResource); } }; } armTemplate.resources = templateResources.ToArray(); FileWriter fileWriter = new FileWriter(); fileWriter.WriteJSONToFile(armTemplate, @fileFolder + Path.DirectorySeparatorChar + apimname + "-loggers.json"); }
private async void GenerateLoggerTemplate(string resourceGroup, string apimname, string fileFolder) { Console.WriteLine("------------------------------------------"); Console.WriteLine("Geting loggers from service"); LoggerExtractor loggerExtractor = new LoggerExtractor(); PropertyExtractor propertyExtractor = new PropertyExtractor(); Template armTemplate = new Template() { schema = "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", contentVersion = "1.0.0.0", parameters = new Dictionary <string, TemplateParameterProperties> { { "ApimServiceName", new TemplateParameterProperties() { type = "string" } } }, variables = { }, resources = { }, outputs = { } }; List <TemplateResource> templateResources = new List <TemplateResource>(); // pull named values for later credential reference string properties = propertyExtractor.GetProperties(apimname, resourceGroup).Result; JObject oProperties = JObject.Parse(properties); List <PropertyTemplateResource> propertyResources = oProperties["value"].ToObject <List <PropertyTemplateResource> >(); string loggers = loggerExtractor.GetLoggers(apimname, resourceGroup).Result; JObject oLoggers = JObject.Parse(loggers); foreach (var extractedLogger in oLoggers["value"]) { string loggerName = ((JValue)extractedLogger["name"]).Value.ToString(); Console.WriteLine("'{0}' Logger found", loggerName); string fullLoggerResource = await loggerExtractor.GetLogger(apimname, resourceGroup, loggerName); LoggerTemplateResource loggerResource = JsonConvert.DeserializeObject <LoggerTemplateResource>(fullLoggerResource); loggerResource.name = $"[concat(parameters('ApimServiceName'), '/{loggerName}')]"; loggerResource.type = "Microsoft.ApiManagement/service/loggers"; loggerResource.apiVersion = "2018-06-01-preview"; loggerResource.scale = null; // swap credentials for their hidden values, taken from named values if (loggerResource.properties.credentials != null) { if (loggerResource.properties.credentials.instrumentationKey != null) { string hiddenKey = loggerResource.properties.credentials.instrumentationKey.Substring(2, loggerResource.properties.credentials.instrumentationKey.Length - 4); loggerResource.properties.credentials.instrumentationKey = propertyResources.Find(p => p.properties.displayName == hiddenKey).properties.value; } else if (loggerResource.properties.credentials.connectionString != null) { string hiddenKey = loggerResource.properties.credentials.connectionString.Substring(2, loggerResource.properties.credentials.connectionString.Length - 4); loggerResource.properties.credentials.connectionString = propertyResources.Find(p => p.properties.displayName == hiddenKey).properties.value; } } templateResources.Add(loggerResource); } armTemplate.resources = templateResources.ToArray(); FileWriter fileWriter = new FileWriter(); string filePath = fileFolder + Path.DirectorySeparatorChar + string.Format("loggers", "/", "-") + ".json"; fileWriter.WriteJSONToFile(armTemplate, filePath); }