UNPKG

@hpcc-js/comms

Version:
152 lines (133 loc) 5.07 kB
import { deepMixin, xml2json, XMLNode } from "@hpcc-js/util"; import { WsWorkunits, WorkunitsServiceBase } from "./wsdl/WsWorkunits/v2.02/WsWorkunits.ts"; import { IConnection, IOptions } from "../connection.ts"; export { WsWorkunits }; export enum WUStateID { Unknown = 0, Compiled, Running, Completed, Failed, Archived, Aborting, Aborted, Blocked, Submitted, Scheduled, Compiling, Wait, UploadingFiled, DebugPaused, DebugRunning, Paused, LAST, NotFound = 999 } export namespace WUUpdate { export enum Action { Unknown = 0, Compile, Check, Run, ExecuteExisting, Pause, PauseNow, Resume, Debug, __size } } export function isECLResult(_: any): _ is WsWorkunits.ECLResult { return typeof (_ as WsWorkunits.ECLResult).Name === "string"; } export function isWUQueryECLWorkunit(_: WsWorkunits.ECLWorkunit | WsWorkunits.Workunit): _ is WsWorkunits.ECLWorkunit { return (_ as WsWorkunits.ECLWorkunit).TotalClusterTime !== undefined; } export function isWUInfoWorkunit(_: WsWorkunits.ECLWorkunit | WsWorkunits.Workunit): _ is WsWorkunits.Workunit { return (_ as WsWorkunits.Workunit).StateEx !== undefined; } export class WorkunitsService extends WorkunitsServiceBase { constructor(optsConnection: IOptions | IConnection) { super(optsConnection); } Ping(): Promise<WsWorkunits.WsWorkunitsPingResponse> { return this._connection.send("Ping", {}, "json", false, undefined, "WsWorkunitsPingResponse").then(() => { return { result: true }; }); } WUQuery(request: Partial<WsWorkunits.WUQuery> = {}, abortSignal?: AbortSignal): Promise<WsWorkunits.WUQueryResponse> { return this._connection.send("WUQuery", request, "json", false, abortSignal).then((response) => { return deepMixin({ Workunits: { ECLWorkunit: [] } }, response); }); } WUInfo(_request: Partial<WsWorkunits.WUInfo>): Promise<WsWorkunits.WUInfoResponse> { const request: Partial<WsWorkunits.WUInfo> = { Wuid: "", TruncateEclTo64k: true, IncludeExceptions: false, IncludeGraphs: false, IncludeSourceFiles: false, IncludeResults: false, IncludeResultsViewNames: false, IncludeVariables: false, IncludeTimers: false, IncludeDebugValues: false, IncludeApplicationValues: false, IncludeWorkflows: false, IncludeXmlSchemas: false, IncludeResourceURLs: false, IncludeECL: false, IncludeHelpers: false, IncludeAllowedClusters: false, IncludeTotalClusterTime: false, IncludeServiceNames: false, SuppressResultSchemas: true, ..._request }; return super.WUInfo(request); } WUCreate(): Promise<WsWorkunits.WUCreateResponse> { return super.WUCreate({}); } WUUpdate(request: Partial<WsWorkunits.WUUpdate>): Promise<WsWorkunits.WUUpdateResponse> { return this._connection.send("WUUpdate", request, "json", true); } WUResubmit(request: WsWorkunits.WUResubmit): Promise<WsWorkunits.WUResubmitResponse> { this._connection.toESPStringArray(request, "Wuids"); return super.WUResubmit(request); } WUAction(request: Partial<WsWorkunits.WUAction>): Promise<WsWorkunits.WUActionResponse> { (request as any).ActionType = request.WUActionType; // v5.x compatibility return super.WUAction(request); } WUResult(request: Partial<WsWorkunits.WUResult>, abortSignal?: AbortSignal): Promise<WsWorkunits.WUResultResponse> { return this._connection.send("WUResult", request, "json", false, abortSignal); } WUFileEx(request: Partial<WsWorkunits.WUFile>): Promise<string> { return this._connection.send("WUFile", request, "text"); } private _WUDetailsMetaPromise: Promise<WsWorkunits.WUDetailsMetaResponse>; WUDetailsMeta(request: WsWorkunits.WUDetailsMeta): Promise<WsWorkunits.WUDetailsMetaResponse> { if (!this._WUDetailsMetaPromise) { this._WUDetailsMetaPromise = super.WUDetailsMeta(request); } return this._WUDetailsMetaPromise; } WUCDebugEx(request: WsWorkunits.WUCDebug): Promise<XMLNode | null> { return this._connection.send("WUCDebug", request, undefined, undefined, undefined, "WUDebug").then((response) => { const retVal = xml2json(response.Result); const children = retVal.children(); if (children.length) { return children[0]; } return null; }); } } export class WorkunitsServiceEx extends WorkunitsServiceBase { WUPublishWorkunitEx(request: Partial<WsWorkunits.WUPublishWorkunit>): Promise<WsWorkunits.WUPublishWorkunitResponse> { return this._connection.send("WUPublishWorkunit", request); } }