mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-01-21 09:35:38 -05:00
151 lines
5.5 KiB
TypeScript
151 lines
5.5 KiB
TypeScript
/*---------------------------------------------------------------------------------------------
|
|
* 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 nls from 'vscode-nls';
|
|
import * as vscode from 'vscode';
|
|
import * as azdata from 'azdata';
|
|
import { AgentUtils } from '../agentUtils';
|
|
import { IAgentDialogData, AgentDialogMode } from '../interfaces';
|
|
import { JobData } from './jobData';
|
|
|
|
const localize = nls.loadMessageBundle();
|
|
|
|
export class AlertData implements IAgentDialogData {
|
|
public static readonly AlertTypeSqlServerEventString: string = localize('alertData.DefaultAlertTypString', 'SQL Server event alert');
|
|
public static readonly AlertTypePerformanceConditionString: string = localize('alertDialog.PerformanceCondition', 'SQL Server performance condition alert');
|
|
public static readonly AlertTypeWmiEventString: string = localize('alertDialog.WmiEvent', 'WMI event alert');
|
|
public static readonly DefaultAlertTypeString: string = AlertData.AlertTypeSqlServerEventString;
|
|
|
|
ownerUri: string;
|
|
dialogMode: AgentDialogMode = AgentDialogMode.CREATE;
|
|
id: number;
|
|
name: string;
|
|
originalName: string;
|
|
delayBetweenResponses: number;
|
|
eventDescriptionKeyword: string;
|
|
eventSource: string;
|
|
hasNotification: number;
|
|
includeEventDescription: string;
|
|
isEnabled: boolean = true;
|
|
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: string = AlertData.DefaultAlertTypeString;
|
|
wmiEventNamespace: string;
|
|
wmiEventQuery: string;
|
|
|
|
private viaJobDialog: boolean;
|
|
private jobModel: JobData;
|
|
|
|
constructor(
|
|
ownerUri:string,
|
|
alertInfo: azdata.AgentAlertInfo,
|
|
jobModel?: JobData,
|
|
viaJobDialog: boolean = false
|
|
) {
|
|
this.ownerUri = ownerUri;
|
|
this.viaJobDialog = viaJobDialog;
|
|
this.jobModel = jobModel;
|
|
this.jobName = this.jobName ? this.jobName : this.jobModel.name;
|
|
|
|
if (alertInfo) {
|
|
this.dialogMode = AgentDialogMode.EDIT;
|
|
this.id = alertInfo.id;
|
|
this.name = alertInfo.name;
|
|
this.originalName = alertInfo.name;
|
|
this.delayBetweenResponses = alertInfo.delayBetweenResponses;
|
|
this.eventDescriptionKeyword = alertInfo.eventDescriptionKeyword;
|
|
this.eventSource = alertInfo.eventSource;
|
|
this.hasNotification = alertInfo.hasNotification;
|
|
this.includeEventDescription = alertInfo.includeEventDescription ? alertInfo.includeEventDescription.toString() : null;
|
|
this.isEnabled = alertInfo.isEnabled;
|
|
this.jobId = alertInfo.jobId;
|
|
this.lastOccurrenceDate = alertInfo.lastOccurrenceDate;
|
|
this.lastResponseDate = alertInfo.lastResponseDate;
|
|
this.messageId = alertInfo.messageId;
|
|
this.notificationMessage = alertInfo.notificationMessage;
|
|
this.occurrenceCount = alertInfo.occurrenceCount;
|
|
this.performanceCondition = alertInfo.performanceCondition;
|
|
this.severity = alertInfo.severity;
|
|
this.databaseName = alertInfo.databaseName;
|
|
this.countResetDate = alertInfo.countResetDate;
|
|
this.categoryName = alertInfo.categoryName;
|
|
this.alertType = alertInfo.alertType ? alertInfo.alertType.toString() : null;
|
|
this.wmiEventNamespace = alertInfo.wmiEventNamespace;
|
|
this.wmiEventQuery = alertInfo.wmiEventQuery;
|
|
}
|
|
}
|
|
|
|
public async initialize() {
|
|
}
|
|
|
|
public async save() {
|
|
let agentService = await AgentUtils.getAgentService();
|
|
let result: any;
|
|
// if it's called via the job dialog, add it to the
|
|
// job model
|
|
if (this.viaJobDialog) {
|
|
if (this.jobModel) {
|
|
Promise.resolve(this);
|
|
return;
|
|
}
|
|
} else {
|
|
// has to be a create alert
|
|
result = await agentService.createAlert(this.ownerUri, this.toAgentAlertInfo());
|
|
}
|
|
if (!result || !result.success) {
|
|
vscode.window.showErrorMessage(
|
|
localize('alertData.saveErrorMessage', "Alert update failed '{0}'", result.errorMessage ? result.errorMessage : 'Unknown'));
|
|
}
|
|
}
|
|
|
|
public toAgentAlertInfo(): azdata.AgentAlertInfo {
|
|
return {
|
|
id: this.id,
|
|
name: this.name,
|
|
delayBetweenResponses: this.delayBetweenResponses,
|
|
eventDescriptionKeyword: this.eventDescriptionKeyword,
|
|
eventSource: this.eventSource,
|
|
hasNotification: this.hasNotification,
|
|
includeEventDescription: azdata.NotifyMethods.none, // this.includeEventDescription,
|
|
isEnabled: this.isEnabled,
|
|
jobId: this.jobId,
|
|
jobName: this.jobName,
|
|
lastOccurrenceDate: this.lastOccurrenceDate,
|
|
lastResponseDate: this.lastResponseDate,
|
|
messageId: this.messageId,
|
|
notificationMessage: this.notificationMessage,
|
|
occurrenceCount: this.occurrenceCount,
|
|
performanceCondition: this.performanceCondition,
|
|
severity: this.severity,
|
|
databaseName: this.databaseName,
|
|
countResetDate: this.countResetDate,
|
|
categoryName: this.categoryName,
|
|
alertType: AlertData.getAlertTypeFromString(this.alertType),
|
|
wmiEventNamespace: this.wmiEventNamespace,
|
|
wmiEventQuery: this.wmiEventQuery
|
|
};
|
|
}
|
|
|
|
private static getAlertTypeFromString(alertTypeString: string): azdata.AlertType {
|
|
if (alertTypeString === AlertData.AlertTypePerformanceConditionString) {
|
|
return azdata.AlertType.sqlServerPerformanceCondition;
|
|
} else if (alertTypeString === AlertData.AlertTypeWmiEventString) {
|
|
return azdata.AlertType.wmiEvent;
|
|
} else {
|
|
return azdata.AlertType.sqlServerEvent;
|
|
}
|
|
}
|
|
} |