Fixing the logic to retireve rule metadata in sql assessments (#1223)

This commit is contained in:
Aasim Khan
2021-07-21 17:40:04 -07:00
committed by GitHub
parent d0f9af0a3e
commit a7703e63a4

View File

@@ -191,16 +191,10 @@ namespace Microsoft.SqlTools.ServiceLayer.Migration
SqlAssessmentConfiguration.EnableReportCreation = true; SqlAssessmentConfiguration.EnableReportCreation = true;
SqlAssessmentConfiguration.AssessmentReportAndLogsRootFolderPath = Path.GetDirectoryName(Logger.LogFileFullPath); SqlAssessmentConfiguration.AssessmentReportAndLogsRootFolderPath = Path.GetDirectoryName(Logger.LogFileFullPath);
DmaEngine engine = new DmaEngine(connectionStrings); DmaEngine engine = new DmaEngine(connectionStrings);
var assessmentResults = await engine.GetTargetAssessmentResultsList();
Dictionary<string, ISqlMigrationAssessmentResult> assessmentResultLookup = new Dictionary<string, ISqlMigrationAssessmentResult>();
foreach (ISqlMigrationAssessmentResult r in assessmentResults)
{
assessmentResultLookup.Add(CreateAssessmentResultKey(r as ISqlMigrationAssessmentResult), r as ISqlMigrationAssessmentResult);
}
ISqlMigrationAssessmentModel contextualizedAssessmentResult = await engine.GetTargetAssessmentResultsList(System.Threading.CancellationToken.None); ISqlMigrationAssessmentModel contextualizedAssessmentResult = await engine.GetTargetAssessmentResultsList(System.Threading.CancellationToken.None);
return new MigrationAssessmentResult() return new MigrationAssessmentResult()
{ {
AssessmentResult = ParseServerAssessmentInfo(contextualizedAssessmentResult.Servers[0], assessmentResultLookup), AssessmentResult = ParseServerAssessmentInfo(contextualizedAssessmentResult.Servers[0], engine),
Errors = ParseAssessmentError(contextualizedAssessmentResult.Errors), Errors = ParseAssessmentError(contextualizedAssessmentResult.Errors),
StartTime = contextualizedAssessmentResult.StartedOn.ToString(), StartTime = contextualizedAssessmentResult.StartedOn.ToString(),
EndedTime = contextualizedAssessmentResult.EndedOn.ToString(), EndedTime = contextualizedAssessmentResult.EndedOn.ToString(),
@@ -208,7 +202,7 @@ namespace Microsoft.SqlTools.ServiceLayer.Migration
}; };
} }
internal ServerAssessmentProperties ParseServerAssessmentInfo(IServerAssessmentInfo server, Dictionary<string, ISqlMigrationAssessmentResult> assessmentResultLookup) internal ServerAssessmentProperties ParseServerAssessmentInfo(IServerAssessmentInfo server, DmaEngine engine)
{ {
return new ServerAssessmentProperties() return new ServerAssessmentProperties()
{ {
@@ -224,13 +218,13 @@ namespace Microsoft.SqlTools.ServiceLayer.Migration
AssessedDatabaseCount = server.Properties.NumberOfUserDatabases, AssessedDatabaseCount = server.Properties.NumberOfUserDatabases,
SQLManagedInstanceTargetReadiness = server.TargetReadinesses[Microsoft.SqlServer.DataCollection.Common.Contracts.Advisor.TargetType.AzureSqlManagedInstance], SQLManagedInstanceTargetReadiness = server.TargetReadinesses[Microsoft.SqlServer.DataCollection.Common.Contracts.Advisor.TargetType.AzureSqlManagedInstance],
Errors = ParseAssessmentError(server.Errors), Errors = ParseAssessmentError(server.Errors),
Items = ParseAssessmentResult(server.ServerAssessments, assessmentResultLookup), Items = ParseAssessmentResult(server.ServerAssessments, engine),
Databases = ParseDatabaseAssessmentInfo(server.Databases, assessmentResultLookup), Databases = ParseDatabaseAssessmentInfo(server.Databases, engine),
Name = server.Properties.ServerName Name = server.Properties.ServerName
}; };
} }
internal DatabaseAssessmentProperties[] ParseDatabaseAssessmentInfo(IList<IDatabaseAssessmentInfo> databases, Dictionary<string, ISqlMigrationAssessmentResult> assessmentResultLookup) internal DatabaseAssessmentProperties[] ParseDatabaseAssessmentInfo(IList<IDatabaseAssessmentInfo> databases, DmaEngine engine)
{ {
return databases.Select(d => return databases.Select(d =>
{ {
@@ -242,7 +236,7 @@ namespace Microsoft.SqlTools.ServiceLayer.Migration
IsReplicationEnabled = d.Properties.IsReplicationEnabled, IsReplicationEnabled = d.Properties.IsReplicationEnabled,
AssessmentTimeInMilliseconds = d.Properties.TSqlScriptAnalysisTimeElapse.TotalMilliseconds, AssessmentTimeInMilliseconds = d.Properties.TSqlScriptAnalysisTimeElapse.TotalMilliseconds,
Errors = ParseAssessmentError(d.Errors), Errors = ParseAssessmentError(d.Errors),
Items = ParseAssessmentResult(d.DatabaseAssessments, assessmentResultLookup), Items = ParseAssessmentResult(d.DatabaseAssessments, engine),
SQLManagedInstanceTargetReadiness = d.TargetReadinesses[Microsoft.SqlServer.DataCollection.Common.Contracts.Advisor.TargetType.AzureSqlManagedInstance] SQLManagedInstanceTargetReadiness = d.TargetReadinesses[Microsoft.SqlServer.DataCollection.Common.Contracts.Advisor.TargetType.AzureSqlManagedInstance]
}; };
}).ToArray(); }).ToArray();
@@ -261,11 +255,11 @@ namespace Microsoft.SqlTools.ServiceLayer.Migration
}; };
}).ToArray(); }).ToArray();
} }
internal MigrationAssessmentInfo[] ParseAssessmentResult(IList<ISqlMigrationAssessmentResult> assessmentResults, Dictionary<string, ISqlMigrationAssessmentResult> assessmentResultLookup) internal MigrationAssessmentInfo[] ParseAssessmentResult(IList<ISqlMigrationAssessmentResult> assessmentResults, DmaEngine engine)
{ {
return assessmentResults.Select(r => return assessmentResults.Select(r =>
{ {
var check = assessmentResultLookup[CreateAssessmentResultKey(r)].Check; var check = engine.GetRuleMetadata(r.FeatureId, r.AppliesToMigrationTargetPlatform);
return new MigrationAssessmentInfo() return new MigrationAssessmentInfo()
{ {
CheckId = check.Id, CheckId = check.Id,