in src/HttpRequestHelper/HttpClientHelper.cs [523:599]
private async Task<HttpResponseMessage> SendAssessmentCreationRequest(UserInput userInputObj, AssessmentInformation assessmentInfo)
{
if (userInputObj.CancellationContext.IsCancellationRequested)
UtilityFunctions.InitiateCancellation(userInputObj);
NumberOfTries++;
AuthenticationResult authResult = null;
HttpResponseMessage response;
bool isException = false;
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 apiVersion = Routes.AssessmentMachineListApiVersion;
if (assessmentInfo.AssessmentType == AssessmentType.AVSAssessment)
apiVersion = Routes.AvsAssessmentApiVersion;
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 + assessmentInfo.GroupName + Routes.ForwardSlash +
new EnumDescriptionHelper().GetEnumDescription(assessmentInfo.AssessmentType) + Routes.ForwardSlash + assessmentInfo.AssessmentName +
Routes.QueryStringQuestionMark +
Routes.QueryParameterApiVersion + Routes.QueryStringEquals + apiVersion;
Uri baseAddress = new Uri(url);
string clientRequestId = Guid.NewGuid().ToString();
httpClient.DefaultRequestHeaders.Add("Authorization", "Bearer " + authResult.AccessToken);
httpClient.DefaultRequestHeaders.Add("x-ms-client-request-id", clientRequestId + "-" + workflow + "-azmigexp");
string assessmentSetting = assessmentInfo.AssessmentSettings;
byte[] buffer = Encoding.UTF8.GetBytes(assessmentSetting);
ByteArrayContent byteContent = new ByteArrayContent(buffer);
byteContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
response = await httpClient.PutAsync(baseAddress, byteContent);
}
catch (Exception exCreateAssessment)
{
isException = true;
if (NumberOfTries < HttpUtilities.MaxInformationDataRetries && HttpUtilities.IsRetryNeeded(null, exCreateAssessment))
{
userInputObj.LoggerObj.LogWarning($"HTTP PUT create assessment {assessmentInfo.AssessmentName} request error: {exCreateAssessment.Message} Will try again after 1 minute");
Thread.Sleep(60000);
response = await SendAssessmentCreationRequest(userInputObj, assessmentInfo);
}
else
throw;
}
if (!isException)
{
if ((response == null || !response.IsSuccessStatusCode) && HttpUtilities.IsRetryNeeded(response, null) && NumberOfTries < HttpUtilities.MaxInformationDataRetries)
{
userInputObj.LoggerObj.LogWarning($"HTTP PUT create assessment {assessmentInfo.AssessmentName} request failed: {response.StatusCode}: {response.Content} Will try again after 1 minute");
Thread.Sleep(60000);
response = await SendAssessmentCreationRequest(userInputObj, assessmentInfo);
}
}
return response;
}