private async Task InitializeDiscoverySiteName()

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();
            }
        }