in src/Forms/ProjectDetailsForm.cs [262:332]
private async Task InitializeDiscoverySiteName()
{
KeyValuePair<string, string> selectedSubscription = GetSelectedSubscription();
KeyValuePair<string, string> selectedResourceGroup = GetSelectedResourceGroupName();
KeyValuePair<string, string> selectedAzureMigrateProject = GetSelectedAzureMigrateProject();
if (string.IsNullOrEmpty(selectedSubscription.Key) || string.IsNullOrEmpty(selectedSubscription.Value))
{
MessageBox.Show("Empty Subscription ID or name. Please Select Subscription again.");
return;
}
if (string.IsNullOrEmpty(selectedResourceGroup.Key) || string.IsNullOrEmpty(selectedResourceGroup.Value))
{
MessageBox.Show("Empty Resource Group ID or name. Please select Resource Group again.");
return;
}
if (string.IsNullOrEmpty(selectedAzureMigrateProject.Key) || string.IsNullOrEmpty(selectedAzureMigrateProject.Value))
{
MessageBox.Show("Empty Azure Migrate project ID or name. Please select Migrate project again.");
return;
}
SiteDiscoveryStatusInfoLabel.Text = "Fetching inventory data";
HttpClientHelper httpClientHelperObj = new HttpClientHelper();
string url = Routes.ProtocolScheme + Routes.AzureManagementApiHostname + Routes.ForwardSlash +
Routes.SubscriptionPath + Routes.ForwardSlash + selectedSubscription.Key + Routes.ForwardSlash +
Routes.ResourceGroupPath + Routes.ForwardSlash + selectedResourceGroup.Value + Routes.ForwardSlash +
Routes.ProvidersPath + Routes.ForwardSlash + Routes.MigrateProvidersPath + Routes.ForwardSlash +
Routes.MigrateProjectsPath + Routes.ForwardSlash + selectedAzureMigrateProject.Value + Routes.ForwardSlash +
Routes.SolutionsPath + Routes.ForwardSlash + Routes.ServerDiscoveryPath +
Routes.QueryStringQuestionMark + Routes.QueryParameterApiVersion + Routes.QueryStringEquals + Routes.ProjectDetailsApiVersion;
try
{
JToken jsonTokenResponse = await httpClientHelperObj.GetProjectDetailsHttpJsonResponse(url);
if (jsonTokenResponse.HasValues)
{
string masterSiteId = jsonTokenResponse["properties"]["details"]["extendedDetails"]["masterSiteId"].Value<string>();
var masterSiteIdContents = masterSiteId.Split('/').ToList();
if (masterSiteIdContents.Count > 0)
{
DiscoverySiteName = masterSiteIdContents[masterSiteIdContents.Count - 1];
var sitesUrl = Routes.ProtocolScheme + Routes.AzureManagementApiHostname + masterSiteId +
Routes.QueryStringQuestionMark + Routes.QueryParameterApiVersion + Routes.QueryStringEquals +
Routes.MasterSiteApiVersion;
var responseSites = (await httpClientHelperObj.GetProjectDetailsHttpJsonResponse(sitesUrl))["properties"]["sites"];
bool hasVmware = responseSites.Any(site => site.ToString().ToLower().Contains("vmwaresites"));
bool hasHyperV = responseSites.Any(site => site.ToString().ToLower().Contains("hypervsites"));
bool hasPhysical = responseSites.Any(site => site.ToString().ToLower().Contains("serversites"));
bool hasImport = responseSites.Any(site => site.ToString().ToLower().Contains("importsites"));
mainFormObj.SetHasApplianceInventory(hasVmware || hasHyperV || hasPhysical);
mainFormObj.SetHasImportInventory(hasImport);
if (!hasVmware && !hasHyperV && !hasPhysical && !hasImport)
{
MessageBox.Show("No discovery data was found. Discover your on-premises inventory to proceed ahead");
mainFormObj.CloseForm();
}
}
else
throw new Exception("masterSiteId response in json does not contain enough elements");
}
}
catch (Exception exDiscoverySiteName)
{
MessageBox.Show($"Could not obtain discovery site name: {exDiscoverySiteName.Message} Please re-login.");
mainFormObj.CloseForm();
}
}