From ac9a2dcf6808fd32ce520f691a2e66c7bc52b6b1 Mon Sep 17 00:00:00 2001 From: nasc17 <69922333+nasc17@users.noreply.github.com> Date: Fri, 26 Feb 2021 13:33:40 -0800 Subject: [PATCH] Nasc/per role parameters (#14425) * Creating separate pages for worker and coordinator parameters * Added new gear, hid coordinator server parameters page * Commented out azdataApi * Added white gear, created abstract class for server parameters page * Chaged gear name, condensed base class more, changed file name * Added colored gears for parameter pages * Edited to describe configuring both coordinator and worker --- extensions/arc/images/gear-colored-blue.svg | 17 ++++ extensions/arc/images/gear-colored-gray.svg | 16 ++++ extensions/arc/images/gear-monoline-black.svg | 3 + extensions/arc/images/gear-monoline-blue.svg | 3 + extensions/arc/images/gear-monoline-white.svg | 3 + extensions/arc/images/gear.svg | 10 -- extensions/arc/src/constants.ts | 13 ++- extensions/arc/src/localizedConstants.ts | 4 + extensions/arc/src/models/postgresModel.ts | 10 +- .../postgresCoordinatorNodeParametersPage.ts | 71 ++++++++++++++ .../dashboards/postgres/postgresDashboard.ts | 8 +- ...arametersPage.ts => postgresParameters.ts} | 96 +++++++------------ .../postgresWorkerNodeParametersPage.ts | 72 ++++++++++++++ 13 files changed, 245 insertions(+), 81 deletions(-) create mode 100644 extensions/arc/images/gear-colored-blue.svg create mode 100644 extensions/arc/images/gear-colored-gray.svg create mode 100644 extensions/arc/images/gear-monoline-black.svg create mode 100644 extensions/arc/images/gear-monoline-blue.svg create mode 100644 extensions/arc/images/gear-monoline-white.svg delete mode 100644 extensions/arc/images/gear.svg create mode 100644 extensions/arc/src/ui/dashboards/postgres/postgresCoordinatorNodeParametersPage.ts rename extensions/arc/src/ui/dashboards/postgres/{postgresParametersPage.ts => postgresParameters.ts} (85%) create mode 100644 extensions/arc/src/ui/dashboards/postgres/postgresWorkerNodeParametersPage.ts diff --git a/extensions/arc/images/gear-colored-blue.svg b/extensions/arc/images/gear-colored-blue.svg new file mode 100644 index 0000000000..3c5255d722 --- /dev/null +++ b/extensions/arc/images/gear-colored-blue.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + diff --git a/extensions/arc/images/gear-colored-gray.svg b/extensions/arc/images/gear-colored-gray.svg new file mode 100644 index 0000000000..5b32917121 --- /dev/null +++ b/extensions/arc/images/gear-colored-gray.svg @@ -0,0 +1,16 @@ + + + + + + + + + + diff --git a/extensions/arc/images/gear-monoline-black.svg b/extensions/arc/images/gear-monoline-black.svg new file mode 100644 index 0000000000..84f336b300 --- /dev/null +++ b/extensions/arc/images/gear-monoline-black.svg @@ -0,0 +1,3 @@ + + + diff --git a/extensions/arc/images/gear-monoline-blue.svg b/extensions/arc/images/gear-monoline-blue.svg new file mode 100644 index 0000000000..6aa9b8da8e --- /dev/null +++ b/extensions/arc/images/gear-monoline-blue.svg @@ -0,0 +1,3 @@ + + + diff --git a/extensions/arc/images/gear-monoline-white.svg b/extensions/arc/images/gear-monoline-white.svg new file mode 100644 index 0000000000..df88fb1517 --- /dev/null +++ b/extensions/arc/images/gear-monoline-white.svg @@ -0,0 +1,3 @@ + + + diff --git a/extensions/arc/images/gear.svg b/extensions/arc/images/gear.svg deleted file mode 100644 index 34cae96d48..0000000000 --- a/extensions/arc/images/gear.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/extensions/arc/src/constants.ts b/extensions/arc/src/constants.ts index e03893b249..516ceab943 100644 --- a/extensions/arc/src/constants.ts +++ b/extensions/arc/src/constants.ts @@ -45,7 +45,8 @@ export class IconPathHelper { public static discard: IconPath; public static fail: IconPath; public static information: IconPath; - public static gear: IconPath; + public static gearBlue: IconPath; + public static gearGray: IconPath; public static setExtensionContext(context: vscode.ExtensionContext) { IconPathHelper.context = context; @@ -141,9 +142,13 @@ export class IconPathHelper { light: context.asAbsolutePath('images/information.svg'), dark: context.asAbsolutePath('images/information.svg'), }; - IconPathHelper.gear = { - light: context.asAbsolutePath('images/gear.svg'), - dark: context.asAbsolutePath('images/gear.svg'), + IconPathHelper.gearBlue = { + light: context.asAbsolutePath('images/gear-colored-blue.svg'), + dark: context.asAbsolutePath('images/gear-colored-blue.svg'), + }; + IconPathHelper.gearGray = { + light: context.asAbsolutePath('images/gear-colored-gray.svg'), + dark: context.asAbsolutePath('images/gear-colored-gray.svg'), }; } } diff --git a/extensions/arc/src/localizedConstants.ts b/extensions/arc/src/localizedConstants.ts index c19c283963..d856b9d10e 100644 --- a/extensions/arc/src/localizedConstants.ts +++ b/extensions/arc/src/localizedConstants.ts @@ -24,6 +24,8 @@ export const settings = localize('arc.settings', "Settings"); export const security = localize('arc.security', "Security"); export const computeAndStorage = localize('arc.computeAndStorage', "Compute + Storage"); export const nodeParameters = localize('arc.nodeParameters', "Node Parameters"); +export const coordinatorNodeParameters = localize('arc.coordinatorNodeParameters', "Coordinator Node Parameters"); +export const workerNodeParameters = localize('arc.workerNodeParameters', "Worker Node Parameters"); export const compute = localize('arc.compute', "Compute"); export const backup = localize('arc.backup', "Backup"); export const newSupportRequest = localize('arc.newSupportRequest', "New support request"); @@ -138,6 +140,8 @@ export const enterNewPassword = localize('arc.enterNewPassword', "Enter a new pa export const confirmNewPassword = localize('arc.confirmNewPassword', "Confirm the new password"); export const learnAboutPostgresClients = localize('arc.learnAboutPostgresClients', "Learn more about Azure PostgreSQL Hyperscale client interfaces"); export const nodeParametersDescription = localize('arc.nodeParametersDescription', " These server parameters of the Coordinator node and the Worker nodes can be set to custom (non-default) values. Search to find parameters."); +export const coordinatorNodeParametersDescription = localize('arc.coordinatorNodeParametersDescription', " These server parameters of the Coordinator node can be set to custom (non-default) values. Search to find parameters."); +export const workerNodesParametersDescription = localize('arc.workerNodesParametersDescription', " These server parameters of the Worker nodes can be set to custom (non-default) values. Search to find parameters."); export const learnAboutNodeParameters = localize('arc.learnAboutNodeParameters', "Learn more about database engine settings for Azure Arc enabled PostgreSQL Hyperscale"); export const noNodeParametersFound = localize('arc.noNodeParametersFound', "No worker server parameters found..."); export const searchToFilter = localize('arc.searchToFilter', "Search to filter items..."); diff --git a/extensions/arc/src/models/postgresModel.ts b/extensions/arc/src/models/postgresModel.ts index cb8d61906d..e79e4a9ea7 100644 --- a/extensions/arc/src/models/postgresModel.ts +++ b/extensions/arc/src/models/postgresModel.ts @@ -28,7 +28,8 @@ export type EngineSettingsModel = { export class PostgresModel extends ResourceModel { private _config?: azdataExt.PostgresServerShowResult; - public _engineSettings: EngineSettingsModel[] = []; + public workerNodesEngineSettings: EngineSettingsModel[] = []; + public coordinatorNodeEngineSettings: EngineSettingsModel[] = []; private readonly _azdataApi: azdataExt.IExtension; private readonly _onConfigUpdated = new vscode.EventEmitter(); @@ -137,6 +138,7 @@ export class PostgresModel extends ResourceModel { this._activeConnectionId = result.connectionId; } + // TODO Need to make separate calls for worker nodes and coordinator node const provider = azdata.dataprotocol.getProvider(this._connectionProfile!.providerName, azdata.DataProviderType.QueryProvider); const ownerUri = await azdata.connection.getUriForConnection(this._activeConnectionId); @@ -150,7 +152,7 @@ export class PostgresModel extends ResourceModel { 'shared_preload_libraries', 'synchronous_commit', 'ssl', 'unix_socket_permissions', 'wal_level' ]; - this._engineSettings = []; + this.workerNodesEngineSettings = []; engineSettings.rows.forEach(row => { let rowValues = row.map(c => c.displayValue); @@ -166,12 +168,12 @@ export class PostgresModel extends ResourceModel { type: rowValues.shift() }; - this._engineSettings.push(result); + this.workerNodesEngineSettings.push(result); } }); this.engineSettingsLastUpdated = new Date(); - this._onEngineSettingsUpdated.fire(this._engineSettings); + this._onEngineSettingsUpdated.fire(this.workerNodesEngineSettings); } protected createConnectionProfile(): azdata.IConnectionProfile { diff --git a/extensions/arc/src/ui/dashboards/postgres/postgresCoordinatorNodeParametersPage.ts b/extensions/arc/src/ui/dashboards/postgres/postgresCoordinatorNodeParametersPage.ts new file mode 100644 index 0000000000..5332f2cba6 --- /dev/null +++ b/extensions/arc/src/ui/dashboards/postgres/postgresCoordinatorNodeParametersPage.ts @@ -0,0 +1,71 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the Source EULA. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as azdata from 'azdata'; +import * as loc from '../../../localizedConstants'; +import { IconPathHelper } from '../../../constants'; +import { PostgresParametersPage } from './postgresParameters'; +import { PostgresModel } from '../../../models/postgresModel'; + +export class PostgresCoordinatorNodeParametersPage extends PostgresParametersPage { + + constructor(protected modelView: azdata.ModelView, _postgresModel: PostgresModel) { + super(modelView, _postgresModel); + } + + protected get title(): string { + return loc.coordinatorNodeParameters; + } + + protected get id(): string { + return 'postgres-coordinator-node-parameters'; + } + + protected get icon(): { dark: string; light: string; } { + return IconPathHelper.gearGray; + } + + protected get description(): string { + return loc.coordinatorNodeParametersDescription; + } + + protected async saveParameterEdits(): Promise { + /* TODO add correct azdata call for editing coordinator parameters + await this._azdataApi.azdata.arc.postgres.server.edit( + this._postgresModel.info.name, + { engineSettings: engineSettings.toString() }, + this._postgresModel.engineVersion, + this._postgresModel.controllerModel.azdataAdditionalEnvVars, + session); + */ + } + + protected async resetAllParameters(): Promise { + /* TODO add correct azdata call for editing coordinator parameters + await this._azdataApi.azdata.arc.postgres.server.edit( + this._postgresModel.info.name, + { engineSettings: `''`, replaceEngineSettings: true }, + this._postgresModel.engineVersion, + this._postgresModel.controllerModel.azdataAdditionalEnvVars, + session); + */ + } + + protected async resetParameter(): Promise { + /* TODO add correct azdata call for editing coordinator parameters + await this._azdataApi.azdata.arc.postgres.server.edit( + this._postgresModel.info.name, + { engineSettings: parameterName + '=' }, + this._postgresModel.engineVersion, + this._postgresModel.controllerModel.azdataAdditionalEnvVars, + session); + */ + } + + protected refreshParametersTable(): void { + this._parameters = this._postgresModel.coordinatorNodeEngineSettings.map(engineSetting => this.createParameterComponents(engineSetting)); + this._parametersTable.data = this._parameters.map(p => [p.parameterName, p.valueContainer, p.description, p.resetButton]); + } +} diff --git a/extensions/arc/src/ui/dashboards/postgres/postgresDashboard.ts b/extensions/arc/src/ui/dashboards/postgres/postgresDashboard.ts index 16be7f8d23..ab3ebe9d9c 100644 --- a/extensions/arc/src/ui/dashboards/postgres/postgresDashboard.ts +++ b/extensions/arc/src/ui/dashboards/postgres/postgresDashboard.ts @@ -14,7 +14,7 @@ import { Dashboard } from '../../components/dashboard'; import { PostgresDiagnoseAndSolveProblemsPage } from './postgresDiagnoseAndSolveProblemsPage'; import { PostgresSupportRequestPage } from './postgresSupportRequestPage'; import { PostgresComputeAndStoragePage } from './postgresComputeAndStoragePage'; -import { PostgresParametersPage } from './postgresParametersPage'; +import { PostgresWorkerNodeParametersPage } from './postgresWorkerNodeParametersPage'; import { PostgresPropertiesPage } from './postgresPropertiesPage'; export class PostgresDashboard extends Dashboard { @@ -35,7 +35,9 @@ export class PostgresDashboard extends Dashboard { const connectionStringsPage = new PostgresConnectionStringsPage(modelView, this._postgresModel); const computeAndStoragePage = new PostgresComputeAndStoragePage(modelView, this._postgresModel); const propertiesPage = new PostgresPropertiesPage(modelView, this._controllerModel, this._postgresModel); - const parametersPage = new PostgresParametersPage(modelView, this._postgresModel); + // TODO Add dashboard once backend is able to be connected for per role server parameter edits. + // const coordinatorNodeParametersPage = new PostgresCoordinatorNodeParametersPage(modelView, this._postgresModel); + const workerNodeParametersPage = new PostgresWorkerNodeParametersPage(modelView, this._postgresModel); const diagnoseAndSolveProblemsPage = new PostgresDiagnoseAndSolveProblemsPage(modelView, this._context, this._postgresModel); const supportRequestPage = new PostgresSupportRequestPage(modelView, this._controllerModel, this._postgresModel); @@ -47,7 +49,7 @@ export class PostgresDashboard extends Dashboard { propertiesPage.tab, connectionStringsPage.tab, computeAndStoragePage.tab, - parametersPage.tab + workerNodeParametersPage.tab ] }, { diff --git a/extensions/arc/src/ui/dashboards/postgres/postgresParametersPage.ts b/extensions/arc/src/ui/dashboards/postgres/postgresParameters.ts similarity index 85% rename from extensions/arc/src/ui/dashboards/postgres/postgresParametersPage.ts rename to extensions/arc/src/ui/dashboards/postgres/postgresParameters.ts index 038e1ad4dc..765ae4a5fa 100644 --- a/extensions/arc/src/ui/dashboards/postgres/postgresParametersPage.ts +++ b/extensions/arc/src/ui/dashboards/postgres/postgresParameters.ts @@ -20,24 +20,25 @@ export type ParametersModel = { resetButton: azdata.ButtonComponent }; -export class PostgresParametersPage extends DashboardPage { +export abstract class PostgresParametersPage extends DashboardPage { private searchBox!: azdata.InputBoxComponent; - private parametersTable!: azdata.DeclarativeTableComponent; + protected _parametersTable!: azdata.DeclarativeTableComponent; private parameterContainer?: azdata.DivContainer; - private _parametersTableLoading!: azdata.LoadingComponent; + private parametersTableLoading!: azdata.LoadingComponent; private discardButton!: azdata.ButtonComponent; private saveButton!: azdata.ButtonComponent; private resetAllButton!: azdata.ButtonComponent; private connectToServerButton?: azdata.ButtonComponent; - private _parameters: ParametersModel[] = []; + protected _parameters: ParametersModel[] = []; private parameterUpdates: Map = new Map(); - private readonly _azdataApi: azdataExt.IExtension; + protected readonly _azdataApi: azdataExt.IExtension; - constructor(protected modelView: azdata.ModelView, private _postgresModel: PostgresModel) { + constructor(protected modelView: azdata.ModelView, protected _postgresModel: PostgresModel) { super(modelView); + this._azdataApi = vscode.extensions.getExtension(azdataExt.extension.name)?.exports; this.initializeConnectButton(); @@ -49,17 +50,7 @@ export class PostgresParametersPage extends DashboardPage { ); } - protected get title(): string { - return loc.nodeParameters; - } - - protected get id(): string { - return 'postgres-node-parameters'; - } - - protected get icon(): { dark: string; light: string; } { - return IconPathHelper.gear; - } + protected abstract get description(): string; protected get container(): azdata.Component { const root = this.modelView.modelBuilder.divContainer().component(); @@ -67,12 +58,12 @@ export class PostgresParametersPage extends DashboardPage { root.addItem(content, { CSSStyles: { 'margin': '20px' } }); content.addItem(this.modelView.modelBuilder.text().withProps({ - value: loc.nodeParameters, + value: this.title, CSSStyles: { ...cssStyles.title } }).component()); content.addItem(this.modelView.modelBuilder.text().withProps({ - value: loc.nodeParametersDescription, + value: this.description, CSSStyles: { ...cssStyles.text, 'margin-block-start': '0px', 'margin-block-end': '0px' } }).component()); @@ -83,7 +74,7 @@ export class PostgresParametersPage extends DashboardPage { content.addItem(this.searchBox!, { CSSStyles: { ...cssStyles.text, 'margin-block-start': '0px', 'margin-block-end': '0px', 'margin-bottom': '20px' } }); - this.parametersTable = this.modelView.modelBuilder.declarativeTable().withProps({ + this._parametersTable = this.modelView.modelBuilder.declarativeTable().withProps({ width: '100%', columns: [ { @@ -124,7 +115,7 @@ export class PostgresParametersPage extends DashboardPage { data: [] }).component(); - this._parametersTableLoading = this.modelView.modelBuilder.loadingComponent().component(); + this.parametersTableLoading = this.modelView.modelBuilder.loadingComponent().component(); this.parameterContainer = this.modelView.modelBuilder.divContainer().component(); this.selectComponent(); @@ -162,12 +153,7 @@ export class PostgresParametersPage extends DashboardPage { }); const session = await this._postgresModel.controllerModel.acquireAzdataSession(); try { - await this._azdataApi.azdata.arc.postgres.server.edit( - this._postgresModel.info.name, - { engineSettings: engineSettings.toString() }, - this._postgresModel.engineVersion, - this._postgresModel.controllerModel.azdataAdditionalEnvVars, - session); + this.saveParameterEdits(engineSettings.toString(), session); } finally { session.dispose(); } @@ -234,17 +220,9 @@ export class PostgresParametersPage extends DashboardPage { cancellable: false }, async (_progress, _token): Promise => { - //all - // azdata arc postgres server edit -n -e '' -re - let session: azdataExt.AzdataSession | undefined = undefined; + const session = await this._postgresModel.controllerModel.acquireAzdataSession(); try { - session = await this._postgresModel.controllerModel.acquireAzdataSession(); - await this._azdataApi.azdata.arc.postgres.server.edit( - this._postgresModel.info.name, - { engineSettings: `''`, replaceEngineSettings: true }, - this._postgresModel.engineVersion, - this._postgresModel.controllerModel.azdataAdditionalEnvVars, - session); + this.resetAllParameters(session); } catch (err) { // If an error occurs while resetting the instance then re-enable the reset button since // the edit wasn't successfully applied @@ -278,7 +256,7 @@ export class PostgresParametersPage extends DashboardPage { ]).component(); } - private initializeConnectButton(): void { + protected initializeConnectButton(): void { this.connectToServerButton = this.modelView.modelBuilder.button().withProps({ label: loc.connectToServer, enabled: false, @@ -314,12 +292,12 @@ export class PostgresParametersPage extends DashboardPage { vscode.window.showInformationMessage(loc.extensionInstalled(loc.postgresExtension)); } - this._parametersTableLoading!.loading = true; - await this.callGetEngineSettings().finally(() => this._parametersTableLoading!.loading = false); + this.parametersTableLoading!.loading = true; + await this.callGetEngineSettings().finally(() => this.parametersTableLoading!.loading = false); this.searchBox!.enabled = true; this.resetAllButton!.enabled = true; this.parameterContainer!.clearItems(); - this.parameterContainer!.addItem(this.parametersTable); + this.parameterContainer!.addItem(this._parametersTable); }) ); } @@ -331,11 +309,11 @@ export class PostgresParametersPage extends DashboardPage { CSSStyles: { ...cssStyles.text, 'margin-block-start': '0px', 'margin-block-end': '0px' } }).component()); this.parameterContainer!.addItem(this.connectToServerButton!, { CSSStyles: { 'max-width': '125px' } }); - this.parameterContainer!.addItem(this._parametersTableLoading!); + this.parameterContainer!.addItem(this.parametersTableLoading!); } else { this.searchBox!.enabled = true; this.resetAllButton!.enabled = true; - this.parameterContainer!.addItem(this.parametersTable!); + this.parameterContainer!.addItem(this._parametersTable!); this.refreshParametersTable(); } } @@ -354,7 +332,7 @@ export class PostgresParametersPage extends DashboardPage { } } - private initializeSearchBox(): void { + protected initializeSearchBox(): void { this.searchBox = this.modelView.modelBuilder.inputBox().withProps({ readOnly: false, enabled: false, @@ -371,7 +349,7 @@ export class PostgresParametersPage extends DashboardPage { @debounce(500) private onSearchFilter(): void { if (!this.searchBox!.value) { - this.parametersTable.setFilter(undefined); + this._parametersTable.setFilter(undefined); } else { this.filterParameters(this.searchBox!.value); } @@ -379,12 +357,12 @@ export class PostgresParametersPage extends DashboardPage { private filterParameters(search: string): void { const filteredRowIndexes: number[] = []; - this.parametersTable.data?.forEach((row, index) => { + this._parametersTable.data?.forEach((row, index) => { if (row[0].toUpperCase()?.search(search.toUpperCase()) !== -1 || row[2].toUpperCase()?.search(search.toUpperCase()) !== -1) { filteredRowIndexes.push(index); } }); - this.parametersTable.setFilter(filteredRowIndexes); + this._parametersTable.setFilter(filteredRowIndexes); } private handleOnTextChanged(component: azdata.InputBoxComponent, currentValue: string | undefined): boolean { @@ -404,7 +382,7 @@ export class PostgresParametersPage extends DashboardPage { } } - private createParameterComponents(engineSetting: EngineSettingsModel): ParametersModel { + protected createParameterComponents(engineSetting: EngineSettingsModel): ParametersModel { // Container to hold input component and information bubble const valueContainer = this.modelView.modelBuilder.flexContainer().withLayout({ alignItems: 'center' }).component(); @@ -540,12 +518,7 @@ export class PostgresParametersPage extends DashboardPage { async (_progress, _token): Promise => { const session = await this._postgresModel.controllerModel.acquireAzdataSession(); try { - await this._azdataApi.azdata.arc.postgres.server.edit( - this._postgresModel.info.name, - { engineSettings: engineSetting.parameterName + '=' }, - this._postgresModel.engineVersion, - this._postgresModel.controllerModel.azdataAdditionalEnvVars, - session); + this.resetParameter(engineSetting.parameterName!, session); } finally { session.dispose(); } @@ -570,15 +543,18 @@ export class PostgresParametersPage extends DashboardPage { return parameter; } - private refreshParametersTable(): void { - this._parameters = this._postgresModel._engineSettings.map(engineSetting => this.createParameterComponents(engineSetting)); - this.parametersTable.data = this._parameters.map(p => [p.parameterName, p.valueContainer, p.description, p.resetButton]); - } + protected abstract saveParameterEdits(engineSettings: string, session: azdataExt.AzdataSession): void; - private async handleServiceUpdated(): Promise { + protected abstract resetAllParameters(session: azdataExt.AzdataSession): void; + + protected abstract resetParameter(parameterName: string, session: azdataExt.AzdataSession): void; + + protected abstract refreshParametersTable(): void; + + protected async handleServiceUpdated(): Promise { if (this._postgresModel.configLastUpdated && !this._postgresModel.engineSettingsLastUpdated) { this.connectToServerButton!.enabled = true; - this._parametersTableLoading!.loading = false; + this.parametersTableLoading!.loading = false; } else if (this._postgresModel.engineSettingsLastUpdated) { await this.callGetEngineSettings(); this.discardButton!.enabled = false; diff --git a/extensions/arc/src/ui/dashboards/postgres/postgresWorkerNodeParametersPage.ts b/extensions/arc/src/ui/dashboards/postgres/postgresWorkerNodeParametersPage.ts new file mode 100644 index 0000000000..47d333cb5c --- /dev/null +++ b/extensions/arc/src/ui/dashboards/postgres/postgresWorkerNodeParametersPage.ts @@ -0,0 +1,72 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the Source EULA. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as azdata from 'azdata'; +import * as azdataExt from 'azdata-ext'; +import * as loc from '../../../localizedConstants'; +import { IconPathHelper } from '../../../constants'; +import { PostgresParametersPage } from './postgresParameters'; +import { PostgresModel } from '../../../models/postgresModel'; + +export class PostgresWorkerNodeParametersPage extends PostgresParametersPage { + + constructor(protected modelView: azdata.ModelView, _postgresModel: PostgresModel) { + super(modelView, _postgresModel); + } + + protected get title(): string { + // TODO update to loc.workerNodeParameters + return loc.nodeParameters; + } + + protected get id(): string { + // TODO update to 'postgres-worker-node-parameters' + return 'postgres-nodes-parameters'; + } + + protected get icon(): { dark: string; light: string; } { + return IconPathHelper.gearBlue; + } + + protected get description(): string { + // TODO update to loc.workerNodesParametersDescription + return loc.nodeParametersDescription; + } + + protected async saveParameterEdits(engineSettings: string, session: azdataExt.AzdataSession): Promise { + await this._azdataApi.azdata.arc.postgres.server.edit( + this._postgresModel.info.name, + { engineSettings: engineSettings }, + this._postgresModel.engineVersion, + this._postgresModel.controllerModel.azdataAdditionalEnvVars, + session); + + } + + protected async resetAllParameters(session: azdataExt.AzdataSession): Promise { + await this._azdataApi.azdata.arc.postgres.server.edit( + this._postgresModel.info.name, + { engineSettings: `''`, replaceEngineSettings: true }, + this._postgresModel.engineVersion, + this._postgresModel.controllerModel.azdataAdditionalEnvVars, + session); + + } + + protected async resetParameter(parameterName: string, session: azdataExt.AzdataSession): Promise { + await this._azdataApi.azdata.arc.postgres.server.edit( + this._postgresModel.info.name, + { engineSettings: parameterName + '=' }, + this._postgresModel.engineVersion, + this._postgresModel.controllerModel.azdataAdditionalEnvVars, + session); + + } + + protected refreshParametersTable(): void { + this._parameters = this._postgresModel.workerNodesEngineSettings.map(engineSetting => this.createParameterComponents(engineSetting)); + this._parametersTable.data = this._parameters.map(p => [p.parameterName, p.valueContainer, p.description, p.resetButton]); + } +}