mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-20 19:32:15 +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
@@ -541,7 +541,11 @@ export const getOutputSummary = (data: ITaskData[], nodeConnections: NodeInputCo
|
||||
const outputMap: {
|
||||
[sourceOutputIndex: string]: {
|
||||
[targetNodeName: string]: {
|
||||
[targetInputIndex: string]: { total: number; iterations: number };
|
||||
[targetInputIndex: string]: {
|
||||
total: number;
|
||||
iterations: number;
|
||||
isArtificalRecoveredEventItem?: boolean;
|
||||
};
|
||||
};
|
||||
};
|
||||
} = {};
|
||||
@@ -554,6 +558,13 @@ export const getOutputSummary = (data: ITaskData[], nodeConnections: NodeInputCo
|
||||
run.data.main.forEach((output: INodeExecutionData[] | null, i: number) => {
|
||||
const sourceOutputIndex = i;
|
||||
|
||||
// executionData that was recovered by recoverEvents in the CLI will have an isArtificalRecoveredEventItem property
|
||||
// to indicate that it was not part of the original executionData
|
||||
// we do not want to count these items in the summary
|
||||
// if (output?.[0]?.json?.isArtificalRecoveredEventItem) {
|
||||
// return outputMap;
|
||||
// }
|
||||
|
||||
if (!outputMap[sourceOutputIndex]) {
|
||||
outputMap[sourceOutputIndex] = {};
|
||||
}
|
||||
@@ -589,10 +600,19 @@ export const getOutputSummary = (data: ITaskData[], nodeConnections: NodeInputCo
|
||||
};
|
||||
}
|
||||
|
||||
outputMap[sourceOutputIndex][targetNodeName][targetInputIndex].total += output
|
||||
? output.length
|
||||
: 0;
|
||||
outputMap[sourceOutputIndex][targetNodeName][targetInputIndex].iterations += output ? 1 : 0;
|
||||
if (output?.[0]?.json?.isArtificalRecoveredEventItem) {
|
||||
outputMap[sourceOutputIndex][targetNodeName][
|
||||
targetInputIndex
|
||||
].isArtificalRecoveredEventItem = true;
|
||||
outputMap[sourceOutputIndex][targetNodeName][targetInputIndex].total = 0;
|
||||
} else {
|
||||
outputMap[sourceOutputIndex][targetNodeName][targetInputIndex].total += output
|
||||
? output.length
|
||||
: 0;
|
||||
outputMap[sourceOutputIndex][targetNodeName][targetInputIndex].iterations += output
|
||||
? 1
|
||||
: 0;
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -607,6 +627,13 @@ export const resetConnection = (connection: Connection) => {
|
||||
connection.setPaintStyle(CONNECTOR_PAINT_STYLE_DEFAULT);
|
||||
};
|
||||
|
||||
export const recoveredConnection = (connection: Connection) => {
|
||||
connection.removeOverlay(OVERLAY_RUN_ITEMS_ID);
|
||||
connection.addClass('success');
|
||||
showOrHideMidpointArrow(connection);
|
||||
connection.setPaintStyle(CONNECTOR_PAINT_STYLE_PRIMARY);
|
||||
};
|
||||
|
||||
export const getRunItemsLabel = (output: { total: number; iterations: number }): string => {
|
||||
let label = `${output.total}`;
|
||||
label = output.total > 1 ? `${label} items` : `${label} item`;
|
||||
|
||||
Reference in New Issue
Block a user