Assessment core extension (#10154)

This commit is contained in:
Vladimir Chernov
2020-05-29 01:17:41 +03:00
committed by GitHub
parent 0d544660e0
commit 8288360cc4
47 changed files with 1813 additions and 58 deletions

View File

@@ -678,26 +678,26 @@ export namespace SchemaCompareCancellationRequest {
// ------------------------------- <Schema Compare> -----------------------------
// ------------------------------- <Sql Assessment> -----------------------------
/// ------------------------------- <Sql Assessment> -----------------------------
export interface SqlAssessmentParams {
ownerUri: string;
targetType: mssql.SqlAssessmentTargetType
targetType: azdata.sqlAssessment.SqlAssessmentTargetType
}
export interface GenerateSqlAssessmentScriptParams {
items: mssql.SqlAssessmentResultItem[];
items: azdata.SqlAssessmentResultItem[];
taskExecutionMode: azdata.TaskExecutionMode;
targetServerName: string;
targetDatabaseName: string;
}
export namespace SqlAssessmentInvokeRequest {
export const type = new RequestType<SqlAssessmentParams, mssql.SqlAssessmentResult, void, void>('assessment/invoke');
export const type = new RequestType<SqlAssessmentParams, azdata.SqlAssessmentResult, void, void>('assessment/invoke');
}
export namespace GetSqlAssessmentItemsRequest {
export const type = new RequestType<SqlAssessmentParams, mssql.SqlAssessmentResult, void, void>('assessment/getAssessmentItems');
export const type = new RequestType<SqlAssessmentParams, azdata.SqlAssessmentResult, void, void>('assessment/getAssessmentItems');
}
export namespace GenerateSqlAssessmentScriptRequest {
@@ -706,7 +706,6 @@ export namespace GenerateSqlAssessmentScriptRequest {
// ------------------------------- <Sql Assessment> -----------------------------
// ------------------------------- <Serialization> -----------------------------
export namespace SerializeDataStartRequest {
export const type = new RequestType<azdata.SerializeDataStartRequestParams, azdata.SerializeDataResult, void, void>('serialize/start');

View File

@@ -746,7 +746,7 @@ export class AgentServicesFeature extends SqlOpsFeature<undefined> {
}
);
};
// Job management methods
return azdata.dataprotocol.registerAgentServicesProvider({
providerId: client.providerId,
getJobs,
@@ -852,3 +852,72 @@ export class SerializationFeature extends SqlOpsFeature<undefined> {
});
}
}
export class SqlAssessmentServicesFeature extends SqlOpsFeature<undefined> {
private static readonly messagesTypes: RPCMessageType[] = [
contracts.SqlAssessmentInvokeRequest.type,
contracts.GetSqlAssessmentItemsRequest.type
];
constructor(client: SqlOpsDataClient) {
super(client, SqlAssessmentServicesFeature.messagesTypes);
}
public fillClientCapabilities(capabilities: ClientCapabilities): void {
}
public initialize(capabilities: ServerCapabilities): void {
this.register(this.messages, {
id: UUID.generateUuid(),
registerOptions: undefined
});
}
protected registerProvider(options: undefined): Disposable {
const client = this._client;
let assessmentInvoke = async (ownerUri: string, targetType: azdata.sqlAssessment.SqlAssessmentTargetType): Promise<azdata.SqlAssessmentResult> => {
let params: contracts.SqlAssessmentParams = { ownerUri: ownerUri, targetType: targetType };
try {
return client.sendRequest(contracts.SqlAssessmentInvokeRequest.type, params);
}
catch (e) {
client.logFailedRequest(contracts.SqlAssessmentInvokeRequest.type, e);
}
return undefined;
};
let getAssessmentItems = async (ownerUri: string, targetType: azdata.sqlAssessment.SqlAssessmentTargetType): Promise<azdata.SqlAssessmentResult> => {
let params: contracts.SqlAssessmentParams = { ownerUri: ownerUri, targetType: targetType };
try {
return client.sendRequest(contracts.GetSqlAssessmentItemsRequest.type, params);
}
catch (e) {
client.logFailedRequest(contracts.GetSqlAssessmentItemsRequest.type, e);
}
return undefined;
};
let generateAssessmentScript = async (items: azdata.SqlAssessmentResultItem[]): Promise<azdata.ResultStatus> => {
let params: contracts.GenerateSqlAssessmentScriptParams = { items: items, taskExecutionMode: azdata.TaskExecutionMode.script, targetServerName: '', targetDatabaseName: '' };
try {
return client.sendRequest(contracts.GenerateSqlAssessmentScriptRequest.type, params);
}
catch (e) {
client.logFailedRequest(contracts.GenerateSqlAssessmentScriptRequest.type, e);
}
return undefined;
};
return azdata.dataprotocol.registerSqlAssessmentServicesProvider({
providerId: client.providerId,
assessmentInvoke,
getAssessmentItems,
generateAssessmentScript
});
}
}

View File

@@ -483,40 +483,10 @@ export interface ListRegisteredServersResult {
// SqlAssessment interfaces -----------------------------------------------------------------------
export const enum SqlAssessmentTargetType {
Server = 1,
Database = 2
}
export const enum SqlAssessmentResultItemKind {
RealResult = 0,
Warning = 1,
Error = 2
}
export interface SqlAssessmentResultItem {
rulesetVersion: string;
rulesetName: string;
targetType: SqlAssessmentTargetType;
targetName: string;
checkId: string;
tags: string[];
displayName: string;
description: string;
message: string;
helpLink: string;
level: string;
timestamp: string;
kind: SqlAssessmentResultItemKind;
}
export interface SqlAssessmentResult extends azdata.ResultStatus {
items: SqlAssessmentResultItem[];
apiVersion: string;
}
export interface ISqlAssessmentService {
assessmentInvoke(ownerUri: string, targetType: SqlAssessmentTargetType): Promise<SqlAssessmentResult>;
getAssessmentItems(ownerUri: string, targetType: SqlAssessmentTargetType): Promise<SqlAssessmentResult>;
generateAssessmentScript(items: SqlAssessmentResultItem[], targetServerName: string, targetDatabaseName: string, taskExecutionMode: azdata.TaskExecutionMode): Promise<azdata.ResultStatus>;
assessmentInvoke(ownerUri: string, targetType: azdata.sqlAssessment.SqlAssessmentTargetType): Promise<azdata.SqlAssessmentResult>;
getAssessmentItems(ownerUri: string, targetType: azdata.sqlAssessment.SqlAssessmentTargetType): Promise<azdata.SqlAssessmentResult>;
generateAssessmentScript(items: azdata.SqlAssessmentResultItem[], targetServerName: string, targetDatabaseName: string, taskExecutionMode: azdata.TaskExecutionMode): Promise<azdata.ResultStatus>;
}

View File

@@ -30,7 +30,7 @@ export class SqlAssessmentService implements mssql.ISqlAssessmentService {
private constructor(context: AppContext, protected readonly client: SqlOpsDataClient) {
context.registerService(constants.SqlAssessmentService, this);
}
async assessmentInvoke(ownerUri: string, targetType: mssql.SqlAssessmentTargetType): Promise<mssql.SqlAssessmentResult | undefined> {
async assessmentInvoke(ownerUri: string, targetType: azdata.sqlAssessment.SqlAssessmentTargetType): Promise<azdata.SqlAssessmentResult | undefined> {
let params: contracts.SqlAssessmentParams = { ownerUri: ownerUri, targetType: targetType };
try {
return this.client.sendRequest(contracts.SqlAssessmentInvokeRequest.type, params);
@@ -41,7 +41,7 @@ export class SqlAssessmentService implements mssql.ISqlAssessmentService {
return undefined;
}
async getAssessmentItems(ownerUri: string, targetType: mssql.SqlAssessmentTargetType): Promise<mssql.SqlAssessmentResult | undefined> {
async getAssessmentItems(ownerUri: string, targetType: azdata.sqlAssessment.SqlAssessmentTargetType): Promise<azdata.SqlAssessmentResult | undefined> {
let params: contracts.SqlAssessmentParams = { ownerUri: ownerUri, targetType: targetType };
try {
return this.client.sendRequest(contracts.GetSqlAssessmentItemsRequest.type, params);
@@ -52,7 +52,7 @@ export class SqlAssessmentService implements mssql.ISqlAssessmentService {
return undefined;
}
async generateAssessmentScript(items: mssql.SqlAssessmentResultItem[], targetServerName: string, targetDatabaseName: string, taskExecutionMode: azdata.TaskExecutionMode): Promise<azdata.ResultStatus | undefined> {
async generateAssessmentScript(items: azdata.SqlAssessmentResultItem[], targetServerName: string, targetDatabaseName: string, taskExecutionMode: azdata.TaskExecutionMode): Promise<azdata.ResultStatus | undefined> {
let params: contracts.GenerateSqlAssessmentScriptParams = { items: items, targetServerName: targetServerName, targetDatabaseName: targetDatabaseName, taskExecutionMode: taskExecutionMode };
try {
return this.client.sendRequest(contracts.GenerateSqlAssessmentScriptRequest.type, params);

View File

@@ -11,7 +11,7 @@ import * as path from 'path';
import { getCommonLaunchArgsAndCleanupOldLogFiles } from './utils';
import { Telemetry, LanguageClientErrorHandler } from './telemetry';
import { SqlOpsDataClient, ClientOptions } from 'dataprotocol-client';
import { TelemetryFeature, AgentServicesFeature, SerializationFeature, AccountFeature } from './features';
import { TelemetryFeature, AgentServicesFeature, SerializationFeature, AccountFeature, SqlAssessmentServicesFeature } from './features';
import { CredentialStore } from './credentialstore/credentialstore';
import { AzureResourceProvider } from './resourceProvider/resourceProvider';
import { SchemaCompareService } from './schemaCompare/schemaCompareService';
@@ -155,6 +155,7 @@ function getClientOptions(context: AppContext): ClientOptions {
AccountFeature,
AgentServicesFeature,
SerializationFeature,
SqlAssessmentServicesFeature,
SchemaCompareService.asFeature(context),
LanguageExtensionService.asFeature(context),
DacFxService.asFeature(context),