in src/HttpRequestHelper/HttpClientHelper.cs [787:871]
public async Task<AssessmentPollResponse> PollBusinessCase(UserInput userInputObj, BusinessCaseInformation businessCaseInfo)
{
if (userInputObj.CancellationContext.IsCancellationRequested)
UtilityFunctions.InitiateCancellation(userInputObj);
userInputObj.LoggerObj.LogInformation($"Polling business case {businessCaseInfo.BusinessCaseName} for status");
AuthenticationResult authResult = null;
HttpResponseMessage response;
try
{
authResult = await AzureAuthenticationHandler.RetrieveAuthenticationToken();
}
catch (Exception exCacheTokenRetrieval)
{
throw new Exception($"Cached token retrieval failed: {exCacheTokenRetrieval.Message} Please re-login");
}
string workflow = userInputObj.WorkflowObj.IsExpressWorkflow ? "express" : "custom";
try
{
HttpClient httpClient = new HttpClient()
{
Timeout = TimeSpan.FromSeconds(60),
};
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.BusinessCasesPath + Routes.ForwardSlash + businessCaseInfo.BusinessCaseName + Routes.QueryStringQuestionMark +
Routes.QueryParameterApiVersion + Routes.QueryStringEquals + Routes.BusinessCaseApiVersion;
Uri baseAddress = new Uri(url);
string clientRequestId = Guid.NewGuid().ToString();
httpClient.DefaultRequestHeaders.Add("Authorization", "Bearer " + authResult.AccessToken);
httpClient.DefaultRequestHeaders.Add("Accept", "application/json");
httpClient.DefaultRequestHeaders.Add("x-ms-client-request-id", clientRequestId + "-" + workflow + "-azmigexp");
response = await httpClient.GetAsync(baseAddress);
if (response == null || !response.IsSuccessStatusCode)
{
userInputObj.LoggerObj.LogWarning($"Business case {businessCaseInfo.BusinessCaseName} polling response was not success. Status: {response?.StatusCode} Content: {response?.Content}");
if (!HttpUtilities.IsRetryNeeded(response, null))
return AssessmentPollResponse.Error;
return AssessmentPollResponse.NotCompleted;
}
string responseContent = await response.Content.ReadAsStringAsync();
BusinessCaseInformationJSON businessCaseInformationObj = JsonConvert.DeserializeObject<BusinessCaseInformationJSON>(responseContent);
if (businessCaseInformationObj.Properties.State.Equals("Completed"))
{
userInputObj.LoggerObj.LogInformation($"Business case {businessCaseInfo.BusinessCaseName} completed");
return AssessmentPollResponse.Completed;
}
else if (businessCaseInformationObj.Properties.State.Equals("OutDated"))
{
userInputObj.LoggerObj.LogWarning($"Business case {businessCaseInfo.BusinessCaseName} became out-dated during computation");
return AssessmentPollResponse.OutDated;
}
else if (businessCaseInformationObj.Properties.State.Equals("Invalid"))
{
userInputObj.LoggerObj.LogError($"Business case {businessCaseInfo.BusinessCaseName} is invalid, corresponding datapoints will contain default values");
return AssessmentPollResponse.Invalid;
}
userInputObj.LoggerObj.LogInformation($"Business case {businessCaseInfo.BusinessCaseName} status is {businessCaseInformationObj.Properties.State}");
return AssessmentPollResponse.NotCompleted;
}
catch (Exception exPollBizCase)
{
userInputObj.LoggerObj.LogWarning($"Business case {businessCaseInfo.BusinessCaseName} polling error: {exPollBizCase.Message}");
if (!HttpUtilities.IsRetryNeeded(null, exPollBizCase))
return AssessmentPollResponse.Error;
}
return AssessmentPollResponse.NotCompleted;
}