mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-17 10:02:05 +00:00
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:
committed by
GitHub
parent
3a9c257f55
commit
d143f3f2ec
10
packages/workflow/src/ExecutionStatus.ts
Normal file
10
packages/workflow/src/ExecutionStatus.ts
Normal file
@@ -0,0 +1,10 @@
|
||||
export type ExecutionStatus =
|
||||
| 'canceled'
|
||||
| 'crashed'
|
||||
| 'error'
|
||||
| 'failed'
|
||||
| 'new'
|
||||
| 'running'
|
||||
| 'success'
|
||||
| 'unknown'
|
||||
| 'waiting';
|
||||
@@ -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;
|
||||
}>;
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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';
|
||||
|
||||
Reference in New Issue
Block a user