diff --git a/extensions/mssql/src/contracts.ts b/extensions/mssql/src/contracts.ts index 5de31a0ffb..de9f5cc9b7 100644 --- a/extensions/mssql/src/contracts.ts +++ b/extensions/mssql/src/contracts.ts @@ -5,9 +5,8 @@ 'use strict'; import { NotificationType, RequestType } from 'vscode-languageclient'; -import * as sqlops from 'sqlops'; - import { ITelemetryEventProperties, ITelemetryEventMeasures } from './telemetry'; +import * as sqlops from 'sqlops'; // ------------------------------- < Telemetry Sent Event > ------------------------------------ @@ -31,50 +30,207 @@ export class TelemetryParams { // ------------------------------- ---------------------------------- - -// Job Management types +// ------------------------------- < Agent Management > ------------------------------------ +// Job management parameters export interface AgentJobsParams { ownerUri: string; jobId: string; } -export interface AgentJobsResult { - succeeded: boolean; - errorMessage: string; - jobs: sqlops.AgentJobInfo[]; -} - export interface AgentJobHistoryParams { ownerUri: string; jobId: string; } -export interface AgentJobHistoryResult { - succeeded: boolean; - errorMessage: string; - jobs: sqlops.AgentJobHistoryInfo[]; -} - export interface AgentJobActionParams { ownerUri: string; jobName: string; action: string; } -export interface AgentJobActionResult { - succeeded: boolean; - errorMessage: string; +export interface CreateAgentJobParams { + ownerUri: string; + job: sqlops.AgentJobInfo; } +export interface UpdateAgentJobParams { + ownerUri: string; + originalJobName: string; + job: sqlops.AgentJobInfo; +} + +export interface DeleteAgentJobParams { + ownerUri: string; + job: sqlops.AgentJobInfo; +} + +// Job Step management parameters +export interface CreateAgentJobStepParams { + ownerUri: string; + step: sqlops.AgentJobStepInfo; +} + +export interface UpdateAgentJobStepParams { + ownerUri: string; + originalJobStepName: string; + step: sqlops.AgentJobStepInfo; +} + +export interface DeleteAgentJobStepParams { + ownerUri: string; + step: sqlops.AgentJobStepInfo; +} + +// Alert management parameters +export interface AgentAlertsParams { + ownerUri: string; +} + +export interface CreateAgentAlertParams { + ownerUri: string; + alert: sqlops.AgentAlertInfo; +} + +export interface UpdateAgentAlertParams { + ownerUri: string; + originalAlertName: string; + alert: sqlops.AgentAlertInfo; +} + +export interface DeleteAgentAlertParams { + ownerUri: string; + alert: sqlops.AgentAlertInfo; +} + +// Operator management parameters +export interface AgentOperatorsParams { + ownerUri: string; +} + +export interface CreateAgentOperatorParams { + ownerUri: string; + operator: sqlops.AgentOperatorInfo; +} + +export interface UpdateAgentOperatorParams { + ownerUri: string; + originalOperatorName: string; + operator: sqlops.AgentOperatorInfo; +} + +export interface DeleteAgentOperatorParams { + ownerUri: string; + operator: sqlops.AgentOperatorInfo; +} + +// Proxy management parameters +export interface AgentProxiesParams { + ownerUri: string; +} + +export interface CreateAgentProxyParams { + ownerUri: string; + proxy: sqlops.AgentProxyInfo; +} + +export interface UpdateAgentProxyParams { + ownerUri: string; + originalProxyName: string; + proxy: sqlops.AgentProxyInfo; +} + +export interface DeleteAgentProxyParams { + ownerUri: string; + proxy: sqlops.AgentProxyInfo; +} + +// Agent Job management requests export namespace AgentJobsRequest { - export const type = new RequestType('agent/jobs'); + export const type = new RequestType('agent/jobs'); } export namespace AgentJobHistoryRequest { - export const type = new RequestType('agent/jobhistory'); + export const type = new RequestType('agent/jobhistory'); } - export namespace AgentJobActionRequest { - export const type = new RequestType('agent/jobaction'); + export const type = new RequestType('agent/jobaction'); } + +export namespace CreateAgentJobRequest { + export const type = new RequestType('agent/createjob'); +} + +export namespace UpdateAgentJobRequest { + export const type = new RequestType('agent/updatejob'); +} + +export namespace DeleteAgentJobRequest { + export const type = new RequestType('agent/deletejob'); +} + +// Job Step requests +export namespace CreateAgentJobStepRequest { + export const type = new RequestType('agent/createjobstep'); +} + +export namespace UpdateAgentJobStepRequest { + export const type = new RequestType('agent/updatejobstep'); +} + +export namespace DeleteAgentJobStepRequest { + export const type = new RequestType('agent/deletejobstep'); +} + +// Alerts requests +export namespace AgentAlertsRequest { + export const type = new RequestType('agent/alerts'); +} + +export namespace CreateAgentAlertRequest { + export const type = new RequestType('agent/createalert'); +} + +export namespace UpdateAgentAlertRequest { + export const type = new RequestType('agent/updatealert'); +} + +export namespace DeleteAgentAlertRequest { + export const type = new RequestType('agent/deletealert'); +} + +// Operators requests +export namespace AgentOperatorsRequest { + export const type = new RequestType('agent/operators'); +} + +export namespace CreateAgentOperatorRequest { + export const type = new RequestType('agent/createoperator'); +} + +export namespace UpdateAgentOperatorRequest { + export const type = new RequestType('agent/updateoperator'); +} + +export namespace DeleteAgentOperatorRequest { + export const type = new RequestType('agent/deleteoperator'); +} + +// Proxies requests +export namespace AgentProxiesRequest { + export const type = new RequestType('agent/proxies'); +} + +export namespace CreateAgentProxyRequest { + export const type = new RequestType('agent/createproxy'); +} + +export namespace UpdateAgentProxyRequest { + export const type = new RequestType('agent/updateproxy'); +} + +export namespace DeleteAgentProxyRequest { + export const type = new RequestType('agent/deleteproxy'); +} + +// ------------------------------- < Agent Management > ------------------------------------ diff --git a/extensions/mssql/src/features.ts b/extensions/mssql/src/features.ts index bedb489f49..6039f44e2d 100644 --- a/extensions/mssql/src/features.ts +++ b/extensions/mssql/src/features.ts @@ -6,13 +6,12 @@ import { SqlOpsDataClient, SqlOpsFeature } from 'dataprotocol-client'; import { ClientCapabilities, StaticFeature, RPCMessageType, ServerCapabilities } from 'vscode-languageclient'; -import * as UUID from 'vscode-languageclient/lib/utils/uuid'; import { Disposable } from 'vscode'; -import * as sqlops from 'sqlops'; - import { Telemetry } from './telemetry'; +import * as contracts from './contracts'; +import * as sqlops from 'sqlops'; import * as Utils from './utils'; -import { TelemetryNotification, AgentJobsRequest, AgentJobActionRequest, AgentJobHistoryRequest, AgentJobsParams, AgentJobHistoryParams, AgentJobActionParams } from './contracts'; +import * as UUID from 'vscode-languageclient/lib/utils/uuid'; export class TelemetryFeature implements StaticFeature { @@ -23,7 +22,7 @@ export class TelemetryFeature implements StaticFeature { } initialize(): void { - this._client.onNotification(TelemetryNotification.type, e => { + this._client.onNotification(contracts.TelemetryNotification.type, e => { Telemetry.sendTelemetryEvent(e.params.eventName, e.params.properties, e.params.measures); }); } @@ -31,9 +30,9 @@ export class TelemetryFeature implements StaticFeature { export class AgentServicesFeature extends SqlOpsFeature { private static readonly messagesTypes: RPCMessageType[] = [ - AgentJobsRequest.type, - AgentJobHistoryRequest.type, - AgentJobActionRequest.type + contracts.AgentJobsRequest.type, + contracts.AgentJobHistoryRequest.type, + contracts.AgentJobActionRequest.type ]; constructor(client: SqlOpsDataClient) { @@ -55,35 +54,312 @@ export class AgentServicesFeature extends SqlOpsFeature { protected registerProvider(options: undefined): Disposable { const client = this._client; + // Job management methods let getJobs = (ownerUri: string): Thenable => { - let params: AgentJobsParams = { ownerUri: ownerUri, jobId: null }; - return client.sendRequest(AgentJobsRequest.type, params).then( + let params: contracts.AgentJobsParams = { ownerUri: ownerUri, jobId: null }; + return client.sendRequest(contracts.AgentJobsRequest.type, params).then( r => r, e => { - client.logFailedRequest(AgentJobsRequest.type, e); + client.logFailedRequest(contracts.AgentJobsRequest.type, e); return Promise.resolve(undefined); } ); }; - let getJobHistory = (connectionUri: string, jobID: string): Thenable => { - let params: AgentJobHistoryParams = { ownerUri: connectionUri, jobId: jobID }; + let getJobHistory = (ownerUri: string, jobID: string): Thenable => { + let params: contracts.AgentJobHistoryParams = { ownerUri: ownerUri, jobId: jobID }; - return client.sendRequest(AgentJobHistoryRequest.type, params).then( + return client.sendRequest(contracts.AgentJobHistoryRequest.type, params).then( r => r, e => { - client.logFailedRequest(AgentJobHistoryRequest.type, e); + client.logFailedRequest(contracts.AgentJobHistoryRequest.type, e); return Promise.resolve(undefined); } ); }; - let jobAction = (connectionUri: string, jobName: string, action: string): Thenable => { - let params: AgentJobActionParams = { ownerUri: connectionUri, jobName: jobName, action: action }; - return client.sendRequest(AgentJobActionRequest.type, params).then( + let jobAction = (ownerUri: string, jobName: string, action: string): Thenable => { + let params: contracts.AgentJobActionParams = { ownerUri: ownerUri, jobName: jobName, action: action }; + return client.sendRequest(contracts.AgentJobActionRequest.type, params).then( r => r, e => { - client.logFailedRequest(AgentJobActionRequest.type, e); + client.logFailedRequest(contracts.AgentJobActionRequest.type, e); + return Promise.resolve(undefined); + } + ); + }; + + let createJob = (ownerUri: string, jobInfo: sqlops.AgentJobInfo): Thenable => { + let params: contracts.CreateAgentJobParams = { + ownerUri: ownerUri, + job: jobInfo + }; + let requestType = contracts.CreateAgentJobRequest.type; + return client.sendRequest(requestType, params).then( + r => r, + e => { + client.logFailedRequest(requestType, e); + return Promise.resolve(undefined); + } + ); + }; + + let updateJob = (ownerUri: string, originalJobName: string, jobInfo: sqlops.AgentJobInfo): Thenable => { + let params: contracts.UpdateAgentJobParams = { + ownerUri: ownerUri, + originalJobName: originalJobName, + job: jobInfo + }; + let requestType = contracts.UpdateAgentJobRequest.type; + return client.sendRequest(requestType, params).then( + r => r, + e => { + client.logFailedRequest(requestType, e); + return Promise.resolve(undefined); + } + ); + }; + + let deleteJob = (ownerUri: string, jobInfo: sqlops.AgentJobInfo): Thenable => { + let params: contracts.DeleteAgentJobParams = { + ownerUri: ownerUri, + job: jobInfo + }; + let requestType = contracts.DeleteAgentJobRequest.type; + return client.sendRequest(requestType, params).then( + r => r, + e => { + client.logFailedRequest(requestType, e); + return Promise.resolve(undefined); + } + ); + }; + + // Job Step management methods + let createJobStep = (ownerUri: string, stepInfo: sqlops.AgentJobStepInfo): Thenable => { + let params: contracts.CreateAgentJobStepParams = { + ownerUri: ownerUri, + step: stepInfo + }; + let requestType = contracts.CreateAgentJobStepRequest.type; + return client.sendRequest(requestType, params).then( + r => r, + e => { + client.logFailedRequest(requestType, e); + return Promise.resolve(undefined); + } + ); + }; + + let updateJobStep = (ownerUri: string, originalJobStepName: string, stepInfo: sqlops.AgentJobStepInfo): Thenable => { + let params: contracts.UpdateAgentJobStepParams = { + ownerUri: ownerUri, + originalJobStepName: originalJobStepName, + step: stepInfo + }; + let requestType = contracts.UpdateAgentJobStepRequest.type; + return client.sendRequest(requestType, params).then( + r => r, + e => { + client.logFailedRequest(requestType, e); + return Promise.resolve(undefined); + } + ); + }; + + let deleteJobStep = (ownerUri: string, stepInfo: sqlops.AgentJobStepInfo): Thenable => { + let params: contracts.DeleteAgentJobStepParams = { + ownerUri: ownerUri, + step: stepInfo + }; + let requestType = contracts.DeleteAgentJobStepRequest.type; + return client.sendRequest(requestType, params).then( + r => r, + e => { + client.logFailedRequest(requestType, e); + return Promise.resolve(undefined); + } + ); + }; + + // Alert management methods + let getAlerts = (ownerUri: string): Thenable => { + let params: contracts.AgentAlertsParams = { + ownerUri: ownerUri + }; + let requestType = contracts.AgentAlertsRequest.type; + return client.sendRequest(requestType, params).then( + r => r, + e => { + client.logFailedRequest(requestType, e); + return Promise.resolve(undefined); + } + ); + }; + + let createAlert = (ownerUri: string, alertInfo: sqlops.AgentAlertInfo): Thenable => { + let params: contracts.CreateAgentAlertParams = { + ownerUri: ownerUri, + alert: alertInfo + }; + let requestType = contracts.CreateAgentAlertRequest.type; + return client.sendRequest(requestType, params).then( + r => r, + e => { + client.logFailedRequest(requestType, e); + return Promise.resolve(undefined); + } + ); + }; + + let updateAlert = (ownerUri: string, originalAlertName: string, alertInfo: sqlops.AgentAlertInfo): Thenable => { + let params: contracts.UpdateAgentAlertParams = { + ownerUri: ownerUri, + originalAlertName: originalAlertName, + alert: alertInfo + }; + let requestType = contracts.UpdateAgentAlertRequest.type; + return client.sendRequest(requestType, params).then( + r => r, + e => { + client.logFailedRequest(requestType, e); + return Promise.resolve(undefined); + } + ); + }; + + let deleteAlert = (ownerUri: string, alertInfo: sqlops.AgentAlertInfo): Thenable => { + let params: contracts.DeleteAgentAlertParams = { + ownerUri: ownerUri, + alert: alertInfo + }; + let requestType = contracts.DeleteAgentAlertRequest.type; + return client.sendRequest(requestType, params).then( + r => r, + e => { + client.logFailedRequest(requestType, e); + return Promise.resolve(undefined); + } + ); + }; + + // Operator management methods + let getOperators = (ownerUri: string): Thenable => { + let params: contracts.AgentOperatorsParams = { + ownerUri: ownerUri + }; + let requestType = contracts.AgentOperatorsRequest.type; + return client.sendRequest(requestType, params).then( + r => r, + e => { + client.logFailedRequest(requestType, e); + return Promise.resolve(undefined); + } + ); + }; + + let createOperator = (ownerUri: string, operatorInfo: sqlops.AgentOperatorInfo): Thenable => { + let params: contracts.CreateAgentOperatorParams = { + ownerUri: ownerUri, + operator: operatorInfo + }; + let requestType = contracts.CreateAgentOperatorRequest.type; + return client.sendRequest(requestType, params).then( + r => r, + e => { + client.logFailedRequest(requestType, e); + return Promise.resolve(undefined); + } + ); + }; + + let updateOperator = (ownerUri: string, originalOperatorName: string, operatorInfo: sqlops.AgentOperatorInfo): Thenable => { + let params: contracts.UpdateAgentOperatorParams = { + ownerUri: ownerUri, + originalOperatorName: originalOperatorName, + operator: operatorInfo + }; + let requestType = contracts.UpdateAgentOperatorRequest.type; + return client.sendRequest(requestType, params).then( + r => r, + e => { + client.logFailedRequest(requestType, e); + return Promise.resolve(undefined); + } + ); + }; + + let deleteOperator = (ownerUri: string, operatorInfo: sqlops.AgentOperatorInfo): Thenable => { + let params: contracts.DeleteAgentOperatorParams = { + ownerUri: ownerUri, + operator: operatorInfo + }; + let requestType = contracts.DeleteAgentOperatorRequest.type; + return client.sendRequest(requestType, params).then( + r => r, + e => { + client.logFailedRequest(requestType, e); + return Promise.resolve(undefined); + } + ); + }; + + // Proxy management methods + let getProxies = (ownerUri: string): Thenable => { + let params: contracts.AgentProxiesParams = { + ownerUri: ownerUri + }; + let requestType = contracts.AgentProxiesRequest.type; + return client.sendRequest(requestType, params).then( + r => r, + e => { + client.logFailedRequest(requestType, e); + return Promise.resolve(undefined); + } + ); + }; + + let createProxy = (ownerUri: string, proxyInfo: sqlops.AgentProxyInfo): Thenable => { + let params: contracts.CreateAgentProxyParams = { + ownerUri: ownerUri, + proxy: proxyInfo + }; + let requestType = contracts.CreateAgentProxyRequest.type; + return client.sendRequest(requestType, params).then( + r => r, + e => { + client.logFailedRequest(requestType, e); + return Promise.resolve(undefined); + } + ); + }; + + let updateProxy = (ownerUri: string, originalProxyName: string, proxyInfo: sqlops.AgentProxyInfo): Thenable => { + let params: contracts.UpdateAgentProxyParams = { + ownerUri: ownerUri, + originalProxyName: originalProxyName, + proxy: proxyInfo + }; + let requestType = contracts.UpdateAgentProxyRequest.type; + return client.sendRequest(requestType, params).then( + r => r, + e => { + client.logFailedRequest(requestType, e); + return Promise.resolve(undefined); + } + ); + }; + + let deleteProxy = (ownerUri: string, proxyInfo: sqlops.AgentProxyInfo): Thenable => { + let params: contracts.DeleteAgentProxyParams = { + ownerUri: ownerUri, + proxy: proxyInfo + }; + let requestType = contracts.DeleteAgentProxyRequest.type; + return client.sendRequest(requestType, params).then( + r => r, + e => { + client.logFailedRequest(requestType, e); return Promise.resolve(undefined); } ); @@ -93,7 +369,25 @@ export class AgentServicesFeature extends SqlOpsFeature { providerId: client.providerId, getJobs, getJobHistory, - jobAction + jobAction, + createJob, + updateJob, + deleteJob, + createJobStep, + updateJobStep, + deleteJobStep, + getAlerts, + createAlert, + updateAlert, + deleteAlert, + getOperators, + createOperator, + updateOperator, + deleteOperator, + getProxies, + createProxy, + updateProxy, + deleteProxy }); } } diff --git a/src/sql/parts/jobManagement/common/interfaces.ts b/src/sql/parts/jobManagement/common/interfaces.ts index 184ca255c7..28568b1b92 100644 --- a/src/sql/parts/jobManagement/common/interfaces.ts +++ b/src/sql/parts/jobManagement/common/interfaces.ts @@ -23,7 +23,7 @@ export interface IJobManagementService { getJobHistory(connectionUri: string, jobID: string): Thenable; - jobAction(connectionUri: string, jobName: string, action: string): Thenable; + jobAction(connectionUri: string, jobName: string, action: string): Thenable; addToCache(server: string, cache: JobCacheObject); diff --git a/src/sql/parts/jobManagement/common/jobManagementService.ts b/src/sql/parts/jobManagement/common/jobManagementService.ts index 622dd9b3ed..8af468d62c 100644 --- a/src/sql/parts/jobManagement/common/jobManagementService.ts +++ b/src/sql/parts/jobManagement/common/jobManagementService.ts @@ -39,7 +39,7 @@ export class JobManagementService implements IJobManagementService { }); } - public jobAction(connectionUri: string, jobName: string, action: string): Thenable { + public jobAction(connectionUri: string, jobName: string, action: string): Thenable { return this._runAction(connectionUri, (runner) => { return runner.jobAction(connectionUri, jobName, action); }); diff --git a/src/sql/parts/jobManagement/views/jobHistoryActions.ts b/src/sql/parts/jobManagement/views/jobHistoryActions.ts index c77a5135fe..bb1b2bd258 100644 --- a/src/sql/parts/jobManagement/views/jobHistoryActions.ts +++ b/src/sql/parts/jobManagement/views/jobHistoryActions.ts @@ -33,7 +33,7 @@ export class RunJobAction extends Action { let ownerUri = context.ownerUri; return new TPromise((resolve, reject) => { this.jobManagementService.jobAction(ownerUri, jobName, JobHistoryActions.Run).then(result => { - if (result.succeeded) { + if (result.success) { var startMsg = nls.localize('jobSuccessfullyStarted', ': The job was successfully started.'); this.notificationService.notify({ severity: Severity.Info, @@ -68,7 +68,7 @@ export class StopJobAction extends Action { let ownerUri = context.ownerUri; return new TPromise((resolve, reject) => { this.jobManagementService.jobAction(ownerUri, jobName, JobHistoryActions.Stop).then(result => { - if (result.succeeded) { + if (result.success) { var stopMsg = nls.localize('jobSuccessfullyStopped', ': The job was successfully stopped.'); this.notificationService.notify({ severity: Severity.Info, diff --git a/src/sql/sqlops.d.ts b/src/sql/sqlops.d.ts index aad2ab2721..0619e3ebee 100644 --- a/src/sql/sqlops.d.ts +++ b/src/sql/sqlops.d.ts @@ -1025,22 +1025,33 @@ declare module 'sqlops' { getDatabaseInfo(connectionUri: string): Thenable; } - // Agent Services interfaces - export interface AgentJobsResult { - succeeded: boolean; - errorMessage: string; - jobs: AgentJobInfo[]; + // Agent Services types + export enum WeekDays { + sunday = 1, + monday = 2, + tuesday = 4, + wednesday = 8, + thursday = 16, + friday = 32, + weekDays = 62, + saturday = 64, + weekEnds = 65, + everyDay = 127 } - export interface AgentJobHistoryResult { - succeeded: boolean; - errorMessage: string; - jobs: AgentJobHistoryInfo[]; + export enum NotifyMethods { + none = 0, + notifyEmail = 1, + pager = 2, + netSend = 4, + notifyAll = 7 } - export interface AgentJobActionResult { - succeeded: boolean; - errorMessage: string; + export enum AlertType { + sqlServerEvent = 1, + sqlServerPerformanceCondition = 2, + nonSqlServerEvent = 3, + wmiEvent = 4 } export interface AgentJobInfo { @@ -1061,7 +1072,8 @@ declare module 'sqlops' { jobId: string; } - export interface AgentJobStep { + export interface AgentJobStepInfo { + jobId: string; stepId: string; stepName: string; message: string; @@ -1086,13 +1098,168 @@ declare module 'sqlops' { operatorPaged: string; retriesAttempted: string; server: string; - steps: AgentJobStep[]; + steps: AgentJobStepInfo[]; + } + + export interface AgentProxyInfo { + id: number; + accountName: string; + description: string; + credentialName: string; + credentialIdentity: string; + credentialId: number; + isEnabled: boolean; + } + + export interface AgentAlertInfo { + id: number; + delayBetweenResponses: number; + eventDescriptionKeyword: string; + eventSource: string; + hasNotification: number; + includeEventDescription: NotifyMethods; + isEnabled: boolean; + jobId: string; + jobName: string; + lastOccurrenceDate: string; + lastResponseDate: string; + messageId: number; + notificationMessage: string; + occurrenceCount: number; + performanceCondition: string; + severity: number; + databaseName: string; + countResetDate: string; + categoryName: string; + alertType: AlertType; + wmiEventNamespace: string; + wmiEventQuery: string; + } + + export interface AgentOperatorInfo { + name: string; + id: number; + emailAddress: string; + enabled: boolean; + lastEmailDate: string; + lastNetSendDate: string; + lastPagerDate: string; + pagerAddress: string; + categoryName: string; + pagerDays: WeekDays; + saturdayPagerEndTime: string; + saturdayPagerStartTime: string; + sundayPagerEndTime: string; + sundayPagerStartTime: string; + netSendAddress: string; + weekdayPagerStartTime: string; + weekdayPagerEndTime: string; + } + + export interface ResultStatus { + success: boolean; + errorMessage: string; + } + + export interface AgentJobsResult extends ResultStatus { + jobs: AgentJobInfo[]; + } + + export interface AgentJobHistoryResult extends ResultStatus { + jobs: AgentJobHistoryInfo[]; + } + + export interface CreateAgentJobResult extends ResultStatus { + job: AgentJobInfo; + } + + export interface UpdateAgentJobResult extends ResultStatus { + job: AgentJobInfo; + } + + export interface CreateAgentJobStepResult extends ResultStatus { + step: AgentJobStepInfo; + } + + export interface UpdateAgentJobStepResult extends ResultStatus { + step: AgentJobStepInfo; + } + + export interface CreateAgentProxyResult extends ResultStatus { + step: AgentJobStepInfo; + } + + export interface UpdateAgentProxyResult extends ResultStatus { + step: AgentJobStepInfo; + } + + export interface AgentAlertsResult extends ResultStatus { + alerts: AgentAlertInfo[]; + } + + export interface CreateAgentAlertResult extends ResultStatus { + alert: AgentJobStepInfo; + } + + export interface UpdateAgentAlertResult extends ResultStatus { + alert: AgentJobStepInfo; + } + + export interface AgentOperatorsResult extends ResultStatus { + operators: AgentOperatorInfo[]; + } + + export interface CreateAgentOperatorResult extends ResultStatus { + operator: AgentOperatorInfo; + } + + export interface UpdateAgentOperatorResult extends ResultStatus { + operator: AgentOperatorInfo; + } + + export interface AgentProxiesResult extends ResultStatus { + operators: AgentOperatorInfo[]; + } + + export interface CreateAgentProxyResult extends ResultStatus { + operator: AgentOperatorInfo; + } + + export interface UpdateAgentProxyResult extends ResultStatus { + operator: AgentOperatorInfo; } export interface AgentServicesProvider extends DataProvider { - getJobs(connectionUri: string): Thenable; - getJobHistory(connectionUri: string, jobId: string): Thenable; - jobAction(connectionUri: string, jobName: string, action: string): Thenable; + // Job management methods + getJobs(ownerUri: string): Thenable; + getJobHistory(ownerUri: string, jobId: string): Thenable; + jobAction(ownerUri: string, jobName: string, action: string): Thenable; + createJob(ownerUri: string, jobInfo: AgentJobInfo): Thenable; + updateJob(ownerUri: string, originalJobName: string, jobInfo: AgentJobInfo): Thenable; + deleteJob(ownerUri: string, jobInfo: AgentJobInfo): Thenable; + + // Job Step management methods + createJobStep(ownerUri: string, jobInfo: AgentJobStepInfo): Thenable; + updateJobStep(ownerUri: string, originalJobStepName: string, jobInfo: AgentJobStepInfo): Thenable; + deleteJobStep(ownerUri: string, jobInfo: AgentJobStepInfo): Thenable; + + // Alert management methods + getAlerts(ownerUri: string): Thenable; + createAlert(ownerUri: string, alertInfo: AgentAlertInfo): Thenable; + updateAlert(ownerUri: string, originalAlertName: string, alertInfo: AgentAlertInfo): Thenable; + deleteAlert(ownerUri: string, alertInfo: AgentAlertInfo): Thenable; + + // Operator management methods + getOperators(ownerUri: string): Thenable; + createOperator(ownerUri: string, operatorInfo: AgentOperatorInfo): Thenable; + updateOperator(ownerUri: string, originalOperatorName: string, operatorInfo: AgentOperatorInfo): Thenable; + deleteOperator(ownerUri: string, operatorInfo: AgentOperatorInfo): Thenable; + + // Proxy management methods + getProxies(ownerUri: string): Thenable; + createProxy(ownerUri: string, proxyInfo: AgentProxyInfo): Thenable; + updateProxy(ownerUri: string, originalProxyName: string, proxyInfo: AgentProxyInfo): Thenable; + deleteProxy(ownerUri: string, proxyInfo: AgentProxyInfo): Thenable; } // Task service interfaces ---------------------------------------------------------------------------- diff --git a/src/sql/workbench/api/common/sqlExtHostTypes.ts b/src/sql/workbench/api/common/sqlExtHostTypes.ts index f677ac10aa..e629d3a572 100644 --- a/src/sql/workbench/api/common/sqlExtHostTypes.ts +++ b/src/sql/workbench/api/common/sqlExtHostTypes.ts @@ -63,6 +63,37 @@ export enum ScriptOperation { Alter = 6 } +export enum WeekDays +{ + sunday = 1, + monday = 2, + tuesday = 4, + wednesday = 8, + thursday = 16, + friday = 32, + weekDays = 62, + saturday = 64, + weekEnds = 65, + everyDay = 127 +} + +export enum NotifyMethods +{ + none = 0, + notifyEmail = 1, + pager = 2, + netSend = 4, + notifyAll = 7 +} + +export enum AlertType +{ + sqlServerEvent = 1, + sqlServerPerformanceCondition = 2, + nonSqlServerEvent = 3, + wmiEvent = 4 +} + export enum ModelComponentTypes { NavContainer, FlexContainer, diff --git a/src/sql/workbench/api/node/extHostDataProtocol.ts b/src/sql/workbench/api/node/extHostDataProtocol.ts index 13eb89c295..c58d01e64d 100644 --- a/src/sql/workbench/api/node/extHostDataProtocol.ts +++ b/src/sql/workbench/api/node/extHostDataProtocol.ts @@ -532,7 +532,7 @@ export class ExtHostDataProtocol extends ExtHostDataProtocolShape { /** * Run an action on a job */ - public $jobAction(handle: number, ownerUri: string, jobName: string, action: string): Thenable { + public $jobAction(handle: number, ownerUri: string, jobName: string, action: string): Thenable { return this._resolveProvider(handle).jobAction(ownerUri, jobName, action); } } diff --git a/src/sql/workbench/api/node/mainThreadDataProtocol.ts b/src/sql/workbench/api/node/mainThreadDataProtocol.ts index 2407597f0a..de360a5b65 100644 --- a/src/sql/workbench/api/node/mainThreadDataProtocol.ts +++ b/src/sql/workbench/api/node/mainThreadDataProtocol.ts @@ -339,7 +339,7 @@ export class MainThreadDataProtocol implements MainThreadDataProtocolShape { getJobHistory(connectionUri: string, jobID: string): Thenable { return self._proxy.$getJobHistory(handle, connectionUri, jobID); }, - jobAction(connectionUri: string, jobName: string, action: string): Thenable { + jobAction(connectionUri: string, jobName: string, action: string): Thenable { return self._proxy.$jobAction(handle, connectionUri, jobName, action); } }); diff --git a/src/sql/workbench/api/node/sqlExtHost.api.impl.ts b/src/sql/workbench/api/node/sqlExtHost.api.impl.ts index c423c13ea6..fc7b4c4bf1 100644 --- a/src/sql/workbench/api/node/sqlExtHost.api.impl.ts +++ b/src/sql/workbench/api/node/sqlExtHost.api.impl.ts @@ -377,6 +377,9 @@ export function createApiFactory( TaskStatus: sqlExtHostTypes.TaskStatus, TaskExecutionMode: sqlExtHostTypes.TaskExecutionMode, ScriptOperation: sqlExtHostTypes.ScriptOperation, + WeekDays: sqlExtHostTypes.WeekDays, + NotifyMethods: sqlExtHostTypes.NotifyMethods, + AlertType: sqlExtHostTypes.AlertType, window, tasks, dashboard, diff --git a/src/sql/workbench/api/node/sqlExtHost.protocol.ts b/src/sql/workbench/api/node/sqlExtHost.protocol.ts index 5547c2df05..a623f7d21e 100644 --- a/src/sql/workbench/api/node/sqlExtHost.protocol.ts +++ b/src/sql/workbench/api/node/sqlExtHost.protocol.ts @@ -327,7 +327,7 @@ export abstract class ExtHostDataProtocolShape { /** * Run an action on a Job */ - $jobAction(handle: number, ownerUri: string, jobName: string, action: string): Thenable { throw ni(); } + $jobAction(handle: number, ownerUri: string, jobName: string, action: string): Thenable { throw ni(); } } /**