mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-16 10:58:30 -05:00
Assessment core extension (#10154)
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { localize } from 'vs/nls';
|
||||
import * as azdata from 'azdata';
|
||||
import { IAssessmentService } from 'sql/workbench/services/assessment/common/interfaces';
|
||||
import { Event, Emitter } from 'vs/base/common/event';
|
||||
import { IConnectionManagementService } from 'sql/platform/connection/common/connectionManagement';
|
||||
|
||||
export class AssessmentService implements IAssessmentService {
|
||||
_serviceBrand: undefined;
|
||||
|
||||
private _onDidChange = new Emitter<void>();
|
||||
public readonly onDidChange: Event<void> = this._onDidChange.event;
|
||||
|
||||
private _providers: { [handle: string]: azdata.SqlAssessmentServicesProvider; } = Object.create(null);
|
||||
constructor(
|
||||
@IConnectionManagementService private _connectionService: IConnectionManagementService
|
||||
) {
|
||||
|
||||
}
|
||||
|
||||
public getAssessmentItems(connectionUri: string, targetType: number): Thenable<azdata.SqlAssessmentResult> {
|
||||
return this._runAction(connectionUri, (runner) => {
|
||||
return runner.getAssessmentItems(connectionUri, targetType);
|
||||
});
|
||||
}
|
||||
|
||||
public assessmentInvoke(connectionUri: string, targetType: number): Thenable<azdata.SqlAssessmentResult> {
|
||||
return this._runAction(connectionUri, (runner) => {
|
||||
return runner.assessmentInvoke(connectionUri, targetType);
|
||||
});
|
||||
}
|
||||
|
||||
public generateAssessmentScript(connectionUri: string, items: azdata.SqlAssessmentResultItem[]): Thenable<azdata.ResultStatus> {
|
||||
return this._runAction(connectionUri, (runner) => {
|
||||
return runner.generateAssessmentScript(items);
|
||||
});
|
||||
}
|
||||
|
||||
public registerProvider(providerId: string, provider: azdata.SqlAssessmentServicesProvider): void {
|
||||
this._providers[providerId] = provider;
|
||||
}
|
||||
|
||||
private _runAction<T>(uri: string, action: (handler: azdata.SqlAssessmentServicesProvider) => Thenable<T>): Thenable<T> {
|
||||
let providerId: string = this._connectionService.getProviderIdFromUri(uri);
|
||||
|
||||
if (!providerId) {
|
||||
return Promise.reject(new Error(localize('asmt.providerIdNotValidError', "Connection is required in order to interact with Assessment Service")));
|
||||
}
|
||||
let handler = this._providers[providerId];
|
||||
if (handler) {
|
||||
return action(handler);
|
||||
} else {
|
||||
return Promise.reject(new Error(localize('asmt.noHandlerRegistered', "No Handler Registered")));
|
||||
}
|
||||
}
|
||||
}
|
||||
19
src/sql/workbench/services/assessment/common/interfaces.ts
Normal file
19
src/sql/workbench/services/assessment/common/interfaces.ts
Normal file
@@ -0,0 +1,19 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* 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 { createDecorator } from 'vs/platform/instantiation/common/instantiation';
|
||||
|
||||
export const SERVICE_ID = 'assessmentService';
|
||||
|
||||
export const IAssessmentService = createDecorator<IAssessmentService>(SERVICE_ID);
|
||||
|
||||
export interface IAssessmentService {
|
||||
_serviceBrand: undefined;
|
||||
registerProvider(providerId: string, provider: azdata.SqlAssessmentServicesProvider): void;
|
||||
getAssessmentItems(connectionUri: string, targetType: number): Thenable<azdata.SqlAssessmentResult>;
|
||||
assessmentInvoke(connectionUri: string, targetType: number): Thenable<azdata.SqlAssessmentResult>;
|
||||
generateAssessmentScript(connectionUri: string, items: azdata.SqlAssessmentResultItem[]): Thenable<azdata.ResultStatus>;
|
||||
}
|
||||
Reference in New Issue
Block a user