From ee386e7382a0d4ca40eb65d12bdda07794e23957 Mon Sep 17 00:00:00 2001 From: junierch <109680247+junierch@users.noreply.github.com> Date: Wed, 5 Oct 2022 21:37:36 -0400 Subject: [PATCH] remove Last Backup colum on assessment db list. (#20728) * remove Last Backup colum on assessment db list. * column cleanup --- .../sql-migration/src/constants/queries.ts | 20 +++++++++++ .../sql-migration/src/constants/strings.ts | 1 - .../sql-migration/src/models/stateMachine.ts | 34 ++++++++++++++++++- extensions/sql-migration/src/telemtery.ts | 3 +- .../src/wizard/databaseSelectorPage.ts | 23 +++---------- 5 files changed, 59 insertions(+), 22 deletions(-) create mode 100644 extensions/sql-migration/src/constants/queries.ts diff --git a/extensions/sql-migration/src/constants/queries.ts b/extensions/sql-migration/src/constants/queries.ts new file mode 100644 index 0000000000..5328c2b868 --- /dev/null +++ b/extensions/sql-migration/src/constants/queries.ts @@ -0,0 +1,20 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the Source EULA. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + + +//Select all databases available on the server with size +export const SELECT_ALL_DB_W_SIZE = ` +WITH +db_size +AS +( +SELECT database_id, CAST(SUM(size) * 8.0 / 1024 AS INTEGER) size +FROM sys.master_files with (nolock) +GROUP BY database_id +) +SELECT name, state_desc AS state, db_size.size +FROM sys.databases with (nolock) LEFT JOIN db_size ON sys.databases.database_id = db_size.database_id +WHERE sys.databases.state = 0 +`; diff --git a/extensions/sql-migration/src/constants/strings.ts b/extensions/sql-migration/src/constants/strings.ts index a51db3fa58..d7022170d0 100644 --- a/extensions/sql-migration/src/constants/strings.ts +++ b/extensions/sql-migration/src/constants/strings.ts @@ -933,7 +933,6 @@ export const ENTER_YOUR_SQL_CREDS = localize('sql.migration.enter.your.sql.cred' export const SERVER = localize('sql.migration.server', "Server"); export const USERNAME = localize('sql.migration.username', "User name"); export const SIZE = localize('sql.migration.size', "Size (MB)"); -export const LAST_BACKUP = localize('sql.migration.last.backup', "Last backup"); export const DATABASE_MIGRATE_TEXT = localize('sql.migrate.text', "Select the databases that you want to migrate to Azure SQL."); export const OFFLINE_CAPS = localize('sql.migration.offline.caps', "OFFLINE"); export const SELECT_DATABASE_TO_CONTINUE = localize('sql.migration.select.database.to.continue', "Please select 1 or more databases to assess for migration"); diff --git a/extensions/sql-migration/src/models/stateMachine.ts b/extensions/sql-migration/src/models/stateMachine.ts index 654c2fa1d6..22cf7cb53e 100644 --- a/extensions/sql-migration/src/models/stateMachine.ts +++ b/extensions/sql-migration/src/models/stateMachine.ts @@ -14,7 +14,8 @@ import { v4 as uuidv4 } from 'uuid'; import { sendSqlMigrationActionEvent, TelemetryAction, TelemetryViews, logError } from '../telemtery'; import { hashString, deepClone } from '../api/utils'; import { SKURecommendationPage } from '../wizard/skuRecommendationPage'; -import { excludeDatabses, TargetDatabaseInfo } from '../api/sqlUtils'; +import { excludeDatabses, getSqlString, TargetDatabaseInfo } from '../api/sqlUtils'; +import * as queries from '../constants/queries'; const localize = nls.loadMessageBundle(); export enum State { @@ -1189,6 +1190,37 @@ export class MigrationStateModel implements Model, vscode.Disposable { return false; } } + + //Get QueryProvider + private async runQueryWithResults(queryString: string): Promise { + const connectionProfile = await this.getSourceConnectionProfile(); + const connectionUri = await azdata.connection.getUriForConnection(this._sourceConnectionId); + const queryProvider = azdata.dataprotocol.getProvider(connectionProfile.providerId, azdata.DataProviderType.QueryProvider); + + return await queryProvider.runQueryAndReturn(connectionUri, queryString); + } + + public async getDatabasesList(): Promise { + try { + const queryResult = await this.runQueryWithResults(queries.SELECT_ALL_DB_W_SIZE); + + const result = queryResult.rows.map(row => { + return { + options: { + name: getSqlString(row[0]), + state: getSqlString(row[1]), + sizeInMB: getSqlString(row[2]), + } + }; + }) ?? []; + + return result; + } catch (error) { + logError(TelemetryViews.SkuRecommendationWizard, TelemetryAction.GetDatabasesListFailed, error); + + return []; + } + } } export interface ServerAssessment { diff --git a/extensions/sql-migration/src/telemtery.ts b/extensions/sql-migration/src/telemtery.ts index b0e58c9d15..a0847741eb 100644 --- a/extensions/sql-migration/src/telemtery.ts +++ b/extensions/sql-migration/src/telemtery.ts @@ -60,7 +60,8 @@ export enum TelemetryAction { GetDBSkuRecommendation = 'GetDBSkuRecommendation', GetInstanceRequirements = 'GetInstanceRequirements', StartDataCollection = 'StartDataCollection', - StopDataCollection = 'StopDataCollection' + StopDataCollection = 'StopDataCollection', + GetDatabasesListFailed = 'GetDatabasesListFailed' } export function logError(telemetryView: TelemetryViews, err: string, error: any): void { diff --git a/extensions/sql-migration/src/wizard/databaseSelectorPage.ts b/extensions/sql-migration/src/wizard/databaseSelectorPage.ts index 8209165aba..49542434da 100644 --- a/extensions/sql-migration/src/wizard/databaseSelectorPage.ts +++ b/extensions/sql-migration/src/wizard/databaseSelectorPage.ts @@ -119,8 +119,7 @@ export class DatabaseSelectorPage extends MigrationWizardPage { const searchText = value?.toLowerCase(); return row[2]?.toLowerCase()?.indexOf(searchText) > -1 // database name || row[3]?.toLowerCase()?.indexOf(searchText) > -1 // state - || row[4]?.toLowerCase()?.indexOf(searchText) > -1 // size - || row[5]?.toLowerCase()?.indexOf(searchText) > -1; // last backup date + || row[4]?.toLowerCase()?.indexOf(searchText) > -1; // size }); } @@ -208,14 +207,6 @@ export class DatabaseSelectorPage extends MigrationWizardPage { cssClass: cssClass, headerCssClass: cssClass, }, - { - name: constants.LAST_BACKUP, - value: 'lastBackup', - type: azdata.ColumnType.text, - width: 130, - cssClass: cssClass, - headerCssClass: cssClass, - }, ] }).component(); @@ -242,20 +233,15 @@ export class DatabaseSelectorPage extends MigrationWizardPage { } private async _loadDatabaseList(stateMachine: MigrationStateModel, selectedDatabases: string[]): Promise { - const providerId = (await stateMachine.getSourceConnectionProfile()).providerId; - const metaDataService = azdata.dataprotocol.getProvider( - providerId, - azdata.DataProviderType.MetadataProvider); - const ownerUri = await azdata.connection.getUriForConnection( - stateMachine.sourceConnectionId); const excludeDbs: string[] = [ 'master', 'tempdb', 'msdb', 'model' ]; - const databaseList = (await metaDataService - .getDatabases(ownerUri)) + + const databaseList = (await this.migrationStateModel + .getDatabasesList()) .filter(database => !excludeDbs.includes(database.options.name)) || []; @@ -274,7 +260,6 @@ export class DatabaseSelectorPage extends MigrationWizardPage { databaseName, database.options.state, database.options.sizeInMB, - database.options.lastBackup, ]; }) || []; }