mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-16 10:58:30 -05:00
Feature/viewlet cmsapis (#4312)
* first set of changes to experiment the registration of cms related apis * Adding cms service entry to workbench * Adding basic functionality for add remove reg servers and group * Returning relative path as part of RegServerResult as string * Removing the cms apis from core. Having mssql extension expose them for cms extension * Propogating the backend name changes to apis * Fixing some missing sqlops references * Adding a sqltools service version with CMS apis available
This commit is contained in:
committed by
Anthony Dresser
parent
d00c3780a6
commit
ddce7731b9
100
extensions/mssql/src/api/mssqlapis.d.ts
vendored
100
extensions/mssql/src/api/mssqlapis.d.ts
vendored
@@ -22,6 +22,14 @@ export interface MssqlExtensionApi {
|
||||
* @memberof IMssqlExtensionApi
|
||||
*/
|
||||
getMssqlObjectExplorerBrowser(): MssqlObjectExplorerBrowser;
|
||||
|
||||
/**
|
||||
* Get the Cms Service APIs to communicate with CMS connections supported by this extension
|
||||
*
|
||||
* @returns {Promise<CmsService>}
|
||||
* @memberof IMssqlExtensionApi
|
||||
*/
|
||||
getCmsServiceProvider(): Promise<CmsService>;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -63,3 +71,95 @@ export interface ITreeNode {
|
||||
export interface IFileNode extends ITreeNode {
|
||||
getFileContentsAsString(maxBytes?: number): Promise<string>;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Interface containing all CMS related operations
|
||||
*/
|
||||
export interface CmsService {
|
||||
/**
|
||||
* Connects to or creates a Central management Server
|
||||
*
|
||||
* @param {string} name
|
||||
* @param {string} description
|
||||
* @param {azdata.ConnectionInfo} connectiondetails
|
||||
* @param {string} ownerUri
|
||||
* @returns {Thenable<azdata.ListRegisteredServersResult>}
|
||||
*/
|
||||
createCmsServer(name: string, description:string, connectiondetails: azdata.ConnectionInfo, ownerUri: string): Thenable<ListRegisteredServersResult>;
|
||||
|
||||
/**
|
||||
* gets all Registered Servers inside a CMS on a particular level
|
||||
*
|
||||
* @param {string} ownerUri
|
||||
* @param {string} relativePath
|
||||
* @returns {Thenable<azdata.ListRegisteredServersResult>}
|
||||
*/
|
||||
getRegisteredServers(ownerUri: string, relativePath: string): Thenable<ListRegisteredServersResult>;
|
||||
|
||||
/**
|
||||
* Adds a Registered Server inside a CMS on a particular level
|
||||
*
|
||||
* @param {string} ownerUri
|
||||
* @param {string} relativePath
|
||||
* @param {string} registeredServerName
|
||||
* @param {string} registeredServerDescription
|
||||
* @param {azdata.ConnectionInfo} connectiondetails
|
||||
* @returns {Thenable<boolean>>}
|
||||
*/
|
||||
addRegisteredServer (ownerUri: string, relativePath: string, registeredServerName: string, registeredServerDescription:string, connectionDetails:azdata.ConnectionInfo): Thenable<boolean>;
|
||||
|
||||
/**
|
||||
* Removes a Registered Server inside a CMS on a particular level
|
||||
*
|
||||
* @param {string} ownerUri
|
||||
* @param {string} relativePath
|
||||
* @param {string} registeredServerName
|
||||
* @returns {Thenable<boolean>}
|
||||
*/
|
||||
removeRegisteredServer (ownerUri: string, relativePath: string, registeredServerName: string): Thenable<boolean>;
|
||||
|
||||
/**
|
||||
* Adds a Server Group inside a CMS on a particular level
|
||||
*
|
||||
* @param {string} ownerUri
|
||||
* @param {string} relativePath
|
||||
* @param {string} groupName
|
||||
* @param {string} groupDescription
|
||||
* @param {azdata.ConnectionInfo} connectiondetails
|
||||
*/
|
||||
addServerGroup (ownerUri: string, relativePath: string, groupName: string, groupDescription:string): Thenable<boolean>;
|
||||
|
||||
/**
|
||||
* Removes a Server Group inside a CMS on a particular level
|
||||
*
|
||||
* @param {string} ownerUri
|
||||
* @param {string} relativePath
|
||||
* @param {string} groupName
|
||||
* @param {string} groupDescription
|
||||
*/
|
||||
removeServerGroup (ownerUri: string, relativePath: string, groupName: string): Thenable<boolean>;
|
||||
}
|
||||
|
||||
/**
|
||||
* CMS Result interfaces as passed back to Extensions
|
||||
*/
|
||||
export interface RegisteredServerResult {
|
||||
name: string;
|
||||
serverName: string;
|
||||
description: string;
|
||||
connectionDetails: azdata.ConnectionInfo;
|
||||
relativePath: string;
|
||||
}
|
||||
|
||||
export interface RegisteredServerGroup {
|
||||
name: string;
|
||||
description: string;
|
||||
relativePath: string;
|
||||
}
|
||||
|
||||
export interface ListRegisteredServersResult {
|
||||
registeredServersList: Array<RegisteredServerResult>;
|
||||
registeredServerGroups: Array<RegisteredServerGroup>;
|
||||
}
|
||||
|
||||
|
||||
102
extensions/mssql/src/cms/cmsService.ts
Normal file
102
extensions/mssql/src/cms/cmsService.ts
Normal file
@@ -0,0 +1,102 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import * as azdata from 'azdata';
|
||||
import * as constants from '../constants';
|
||||
import * as contracts from '../contracts';
|
||||
import { AppContext } from '../appContext';
|
||||
import { ConnectParams } from 'dataprotocol-client/lib/protocol';
|
||||
import { SqlOpsDataClient } from 'dataprotocol-client';
|
||||
import { ListRegisteredServersResult } from '../api/mssqlapis';
|
||||
|
||||
export class CmsService {
|
||||
|
||||
constructor(private appContext: AppContext, private client: SqlOpsDataClient) {
|
||||
|
||||
this.appContext.registerService<CmsService>(constants.CmsService, this);
|
||||
}
|
||||
|
||||
createCmsServer(name: string, description:string, connectiondetails: azdata.ConnectionInfo, ownerUri: string): Thenable<ListRegisteredServersResult> {
|
||||
let connectparams: ConnectParams = { ownerUri: ownerUri, connection: connectiondetails };
|
||||
let cmsparams: contracts.CreateCentralManagementServerParams = { registeredServerName: name, registeredServerDescription: description, connectParams: connectparams};
|
||||
|
||||
return this.client.sendRequest(contracts.CreateCentralManagementServerRequest.type, cmsparams).then(
|
||||
r => {
|
||||
return r;
|
||||
},
|
||||
e => {
|
||||
this.client.logFailedRequest(contracts.CreateCentralManagementServerRequest.type, e);
|
||||
return Promise.resolve(undefined);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
getRegisteredServers(ownerUri: string, relativePath: string): Thenable<ListRegisteredServersResult> {
|
||||
let params: contracts.ListRegisteredServersParams = { parentOwnerUri: ownerUri, relativePath: relativePath };
|
||||
return this.client.sendRequest(contracts.ListRegisteredServersRequest.type, params).then(
|
||||
r => {
|
||||
return r;
|
||||
},
|
||||
e => {
|
||||
this.client.logFailedRequest(contracts.ListRegisteredServersRequest.type, e);
|
||||
return Promise.resolve(undefined);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
addRegisteredServer (ownerUri: string, relativePath: string, registeredServerName: string, registeredServerDescription:string, connectionDetails:azdata.ConnectionInfo): Thenable<boolean> {
|
||||
let params: contracts.AddRegisteredServerParams = { parentOwnerUri: ownerUri, relativePath: relativePath, registeredServerName: registeredServerName, registeredServerDescription: registeredServerDescription, registeredServerConnectionDetails: connectionDetails };
|
||||
return this.client.sendRequest(contracts.AddRegisteredServerRequest.type, params).then(
|
||||
r => {
|
||||
return r;
|
||||
},
|
||||
e => {
|
||||
this.client.logFailedRequest(contracts.AddRegisteredServerRequest.type, e);
|
||||
return Promise.resolve(undefined);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
removeRegisteredServer (ownerUri: string, relativePath: string, registeredServerName: string): Thenable<boolean> {
|
||||
let params: contracts.RemoveRegisteredServerParams = { parentOwnerUri: ownerUri, relativePath: relativePath, registeredServerName: registeredServerName };
|
||||
return this.client.sendRequest(contracts.RemoveRegisteredServerRequest.type, params).then(
|
||||
r => {
|
||||
return r;
|
||||
},
|
||||
e => {
|
||||
this.client.logFailedRequest(contracts.RemoveRegisteredServerRequest.type, e);
|
||||
return Promise.resolve(undefined);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
addServerGroup (ownerUri: string, relativePath: string, groupName: string, groupDescription:string): Thenable<boolean> {
|
||||
let params: contracts.AddServerGroupParams = { parentOwnerUri: ownerUri, relativePath: relativePath, groupName: groupName, groupDescription: groupDescription };
|
||||
return this.client.sendRequest(contracts.AddServerGroupRequest.type, params).then(
|
||||
r => {
|
||||
return r;
|
||||
},
|
||||
e => {
|
||||
this.client.logFailedRequest(contracts.AddServerGroupRequest.type, e);
|
||||
return Promise.resolve(undefined);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
removeServerGroup (ownerUri: string, relativePath: string, groupName: string): Thenable<boolean> {
|
||||
let params: contracts.RemoveServerGroupParams = { parentOwnerUri: ownerUri, relativePath: relativePath, groupName: groupName };
|
||||
return this.client.sendRequest(contracts.RemoveServerGroupRequest.type, params).then(
|
||||
r => {
|
||||
return r;
|
||||
},
|
||||
e => {
|
||||
this.client.logFailedRequest(contracts.RemoveServerGroupRequest.type, e);
|
||||
return Promise.resolve(undefined);
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"downloadUrl": "https://github.com/Microsoft/sqltoolsservice/releases/download/v{#version#}/microsoft.sqltools.servicelayer-{#fileName#}",
|
||||
"version": "1.5.0-alpha.71",
|
||||
"version": "1.5.0-alpha.74",
|
||||
"downloadFileNames": {
|
||||
"Windows_86": "win-x86-netcoreapp2.2.zip",
|
||||
"Windows_64": "win-x64-netcoreapp2.2.zip",
|
||||
|
||||
@@ -37,6 +37,7 @@ export const isBigDataClusterProperty = 'isBigDataCluster';
|
||||
|
||||
// SERVICE NAMES //////////////////////////////////////////////////////////
|
||||
export const ObjectExplorerService = 'objectexplorer';
|
||||
export const CmsService = 'cmsService';
|
||||
export const objectExplorerPrefix: string = 'objectexplorer://';
|
||||
export const ViewType = 'view';
|
||||
|
||||
|
||||
@@ -7,6 +7,8 @@
|
||||
import { NotificationType, RequestType } from 'vscode-languageclient';
|
||||
import { ITelemetryEventProperties, ITelemetryEventMeasures } from './telemetry';
|
||||
import * as azdata from 'azdata';
|
||||
import { ConnectParams } from 'dataprotocol-client/lib/protocol';
|
||||
import { ListRegisteredServersResult } from './api/mssqlapis';
|
||||
|
||||
// ------------------------------- < Telemetry Sent Event > ------------------------------------
|
||||
|
||||
@@ -369,4 +371,66 @@ export namespace GenerateDeployScriptRequest {
|
||||
export namespace GenerateDeployPlanRequest {
|
||||
export const type = new RequestType<GenerateDeployPlanParams, azdata.GenerateDeployPlanResult, void, void>('dacfx/generateDeployPlan');
|
||||
}
|
||||
// ------------------------------- < DacFx > ------------------------------------
|
||||
// ------------------------------- < DacFx > ------------------------------------
|
||||
|
||||
// ------------------------------- <CMS> ----------------------------------------
|
||||
|
||||
|
||||
export interface CreateCentralManagementServerParams {
|
||||
registeredServerName: string;
|
||||
registeredServerDescription : string;
|
||||
connectParams: ConnectParams;
|
||||
}
|
||||
|
||||
export interface ListRegisteredServersParams extends RegisteredServerParamsBase {
|
||||
// same as base
|
||||
}
|
||||
|
||||
export interface AddRegisteredServerParams extends RegisteredServerParamsBase {
|
||||
registeredServerName: string;
|
||||
registeredServerDescription : string;
|
||||
registeredServerConnectionDetails: azdata.ConnectionInfo;
|
||||
}
|
||||
|
||||
export interface RemoveRegisteredServerParams extends RegisteredServerParamsBase {
|
||||
registeredServerName: string;
|
||||
}
|
||||
|
||||
export interface AddServerGroupParams extends RegisteredServerParamsBase {
|
||||
groupName: string;
|
||||
groupDescription: string;
|
||||
}
|
||||
|
||||
export interface RemoveServerGroupParams extends RegisteredServerParamsBase {
|
||||
groupName: string;
|
||||
}
|
||||
|
||||
export interface RegisteredServerParamsBase {
|
||||
parentOwnerUri: string;
|
||||
relativePath: string;
|
||||
}
|
||||
|
||||
export namespace CreateCentralManagementServerRequest {
|
||||
export const type = new RequestType<CreateCentralManagementServerParams, ListRegisteredServersResult, void, void>('cms/createCms');
|
||||
}
|
||||
|
||||
export namespace ListRegisteredServersRequest {
|
||||
export const type = new RequestType<ListRegisteredServersParams, ListRegisteredServersResult, void, void>('cms/listRegisteredServers');
|
||||
}
|
||||
|
||||
export namespace AddRegisteredServerRequest {
|
||||
export const type = new RequestType<AddRegisteredServerParams, boolean, void, void>('cms/addRegisteredServer');
|
||||
}
|
||||
|
||||
export namespace RemoveRegisteredServerRequest {
|
||||
export const type = new RequestType<RemoveRegisteredServerParams, boolean, void, void>('cms/removeRegisteredServer');
|
||||
}
|
||||
|
||||
export namespace AddServerGroupRequest {
|
||||
export const type = new RequestType<AddServerGroupParams, boolean, void, void>('cms/addCmsServerGroup');
|
||||
}
|
||||
|
||||
export namespace RemoveServerGroupRequest {
|
||||
export const type = new RequestType<RemoveServerGroupParams, boolean, void, void>('cms/removeCmsServerGroup');
|
||||
}
|
||||
// ------------------------------- <CMS> ----------------------------------------
|
||||
@@ -12,6 +12,7 @@ import * as contracts from './contracts';
|
||||
import * as azdata from 'azdata';
|
||||
import * as Utils from './utils';
|
||||
import * as UUID from 'vscode-languageclient/lib/utils/uuid';
|
||||
import { ConnectParams } from 'dataprotocol-client/lib/protocol';
|
||||
|
||||
export class TelemetryFeature implements StaticFeature {
|
||||
|
||||
@@ -672,4 +673,4 @@ export class AgentServicesFeature extends SqlOpsFeature<undefined> {
|
||||
registerOnUpdated
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -13,7 +13,7 @@ const localize = nls.loadMessageBundle();
|
||||
|
||||
import { SqlOpsDataClient, ClientOptions } from 'dataprotocol-client';
|
||||
import { IConfig, ServerProvider, Events } from 'service-downloader';
|
||||
import { ServerOptions, TransportKind } from 'vscode-languageclient';
|
||||
import { ServerOptions, TransportKind, LanguageClient } from 'vscode-languageclient';
|
||||
|
||||
import * as Constants from './constants';
|
||||
import ContextProvider from './contextProvider';
|
||||
@@ -31,6 +31,7 @@ import { MssqlExtensionApi, MssqlObjectExplorerBrowser } from './api/mssqlapis';
|
||||
import { OpenSparkJobSubmissionDialogCommand, OpenSparkJobSubmissionDialogFromFileCommand, OpenSparkJobSubmissionDialogTask } from './sparkFeature/dialog/dialogCommands';
|
||||
import { OpenSparkYarnHistoryTask } from './sparkFeature/historyTask';
|
||||
import { MssqlObjectExplorerNodeProvider, mssqlOutputChannel } from './objectExplorerNodeProvider/objectExplorerNodeProvider';
|
||||
import { CmsService } from './cms/cmsService';
|
||||
|
||||
const baseConfig = require('./config.json');
|
||||
const outputChannel = vscode.window.createOutputChannel(Constants.serviceName);
|
||||
@@ -57,6 +58,7 @@ export async function activate(context: vscode.ExtensionContext): Promise<MssqlE
|
||||
const credentialsStore = new CredentialStore(config);
|
||||
const resourceProvider = new AzureResourceProvider(config);
|
||||
let languageClient: SqlOpsDataClient;
|
||||
let cmsService: CmsService;
|
||||
|
||||
const serverdownloader = new ServerProvider(config);
|
||||
|
||||
@@ -83,7 +85,7 @@ export async function activate(context: vscode.ExtensionContext): Promise<MssqlE
|
||||
let appContext = new AppContext(context, new ApiWrapper());
|
||||
|
||||
const installationStart = Date.now();
|
||||
serverdownloader.getOrDownloadServer().then(e => {
|
||||
let serverPromise = serverdownloader.getOrDownloadServer().then(e => {
|
||||
const installationComplete = Date.now();
|
||||
let serverOptions = generateServerOptions(e);
|
||||
languageClient = new SqlOpsDataClient(Constants.serviceName, serverOptions, clientOptions);
|
||||
@@ -109,6 +111,9 @@ export async function activate(context: vscode.ExtensionContext): Promise<MssqlE
|
||||
|
||||
let nodeProvider = new MssqlObjectExplorerNodeProvider(prompter, appContext);
|
||||
azdata.dataprotocol.registerObjectExplorerNodeProvider(nodeProvider);
|
||||
|
||||
cmsService = new CmsService(appContext, languageClient);
|
||||
|
||||
activateSparkFeatures(appContext);
|
||||
activateNotebookTask(appContext);
|
||||
}, e => {
|
||||
@@ -136,6 +141,9 @@ export async function activate(context: vscode.ExtensionContext): Promise<MssqlE
|
||||
return <any>oeProvider.findSqlClusterNodeByContext(context);
|
||||
}
|
||||
};
|
||||
},
|
||||
getCmsServiceProvider(): Promise<CmsService> {
|
||||
return serverPromise.then(() => cmsService);
|
||||
}
|
||||
};
|
||||
return api;
|
||||
|
||||
2
src/sql/sqlops.proposed.d.ts
vendored
2
src/sql/sqlops.proposed.d.ts
vendored
@@ -1601,7 +1601,7 @@ declare module 'sqlops' {
|
||||
AgentServicesProvider = 'AgentServicesProvider',
|
||||
CapabilitiesProvider = 'CapabilitiesProvider',
|
||||
DacFxServicesProvider = 'DacFxServicesProvider',
|
||||
ObjectExplorerNodeProvider = 'ObjectExplorerNodeProvider',
|
||||
ObjectExplorerNodeProvider = 'ObjectExplorerNodeProvider'
|
||||
}
|
||||
|
||||
export namespace dataprotocol {
|
||||
|
||||
@@ -290,7 +290,7 @@ export enum DataProviderType {
|
||||
AgentServicesProvider = 'AgentServicesProvider',
|
||||
CapabilitiesProvider = 'CapabilitiesProvider',
|
||||
DacFxServicesProvider = 'DacFxServicesProvider',
|
||||
ObjectExplorerNodeProvider = 'ObjectExplorerNodeProvider',
|
||||
ObjectExplorerNodeProvider = 'ObjectExplorerNodeProvider'
|
||||
}
|
||||
|
||||
export enum DeclarativeDataType {
|
||||
|
||||
Reference in New Issue
Block a user