private bool Create_SQL_MI_PaaS_Model()

in src/Assessment/Processor/ProcessDatasets.cs [693:765]


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

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

            if (SQL_MI_PaaS_List == null)
                SQL_MI_PaaS_List = new List<SQL_MI_PaaS>();
            if (AzureSQL_IaaS_Instance == null)
                AzureSQL_IaaS_Instance = new HashSet<string>();
            
            foreach (var azureSqlInstance in AzureSQLInstancesData)
            {
                if (azureSqlInstance.Value.AzureSQLMISuitability != Suitabilities.Suitable)
                {
                    if (!AzureSQL_IaaS_Instance.Contains(azureSqlInstance.Value.SQLInstanceSDSArmId))
                        AzureSQL_IaaS_Instance.Add(azureSqlInstance.Value.SQLInstanceSDSArmId);
                    continue;
                }

                SQL_MI_PaaS obj = new SQL_MI_PaaS();

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

                SQL_MI_PaaS_List.Add(obj);
            }

            UserInputObj.LoggerObj.LogInformation($"Updated SQL_MI_PaaS excel model with data of {SQL_MI_PaaS_List.Count} instances");
            UserInputObj.LoggerObj.LogInformation($"Number of instances that will be evaluated for Azure SQL instance rehost: {AzureSQL_IaaS_Instance.Count}");
            return true;
        }