Files
azuredatastudio/extensions/agent/src/data/jobStepData.ts
Anthony Dresser ef0a92d83f Add compile options to a few extensions (#8252)
* add compile options to a few extensions

* move dep to dev dep

* fix return types
2019-11-07 11:41:31 -08:00

272 lines
9.2 KiB
TypeScript

/*---------------------------------------------------------------------------------------------
* 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 * as nls from 'vscode-nls';
import * as vscode from 'vscode';
import { AgentUtils } from '../agentUtils';
import { IAgentDialogData, AgentDialogMode } from '../interfaces';
import { JobData } from './jobData';
import { JobStepDialog } from '../dialogs/jobStepDialog';
const localize = nls.loadMessageBundle();
export class JobStepData implements IAgentDialogData {
// Error Messages
private static readonly CreateStepErrorMessage_JobNameIsEmpty = localize('stepData.jobNameRequired', "Job name must be provided");
private static readonly CreateStepErrorMessage_StepNameIsEmpty = localize('stepData.stepNameRequired', "Step name must be provided");
public dialogMode: AgentDialogMode;
public ownerUri: string;
public jobId: string;
public jobName: string;
public script: string;
public scriptName: string;
public stepName: string;
public subSystem: azdata.AgentSubSystem;
public id: number;
public failureAction: azdata.StepCompletionAction;
public successAction: azdata.StepCompletionAction;
public successStepId: number;
public failStepId: number;
public command: string;
public commandExecutionSuccessCode: number;
public databaseName: string;
public databaseUserName: string;
public server: string;
public outputFileName: string;
public appendToLogFile: boolean;
public appendToStepHist: boolean;
public writeLogToTable: boolean;
public appendLogToTable: boolean;
public retryAttempts: number;
public retryInterval: number;
public proxyName: string;
private jobModel: JobData;
private viaJobDialog: boolean;
constructor(ownerUri: string, jobModel?: JobData, viaJobDialog: boolean = false) {
this.ownerUri = ownerUri;
this.jobName = jobModel.name;
this.jobModel = jobModel;
this.viaJobDialog = viaJobDialog;
}
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 step
result = await agentService.createJobStep(this.ownerUri, JobStepData.convertToAgentJobStepInfo(this));
}
if (!result || !result.success) {
vscode.window.showErrorMessage(
localize('jobStepData.saveErrorMessage', "Step update failed '{0}'", result.errorMessage ? result.errorMessage : 'Unknown'));
}
}
public validate(): { valid: boolean, errorMessages: string[] } {
let validationErrors: string[] = [];
if (!(this.stepName && this.stepName.trim())) {
validationErrors.push(JobStepData.CreateStepErrorMessage_StepNameIsEmpty);
}
if (!(this.jobName && this.jobName.trim())) {
validationErrors.push(JobStepData.CreateStepErrorMessage_JobNameIsEmpty);
}
return {
valid: validationErrors.length === 0,
errorMessages: validationErrors
};
}
public static convertToJobStepData(jobStepInfo: azdata.AgentJobStepInfo, jobData: JobData) {
let stepData = new JobStepData(jobData.ownerUri, jobData);
stepData.ownerUri = jobData.ownerUri;
stepData.jobId = jobStepInfo.jobId;
stepData.jobName = jobStepInfo.jobName;
stepData.script = jobStepInfo.script;
stepData.scriptName = jobStepInfo.scriptName;
stepData.stepName = jobStepInfo.stepName;
stepData.subSystem = jobStepInfo.subSystem;
stepData.id = jobStepInfo.id;
stepData.failureAction = jobStepInfo.failureAction;
stepData.successAction = jobStepInfo.successAction;
stepData.failStepId = jobStepInfo.failStepId;
stepData.successStepId = jobStepInfo.successStepId;
stepData.command = jobStepInfo.command;
stepData.commandExecutionSuccessCode = jobStepInfo.commandExecutionSuccessCode;
stepData.databaseName = jobStepInfo.databaseName;
stepData.databaseUserName = jobStepInfo.databaseUserName;
stepData.server = jobStepInfo.server;
stepData.outputFileName = jobStepInfo.outputFileName;
stepData.appendToLogFile = jobStepInfo.appendToLogFile;
stepData.appendToStepHist = jobStepInfo.appendToStepHist;
stepData.writeLogToTable = jobStepInfo.writeLogToTable;
stepData.appendLogToTable = jobStepInfo.appendLogToTable;
stepData.retryAttempts = jobStepInfo.retryAttempts;
stepData.retryInterval = jobStepInfo.retryInterval;
stepData.proxyName = jobStepInfo.proxyName;
stepData.dialogMode = AgentDialogMode.EDIT;
stepData.viaJobDialog = true;
return stepData;
}
public static convertToAgentJobStepInfo(jobStepData: JobStepData): azdata.AgentJobStepInfo {
let result: azdata.AgentJobStepInfo = {
jobId: jobStepData.jobId,
jobName: jobStepData.jobName,
script: jobStepData.script,
scriptName: jobStepData.scriptName,
stepName: jobStepData.stepName,
subSystem: jobStepData.subSystem,
id: jobStepData.id,
failureAction: jobStepData.failureAction,
successAction: jobStepData.successAction,
failStepId: jobStepData.failStepId,
successStepId: jobStepData.successStepId,
command: jobStepData.command,
commandExecutionSuccessCode: jobStepData.commandExecutionSuccessCode,
databaseName: jobStepData.databaseName,
databaseUserName: jobStepData.databaseUserName,
server: jobStepData.server,
outputFileName: jobStepData.outputFileName,
appendToLogFile: jobStepData.appendToLogFile,
appendToStepHist: jobStepData.appendToStepHist,
writeLogToTable: jobStepData.writeLogToTable,
appendLogToTable: jobStepData.appendLogToTable,
retryAttempts: jobStepData.retryAttempts,
retryInterval: jobStepData.retryInterval,
proxyName: jobStepData.proxyName
};
return result;
}
public static convertToAgentSubSystem(subSystemDisplayName: string): azdata.AgentSubSystem {
switch (subSystemDisplayName) {
case (JobStepDialog.TSQLScript): {
return azdata.AgentSubSystem.TransactSql;
}
case (JobStepDialog.Powershell): {
return azdata.AgentSubSystem.PowerShell;
}
case (JobStepDialog.CmdExec): {
return azdata.AgentSubSystem.CmdExec;
}
case (JobStepDialog.ReplicationDistributor): {
return azdata.AgentSubSystem.Distribution;
}
case (JobStepDialog.ReplicationMerge): {
return azdata.AgentSubSystem.Merge;
}
case (JobStepDialog.ReplicationQueueReader): {
return azdata.AgentSubSystem.QueueReader;
}
case (JobStepDialog.ReplicationSnapshot): {
return azdata.AgentSubSystem.Snapshot;
}
case (JobStepDialog.ReplicationTransactionLogReader): {
return azdata.AgentSubSystem.LogReader;
}
case (JobStepDialog.AnalysisServicesCommand): {
return azdata.AgentSubSystem.AnalysisCommands;
}
case (JobStepDialog.AnalysisServicesQuery): {
return azdata.AgentSubSystem.AnalysisQuery;
}
case (JobStepDialog.ServicesPackage): {
return azdata.AgentSubSystem.Ssis;
}
default:
return azdata.AgentSubSystem.TransactSql;
}
}
public static convertToSubSystemDisplayName(subSystem: azdata.AgentSubSystem): string {
switch (subSystem) {
case (azdata.AgentSubSystem.TransactSql): {
return JobStepDialog.TSQLScript;
}
case (azdata.AgentSubSystem.PowerShell): {
return JobStepDialog.Powershell;
}
case (azdata.AgentSubSystem.CmdExec): {
return JobStepDialog.CmdExec;
}
case (azdata.AgentSubSystem.Distribution): {
return JobStepDialog.ReplicationDistributor;
}
case (azdata.AgentSubSystem.Merge): {
return JobStepDialog.ReplicationMerge;
}
case (azdata.AgentSubSystem.QueueReader): {
return JobStepDialog.ReplicationQueueReader;
}
case (azdata.AgentSubSystem.Snapshot): {
return JobStepDialog.ReplicationSnapshot;
}
case (azdata.AgentSubSystem.LogReader): {
return JobStepDialog.ReplicationTransactionLogReader;
}
case (azdata.AgentSubSystem.AnalysisCommands): {
return JobStepDialog.AnalysisServicesCommand;
}
case (azdata.AgentSubSystem.AnalysisQuery): {
return JobStepDialog.AnalysisServicesQuery;
}
case (azdata.AgentSubSystem.Ssis): {
return JobStepDialog.ServicesPackage;
}
default:
return JobStepDialog.TSQLScript;
}
}
public static convertToStepCompletionAction(actionDisplayName: string): azdata.StepCompletionAction {
switch (actionDisplayName) {
case (JobStepDialog.NextStep): {
return azdata.StepCompletionAction.GoToNextStep;
}
case (JobStepDialog.QuitJobReportingSuccess): {
return azdata.StepCompletionAction.QuitWithSuccess;
}
case (JobStepDialog.QuitJobReportingFailure): {
return azdata.StepCompletionAction.QuitWithFailure;
}
default:
return azdata.StepCompletionAction.GoToNextStep;
}
}
public static convertToCompletionActionDisplayName(stepCompletionAction: azdata.StepCompletionAction): string {
switch (stepCompletionAction) {
case (azdata.StepCompletionAction.GoToNextStep): {
return JobStepDialog.NextStep;
}
case (azdata.StepCompletionAction.QuitWithFailure): {
return JobStepDialog.QuitJobReportingFailure;
}
case (azdata.StepCompletionAction.QuitWithSuccess): {
return JobStepDialog.QuitJobReportingSuccess;
}
default:
return JobStepDialog.NextStep;
}
}
}