From 1eb03404ad7051a2eba650fde4b859a98f1d1bf3 Mon Sep 17 00:00:00 2001 From: Aasim Khan Date: Tue, 20 Jul 2021 13:55:58 -0700 Subject: [PATCH] Updating assessment api response object in SQL Migration (#16334) * Modifying the get assessments api to match the new specs * fixing property name * Updating sts version --- extensions/mssql/config.json | 2 +- extensions/mssql/src/contracts.ts | 7 +- extensions/mssql/src/mssql.d.ts | 66 +++++++++++++++++-- .../src/sqlMigration/sqlMigrationService.ts | 2 +- .../sql-migration/src/models/stateMachine.ts | 23 ++----- 5 files changed, 67 insertions(+), 33 deletions(-) diff --git a/extensions/mssql/config.json b/extensions/mssql/config.json index 24566a5afe..be936268ef 100644 --- a/extensions/mssql/config.json +++ b/extensions/mssql/config.json @@ -1,6 +1,6 @@ { "downloadUrl": "https://github.com/Microsoft/sqltoolsservice/releases/download/v{#version#}/microsoft.sqltools.servicelayer-{#fileName#}", - "version": "3.0.0-release.111", + "version": "3.0.0-release.115", "downloadFileNames": { "Windows_86": "win-x86-net5.0.zip", "Windows_64": "win-x64-net5.0.zip", diff --git a/extensions/mssql/src/contracts.ts b/extensions/mssql/src/contracts.ts index b20c7360b9..70ea5d5ac6 100644 --- a/extensions/mssql/src/contracts.ts +++ b/extensions/mssql/src/contracts.ts @@ -1014,17 +1014,12 @@ export namespace ProfilerSessionCreatedNotification { // ------------------------------- < SQL Profiler > ------------------------------------ /// ------------------------------- ----------------------------- - -export interface SqlAssessmentResult extends azdata.ResultStatus { - items: mssql.SqlMigrationAssessmentResultItem[]; -} - export interface SqlMigrationAssessmentParams { ownerUri: string; } export namespace GetSqlMigrationAssessmentItemsRequest { - export const type = new RequestType('migration/getassessments'); + export const type = new RequestType('migration/getassessments'); } // ------------------------------- ----------------------------- diff --git a/extensions/mssql/src/mssql.d.ts b/extensions/mssql/src/mssql.d.ts index ab82a46fcc..8a3a082868 100644 --- a/extensions/mssql/src/mssql.d.ts +++ b/extensions/mssql/src/mssql.d.ts @@ -444,7 +444,7 @@ export interface ICmsService { /** * Connects to or creates a Central management Server */ - createCmsServer(name: string, description:string, connectiondetails: azdata.ConnectionInfo, ownerUri: string): Thenable; + createCmsServer(name: string, description: string, connectiondetails: azdata.ConnectionInfo, ownerUri: string): Thenable; /** * gets all Registered Servers inside a CMS on a particular level @@ -454,22 +454,22 @@ export interface ICmsService { /** * Adds a Registered Server inside a CMS on a particular level */ - addRegisteredServer (ownerUri: string, relativePath: string, registeredServerName: string, registeredServerDescription:string, connectionDetails:azdata.ConnectionInfo): Thenable; + addRegisteredServer(ownerUri: string, relativePath: string, registeredServerName: string, registeredServerDescription: string, connectionDetails: azdata.ConnectionInfo): Thenable; /** * Removes a Registered Server inside a CMS on a particular level */ - removeRegisteredServer (ownerUri: string, relativePath: string, registeredServerName: string): Thenable; + removeRegisteredServer(ownerUri: string, relativePath: string, registeredServerName: string): Thenable; /** * Adds a Server Group inside a CMS on a particular level */ - addServerGroup (ownerUri: string, relativePath: string, groupName: string, groupDescription:string): Thenable; + addServerGroup(ownerUri: string, relativePath: string, groupName: string, groupDescription: string): Thenable; /** * Removes a Server Group inside a CMS on a particular level */ - removeServerGroup (ownerUri: string, relativePath: string, groupName: string): Thenable; + removeServerGroup(ownerUri: string, relativePath: string, groupName: string): Thenable; } /** * CMS Result interfaces as passed back to Extensions @@ -542,10 +542,62 @@ export interface SqlMigrationAssessmentResultItem { impactedObjects: SqlMigrationImpactedObjectInfo[]; } -export interface SqlMigrationAssessmentResult extends azdata.ResultStatus { +export interface ServerTargetReadiness { + numberOfDatabasesReadyForMigration: number; + numberOfNonOnlineDatabases: number; + totalNumberOfDatabases: number; +} + +export interface ErrorModel { + errorId: number; + message: string; + errorSummary: string; + possibleCauses: string; + guidance: string; +} + +export interface DatabaseTargetReadiness { + noSelectionForMigration: boolean; + numOfBlockerIssues: number; +} + +export interface DatabaseAssessmentProperties { + compatibilityLevel: string; + databaseSize: number; + isReplicationEnabled: boolean; + assessmentTimeInMilliseconds: number; items: SqlMigrationAssessmentResultItem[]; + errors: ErrorModel[]; + sqlManagedInstanceTargetReadiness: DatabaseTargetReadiness; + name: string; +} + +export interface ServerAssessmentProperties { + cpuCoreCount: number; + physicalServerMemory: number; + serverHostPlatform: string; + serverVersion: string; + serverEngineEdition: string; + serverEdition: string; + isClustered: boolean; + numberOfUserDatabases: number; + sqlAssessmentStatus: number; + assessedDatabaseCount: number; + sqlManagedInstanceTargetReadiness: ServerTargetReadiness; + items: SqlMigrationAssessmentResultItem[]; + errors: ErrorModel[]; + databases: DatabaseAssessmentProperties[]; + name: string; +} + +export interface AssessmentResult { + startedOn: string; + endedOn: string; + assessmentResult: ServerAssessmentProperties; + rawAssessmentResult: any; + errors: ErrorModel[]; } export interface ISqlMigrationService { - getAssessments(ownerUri: string): Promise; + getAssessments(ownerUri: string): Promise; } diff --git a/extensions/mssql/src/sqlMigration/sqlMigrationService.ts b/extensions/mssql/src/sqlMigration/sqlMigrationService.ts index 4051fc610f..fb2ffce155 100644 --- a/extensions/mssql/src/sqlMigration/sqlMigrationService.ts +++ b/extensions/mssql/src/sqlMigration/sqlMigrationService.ts @@ -29,7 +29,7 @@ export class SqlMigrationService implements mssql.ISqlMigrationService { context.registerService(constants.SqlMigrationService, this); } - async getAssessments(ownerUri: string): Promise { + async getAssessments(ownerUri: string): Promise { let params: contracts.SqlMigrationAssessmentParams = { ownerUri: ownerUri }; try { return this.client.sendRequest(contracts.GetSqlMigrationAssessmentItemsRequest.type, params); diff --git a/extensions/sql-migration/src/models/stateMachine.ts b/extensions/sql-migration/src/models/stateMachine.ts index 50b19af92c..186fcfeac8 100644 --- a/extensions/sql-migration/src/models/stateMachine.ts +++ b/extensions/sql-migration/src/models/stateMachine.ts @@ -176,30 +176,17 @@ export class MigrationStateModel implements Model, vscode.Disposable { const assessmentResults = await this.migrationService.getAssessments( ownerUri ); - this._serverDatabases = await (await azdata.connection.listDatabases(this.sourceConnectionId)).filter((name) => !excludeDbs.includes(name)); - const serverLevelAssessments: mssql.SqlMigrationAssessmentResultItem[] = []; - const databaseLevelAssessments = this._serverDatabases.map(db => { + const dbAssessments = assessmentResults?.assessmentResult.databases.filter(d => !excludeDbs.includes(d.name)).map(d => { return { - name: db, - issues: [] + name: d.name, + issues: d.items.filter(i => i.appliesToMigrationTargetPlatform === MigrationTargetType.SQLMI) ?? [] }; }); - assessmentResults?.items.forEach((item) => { - if (item.appliesToMigrationTargetPlatform === MigrationTargetType.SQLMI) { - const dbIndex = this._serverDatabases.indexOf(item.databaseName); - if (dbIndex === -1) { - serverLevelAssessments.push(item); - } else { - databaseLevelAssessments[dbIndex].issues.push(item); - } - } - }); - this._assessmentResults = { - issues: serverLevelAssessments, - databaseAssessments: databaseLevelAssessments + issues: assessmentResults?.assessmentResult.items?.filter(i => i.appliesToMigrationTargetPlatform === MigrationTargetType.SQLMI) ?? [], + databaseAssessments: dbAssessments! ?? [] }; return this._assessmentResults;