public bool BeginDiscovery()

in src/Discovery/Discover.cs [27:102]


        public bool BeginDiscovery()
        {
            if (UserInputObj == null)
                throw new Exception("User input provided is null");

            UserInputObj.LoggerObj.LogInformation("Initiating discovered data retrieval");

            DeletePreviousDiscoveryReport();

            string masterSitesUrl = 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.OffAzureProvidersPath + Routes.ForwardSlash +
                                    Routes.MasterSitesPath + Routes.ForwardSlash + UserInputObj.DiscoverySiteName +
                                    Routes.QueryStringQuestionMark + Routes.QueryParameterApiVersion + Routes.QueryStringEquals + Routes.MasterSiteApiVersion;

            string masterSitesJsonResponse = "";
            try
            {
                masterSitesJsonResponse = new HttpClientHelper().GetHttpRequestJsonStringResponse(masterSitesUrl, UserInputObj).Result;
            }
            catch (OperationCanceledException)
            {
                throw;
            }
            catch (AggregateException aeMasterSites)
            {
                string errorMessage = "";
                foreach (var e in aeMasterSites.Flatten().InnerExceptions)
                {
                    if (e is OperationCanceledException)
                        throw e;
                    else
                    {
                        errorMessage = errorMessage + e.Message + " ";
                    }
                }
                UserInputObj.LoggerObj.LogError($"Failed to retrieve master sites: {errorMessage}");
                return false;
            }
            catch (Exception exMasterSitesHttpResponse)
            {
                UserInputObj.LoggerObj.LogError($"Failed to retrieve master sites: {exMasterSitesHttpResponse.Message}");
                return false;
            }

            MasterSitesJSON masterSitesObj = JsonConvert.DeserializeObject<MasterSitesJSON>(masterSitesJsonResponse);
            UserInputObj.LoggerObj.LogInformation(3, "Received discovery sites"); // 8 % complete

            if (UserInputObj.CancellationContext.IsCancellationRequested)
                UtilityFunctions.InitiateCancellation(UserInputObj);

            int excelCreationPercentProgress = 0;
            if (UserInputObj.AzureMigrateSourceAppliances.Contains("import"))
                excelCreationPercentProgress = PerformImportDiscovery(masterSitesObj);
            else
                excelCreationPercentProgress = PerformApplianceDiscovery(masterSitesObj);

            if (DiscoveredData.Count == 0)
            {
                UserInputObj.LoggerObj.LogError($"Consolidated discovery data has no discovered machines");
                return false;
            }

            UserInputObj.LoggerObj.LogInformation($"Retrieved discovery data for {DiscoveredData.Count.ToString()} machines");

            DiscoveryProperties discoveryProperties = new DiscoveryProperties();
            CreateDiscoveryPropertiesModel(discoveryProperties);

            ExportDiscoveryReport exporter = new ExportDiscoveryReport(DiscoveredData, VCenterHostData, discoveryProperties);
            exporter.GenerateDiscoveryReportExcel();

            UserInputObj.LoggerObj.LogInformation(excelCreationPercentProgress, "Discovery report excel created successfully"); // IsExpressWorkflow ? 20 : 100 % Complete

            return true;
        }