public void InititateProcessing()

in src/Assessment/Processor/ProcessDatasets.cs [80:271]


        public void InititateProcessing()
        {
            if (UserInputObj == null)
                throw new Exception("Received null user input object for processing datasets.");

            UserInputObj.LoggerObj.LogInformation("Processing datasets to generate excel models");

            // Core report models
            CoreProperties corePropertiesObj = new CoreProperties();
            List<All_VM_IaaS_Server_Rehost_Perf> All_VM_IaaS_Server_Rehost_Perf_List = new List<All_VM_IaaS_Server_Rehost_Perf>();
            List<SQL_All_Instances> SQL_All_Instances_List = new List<SQL_All_Instances>();
            List<SQL_MI_PaaS> SQL_MI_PaaS_List = new List<SQL_MI_PaaS>();
            List<SQL_IaaS_Instance_Rehost_Perf> SQL_IaaS_Instance_Rehost_Perf_List = new List<SQL_IaaS_Instance_Rehost_Perf>();
            List<SQL_IaaS_Server_Rehost_Perf> SQL_IaaS_Server_Rehost_Perf_List = new List<SQL_IaaS_Server_Rehost_Perf>();
            List<SQL_IaaS_Server_Rehost_AsOnPrem> SQL_IaaS_Server_Rehost_AsOnPrem_List = new List<SQL_IaaS_Server_Rehost_AsOnPrem>();
            List<WebApp_PaaS> WebApp_PaaS_List = new List<WebApp_PaaS>();
            List<WebApp_IaaS_Server_Rehost_Perf> WebApp_IaaS_Server_Rehost_Perf_List = new List<WebApp_IaaS_Server_Rehost_Perf>();
            List<WebApp_IaaS_Server_Rehost_AsOnPrem> WebApp_IaaS_Server_Rehost_AsOnPrem_List = new List<WebApp_IaaS_Server_Rehost_AsOnPrem>();
            List<VM_SS_IaaS_Server_Rehost_Perf> VM_SS_IaaS_Server_Rehost_Perf_List = new List<VM_SS_IaaS_Server_Rehost_Perf>();
            List<VM_SS_IaaS_Server_Rehost_AsOnPrem> VM_SS_IaaS_Server_Rehost_AsOnPrem_List = new List<VM_SS_IaaS_Server_Rehost_AsOnPrem>();
            List<VM_IaaS_Server_Rehost_Perf> VM_IaaS_Server_Rehost_Perf_List = new List<VM_IaaS_Server_Rehost_Perf>();
            List<VM_IaaS_Server_Rehost_AsOnPrem> VM_IaaS_Server_Rehost_AsOnPrem_List = new List<VM_IaaS_Server_Rehost_AsOnPrem>();
            Business_Case Business_Case_Data = new Business_Case();
            List<Financial_Summary> Financial_Summary_List = new List<Financial_Summary>();
            Cash_Flows Cash_Flows_Data = new Cash_Flows();
            List<AVS_Summary> AVS_Summary_List = new List<AVS_Summary>();
            List<AVS_IaaS_Rehost_Perf> AVS_IaaS_Rehost_Perf_List = new List<AVS_IaaS_Rehost_Perf>();
            List<Decommissioned_Machines> Decommissioned_Machines_List = new List<Decommissioned_Machines>();

            // Opportunity report models
            List<SQL_MI_Issues_and_Warnings> SQL_MI_Issues_and_Warnings_List = new List<SQL_MI_Issues_and_Warnings>();
            List<SQL_MI_Opportunity> SQL_MI_Opportunity_List = new List<SQL_MI_Opportunity>();
            List<WebApp_Opportunity> WebApp_Opportunity_List = new List<WebApp_Opportunity>();
            List<VM_Opportunity_Perf> VM_Opportunity_Perf_List = new List<VM_Opportunity_Perf>();
            List<VM_Opportunity_AsOnPrem> VM_Opportunity_AsOnPrem_List = new List<VM_Opportunity_AsOnPrem>();

            // Clash report models
            List<Clash_Report> Clash_Report_List = new List<Clash_Report>();

            // Dependent lists
            HashSet<string> AzureSQL_IaaS_Instance = new HashSet<string>(); // Also the list for SQL_MI_Opportunity
            HashSet<string> AzureSQL_IaaS_Server = new HashSet<string>();
            HashSet<string> AzureVM_Opportunity_Perf = new HashSet<string>();
            HashSet<string> AzureVM_Opportunity_AsOnPrem = new HashSet<string>();
            HashSet<string> AzureWebApp_Opportunity = new HashSet<string>();
            if (AzureWebApp_IaaS == null)
                AzureWebApp_IaaS = new HashSet<string>();

            // Core report tabs
            CreateCorePropertiesModel(corePropertiesObj);
            Process_All_VM_IaaS_Server_Rehost_Perf_Model(All_VM_IaaS_Server_Rehost_Perf_List);
            Process_SQL_All_Instances_Model(SQL_All_Instances_List); // should be the first SQL core report model to be processed.
            Process_SQL_MI_PaaS_Model(SQL_MI_PaaS_List, AzureSQL_IaaS_Instance);
            Process_SQL_IaaS_Instance_Rehost_Perf_Model(SQL_IaaS_Instance_Rehost_Perf_List, AzureSQL_IaaS_Instance, AzureSQL_IaaS_Server);
            Process_SQL_IaaS_Server_Rehost_Perf_Model(SQL_IaaS_Server_Rehost_Perf_List, AzureSQL_IaaS_Server, AzureVM_Opportunity_Perf);
            Process_SQL_IaaS_Server_Rehost_AsOnPrem_Model(SQL_IaaS_Server_Rehost_AsOnPrem_List, AzureSQL_IaaS_Server, AzureVM_Opportunity_AsOnPrem);
            Process_WebApp_PaaS_Model(WebApp_PaaS_List, AzureWebApp_Opportunity);
            Process_WebApp_IaaS_Server_Rehost_Perf_Model(WebApp_IaaS_Server_Rehost_Perf_List, AzureVM_Opportunity_Perf);
            Process_WebApp_IaaS_Server_Rehost_AsOnPrem_Model(WebApp_IaaS_Server_Rehost_AsOnPrem_List, AzureVM_Opportunity_AsOnPrem);
            Process_VM_SS_IaaS_Server_Rehost_Perf_Model(VM_SS_IaaS_Server_Rehost_Perf_List, AzureVM_Opportunity_Perf, AzureSQL_IaaS_Server);
            Process_VM_SS_IaaS_Server_Rehost_AsOnPrem_Model(VM_SS_IaaS_Server_Rehost_AsOnPrem_List, AzureVM_Opportunity_AsOnPrem, AzureSQL_IaaS_Server);
            Process_VM_IaaS_Server_Rehost_Perf_Model(VM_IaaS_Server_Rehost_Perf_List, AzureVM_Opportunity_Perf);
            Process_VM_IaaS_Server_Rehost_AsOnPrem_Model(VM_IaaS_Server_Rehost_AsOnPrem_List, AzureVM_Opportunity_AsOnPrem);
            Process_Business_Case_Model(Business_Case_Data, SQL_MI_PaaS_List, SQL_IaaS_Instance_Rehost_Perf_List, SQL_IaaS_Server_Rehost_Perf_List,
                                        WebApp_PaaS_List, WebApp_IaaS_Server_Rehost_Perf_List,
                                        VM_IaaS_Server_Rehost_Perf_List);
            Process_Financial_Summary_Model(Financial_Summary_List, SQL_MI_PaaS_List, SQL_IaaS_Instance_Rehost_Perf_List, SQL_IaaS_Server_Rehost_Perf_List,
                                        WebApp_PaaS_List, WebApp_IaaS_Server_Rehost_Perf_List,
                                        VM_IaaS_Server_Rehost_Perf_List);
            Process_Cash_Flows_Model(Cash_Flows_Data);
            Process_AVS_Summary_Model(AVS_Summary_List);
            Process_AVS_IaaS_Rehost_Perf_Model(AVS_IaaS_Rehost_Perf_List);
            Process_Decommissioned_Machines_Model(Decommissioned_Machines_List);

            // Opportunity report tabs
            Process_SQL_MI_Issues_and_Warnings_Model(SQL_MI_Issues_and_Warnings_List);
            Process_SQL_MI_Opportunity_Model(SQL_MI_Opportunity_List, AzureSQL_IaaS_Instance);
            Process_WebApp_Opportunity_Model(WebApp_Opportunity_List, AzureWebApp_Opportunity);
            Process_VM_Opportunity_Perf_Model(VM_Opportunity_Perf_List, AzureVM_Opportunity_Perf);
            Process_VM_Opportunity_AsOnPrem_Model(VM_Opportunity_AsOnPrem_List, AzureVM_Opportunity_AsOnPrem);

            // Generate the clash report
            UserInputObj.LoggerObj.LogInformation("Generating excel model for Clash_Report");
            foreach (var kvp in AzureVMPerformanceBasedMachinesData)
            {
                Clash_Report obj = new Clash_Report();
                
                obj.MachineName = kvp.Value.DisplayName;
                obj.Environment = kvp.Value.Environment;
                obj.OperatingSystem = UtilityFunctions.GetStringValue(kvp.Value.OperatingSystem);
                obj.BootType = UtilityFunctions.GetStringValue(kvp.Value.BootType);

                var macIpKvp = UtilityFunctions.ParseMacIpAddress(kvp.Value.NetworkAdapterList);
                obj.MacAddresses = macIpKvp.Key;
                obj.IPAddresses = macIpKvp.Value;

                obj.VMHost = UtilityFunctions.GetStringValue(kvp.Value.DatacenterManagementServerName);
                obj.MachineId = kvp.Value.DatacenterMachineArmId;
                
                int count = 0;
                foreach (var value in VM_IaaS_Server_Rehost_Perf_List)
                    if (kvp.Key.Equals(value.MachineId))
                        count += 1;
                obj.VM_IaaS_Server_Rehost_Perf_Clash = count;

                count = 0;
                foreach (var value in SQL_IaaS_Instance_Rehost_Perf_List)
                    if (kvp.Key.Equals(value.MachineId))
                        count += 1;
                obj.SQL_IaaS_Instance_Rehost_Perf_Clash = count;

                count = 0;
                foreach (var value in SQL_MI_PaaS_List)
                    if (kvp.Key.Equals(value.MachineId))
                        count += 1;
                obj.SQL_MI_PaaS_Clash = count;

                count = 0;
                foreach (var value in SQL_IaaS_Server_Rehost_Perf_List)
                    if (kvp.Key.Equals(value.MachineId))
                        count += 1;
                obj.SQL_IaaS_Server_Rehost_Perf_Clash = count;

                count = 0;
                foreach (var value in WebApp_PaaS_List)
                    if (kvp.Key.Equals(value.MachineId))
                        count += 1;
                obj.WebApp_PaaS_Clash = count;

                count = 0;
                foreach (var value in WebApp_IaaS_Server_Rehost_Perf_List)
                    if (kvp.Key.Equals(value.MachineId))
                        count += 1;
                obj.WebApp_IaaS_Server_Rehost_Perf_Clash = count;

                count = 0;
                foreach (var value in VM_SS_IaaS_Server_Rehost_Perf_List)
                    if (kvp.Key.Equals(value.MachineId))
                        count += 1;
                obj.VM_SS_IaaS_Server_Rehost_Perf_Clash = count;

                Clash_Report_List.Add(obj);
            }

            UserInputObj.LoggerObj.LogInformation($"Updated Clash_Report excel model with data of {Clash_Report_List.Count} machines");

            UserInputObj.LoggerObj.LogInformation(90 - UserInputObj.LoggerObj.GetCurrentProgress(), "Completed job for creating excel models");

            UserInputObj.LoggerObj.LogInformation("Generating core report excel sheet");
            ExportCoreReport exportCoreReportObj = new ExportCoreReport
                (
                    corePropertiesObj,
                    All_VM_IaaS_Server_Rehost_Perf_List,
                    SQL_All_Instances_List,
                    SQL_MI_PaaS_List,
                    SQL_IaaS_Instance_Rehost_Perf_List,
                    SQL_IaaS_Server_Rehost_Perf_List,
                    SQL_IaaS_Server_Rehost_AsOnPrem_List,
                    WebApp_PaaS_List,
                    WebApp_IaaS_Server_Rehost_Perf_List,
                    WebApp_IaaS_Server_Rehost_AsOnPrem_List,
                    VM_SS_IaaS_Server_Rehost_Perf_List,
                    VM_SS_IaaS_Server_Rehost_AsOnPrem_List,
                    VM_IaaS_Server_Rehost_Perf_List,
                    VM_IaaS_Server_Rehost_AsOnPrem_List,
                    Business_Case_Data,
                    Financial_Summary_List,
                    Cash_Flows_Data,
                    AVS_Summary_List,
                    AVS_IaaS_Rehost_Perf_List,
                    Decommissioned_Machines_List
                );
            exportCoreReportObj.GenerateCoreReportExcel();
            UserInputObj.LoggerObj.LogInformation(93 - UserInputObj.LoggerObj.GetCurrentProgress(), "Generated core report excel sheet");

            UserInputObj.LoggerObj.LogInformation("Generating opportunity report excel sheet");
            ExportOpportunityReport exportOpportunityReportObj = new ExportOpportunityReport
                (
                    SQL_MI_Issues_and_Warnings_List,
                    SQL_MI_Opportunity_List,
                    WebApp_Opportunity_List,
                    VM_Opportunity_Perf_List,
                    VM_Opportunity_AsOnPrem_List
                );
            exportOpportunityReportObj.GenerateOpportunityReportExcel();
            UserInputObj.LoggerObj.LogInformation(96 - UserInputObj.LoggerObj.GetCurrentProgress(), "Generated opportunity report excel sheet");

            UserInputObj.LoggerObj.LogInformation("Generating clash report excel sheet");
            ExportClashReport exportClashReportObj = new ExportClashReport(Clash_Report_List);
            exportClashReportObj.GenerateClashReportExcel();
            UserInputObj.LoggerObj.LogInformation(100 - UserInputObj.LoggerObj.GetCurrentProgress(), "Generated clash report excel sheet");
        }