private bool Create_SQL_MI_Opportunity_Model()

in src/Assessment/Processor/ProcessDatasets.cs [1098:1170]


        private bool Create_SQL_MI_Opportunity_Model(List<SQL_MI_Opportunity> SQL_MI_Opportunity_List, HashSet<string> AzureSQL_IaaS_Instance)
        {
            if (AzureSQLInstancesData == null)
            {
                UserInputObj.LoggerObj.LogWarning("Not creating SQL_MI_Opportunity excel model as Azure SQL instances dataset is null");
                return false;
            }
            if (AzureSQLInstancesData.Count <= 0)
            {
                UserInputObj.LoggerObj.LogWarning("Not creating SQL_MI_Opportuniey excel model as Azure SQL instances dataset is empty");
                return false;
            }

            UserInputObj.LoggerObj.LogInformation("Creating excel model for SQL_MI_Opportunity");

            if (SQL_MI_Opportunity_List == null)
                SQL_MI_Opportunity_List = new List<SQL_MI_Opportunity>();
            
            foreach (var instanceArmId in AzureSQL_IaaS_Instance)
            {
                if (!AzureSQLInstancesData.ContainsKey(instanceArmId))
                {
                    UserInputObj.LoggerObj.LogWarning($"SQL Instance ID: {instanceArmId} does not exist Azure SQL instances dataset, skipping");
                    continue;
                }

                var value = AzureSQLInstancesData[instanceArmId];

                SQL_MI_Opportunity obj = new SQL_MI_Opportunity();

                obj.MachineName = value.MachineName;
                obj.SQLInstance = value.InstanceName;
                obj.Environment = value.Environment;
                obj.AzureSQLMIReadiness = new EnumDescriptionHelper().GetEnumDescription(value.AzureSQLMISuitability);
                obj.AzureSQLMIReadiness_Warnings = UtilityFunctions.GetMigrationIssueWarnings(value.AzureSQLMIMigrationIssues);
                obj.AzureSQLMIReadiness_Issues = UtilityFunctions.GetMigrationIssueByType(value.AzureSQLMIMigrationIssues, IssueCategories.Issue);
                obj.RecommendedDeploymentType = value.RecommendedAzureSqlTargetType.ToString();
                obj.AzureSQLMIConfiguration = UtilityFunctions.GetSQLMIConfiguration(value);
                obj.MonthlyComputeCostEstimate = value.AzureSQLMIMonthlyComputeCost;
                obj.MonthlyComputeCostEstimate_RI3year = value.AzureSQLMIMonthlyComputeCost_RI3year;
                obj.MonthlyComputeCostEstimate_AHUB = value.AzureSQLMIMonthlyComputeCost_AHUB;
                obj.MonthlyComputeCostEstimate_AHUB_RI3year = value.AzureSQLMIMonthlyComputeCost_AHUB_RI3year;
                obj.MonthlyStorageCostEstimate = value.AzureSQLMIMonthlyStorageCost;
                obj.MonthlySecurityCostEstimate = value.AzureSQLMIMonthlySecurityCost;
                obj.UserDatabases = value.DatabaseSummaryNumberOfUserDatabases;
                obj.SQLEdition = value.SQLEdition;
                obj.SQLVersion = value.SQLVersion;
                obj.SupportStatus = value.SupportStatus;
                obj.TotalDBSizeInMB = value.DatabaseSummaryTotalDatabaseSizeInMB;
                obj.LargestDBSizeInMB = value.DatabaseSumaryLargestDatabaseSizeInMB;
                obj.VCoresAllocated = value.NumberOfCoresAllocated;
                obj.CpuUtilizationInPercentage = value.PercentageCoresUtilization;
                obj.MemoryInUseInMB = value.MemoryInUseMB;
                obj.NumberOfDisks = value.LogicalDisks.Count;
                obj.DiskReadInOPS = UtilityFunctions.GetDiskReadInOPS(value.LogicalDisks);
                obj.DiskWriteInOPS = UtilityFunctions.GetDiskWriteInOPS(value.LogicalDisks);
                obj.DiskReadInMBPS = UtilityFunctions.GetDiskReadInMBPS(value.LogicalDisks);
                obj.DiskWriteInMBPS = UtilityFunctions.GetDiskWriteInMBPS(value.LogicalDisks);
                obj.ConfidenceRatingInPercentage = value.ConfidenceRatingInPercentage;
                obj.AzureSQLMIConfigurationTargetServiceTier = UtilityFunctions.GetStringValue(value.AzureSQLMISkuServiceTier);
                obj.AzureSQLMIConfigurationTargetComputeTier = UtilityFunctions.GetStringValue(value.AzureSQLMISkuComputeTier);
                obj.AzureSQLMIConfigurationTargetHardwareType = UtilityFunctions.GetStringValue(value.AzureSQLMISkuHardwareGeneration);
                obj.AzureSQLMIConfigurationTargetCores = value.AzureSQLMISkuCores;
                obj.AzureSQLMIConfigurationTargetStorageInGB = Math.Round(value.AzureSQLMISkuStorageMaxSizeInMB / 1024.0);
                obj.GroupName = value.GroupName;
                obj.MachineId = AssessmentIdToDiscoveryIdLookup.ContainsKey(value.MachineArmId) ? AssessmentIdToDiscoveryIdLookup[value.MachineArmId] : "";

                SQL_MI_Opportunity_List.Add(obj);
            }
            
            UserInputObj.LoggerObj.LogInformation($"Updated SQL_MI_Opportunity excel model with data of {SQL_MI_Opportunity_List.Count} instances");
            return true;
        }