mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-16 10:58:30 -05:00
Added error handling service for providers (#21627)
* added prototype errorHandlerService * added initial contracts * Added WIP client sent request function * added WIP signature for handleOtherError to resourceProviderService * made some small fixes * removed unnecessary resourceProviderId * added updates to contracts and resourceProvider * moved error codes to azdata proposed * added connection type instead of profile * added WIP handleOtherError code * added fix for send * added WIP change password function in resource provider * added work in progress error handling thread * added errorHandler interface * added result error check * renamed errorHandling namespace to diagnostics * WIP rename of errorhandler * light cleanup * Bump json5 from 2.1.3 to 2.2.3 in /extensions/machine-learning (#21514) Bumps [json5](https://github.com/json5/json5) from 2.1.3 to 2.2.3. - [Release notes](https://github.com/json5/json5/releases) - [Changelog](https://github.com/json5/json5/blob/main/CHANGELOG.md) - [Commits](https://github.com/json5/json5/compare/v2.1.3...v2.2.3) --- updated-dependencies: - dependency-name: json5 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Stops second invocation of createNewSession while expanding OE tree items on disconnected servers (#21437) * Debounces second invocation while expanding OE tree items * Minor clean up * Adjusts debounce time * Adding temp trace comments * Adds missing semicolon * Removes debouncer to stop 2nd newSession calls * Removes temp trace comments * Updates comment Co-authored-by: Alan Ren <alanren@microsoft.com> * Bump json5 from 2.1.3 to 2.2.3 in /extensions/admin-tool-ext-win (#21546) Bumps [json5](https://github.com/json5/json5) from 2.1.3 to 2.2.3. - [Release notes](https://github.com/json5/json5/releases) - [Changelog](https://github.com/json5/json5/blob/main/CHANGELOG.md) - [Commits](https://github.com/json5/json5/compare/v2.1.3...v2.2.3) --- updated-dependencies: - dependency-name: json5 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Fix resource endpoints to end with slash (#21540) * Bump json5 from 2.1.3 to 2.2.3 in /extensions/azcli (#21543) Bumps [json5](https://github.com/json5/json5) from 2.1.3 to 2.2.3. - [Release notes](https://github.com/json5/json5/releases) - [Changelog](https://github.com/json5/json5/blob/main/CHANGELOG.md) - [Commits](https://github.com/json5/json5/compare/v2.1.3...v2.2.3) --- updated-dependencies: - dependency-name: json5 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump json5 from 2.1.3 to 2.2.3 in /extensions/arc (#21544) Bumps [json5](https://github.com/json5/json5) from 2.1.3 to 2.2.3. - [Release notes](https://github.com/json5/json5/releases) - [Changelog](https://github.com/json5/json5/blob/main/CHANGELOG.md) - [Commits](https://github.com/json5/json5/compare/v2.1.3...v2.2.3) --- updated-dependencies: - dependency-name: json5 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * renamed diagnostics service slightly * registered service * added work in progress diagnostics implementation * small changes * added new diagnostics exe * Changes for Diagnostics Service (#21583) Co-authored-by: Cheena Malhotra <cmalhotra@microsoft.com> * WIP provider changes * added changes for errorDiagnosticsService * removed stuff from mssql. * made fix to connectionManagementService * added error catch * added small changes * more small changes made * added small changes to handleOtherError * moved changePassword to CMS * added testErrorDiagnosticsService * Added provider-based handling for change password/generic error handling. (#21662) * WIP rework for error connection change * added connectionProfileDuringError * added working password reset * added comments * consolidated connection profile conversion * added additionalObjects parameter. * removed unnecessary error profile grab * added comments * added changes to parameters and comments * added changes and params * added handleConnectionErrorParam * added more changes * added async * added params and more * added many fixes * added updated documentation * added WIP password change dialog with await * added error handling * added comment * added options as parameters * cleaned up parameters * added async * added check fixes * Added username to title * added server name to dialog * Added dialog changes * Revert "Added dialog changes" This reverts commit c2bdcd16f4a0dffdc643ef9cae1c1a20642ac512. * Revert "added server name to dialog" This reverts commit dbd22e80461b5a068643f0c2d6728adce4010978. * Revert "Added username to title" This reverts commit 6d936b4d5f97f9345f8ec2fdbbcf6b52df18820a. * Revert "added check fixes" This reverts commit f58081a5af3276766e2042b4d671455b18add9a7. * Revert "added async" This reverts commit dd1198e26ec7542ec51add0628f588361d674299. * Revert "cleaned up parameters" This reverts commit 51135c9f9db452104697483779d8df15b6430717. * Revert "added options as parameters" This reverts commit b167804a2410558bbe60042e017ae2c77af7697f. * Revert "added comment" This reverts commit 0ad37326a3e025e88f715e3f2547be6825597a8d. * Revert "added error handling" This reverts commit 69340980d2c84056a2bcf126ea77f4b5ed4cddf3. * Revert "added WIP password change dialog with await" This reverts commit 9e43113e07b10421b39575f6c7dd14287662b90d. * added a fix to check * added fixes * added back in change password changes * added in comment * added suggested changes * removed param colons * Update extensions/mssql/src/errorDiagnostics/errorDiagnosticsProvider.ts Co-authored-by: Charles Gagnon <chgagnon@microsoft.com> * Update src/sql/azdata.proposed.d.ts Co-authored-by: Charles Gagnon <chgagnon@microsoft.com> * fixed conversion and provider dialog * altered comments * Update src/sql/platform/connection/common/utils.ts Co-authored-by: Charles Gagnon <chgagnon@microsoft.com> * renamed Id * Update src/sql/platform/connection/common/utils.ts Co-authored-by: Charles Gagnon <chgagnon@microsoft.com> * Improvements for Change password dialog + logs added (#21794) * Improvements for Change password dialog + logs added * Include server * fixed tab space * added comment --------- Co-authored-by: Alex Ma <alma1@microsoft.com> * Update src/sql/azdata.proposed.d.ts Co-authored-by: Charles Gagnon <chgagnon@microsoft.com> * added fix to id to extHostErrorDiagnostics --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Lewis Sanchez <87730006+lewis-sanchez@users.noreply.github.com> Co-authored-by: Alan Ren <alanren@microsoft.com> Co-authored-by: Cheena Malhotra <13396919+cheenamalhotra@users.noreply.github.com> Co-authored-by: Cheena Malhotra <cmalhotra@microsoft.com> Co-authored-by: Charles Gagnon <chgagnon@microsoft.com>
This commit is contained in:
@@ -0,0 +1,7 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
// Error code reference comes from here: https://learn.microsoft.com/en-us/sql/relational-databases/errors-events/database-engine-events-and-errors?view=sql-server-ver16
|
||||
export const MssqlPasswordResetErrorCode: number = 18488;
|
||||
@@ -0,0 +1,98 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* 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 { ISqlOpsFeature, SqlOpsDataClient, SqlOpsFeature } from 'dataprotocol-client';
|
||||
import * as UUID from 'vscode-languageclient/lib/utils/uuid';
|
||||
import { AppContext } from '../appContext';
|
||||
import { ServerCapabilities, ClientCapabilities, RPCMessageType } from 'vscode-languageclient';
|
||||
import { Disposable } from 'vscode';
|
||||
import * as CoreConstants from '../constants';
|
||||
import * as ErrorDiagnosticsConstants from './errorDiagnosticsConstants';
|
||||
import { logDebug } from '../utils';
|
||||
|
||||
export class ErrorDiagnosticsProvider extends SqlOpsFeature<any> {
|
||||
private static readonly messagesTypes: RPCMessageType[] = [];
|
||||
|
||||
public static asFeature(context: AppContext): ISqlOpsFeature {
|
||||
return class extends ErrorDiagnosticsProvider {
|
||||
constructor(client: SqlOpsDataClient) {
|
||||
super(context, client);
|
||||
}
|
||||
|
||||
override fillClientCapabilities(capabilities: ClientCapabilities): void { }
|
||||
|
||||
override initialize(): void {
|
||||
this.register(this.messages, {
|
||||
id: UUID.generateUuid(),
|
||||
registerOptions: undefined
|
||||
});
|
||||
}
|
||||
|
||||
private convertToIConnectionProfile(profile: azdata.connection.ConnectionProfile): azdata.IConnectionProfile {
|
||||
return {
|
||||
providerName: profile.providerId,
|
||||
id: profile.connectionId,
|
||||
connectionName: profile.connectionName,
|
||||
serverName: profile.serverName,
|
||||
databaseName: profile.databaseName,
|
||||
userName: profile.userName,
|
||||
password: profile.password,
|
||||
authenticationType: profile.authenticationType,
|
||||
savePassword: profile.savePassword,
|
||||
groupFullName: profile.groupFullName,
|
||||
groupId: profile.groupId,
|
||||
saveProfile: profile.savePassword,
|
||||
azureTenantId: profile.azureTenantId,
|
||||
options: profile.options
|
||||
};
|
||||
}
|
||||
|
||||
protected override registerProvider(options: any): Disposable {
|
||||
let handleConnectionError = async (errorCode: number, errorMessage: string, connection: azdata.connection.ConnectionProfile): Promise<azdata.diagnostics.ConnectionDiagnosticsResult> => {
|
||||
let restoredProfile = this.convertToIConnectionProfile(connection);
|
||||
if (errorCode === ErrorDiagnosticsConstants.MssqlPasswordResetErrorCode) {
|
||||
logDebug(`Error Code ${errorCode} requires user to change their password, launching change password dialog.`)
|
||||
return await this.handleChangePassword(restoredProfile);
|
||||
}
|
||||
logDebug(`No error handler found for errorCode ${errorCode}.`);
|
||||
return { handled: false };
|
||||
}
|
||||
|
||||
return azdata.diagnostics.registerDiagnosticsProvider({
|
||||
targetProviderId: CoreConstants.providerId,
|
||||
}, {
|
||||
handleConnectionError
|
||||
});
|
||||
}
|
||||
|
||||
private async handleChangePassword(connection: azdata.IConnectionProfile): Promise<azdata.diagnostics.ConnectionDiagnosticsResult> {
|
||||
try {
|
||||
const result = await azdata.connection.openChangePasswordDialog(connection);
|
||||
// result will be undefined if password change was closed or cancelled.
|
||||
if (result) {
|
||||
// MSSQL uses 'password' as the option key for connection profile.
|
||||
connection.options['password'] = result;
|
||||
return { handled: true, options: connection.options };
|
||||
}
|
||||
}
|
||||
catch (e) {
|
||||
console.error(`Change password failed unexpectedly with error: ${e}`);
|
||||
}
|
||||
return { handled: false };
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fillClientCapabilities(capabilities: ClientCapabilities): void { }
|
||||
|
||||
initialize(capabilities: ServerCapabilities): void { }
|
||||
|
||||
private constructor(context: AppContext, protected readonly client: SqlOpsDataClient) {
|
||||
super(client, ErrorDiagnosticsProvider.messagesTypes);
|
||||
}
|
||||
|
||||
protected registerProvider(options: any): Disposable { return undefined; }
|
||||
}
|
||||
Reference in New Issue
Block a user