in src/Assessment/Parser/AzureWebAppParser.cs [19:159]
public void ParseWebAppAssessments(Dictionary<string, AzureWebAppDataset> AzureWebAppData, UserInput userInputObj)
{
if (userInputObj == null)
throw new Exception("Received null user input object.");
if (AzureWebAppAssessmentStatusMap == null)
{
userInputObj.LoggerObj.LogError("Azure web app asessment status map is null, terminating parsing");
return;
}
if (AzureWebAppAssessmentStatusMap.Count <= 0)
{
userInputObj.LoggerObj.LogError("Azure web app assessment status map is empty, terminating parsing");
return;
}
foreach (var kvp in AzureWebAppAssessmentStatusMap)
{
if (!UtilityFunctions.IsAssessmentCompleted(kvp))
{
userInputObj.LoggerObj.LogWarning($"Skipping parsing assessment {kvp.Key.AssessmentName} as it is in {new EnumDescriptionHelper().GetEnumDescription(kvp.Value)} state");
continue;
}
userInputObj.LoggerObj.LogInformation($"Parsing Azure Web App assessment {kvp.Key.AssessmentName}");
string url = Routes.ProtocolScheme + Routes.AzureManagementApiHostname + Routes.ForwardSlash +
Routes.SubscriptionPath + Routes.ForwardSlash + userInputObj.Subscription.Key + Routes.ForwardSlash +
Routes.ResourceGroupPath + Routes.ForwardSlash + userInputObj.ResourceGroupName.Value + Routes.ForwardSlash +
Routes.ProvidersPath + Routes.ForwardSlash + Routes.MigrateProvidersPath + Routes.ForwardSlash +
Routes.AssessmentProjectsPath + Routes.ForwardSlash + userInputObj.AssessmentProjectName + Routes.ForwardSlash +
Routes.GroupsPath + Routes.ForwardSlash + kvp.Key.GroupName + Routes.ForwardSlash +
new EnumDescriptionHelper().GetEnumDescription(kvp.Key.AssessmentType) + Routes.ForwardSlash + kvp.Key.AssessmentName +
Routes.QueryStringQuestionMark +
Routes.QueryParameterApiVersion + Routes.QueryStringEquals + Routes.AssessmentMachineListApiVersion;
string assessmentPropertiesResponse = "";
try
{
assessmentPropertiesResponse = new HttpClientHelper().GetHttpRequestJsonStringResponse(url, userInputObj).Result;
}
catch (OperationCanceledException)
{
throw;
}
catch (AggregateException aeWebAppAssessmentProperty)
{
string errorMessage = "";
foreach (var e in aeWebAppAssessmentProperty.Flatten().InnerExceptions)
{
if (e is OperationCanceledException)
throw e;
else
{
errorMessage = errorMessage + e.Message + " ";
}
}
userInputObj.LoggerObj.LogError($"Failed to retrieve Azure web app assessment properties for assessment: {errorMessage}");
url = "";
continue;
}
catch (Exception exWebAppProperties)
{
userInputObj.LoggerObj.LogError($"Failed to retrieve Azure web app assessment properties for assessment: {exWebAppProperties.Message}");
url = "";
continue;
}
AzureAppServiceWebAppPropertiesJSON webAppPropertiesObj = JsonConvert.DeserializeObject<AzureAppServiceWebAppPropertiesJSON>(assessmentPropertiesResponse);
double monthlyCostEstimate = webAppPropertiesObj.Properties.MonthlyCost;
double monthlySecurityCostEstimate = webAppPropertiesObj.Properties.MonthlySecurityCost;
url = Routes.ProtocolScheme + Routes.AzureManagementApiHostname + Routes.ForwardSlash +
Routes.SubscriptionPath + Routes.ForwardSlash + userInputObj.Subscription.Key + Routes.ForwardSlash +
Routes.ResourceGroupPath + Routes.ForwardSlash + userInputObj.ResourceGroupName.Value + Routes.ForwardSlash +
Routes.ProvidersPath + Routes.ForwardSlash + Routes.MigrateProvidersPath + Routes.ForwardSlash +
Routes.AssessmentProjectsPath + Routes.ForwardSlash + userInputObj.AssessmentProjectName + Routes.ForwardSlash +
Routes.GroupsPath + Routes.ForwardSlash + kvp.Key.GroupName + Routes.ForwardSlash +
new EnumDescriptionHelper().GetEnumDescription(kvp.Key.AssessmentType) + Routes.ForwardSlash + kvp.Key.AssessmentName + Routes.ForwardSlash +
Routes.AzureAppServiceAssessedWebAppsPath +
Routes.QueryStringQuestionMark +
Routes.QueryParameterApiVersion + Routes.QueryStringEquals + Routes.AssessmentMachineListApiVersion;
while (!string.IsNullOrEmpty(url))
{
if (userInputObj.CancellationContext.IsCancellationRequested)
UtilityFunctions.InitiateCancellation(userInputObj);
string assessedWebAppsResponse = "";
try
{
assessedWebAppsResponse = new HttpClientHelper().GetHttpRequestJsonStringResponse(url, userInputObj).Result;
}
catch (OperationCanceledException)
{
throw;
}
catch (AggregateException aeAssessedWebApps)
{
string errorMessage = "";
foreach (var e in aeAssessedWebApps.Flatten().InnerExceptions)
{
if (e is OperationCanceledException)
throw e;
else
{
errorMessage = errorMessage + e.Message + " ";
}
}
userInputObj.LoggerObj.LogError($"Failed to retrieve web app data from assessment: {errorMessage}");
url = "";
continue;
}
catch (Exception exAssessedWebApps)
{
userInputObj.LoggerObj.LogError($"Failed to retrieve web app data from assessment: {exAssessedWebApps.Message}");
url = "";
continue;
}
AzureAppServiceAssessedWebAppsJSON obj = JsonConvert.DeserializeObject<AzureAppServiceAssessedWebAppsJSON>(assessedWebAppsResponse);
url = obj.NextLink;
foreach (var value in obj.Values)
{
string key = value.Properties.DiscoveredWebAppId?.ToLower();
UpdateAssessedWebAppDataset(AzureWebAppData, value, key, kvp.Key);
AzureWebAppData[key].MonthlySecurityCost = monthlySecurityCostEstimate;
if (kvp.Key.AssessmentTag == AssessmentTag.PerformanceBased)
AzureWebAppData[key].EstimatedComputeCost = monthlyCostEstimate;
else if (kvp.Key.AssessmentTag == AssessmentTag.PerformanceBased_RI3year)
AzureWebAppData[key].EstimatedComputeCost_RI3year = monthlyCostEstimate;
else if (kvp.Key.AssessmentTag == AssessmentTag.PerformanceBased_ASP3year)
AzureWebAppData[key].EstimatedComputeCost_ASP3year = monthlyCostEstimate;
}
}
}
}