Migration extensions - UI fixes and vBump (#15199)

* Fixing Migration Cutover Dialog
Adding support for target file share
Fixing request body
Correcting localized strings

* Redesigned IR page
Adding additional details in migration status dialog

* vbump

* Fixed the perpetual loading

* Fixed duration logic

* Adding icon for migration extension

* Adding helper commenst to util function
localizing some strings
logging console errors

* enabling cutover buttons for  ignored files
This commit is contained in:
Aasim Khan
2021-04-22 10:19:36 -07:00
committed by GitHub
parent fcaaf1cb29
commit 37894c9e96
14 changed files with 694 additions and 426 deletions

View File

@@ -350,19 +350,8 @@ export interface StartDatabaseMigrationRequest {
targetLocation: {
storageAccountResourceId: string,
accountKey: string,
}
sourceLocation: {
fileShare?: {
path: string,
username: string,
password: string,
},
azureBlob?: {
storageAccountResourceId: string,
accountKey: string,
blobContainerName: string
}
},
sourceLocation: SourceLocation
},
sourceSqlConnection: {
authentication: string,
@@ -454,8 +443,8 @@ export interface BackupSetInfo {
}
export interface SourceLocation {
fileShare: DatabaseMigrationFileShare;
azureBlob: DatabaseMigrationAzureBlob;
fileShare?: DatabaseMigrationFileShare;
azureBlob?: DatabaseMigrationAzureBlob;
}
export interface TargetLocation {

View File

@@ -3,6 +3,8 @@
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { DAYS, HRS, MINUTE, SEC } from '../constants/strings';
export function deepClone<T>(obj: T): T {
if (!obj || typeof obj !== 'object') {
return obj;
@@ -40,3 +42,27 @@ export function getSqlServerName(majorVersion: number): string | undefined {
return undefined;
}
}
/**
* Generates a wordy time difference between start and end time.
* @returns stringified duration like '10.0 days', '12.0 hrs', '1.0 min'
*/
export function convertTimeDifferenceToDuration(startTime: Date, endTime: Date): string {
const time = endTime.getTime() - startTime.getTime();
let seconds = (time / 1000).toFixed(1);
let minutes = (time / (1000 * 60)).toFixed(1);
let hours = (time / (1000 * 60 * 60)).toFixed(1);
let days = (time / (1000 * 60 * 60 * 24)).toFixed(1);
if (time / 1000 < 60) {
return SEC(parseFloat(seconds));
}
else if (time / (1000 * 60) < 60) {
return MINUTE(parseFloat(minutes));
}
else if (time / (1000 * 60 * 60) < 24) {
return HRS(parseFloat(hours));
}
else {
return DAYS(parseFloat(days));
}
}