public List BeginRetrieval()

in src/Discovery/RetrieveDiscoveryData.cs [15:122]


        public List<DiscoveryData> BeginRetrieval(UserInput userInputObj ,List<string> siteUrls, DiscoverySites site)
        {
            List<DiscoveryData> discoveredData = new List<DiscoveryData>();
            string discoverySitesApiVersion = Routes.DiscoverySitesApiVersion;
            if (site == DiscoverySites.Import)
            {
                discoverySitesApiVersion = Routes.ImportSitesApiVersion;
            }

            foreach (string siteUrl in siteUrls)
            {
                string url = Routes.ProtocolScheme + Routes.AzureManagementApiHostname + siteUrl + Routes.ForwardSlash +
                             Routes.MachinesPath +
                             Routes.QueryStringQuestionMark + Routes.QueryParameterApiVersion + Routes.QueryStringEquals + discoverySitesApiVersion +
                             Routes.QueryStringAmpersand +
                             Routes.AzureMigrateQueryStringDollar + Routes.AzureMigrateQueryParameterFilter + Routes.QueryStringEquals +
                             Routes.AzureMigrateQueryStringOpenBracket +
                             Routes.AzureMigrateQueryPathProperties + Routes.ForwardSlash + Routes.AzureMigrateQueryPathIsDeleted + Routes.Space +
                             Routes.AzureMigrateQueryStringEq + Routes.Space + Routes.BoolFalse +
                             Routes.AzureMigrateQueryStringCloseBracket;

                while (!string.IsNullOrEmpty(url))
                {
                    if (userInputObj.CancellationContext.IsCancellationRequested)
                        UtilityFunctions.InitiateCancellation(userInputObj);

                    List<DiscoveryData> partialDiscoveryData = new List<DiscoveryData>();

                    string jsonResponse = "";
                    try
                    {
                        jsonResponse = new HttpClientHelper().GetHttpRequestJsonStringResponse(url, userInputObj).Result;
                    }
                    catch(OperationCanceledException)
                    {
                        throw;
                    }
                    catch (AggregateException aeRetrieveDiscoveryData)
                    {
                        string errorMessage = "";
                        foreach (var e in aeRetrieveDiscoveryData.Flatten().InnerExceptions)
                        {
                            if (e is OperationCanceledException)
                                throw e;
                            else
                            {
                                errorMessage = errorMessage + e.Message + " ";
                            }
                        }
                        userInputObj.LoggerObj.LogError($"URL: {url} for {site.ToString()} site failed with messsage: {errorMessage}");
                        return discoveredData;
                    }
                    catch (Exception exJsonResponse)
                    {
                        userInputObj.LoggerObj.LogError($"URL: {url} for {site.ToString()} site failed with messsage: {exJsonResponse.Message}");
                        return discoveredData;
                    }

                    if (site == DiscoverySites.VMWare)
                    {
                        MachinesVMWareJSON jsonObj = JsonConvert.DeserializeObject<MachinesVMWareJSON>(jsonResponse);
                        partialDiscoveryData = ParseVMWareDiscoveryData(userInputObj, jsonObj);
                        url = jsonObj.NextLink;
                        discoveredData.AddRange(partialDiscoveryData);
                    }
                    else if (site == DiscoverySites.HyperV)
                    {
                        MachinesHyperVJSON jsonObj = JsonConvert.DeserializeObject<MachinesHyperVJSON>(jsonResponse);
                        partialDiscoveryData = ParseHyperVDiscoveryData(userInputObj, jsonObj);
                        url = jsonObj.NextLink;
                        discoveredData.AddRange(partialDiscoveryData);
                    }
                    else if (site == DiscoverySites.Physical)
                    {
                        MachinesPhysicalJSON jsonObj = JsonConvert.DeserializeObject<MachinesPhysicalJSON>(jsonResponse);
                        partialDiscoveryData = ParsePhysicalDiscoveryData(userInputObj, jsonObj);
                        url = jsonObj.NextLink;
                        discoveredData.AddRange(partialDiscoveryData);
                    }
                    else if (site == DiscoverySites.Import)
                    {
                        MachinesImportJSON jsonObj = JsonConvert.DeserializeObject<MachinesImportJSON>(jsonResponse);
                        partialDiscoveryData = ParseImportDiscoveryData(userInputObj, jsonObj);
                        url = jsonObj.NextLink;
                        discoveredData.AddRange(partialDiscoveryData);
                    }
                }
            }

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

            if (site != DiscoverySites.Import)
            {
                // Update devices, if they have sql services present
                ParallelOptions parallelOptions = new ParallelOptions
                {
                    MaxDegreeOfParallelism = 15
                };

                Parallel.For(0, discoveredData.Count, parallelOptions, i =>
                {
                    discoveredData[i].IsSqlServicePresent = new IdentifySqlServices().IdentifyPresenceOfSqlServices(discoveredData[i].MachineId, discoveredData[i].MachineName, userInputObj);
                });
            }

            return discoveredData;
        }