From b2390e23e71046c445e8fc248af88df4326d94b6 Mon Sep 17 00:00:00 2001 From: Balaji Sridharan Date: Mon, 15 Feb 2021 23:49:14 -0800 Subject: [PATCH] Portal changes for DedicatedGateway. CR feedback --- src/SelfServe/SelfServeTypes.ts | 2 +- src/SelfServe/SqlX/SqlX.rp.ts | 34 ++++++++++++++++--------------- src/SelfServe/SqlX/SqlX.tsx | 36 +++++++++++---------------------- 3 files changed, 31 insertions(+), 41 deletions(-) diff --git a/src/SelfServe/SelfServeTypes.ts b/src/SelfServe/SelfServeTypes.ts index d3ca4888f..96fa966e7 100644 --- a/src/SelfServe/SelfServeTypes.ts +++ b/src/SelfServe/SelfServeTypes.ts @@ -126,5 +126,5 @@ export interface SelfServeNotification { export interface RefreshResult { isUpdateInProgress: boolean; - notificationMessage?: string; + notificationMessage: string; } diff --git a/src/SelfServe/SqlX/SqlX.rp.ts b/src/SelfServe/SqlX/SqlX.rp.ts index 8ed57fca7..2b986a56f 100644 --- a/src/SelfServe/SqlX/SqlX.rp.ts +++ b/src/SelfServe/SqlX/SqlX.rp.ts @@ -9,6 +9,13 @@ import { const apiVersion = "2020-06-01-preview"; +export enum ResourceStatus { + Running, + Creating, + Updating, + Deleting +} + export interface DedicatedGatewayResponse { sku: string; instances: number; @@ -16,16 +23,13 @@ export interface DedicatedGatewayResponse { endpoint: string; } -export enum SKU { - CosmosD4s = "Cosmos.D4s", - CosmosD8s = "Cosmos.D8s", - CosmosD16s = "Cosmos.D16s", - CosmosD32s = "Cosmos.D32s" +export const getPath = (subscriptionId: string, resourceGroup: string, name: string): string => { + return `/subscriptions/${subscriptionId}/resourceGroups/${resourceGroup}/providers/Microsoft.DocumentDB/databaseAccounts/${name}/services/sqlx`; } export const updateDedicatedGatewayResource = async (sku: string, instances: number): Promise => { // TODO: write RP call to update dedicated gateway provisioning - const path = `/subscriptions/${userContext.subscriptionId}/resourceGroups/${userContext.resourceGroup}/providers/Microsoft.DocumentDB/databaseAccounts/${userContext.databaseAccount.name}/services/sqlx`; + const path = getPath(userContext.subscriptionId, userContext.resourceGroup, userContext.databaseAccount.name); const body: UpdateDedicatedGatewayRequestParameters = { properties: { instanceSize: sku, @@ -37,12 +41,12 @@ export const updateDedicatedGatewayResource = async (sku: string, instances: num }; export const deleteDedicatedGatewayResource = async (): Promise => { - const path = `/subscriptions/${userContext.subscriptionId}/resourceGroups/${userContext.resourceGroup}/providers/Microsoft.DocumentDB/databaseAccounts/${userContext.databaseAccount.name}/services/sqlx`; + const path = getPath(userContext.subscriptionId, userContext.resourceGroup, userContext.databaseAccount.name); return armRequest({ host: configContext.ARM_ENDPOINT, path, method: "DELETE", apiVersion }); } export const getDedicatedGatewayResource = async() : Promise => { - const path = `/subscriptions/${userContext.subscriptionId}/resourceGroups/${userContext.resourceGroup}/providers/Microsoft.DocumentDB/databaseAccounts/${userContext.databaseAccount.name}/services/sqlx`; + const path = getPath(userContext.subscriptionId, userContext.resourceGroup, userContext.databaseAccount.name); return armRequest({ host: configContext.ARM_ENDPOINT, path, method: "GET", apiVersion }); } @@ -54,7 +58,7 @@ export const getCurrentProvisioningState = async (): Promise, newValue: InputType ): Map => { - console.log("Disable Attributes is " + disableAttributesOnDedicatedGatewayChange); const sku = currentState.get("sku"); const instances = currentState.get("instances"); const hideAttributes = newValue === undefined || !(newValue as boolean); @@ -37,10 +33,10 @@ const onEnableDedicatedGatewayChange = ( }; const skuDropDownItems: ChoiceItem[] = [ - { label: "CosmosD4s", key: SKU.CosmosD4s }, - { label: "CosmosD8s", key: SKU.CosmosD8s }, - { label: "CosmosD16s", key: SKU.CosmosD16s }, - { label: "CosmosD32s", key: SKU.CosmosD32s }, + { label: "CosmosD4s", key: "Cosmos.D4s" }, + { label: "CosmosD8s", key: "Cosmos.D8s" }, + { label: "CosmosD16s", key: "Cosmos.D16s" }, + { label: "CosmosD32s", key: "Cosmos.D32s" }, ]; const getSkus = async (): Promise => { @@ -58,11 +54,6 @@ const getInstancesMax = async (): Promise => { return 5; }; -const validate = (currentValues: Map): void => { - // TODO: add cusom validation logic to be called before Saving the data. - throw new Error(`validate not implemented. No. of properties to validate: ${currentValues.size}`); -}; - @IsDisplayable() export default class SqlX extends SelfServeBaseClass { public onRefresh = async (): Promise => { @@ -73,25 +64,24 @@ export default class SqlX extends SelfServeBaseClass { const response = await getCurrentProvisioningState(); // null implies the resource has not been provisioned. - if (response.status != null && response.status != "Running") + if (response.status !== undefined && response.status !== ResourceStatus.Running.toString()) { switch(response.status) { - case "Creating": + case ResourceStatus.Creating.toString(): return {message: "CreateMessage", type: SelfServeNotificationType.error}; - case "Updating": + case ResourceStatus.Updating.toString(): return {message: "UpdateMessage", type: SelfServeNotificationType.error}; - case "Deleting": + case ResourceStatus.Deleting.toString(): return {message: "DeleteMessage", type: SelfServeNotificationType.error}; default: - console.log("UnexpectedStatus: " + response.status); return {message: "CannotSave", type: SelfServeNotificationType.error} } } const enableDedicatedGateway = currentValues.get("enableDedicatedGateway")?.value as boolean; - if (response.status != null) + if (response.status !== undefined) { if (!enableDedicatedGateway) { @@ -102,7 +92,6 @@ export default class SqlX extends SelfServeBaseClass { } catch(e) { - console.log(e); return { message: "Deleting Dedicated Gateway resource failed. DedicatedGateway will not be deleted.", type: SelfServeNotificationType.error }; } } @@ -123,7 +112,6 @@ export default class SqlX extends SelfServeBaseClass { } catch(e) { - console.log(e); return { message: "Updating Dedicated Gateway resource failed. Dedicated Gateway will not be updated.", type: SelfServeNotificationType.error }; } @@ -138,10 +126,10 @@ export default class SqlX extends SelfServeBaseClass { const defaults = new Map(); const enableDedicatedGateway = false; defaults.set("enableDedicatedGateway", { value: enableDedicatedGateway, hidden: false, disabled: false}); - defaults.set("sku", { value: SKU.CosmosD4s, hidden: !enableDedicatedGateway, disabled: false}); + defaults.set("sku", { value: "Cosmos.D4s", hidden: !enableDedicatedGateway, disabled: false}); defaults.set("instances", { value: await getInstancesMin(), hidden: !enableDedicatedGateway, disabled: false}); const response = await getCurrentProvisioningState() - if (response.status != null) + if (response.status !== undefined) { disableAttributesOnDedicatedGatewayChange = true; defaults.set("enableDedicatedGateway", { value: true, hidden: false, disabled: false});