private bool Create_SQL_IaaS_Instance_Rehost_Perf_Model()

in src/Assessment/Processor/ProcessDatasets.cs [781:877]


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

            if (SQL_IaaS_Instance_Rehost_Perf_List == null)
                SQL_IaaS_Instance_Rehost_Perf_List = new List<SQL_IaaS_Instance_Rehost_Perf>();
            if (AzureSQL_IaaS_Server == null)
                AzureSQL_IaaS_Server = new HashSet<string>();

            foreach (string sqlInstanceId in AzureSQL_IaaS_Instance)
            {
                if (!AzureSQLInstancesData.ContainsKey(sqlInstanceId))
                {
                    UserInputObj.LoggerObj.LogWarning($"SQL Instance ID {sqlInstanceId} does not exist in Azure SQL instances dataset, skipping");
                    continue;
                }

                var value = AzureSQLInstancesData[sqlInstanceId];
                string discoveredMachineId = AssessmentIdToDiscoveryIdLookup.ContainsKey(value.MachineArmId) ? AssessmentIdToDiscoveryIdLookup[value.MachineArmId] : "";

                if (value.AzureSQLVMSuitability != Suitabilities.Suitable && value.AzureSQLVMSuitability != Suitabilities.ConditionallySuitable)
                {
                    if (string.IsNullOrEmpty(discoveredMachineId))
                        continue;

                    if (!AzureSQL_IaaS_Server.Contains(discoveredMachineId))
                        AzureSQL_IaaS_Server.Add(discoveredMachineId);
                    
                    continue;
                }

                SQL_IaaS_Instance_Rehost_Perf obj = new SQL_IaaS_Instance_Rehost_Perf();

                obj.MachineName = value.MachineName;
                obj.SQLInstance = value.InstanceName;
                obj.Environment = value.Environment;
                obj.SQLServerOnAzureVMReadiness = new EnumDescriptionHelper().GetEnumDescription(value.AzureSQLVMSuitability);
                obj.SQLServerOnAzureVMReadiness_Warnings = UtilityFunctions.GetMigrationIssueWarnings(value.AzureSQLVMMigrationIssues);
                obj.SQLServerOnAzureVMConfiguration = value.AzureSQLVMSkuName;
                obj.MonthlyComputeCostEstimate = value.AzureSQLVMMonthlyComputeCost;
                obj.MonthlyComputeCostEstimate_RI3year = value.AzureSQLVMMonthlyComputeCost_RI3year;
                obj.MonthlyComputeCostEstimate_AHUB = value.AzureSQLVMMonthlyComputeCost_AHUB;
                obj.MonthlyComputeCostEstimate_AHUB_RI3year = value.AzureSQLVMMonthlyComputeCost_AHUB_RI3year;
                obj.MonthlyComputeCostEstimate_ASP3year = value.AzureSQLVMMonthlyComputeCost_ASP3year;
                obj.MonthlyStorageCostEstimate = value.AzureSQLVMMonthlyStorageCost;
                obj.MonthlySecurityCostEstimate = value.AzureSQLVMMonthlySecurityCost;
                obj.SQLServerONAzureVMManagedDiskConfiguration = UtilityFunctions.GetRecommendedDiskSKUs(value.AzureSQLVMLogDisks) +
                                                                 UtilityFunctions.GetRecommendedDiskSKUs(value.AzureSQLVMDataDisks);
                obj.UserDatabases = value.DatabaseSummaryNumberOfUserDatabases;
                obj.RecommendedDeploymentType = AzureSQLTargetType.AzureSqlVirtualMachine.ToString(); // value.RecommendedAzureSqlTargetType.ToString();
                
                obj.StandardHddDisks = UtilityFunctions.GetDiskTypeCount(value.AzureSQLVMLogDisks, RecommendedDiskTypes.Standard) + UtilityFunctions.GetDiskTypeCount(value.AzureSQLVMDataDisks, RecommendedDiskTypes.Standard);
                obj.StandardSsdDisks = UtilityFunctions.GetDiskTypeCount(value.AzureSQLVMLogDisks, RecommendedDiskTypes.StandardSSD) + UtilityFunctions.GetDiskTypeCount(value.AzureSQLVMDataDisks, RecommendedDiskTypes.StandardSSD);
                obj.PremiumDisks = UtilityFunctions.GetDiskTypeCount(value.AzureSQLVMLogDisks, RecommendedDiskTypes.Premium) + UtilityFunctions.GetDiskTypeCount(value.AzureSQLVMDataDisks, RecommendedDiskTypes.Premium);
                obj.UltraDisks = UtilityFunctions.GetDiskTypeCount(value.AzureSQLVMLogDisks, RecommendedDiskTypes.Ultra) + UtilityFunctions.GetDiskTypeCount(value.AzureSQLVMDataDisks, RecommendedDiskTypes.Ultra);

                obj.MonthlyStorageCostForStandardHddDisks = UtilityFunctions.GetDiskTypeStorageCost(value.AzureSQLVMLogDisks, RecommendedDiskTypes.Standard) + UtilityFunctions.GetDiskTypeStorageCost(value.AzureSQLVMDataDisks, RecommendedDiskTypes.Standard);
                obj.MonthlyStorageCostForStandardSsdDisks =  UtilityFunctions.GetDiskTypeStorageCost(value.AzureSQLVMLogDisks, RecommendedDiskTypes.StandardSSD) + UtilityFunctions.GetDiskTypeStorageCost(value.AzureSQLVMDataDisks, RecommendedDiskTypes.StandardSSD);
                obj.MonthlyStorageCostForPremiumDisks = UtilityFunctions.GetDiskTypeStorageCost(value.AzureSQLVMLogDisks, RecommendedDiskTypes.Premium) + UtilityFunctions.GetDiskTypeStorageCost(value.AzureSQLVMDataDisks, RecommendedDiskTypes.Premium);
                obj.MonthlyStorageCostForUltraDisks = UtilityFunctions.GetDiskTypeStorageCost(value.AzureSQLVMLogDisks, RecommendedDiskTypes.Ultra) + UtilityFunctions.GetDiskTypeStorageCost(value.AzureSQLVMDataDisks, RecommendedDiskTypes.Ultra);

                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.CpuUtilizationPercentage = 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.SQLServerOnAzureVMConfigurationTargetCores = value.AzureSQLVMCores;
                obj.MonthlyAzureSiteRecoveryCostEstimate = value.MonthlyAzureSiteRecoveryCostEstimate;
                obj.MonthlyAzureBackupCostEstimate = value.MonthlyAzureBackupCostEstimate;
                obj.GroupName = value.GroupName;
                obj.MachineId = AssessmentIdToDiscoveryIdLookup.ContainsKey(value.MachineArmId) ? AssessmentIdToDiscoveryIdLookup[value.MachineArmId] : "";

                SQL_IaaS_Instance_Rehost_Perf_List.Add(obj);
            }

            UserInputObj.LoggerObj.LogInformation($"Updated SQL_IaaS_Instance_Rehost_Perf excel model with data of {SQL_IaaS_Instance_Rehost_Perf_List.Count} instances");
            UserInputObj.LoggerObj.LogInformation($"Number of servers that will be evaluated for Azure SQL server rehost: {AzureSQL_IaaS_Server.Count}");
            return true;
        }