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