in src/Discovery/Discover.cs [131:237]
private int PerformApplianceDiscovery(MasterSitesJSON masterSitesObj)
{
List<string> vmwareSites = new List<string>();
List<string> hypervSites = new List<string>();
List<string> serverSites = new List<string>();
foreach (string site in masterSitesObj.Properties.Sites)
{
if (site.Contains("vmwaresites"))
vmwareSites.Add(site);
else if (site.Contains("hypervsites"))
hypervSites.Add(site);
else if (site.Contains("serversites"))
serverSites.Add(site);
}
UserInputObj.LoggerObj.LogInformation(2, "Finished parsing discovery sites"); // 10 % complete
int discoveryDataPerSitePercentProgress = UserInputObj.WorkflowObj.IsExpressWorkflow ? 3 : 25;
int excelCreationPercentProgress = UserInputObj.WorkflowObj.IsExpressWorkflow ? 1 : 15;
if (UserInputObj.AzureMigrateSourceAppliances.Count == 2)
{
discoveryDataPerSitePercentProgress = UserInputObj.WorkflowObj.IsExpressWorkflow ? 4 : 40;
excelCreationPercentProgress = UserInputObj.WorkflowObj.IsExpressWorkflow ? 2 : 10;
}
else if (UserInputObj.AzureMigrateSourceAppliances.Count == 1)
{
discoveryDataPerSitePercentProgress = UserInputObj.WorkflowObj.IsExpressWorkflow ? 7 : 70;
excelCreationPercentProgress = UserInputObj.WorkflowObj.IsExpressWorkflow ? 3 : 20;
}
List<DiscoveryData> vmwareMachinesDiscovery = new List<DiscoveryData>();
List<DiscoveryData> hypervMachinesDiscovery = new List<DiscoveryData>();
List<DiscoveryData> physicalMachinesDiscovery = new List<DiscoveryData>();
try
{
Parallel.For(0, UserInputObj.AzureMigrateSourceAppliances.Count, i =>
{
if (UserInputObj.AzureMigrateSourceAppliances[i].Equals("vmware"))
{
UserInputObj.LoggerObj.LogInformation("Retrieving discovery data from VMWare sites");
vmwareMachinesDiscovery = new RetrieveDiscoveryData().BeginRetrieval(UserInputObj, vmwareSites, DiscoverySites.VMWare);
CalculateVCenterHostDiscoveryData(UserInputObj, vmwareSites);
UserInputObj.LoggerObj.LogInformation(discoveryDataPerSitePercentProgress, $"Retrieved discovery data for {vmwareMachinesDiscovery.Count.ToString()} machines from VMWare sites");
}
else if (UserInputObj.AzureMigrateSourceAppliances[i].Equals("hyperv"))
{
UserInputObj.LoggerObj.LogInformation("Retrieving discovery data from HyperV sites");
hypervMachinesDiscovery = new RetrieveDiscoveryData().BeginRetrieval(UserInputObj, hypervSites, DiscoverySites.HyperV);
UserInputObj.LoggerObj.LogInformation(discoveryDataPerSitePercentProgress, $"Retrieved discovery data for {hypervMachinesDiscovery.Count.ToString()} machines from HyperV sites");
}
else if (UserInputObj.AzureMigrateSourceAppliances[i].Equals("physical"))
{
UserInputObj.LoggerObj.LogInformation("Retrieving discovery data from Physical sites");
physicalMachinesDiscovery = new RetrieveDiscoveryData().BeginRetrieval(UserInputObj, serverSites, DiscoverySites.Physical);
UserInputObj.LoggerObj.LogInformation(discoveryDataPerSitePercentProgress, $"Retrieved discovery data for {physicalMachinesDiscovery.Count.ToString()} machines from Physical sites");
}
});
}
catch (AggregateException ae)
{
string errorMessage = "";
foreach (var e in ae.Flatten().InnerExceptions)
{
if (e is OperationCanceledException)
throw e;
else
{
errorMessage = errorMessage + e.Message + " ";
}
}
throw new Exception(errorMessage);
}
catch (Exception exDiscover)
{
throw exDiscover;
}
try
{
DiscoveredData.AddRange(vmwareMachinesDiscovery);
}
catch (Exception exConsolidateVmware)
{
UserInputObj.LoggerObj.LogWarning($"Failed data consolidation from VMWare sites: {exConsolidateVmware.Message}");
}
try
{
DiscoveredData.AddRange(hypervMachinesDiscovery);
}
catch (Exception exConsolidateHyperv)
{
UserInputObj.LoggerObj.LogWarning($"Failed data consolidation from HyperV sites: {exConsolidateHyperv.Message}");
}
try
{
DiscoveredData.AddRange(physicalMachinesDiscovery);
}
catch (Exception exConsolidatePhysical)
{
UserInputObj.LoggerObj.LogWarning($"Failed data consolidation from Physical sites: {exConsolidatePhysical.Message}");
}
return excelCreationPercentProgress;
}