feat(core): Add execution runData recovery and status field (#5112)

* adds ExecutionEvents view modal to ExecutionList

* fix time rendering and remove wf column

* checks for unfinished executions and fails them

* prevent re-setting stoppedAt for execution

* some cleanup / manually create rundata after crash

* quicksave

* remove Threads lib, log worker rewrite

* cleanup comment

* fix sentry destination return value

* test for tests...

* run tests with single worker

* fix tests

* remove console log

* add endpoint for execution data recovery

* lint cleanup and some refactoring

* fix accidental recursion

* remove cyclic imports

* add rundata recovery to Workflowrunner

* remove comments

* cleanup and refactor

* adds a status field to executions

* setExecutionStatus on queued worker

* fix onWorkflowPostExecute

* set waiting from worker

* get crashed status into frontend

* remove comment

* merge fix

* cleanup

* catch empty rundata in recovery

* refactor IExecutionsSummary and inject nodeExecution Errors

* reduce default event log size to 10mb from 100mb

* add per node execution status

* lint fix

* merge and lint fix

* phrasing change

* improve preview rendering and messaging

* remove debug

* Improve partial rundata recovery

* fix labels

* fix line through

* send manual rundata to ui at crash

* some type and msg push fixes

* improve recovered item rendering in preview

* update workflowStatistics on recover

* merge fix

* review fixes

* merge fix

* notify eventbus when ui is back up

* add a small timeout to make sure the UI is back up

* increase reconnect timeout to 30s

* adjust recover timeout and ui connection lost msg

* do not stop execution in editor after x reconnects

* add executionRecovered push event

* fix recovered connection not green

* remove reconnect toast and  merge existing rundata

* merge editor and recovered data for own mode
This commit is contained in:
Michael Auerswald
2023-02-17 10:54:07 +01:00
committed by GitHub
parent 3a9c257f55
commit d143f3f2ec
71 changed files with 1245 additions and 307 deletions

View File

@@ -0,0 +1,10 @@
export type ExecutionStatus =
| 'canceled'
| 'crashed'
| 'error'
| 'failed'
| 'new'
| 'running'
| 'success'
| 'unknown'
| 'waiting';

View File

@@ -16,6 +16,7 @@ import type { WorkflowOperationError } from './WorkflowErrors';
import type { NodeApiError, NodeOperationError } from './NodeErrors';
import type { ExpressionError } from './ExpressionError';
import type { PathLike } from 'fs';
import type { ExecutionStatus } from './ExecutionStatus';
export interface IAdditionalCredentialOptions {
oauth2?: IOAuth2Options;
@@ -1533,6 +1534,7 @@ export interface IRun {
waitTill?: Date;
startedAt: Date;
stoppedAt?: Date;
status: ExecutionStatus;
}
// Contains all the data which is needed to execute a workflow and so also to
@@ -1567,6 +1569,7 @@ export interface IRunData {
export interface ITaskData {
startTime: number;
executionTime: number;
executionStatus?: ExecutionStatus;
data?: ITaskDataConnections;
error?: ExecutionError;
source: Array<ISourceData | null>; // Is an array as nodes have multiple inputs
@@ -1661,6 +1664,7 @@ export interface IWorkflowExecuteAdditionalData {
httpResponse?: express.Response;
httpRequest?: express.Request;
restApiUrl: string;
setExecutionStatus?: (status: ExecutionStatus) => void;
sendMessageToUI?: (source: string, message: any) => void;
timezone: string;
webhookBaseUrl: string;
@@ -1852,3 +1856,31 @@ export type PublicInstalledNode = {
export interface NodeExecutionWithMetadata extends INodeExecutionData {
pairedItem: IPairedItemData | IPairedItemData[];
}
export interface IExecutionsSummary {
id: string;
finished?: boolean;
mode: WorkflowExecuteMode;
retryOf?: string;
retrySuccessId?: string;
waitTill?: Date;
startedAt: Date;
stoppedAt?: Date;
workflowId: string;
workflowName?: string;
status?: ExecutionStatus;
lastNodeExecuted?: string;
executionError?: ExecutionError;
nodeExecutionStatus?: {
[key: string]: IExceutionSummaryNodeExecutionResult;
};
}
export interface IExceutionSummaryNodeExecutionResult {
executionStatus: ExecutionStatus;
errors?: Array<{
name?: string;
message?: string;
description?: string;
}>;
}

View File

@@ -84,6 +84,19 @@ export abstract class ExecutionBaseError extends Error {
this.cause = cause;
}
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
toJSON?(): any {
return {
message: this.message,
lineNumber: this.lineNumber,
timestamp: this.timestamp,
name: this.name,
description: this.description,
context: this.context,
cause: this.cause,
};
}
}
/**

View File

@@ -10,6 +10,8 @@ export class WorkflowOperationError extends Error {
lineNumber: number | undefined;
description: string | undefined;
constructor(message: string, node?: INode) {
super(message);
this.name = this.constructor.name;

View File

@@ -8,6 +8,7 @@ export * from './Cron';
export * from './DeferredPromise';
export * from './Interfaces';
export * from './MessageEventBus';
export * from './ExecutionStatus';
export * from './Expression';
export * from './ExpressionError';
export * from './NodeErrors';