@temelj/workflow 0.0.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +38 -0
- package/dist/attributes.d.mts +15 -0
- package/dist/attributes.mjs +30 -0
- package/dist/client/create.d.mts +31 -0
- package/dist/client/create.mjs +67 -0
- package/dist/client/facades.d.mts +21 -0
- package/dist/client/facades.mjs +142 -0
- package/dist/client/mod.d.mts +2 -0
- package/dist/client/mod.mjs +2 -0
- package/dist/client/run-handle.d.mts +66 -0
- package/dist/client/run-handle.mjs +156 -0
- package/dist/client/worker-options.d.mts +17 -0
- package/dist/client/worker-options.mjs +25 -0
- package/dist/collection.d.mts +15 -0
- package/dist/collection.mjs +33 -0
- package/dist/compiled-function.d.mts +27 -0
- package/dist/compiled-function.mjs +54 -0
- package/dist/definition.d.mts +37 -0
- package/dist/definition.mjs +83 -0
- package/dist/engine/child-workflow.d.mts +10 -0
- package/dist/engine/child-workflow.mjs +333 -0
- package/dist/engine/command-identity.d.mts +9 -0
- package/dist/engine/command-identity.mjs +14 -0
- package/dist/engine/create.d.mts +106 -0
- package/dist/engine/create.mjs +402 -0
- package/dist/engine/deterministic.d.mts +12 -0
- package/dist/engine/deterministic.mjs +102 -0
- package/dist/engine/durable-command.d.mts +10 -0
- package/dist/engine/durable-command.mjs +17 -0
- package/dist/engine/execution-api.d.mts +29 -0
- package/dist/engine/execution-api.mjs +33 -0
- package/dist/engine/execution-service.d.mts +41 -0
- package/dist/engine/execution-service.mjs +288 -0
- package/dist/engine/hooks.d.mts +56 -0
- package/dist/engine/hooks.mjs +237 -0
- package/dist/engine/inspection-api.d.mts +34 -0
- package/dist/engine/inspection-api.mjs +77 -0
- package/dist/engine/inspection.d.mts +18 -0
- package/dist/engine/inspection.mjs +149 -0
- package/dist/engine/lifecycle.d.mts +18 -0
- package/dist/engine/lifecycle.mjs +38 -0
- package/dist/engine/lock-replay.d.mts +30 -0
- package/dist/engine/lock-replay.mjs +38 -0
- package/dist/engine/lock.d.mts +21 -0
- package/dist/engine/lock.mjs +197 -0
- package/dist/engine/message.d.mts +47 -0
- package/dist/engine/message.mjs +357 -0
- package/dist/engine/mod.d.mts +4 -0
- package/dist/engine/mod.mjs +2 -0
- package/dist/engine/observation.d.mts +35 -0
- package/dist/engine/observation.mjs +201 -0
- package/dist/engine/recovery.d.mts +26 -0
- package/dist/engine/recovery.mjs +92 -0
- package/dist/engine/replay.d.mts +41 -0
- package/dist/engine/replay.mjs +122 -0
- package/dist/engine/retry-policy.d.mts +4 -0
- package/dist/engine/retry-policy.mjs +4 -0
- package/dist/engine/retry.d.mts +23 -0
- package/dist/engine/retry.mjs +75 -0
- package/dist/engine/run-data.d.mts +9 -0
- package/dist/engine/run-data.mjs +74 -0
- package/dist/engine/run-service.d.mts +38 -0
- package/dist/engine/run-service.mjs +133 -0
- package/dist/engine/run-utils.d.mts +16 -0
- package/dist/engine/run-utils.mjs +83 -0
- package/dist/engine/schedule.d.mts +25 -0
- package/dist/engine/schedule.mjs +207 -0
- package/dist/engine/serialization.d.mts +9 -0
- package/dist/engine/serialization.mjs +85 -0
- package/dist/engine/start-api.d.mts +30 -0
- package/dist/engine/start-api.mjs +98 -0
- package/dist/engine/state.d.mts +77 -0
- package/dist/engine/state.mjs +464 -0
- package/dist/engine/step-api.d.mts +9 -0
- package/dist/engine/step-api.mjs +25 -0
- package/dist/engine/stream.d.mts +55 -0
- package/dist/engine/stream.mjs +333 -0
- package/dist/engine/summary/active-events.d.mts +34 -0
- package/dist/engine/summary/active-events.mjs +69 -0
- package/dist/engine/summary/child-workflow-runs.d.mts +24 -0
- package/dist/engine/summary/child-workflow-runs.mjs +138 -0
- package/dist/engine/summary/child-workflow-waits.d.mts +21 -0
- package/dist/engine/summary/child-workflow-waits.mjs +67 -0
- package/dist/engine/summary/recovery-child-workflow-waits.d.mts +11 -0
- package/dist/engine/summary/recovery-child-workflow-waits.mjs +89 -0
- package/dist/engine/summary/recovery-due-runs.d.mts +16 -0
- package/dist/engine/summary/recovery-due-runs.mjs +52 -0
- package/dist/engine/summary/recovery-failed-runs.d.mts +14 -0
- package/dist/engine/summary/recovery-failed-runs.mjs +33 -0
- package/dist/engine/summary/recovery-lease-runs.d.mts +16 -0
- package/dist/engine/summary/recovery-lease-runs.mjs +69 -0
- package/dist/engine/summary/recovery-locks.d.mts +18 -0
- package/dist/engine/summary/recovery-locks.mjs +100 -0
- package/dist/engine/summary/recovery-message-waits.d.mts +11 -0
- package/dist/engine/summary/recovery-message-waits.mjs +74 -0
- package/dist/engine/summary/recovery-retry-runs.d.mts +17 -0
- package/dist/engine/summary/recovery-retry-runs.mjs +65 -0
- package/dist/engine/summary/recovery-run-timestamps.d.mts +13 -0
- package/dist/engine/summary/recovery-run-timestamps.mjs +18 -0
- package/dist/engine/summary/recovery-runs.d.mts +23 -0
- package/dist/engine/summary/recovery-runs.mjs +54 -0
- package/dist/engine/summary/recovery-schedules.d.mts +10 -0
- package/dist/engine/summary/recovery-schedules.mjs +46 -0
- package/dist/engine/summary/recovery-sleep-waits.d.mts +10 -0
- package/dist/engine/summary/recovery-sleep-waits.mjs +53 -0
- package/dist/engine/summary/recovery-waits.d.mts +21 -0
- package/dist/engine/summary/recovery-waits.mjs +29 -0
- package/dist/engine/summary/run-availability.d.mts +13 -0
- package/dist/engine/summary/run-availability.mjs +37 -0
- package/dist/engine/summary/run-cleanup.d.mts +14 -0
- package/dist/engine/summary/run-cleanup.mjs +44 -0
- package/dist/engine/summary/run-failure.d.mts +14 -0
- package/dist/engine/summary/run-failure.mjs +62 -0
- package/dist/engine/summary/run-hooks.d.mts +14 -0
- package/dist/engine/summary/run-hooks.mjs +63 -0
- package/dist/engine/summary/run-lease.d.mts +11 -0
- package/dist/engine/summary/run-lease.mjs +64 -0
- package/dist/engine/summary/run-message-waits.d.mts +15 -0
- package/dist/engine/summary/run-message-waits.mjs +62 -0
- package/dist/engine/summary/run-metrics.d.mts +31 -0
- package/dist/engine/summary/run-metrics.mjs +93 -0
- package/dist/engine/summary/run-retry.d.mts +9 -0
- package/dist/engine/summary/run-retry.mjs +69 -0
- package/dist/engine/summary/run-sleeps.d.mts +15 -0
- package/dist/engine/summary/run-sleeps.mjs +61 -0
- package/dist/engine/summary/run-state.d.mts +26 -0
- package/dist/engine/summary/run-state.mjs +48 -0
- package/dist/engine/summary/run-status.d.mts +16 -0
- package/dist/engine/summary/run-status.mjs +35 -0
- package/dist/engine/summary/run-streams.d.mts +14 -0
- package/dist/engine/summary/run-streams.mjs +46 -0
- package/dist/engine/summary/run-transition.d.mts +9 -0
- package/dist/engine/summary/run-transition.mjs +39 -0
- package/dist/engine/summary/run-workflow.d.mts +9 -0
- package/dist/engine/summary/run-workflow.mjs +47 -0
- package/dist/engine/summary/step-attempt-active-child-workflows.d.mts +13 -0
- package/dist/engine/summary/step-attempt-active-child-workflows.mjs +55 -0
- package/dist/engine/summary/step-attempt-active-fields.d.mts +23 -0
- package/dist/engine/summary/step-attempt-active-fields.mjs +14 -0
- package/dist/engine/summary/step-attempt-active-message-waits.d.mts +12 -0
- package/dist/engine/summary/step-attempt-active-message-waits.mjs +47 -0
- package/dist/engine/summary/step-attempt-active-sleeps.d.mts +19 -0
- package/dist/engine/summary/step-attempt-active-sleeps.mjs +44 -0
- package/dist/engine/summary/step-attempt-buckets.d.mts +22 -0
- package/dist/engine/summary/step-attempt-buckets.mjs +152 -0
- package/dist/engine/summary/step-attempt-failure.d.mts +12 -0
- package/dist/engine/summary/step-attempt-failure.mjs +61 -0
- package/dist/engine/summary/step-attempt-lifecycle.d.mts +13 -0
- package/dist/engine/summary/step-attempt-lifecycle.mjs +19 -0
- package/dist/engine/summary/step-attempts.d.mts +11 -0
- package/dist/engine/summary/step-attempts.mjs +43 -0
- package/dist/engine/summary.d.mts +32 -0
- package/dist/engine/summary.mjs +37 -0
- package/dist/engine/task.d.mts +6 -0
- package/dist/engine/task.mjs +207 -0
- package/dist/errors/base.d.mts +99 -0
- package/dist/errors/base.mjs +426 -0
- package/dist/errors/capability.d.mts +11 -0
- package/dist/errors/capability.mjs +23 -0
- package/dist/errors/definition.d.mts +21 -0
- package/dist/errors/definition.mjs +51 -0
- package/dist/errors/details.d.mts +13 -0
- package/dist/errors/details.mjs +65 -0
- package/dist/errors/failures.d.mts +81 -0
- package/dist/errors/failures.mjs +168 -0
- package/dist/errors/hook.d.mts +14 -0
- package/dist/errors/hook.mjs +30 -0
- package/dist/errors/implementation.d.mts +11 -0
- package/dist/errors/implementation.mjs +25 -0
- package/dist/errors/lock.d.mts +28 -0
- package/dist/errors/lock.mjs +70 -0
- package/dist/errors/message.d.mts +106 -0
- package/dist/errors/message.mjs +122 -0
- package/dist/errors/mod.d.mts +17 -0
- package/dist/errors/mod.mjs +17 -0
- package/dist/errors/record-view.d.mts +11 -0
- package/dist/errors/record-view.mjs +24 -0
- package/dist/errors/records.d.mts +7 -0
- package/dist/errors/records.mjs +280 -0
- package/dist/errors/run.d.mts +116 -0
- package/dist/errors/run.mjs +232 -0
- package/dist/errors/runtime.d.mts +12 -0
- package/dist/errors/runtime.mjs +24 -0
- package/dist/errors/schedule.d.mts +27 -0
- package/dist/errors/schedule.mjs +65 -0
- package/dist/errors/step.d.mts +76 -0
- package/dist/errors/step.mjs +113 -0
- package/dist/errors/stream.d.mts +24 -0
- package/dist/errors/stream.mjs +64 -0
- package/dist/esbuild.d.mts +7 -0
- package/dist/esbuild.mjs +6 -0
- package/dist/events/descriptors.d.mts +245 -0
- package/dist/events/descriptors.mjs +405 -0
- package/dist/events/mod.d.mts +3 -0
- package/dist/events/mod.mjs +2 -0
- package/dist/history/attempt-key.d.mts +6 -0
- package/dist/history/attempt-key.mjs +7 -0
- package/dist/history/mod.d.mts +71 -0
- package/dist/history/mod.mjs +195 -0
- package/dist/history/projection.d.mts +8 -0
- package/dist/history/projection.mjs +259 -0
- package/dist/history/replay-projection.d.mts +88 -0
- package/dist/history/replay-projection.mjs +369 -0
- package/dist/history/sequencer.d.mts +16 -0
- package/dist/history/sequencer.mjs +78 -0
- package/dist/history/step-attempts.d.mts +9 -0
- package/dist/history/step-attempts.mjs +50 -0
- package/dist/history/timeline.d.mts +16 -0
- package/dist/history/timeline.mjs +272 -0
- package/dist/history/validator.d.mts +9 -0
- package/dist/history/validator.mjs +110 -0
- package/dist/inspection/mod.d.mts +5 -0
- package/dist/inspection/mod.mjs +3 -0
- package/dist/message-options.d.mts +8 -0
- package/dist/message-options.mjs +25 -0
- package/dist/mod.d.mts +52 -0
- package/dist/mod.mjs +26 -0
- package/dist/otel/support.d.mts +18 -0
- package/dist/otel/support.mjs +102 -0
- package/dist/otel.d.mts +30 -0
- package/dist/otel.mjs +588 -0
- package/dist/pagination.d.mts +25 -0
- package/dist/pagination.mjs +73 -0
- package/dist/registry.d.mts +20 -0
- package/dist/registry.mjs +48 -0
- package/dist/rolldown.d.mts +7 -0
- package/dist/rolldown.mjs +6 -0
- package/dist/rollup.d.mts +7 -0
- package/dist/rollup.mjs +6 -0
- package/dist/rspack.d.mts +7 -0
- package/dist/rspack.mjs +6 -0
- package/dist/runtime.d.mts +34 -0
- package/dist/runtime.mjs +194 -0
- package/dist/step-definition.d.mts +10 -0
- package/dist/step-definition.mjs +15 -0
- package/dist/store/append-projection.d.mts +15 -0
- package/dist/store/append-projection.mjs +26 -0
- package/dist/store/capabilities.d.mts +14 -0
- package/dist/store/capabilities.mjs +42 -0
- package/dist/store/cleanup.d.mts +18 -0
- package/dist/store/cleanup.mjs +338 -0
- package/dist/store/compaction.d.mts +5 -0
- package/dist/store/compaction.mjs +8 -0
- package/dist/store/create.d.mts +52 -0
- package/dist/store/create.mjs +159 -0
- package/dist/store/event-append-project.d.mts +15 -0
- package/dist/store/event-append-project.mjs +77 -0
- package/dist/store/event-append.d.mts +37 -0
- package/dist/store/event-append.mjs +80 -0
- package/dist/store/event-history.d.mts +22 -0
- package/dist/store/event-history.mjs +75 -0
- package/dist/store/event.d.mts +10 -0
- package/dist/store/event.mjs +28 -0
- package/dist/store/idempotency.d.mts +10 -0
- package/dist/store/idempotency.mjs +167 -0
- package/dist/store/instrumentation.d.mts +7 -0
- package/dist/store/instrumentation.mjs +123 -0
- package/dist/store/lock.d.mts +8 -0
- package/dist/store/lock.mjs +28 -0
- package/dist/store/materialization.d.mts +30 -0
- package/dist/store/materialization.mjs +127 -0
- package/dist/store/message-index.d.mts +21 -0
- package/dist/store/message-index.mjs +121 -0
- package/dist/store/mod.d.mts +5 -0
- package/dist/store/mod.mjs +4 -0
- package/dist/store/query.d.mts +24 -0
- package/dist/store/query.mjs +82 -0
- package/dist/store/revision.d.mts +4 -0
- package/dist/store/revision.mjs +7 -0
- package/dist/store/run.d.mts +49 -0
- package/dist/store/run.mjs +236 -0
- package/dist/store/schedule.d.mts +12 -0
- package/dist/store/schedule.mjs +41 -0
- package/dist/store/schema.d.mts +14 -0
- package/dist/store/schema.mjs +17 -0
- package/dist/store/step-attempt.d.mts +14 -0
- package/dist/store/step-attempt.mjs +23 -0
- package/dist/store/storage-value.d.mts +5 -0
- package/dist/store/storage-value.mjs +6 -0
- package/dist/store/validation.d.mts +35 -0
- package/dist/store/validation.mjs +77 -0
- package/dist/store-keys.d.mts +49 -0
- package/dist/store-keys.mjs +63 -0
- package/dist/telemetry.d.mts +132 -0
- package/dist/telemetry.mjs +172 -0
- package/dist/temporal.d.mts +23 -0
- package/dist/temporal.mjs +59 -0
- package/dist/timer.d.mts +12 -0
- package/dist/timer.mjs +28 -0
- package/dist/types/cleanup.d.mts +112 -0
- package/dist/types/cleanup.mjs +22 -0
- package/dist/types/client.d.mts +270 -0
- package/dist/types/client.mjs +1 -0
- package/dist/types/common.d.mts +19 -0
- package/dist/types/common.mjs +15 -0
- package/dist/types/definition.d.mts +92 -0
- package/dist/types/definition.mjs +1 -0
- package/dist/types/engine-options.d.mts +76 -0
- package/dist/types/engine-options.mjs +1 -0
- package/dist/types/engine.d.mts +309 -0
- package/dist/types/engine.mjs +1 -0
- package/dist/types/error-code.d.mts +256 -0
- package/dist/types/error-code.mjs +131 -0
- package/dist/types/error.d.mts +236 -0
- package/dist/types/error.mjs +48 -0
- package/dist/types/events.d.mts +2869 -0
- package/dist/types/events.mjs +283 -0
- package/dist/types/hook.d.mts +149 -0
- package/dist/types/hook.mjs +66 -0
- package/dist/types/lock.d.mts +63 -0
- package/dist/types/lock.mjs +18 -0
- package/dist/types/message-id.d.mts +7 -0
- package/dist/types/message-id.mjs +5 -0
- package/dist/types/message.d.mts +87 -0
- package/dist/types/message.mjs +1 -0
- package/dist/types/observation.d.mts +146 -0
- package/dist/types/observation.mjs +1 -0
- package/dist/types/pagination.d.mts +32 -0
- package/dist/types/pagination.mjs +13 -0
- package/dist/types/result.d.mts +62 -0
- package/dist/types/result.mjs +1 -0
- package/dist/types/retry.d.mts +48 -0
- package/dist/types/retry.mjs +1 -0
- package/dist/types/run-id.d.mts +7 -0
- package/dist/types/run-id.mjs +5 -0
- package/dist/types/run-list.d.mts +43 -0
- package/dist/types/run-list.mjs +1 -0
- package/dist/types/run-options.d.mts +86 -0
- package/dist/types/run-options.mjs +1 -0
- package/dist/types/run.d.mts +355 -0
- package/dist/types/run.mjs +207 -0
- package/dist/types/runtime.d.mts +143 -0
- package/dist/types/runtime.mjs +21 -0
- package/dist/types/schedule.d.mts +127 -0
- package/dist/types/schedule.mjs +48 -0
- package/dist/types/step-attempts.d.mts +326 -0
- package/dist/types/step-attempts.mjs +43 -0
- package/dist/types/step-id.d.mts +7 -0
- package/dist/types/step-id.mjs +5 -0
- package/dist/types/step.d.mts +183 -0
- package/dist/types/step.mjs +5 -0
- package/dist/types/store.d.mts +254 -0
- package/dist/types/store.mjs +1 -0
- package/dist/types/stream-id.d.mts +7 -0
- package/dist/types/stream-id.mjs +5 -0
- package/dist/types/stream.d.mts +126 -0
- package/dist/types/stream.mjs +1 -0
- package/dist/types/summary.d.mts +318 -0
- package/dist/types/summary.mjs +1 -0
- package/dist/types/telemetry.d.mts +74 -0
- package/dist/types/telemetry.mjs +9 -0
- package/dist/types/timeline.d.mts +237 -0
- package/dist/types/timeline.mjs +1 -0
- package/dist/types/vite.d.mts +65 -0
- package/dist/types/vite.mjs +1 -0
- package/dist/types/worker-id.d.mts +7 -0
- package/dist/types/worker-id.mjs +5 -0
- package/dist/types/worker.d.mts +94 -0
- package/dist/types/worker.mjs +1 -0
- package/dist/utility.d.mts +49 -0
- package/dist/utility.mjs +122 -0
- package/dist/vite/ast.d.mts +23 -0
- package/dist/vite/ast.mjs +73 -0
- package/dist/vite/error.d.mts +19 -0
- package/dist/vite/error.mjs +47 -0
- package/dist/vite/generated-name.d.mts +7 -0
- package/dist/vite/generated-name.mjs +9 -0
- package/dist/vite/manifest.d.mts +7 -0
- package/dist/vite/manifest.mjs +106 -0
- package/dist/vite/plugin.d.mts +7 -0
- package/dist/vite/plugin.mjs +190 -0
- package/dist/vite/safety.d.mts +12 -0
- package/dist/vite/safety.mjs +96 -0
- package/dist/vite/source-edit.d.mts +12 -0
- package/dist/vite/source-edit.mjs +44 -0
- package/dist/vite/source-map.d.mts +11 -0
- package/dist/vite/source-map.mjs +53 -0
- package/dist/vite/source.d.mts +7 -0
- package/dist/vite/source.mjs +14 -0
- package/dist/vite/transform.d.mts +7 -0
- package/dist/vite/transform.mjs +405 -0
- package/dist/vite.d.mts +6 -0
- package/dist/vite.mjs +5 -0
- package/dist/webhook.d.mts +16 -0
- package/dist/webhook.mjs +17 -0
- package/dist/webpack.d.mts +7 -0
- package/dist/webpack.mjs +6 -0
- package/dist/worker/error.d.mts +11 -0
- package/dist/worker/error.mjs +40 -0
- package/dist/worker.d.mts +18 -0
- package/dist/worker.mjs +427 -0
- package/package.json +144 -0
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { makeWorkflowRunStepAttemptKey } from "../../utility.mjs";
|
|
2
|
+
import { optionalProperty, sortedStringSet } from "../../collection.mjs";
|
|
3
|
+
import { earliestOptionalTimestamp, shouldReplaceWorkflowEarliestDefinedInstant } from "../../temporal.mjs";
|
|
4
|
+
import { summarizeChildWorkflowRuns } from "./child-workflow-runs.mjs";
|
|
5
|
+
//#region src/engine/summary/child-workflow-waits.ts
|
|
6
|
+
/** Creates a reducer for active child workflow waits across workflow runs. */
|
|
7
|
+
function createWorkflowRunChildWorkflowWaitSummaryReducer() {
|
|
8
|
+
const waits = createWorkflowRunChildWorkflowWaitAccumulator();
|
|
9
|
+
return {
|
|
10
|
+
addChildWorkflowAttempts(runId, attempts, childRuns) {
|
|
11
|
+
for (const attempt of attempts) addWorkflowRunChildWorkflowWaitAttempt(waits, runId, attempt);
|
|
12
|
+
for (const childRun of childRuns) waits.childRunRecords.set(childRun.id, childRun);
|
|
13
|
+
},
|
|
14
|
+
finish() {
|
|
15
|
+
return finishWorkflowRunChildWorkflowWaitSummary(waits);
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
function createWorkflowRunChildWorkflowWaitAccumulator() {
|
|
20
|
+
return {
|
|
21
|
+
total: 0,
|
|
22
|
+
attemptKeys: /* @__PURE__ */ new Set(),
|
|
23
|
+
childRunIds: /* @__PURE__ */ new Set(),
|
|
24
|
+
childRunRecords: /* @__PURE__ */ new Map(),
|
|
25
|
+
runIds: /* @__PURE__ */ new Set(),
|
|
26
|
+
stepIds: /* @__PURE__ */ new Set(),
|
|
27
|
+
workflows: /* @__PURE__ */ new Set()
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
function addWorkflowRunChildWorkflowWaitAttempt(waits, runId, attempt) {
|
|
31
|
+
const attemptKey = makeWorkflowRunStepAttemptKey(runId, attempt);
|
|
32
|
+
waits.total++;
|
|
33
|
+
waits.runIds.add(runId);
|
|
34
|
+
waits.stepIds.add(attempt.stepId);
|
|
35
|
+
waits.attemptKeys.add(attemptKey);
|
|
36
|
+
waits.oldestStartedAt = earliestOptionalTimestamp(waits.oldestStartedAt, attempt.startedAt);
|
|
37
|
+
if (shouldReplaceWorkflowEarliestDefinedInstant(waits.nextTimeoutAt, attempt.timeoutAt)) setWorkflowRunChildWorkflowWaitNextTimeout(waits, runId, attempt, attemptKey);
|
|
38
|
+
if (attempt.childRunId !== void 0) waits.childRunIds.add(attempt.childRunId);
|
|
39
|
+
if (attempt.workflowName !== void 0) waits.workflows.add(attempt.workflowVersion === void 0 ? attempt.workflowName : `${attempt.workflowName}@${attempt.workflowVersion}`);
|
|
40
|
+
}
|
|
41
|
+
function setWorkflowRunChildWorkflowWaitNextTimeout(waits, runId, attempt, attemptKey) {
|
|
42
|
+
waits.nextTimeoutAt = attempt.timeoutAt;
|
|
43
|
+
waits.nextTimeoutRunId = runId;
|
|
44
|
+
waits.nextTimeoutStepId = attempt.stepId;
|
|
45
|
+
waits.nextTimeoutAttemptKey = attemptKey;
|
|
46
|
+
}
|
|
47
|
+
function finishWorkflowRunChildWorkflowWaitSummary(waits) {
|
|
48
|
+
return waits.total === 0 ? {} : { childWorkflow: {
|
|
49
|
+
activeWaits: waits.total,
|
|
50
|
+
activeWaitRuns: waits.runIds.size,
|
|
51
|
+
waitRunIds: sortedStringSet(waits.runIds),
|
|
52
|
+
waitStepIds: sortedStringSet(waits.stepIds),
|
|
53
|
+
waitAttemptKeys: sortedStringSet(waits.attemptKeys),
|
|
54
|
+
childRunIds: sortedStringSet(waits.childRunIds),
|
|
55
|
+
workflows: sortedStringSet(waits.workflows),
|
|
56
|
+
...summarizeChildWorkflowRuns([...waits.childRunRecords.values()]),
|
|
57
|
+
...optionalProperty("oldestWaitStartedAt", waits.oldestStartedAt),
|
|
58
|
+
...waits.nextTimeoutAt === void 0 ? {} : {
|
|
59
|
+
nextWaitTimeoutAt: waits.nextTimeoutAt,
|
|
60
|
+
...optionalProperty("nextWaitTimeoutRunId", waits.nextTimeoutRunId),
|
|
61
|
+
...optionalProperty("nextWaitTimeoutStepId", waits.nextTimeoutStepId),
|
|
62
|
+
...optionalProperty("nextWaitTimeoutAttemptKey", waits.nextTimeoutAttemptKey)
|
|
63
|
+
}
|
|
64
|
+
} };
|
|
65
|
+
}
|
|
66
|
+
//#endregion
|
|
67
|
+
export { createWorkflowRunChildWorkflowWaitSummaryReducer };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { WorkflowRecoveryChildWorkflowWaitSummary } from "../../types/summary.mjs";
|
|
2
|
+
import { WorkflowStepAttemptRecord } from "../../types/step-attempts.mjs";
|
|
3
|
+
import { WorkflowRunRecord } from "../../types/run.mjs";
|
|
4
|
+
//#region src/engine/summary/recovery-child-workflow-waits.d.ts
|
|
5
|
+
interface WorkflowRecoveryChildWorkflowWaitSummaryReducer {
|
|
6
|
+
addAttempts(attempts: readonly WorkflowStepAttemptRecord[]): void;
|
|
7
|
+
finish(): WorkflowRecoveryChildWorkflowWaitSummary;
|
|
8
|
+
}
|
|
9
|
+
declare function createWorkflowRecoveryChildWorkflowWaitSummaryReducer(childRuns: readonly WorkflowRunRecord[], now: Temporal.Instant): WorkflowRecoveryChildWorkflowWaitSummaryReducer;
|
|
10
|
+
//#endregion
|
|
11
|
+
export { WorkflowRecoveryChildWorkflowWaitSummaryReducer, createWorkflowRecoveryChildWorkflowWaitSummaryReducer };
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { earliestWorkflowRecoveryTimestamp } from "./recovery-run-timestamps.mjs";
|
|
2
|
+
//#region src/engine/summary/recovery-child-workflow-waits.ts
|
|
3
|
+
function createWorkflowRecoveryChildWorkflowWaitSummaryReducer(childRuns, now) {
|
|
4
|
+
const childWorkflow = createWorkflowChildWorkflowWaitAccumulator();
|
|
5
|
+
const childByRunId = new Map(childRuns.map((run) => [run.id, run]));
|
|
6
|
+
return {
|
|
7
|
+
addAttempts(attempts) {
|
|
8
|
+
for (const attempt of attempts) addWorkflowChildWorkflowWaitAttempt(childWorkflow, attempt, childByRunId, now);
|
|
9
|
+
},
|
|
10
|
+
finish() {
|
|
11
|
+
return finishWorkflowChildWorkflowWaitSummary(childWorkflow);
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
function createWorkflowChildWorkflowWaitAccumulator() {
|
|
16
|
+
return {
|
|
17
|
+
runIds: /* @__PURE__ */ new Set(),
|
|
18
|
+
terminalRunIds: /* @__PURE__ */ new Set(),
|
|
19
|
+
missingRunIds: /* @__PURE__ */ new Set(),
|
|
20
|
+
timedOutRunIds: /* @__PURE__ */ new Set(),
|
|
21
|
+
terminalStepIds: /* @__PURE__ */ new Set(),
|
|
22
|
+
missingStepIds: /* @__PURE__ */ new Set(),
|
|
23
|
+
timedOutStepIds: /* @__PURE__ */ new Set(),
|
|
24
|
+
childRunIds: /* @__PURE__ */ new Set(),
|
|
25
|
+
completedChildRunIds: /* @__PURE__ */ new Set(),
|
|
26
|
+
failedChildRunIds: /* @__PURE__ */ new Set(),
|
|
27
|
+
canceledChildRunIds: /* @__PURE__ */ new Set()
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
function addWorkflowChildWorkflowWaitAttempt(childWorkflow, attempt, childByRunId, now) {
|
|
31
|
+
if (attempt.status !== "running" || attempt.kind !== "workflow") return;
|
|
32
|
+
childWorkflow.runIds.add(attempt.runId);
|
|
33
|
+
if (!addResolvedWorkflowChildWorkflowWaitAttempt(childWorkflow, attempt, childByRunId)) addTimedOutWorkflowChildWorkflowWaitAttempt(childWorkflow, attempt, now);
|
|
34
|
+
}
|
|
35
|
+
function addResolvedWorkflowChildWorkflowWaitAttempt(childWorkflow, attempt, childByRunId) {
|
|
36
|
+
if (attempt.childRunId === void 0) {
|
|
37
|
+
addMissingWorkflowChildWorkflowWaitAttempt(childWorkflow, attempt);
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
childWorkflow.childRunIds.add(attempt.childRunId);
|
|
41
|
+
const child = childByRunId.get(attempt.childRunId);
|
|
42
|
+
if (child === void 0) {
|
|
43
|
+
addMissingWorkflowChildWorkflowWaitAttempt(childWorkflow, attempt);
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
if (child.status !== "completed" && child.status !== "failed" && child.status !== "canceled") return false;
|
|
47
|
+
childWorkflow.terminalRunIds.add(attempt.runId);
|
|
48
|
+
childWorkflow.terminalStepIds.add(attempt.stepId);
|
|
49
|
+
if (child.status === "completed") childWorkflow.completedChildRunIds.add(child.id);
|
|
50
|
+
else if (child.status === "failed") childWorkflow.failedChildRunIds.add(child.id);
|
|
51
|
+
else childWorkflow.canceledChildRunIds.add(child.id);
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
54
|
+
function addMissingWorkflowChildWorkflowWaitAttempt(childWorkflow, attempt) {
|
|
55
|
+
childWorkflow.missingRunIds.add(attempt.runId);
|
|
56
|
+
childWorkflow.missingStepIds.add(attempt.stepId);
|
|
57
|
+
}
|
|
58
|
+
function addTimedOutWorkflowChildWorkflowWaitAttempt(childWorkflow, attempt, now) {
|
|
59
|
+
if (attempt.timeoutAt === void 0) return;
|
|
60
|
+
if (Temporal.Instant.compare(attempt.timeoutAt, now) <= 0) {
|
|
61
|
+
childWorkflow.timedOutRunIds.add(attempt.runId);
|
|
62
|
+
childWorkflow.timedOutStepIds.add(attempt.stepId);
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
childWorkflow.nextTimeout = earliestWorkflowRecoveryTimestamp(childWorkflow.nextTimeout, attempt.runId, attempt.timeoutAt);
|
|
66
|
+
}
|
|
67
|
+
function finishWorkflowChildWorkflowWaitSummary(childWorkflow) {
|
|
68
|
+
return {
|
|
69
|
+
active: childWorkflow.runIds.size,
|
|
70
|
+
terminal: childWorkflow.terminalRunIds.size,
|
|
71
|
+
missing: childWorkflow.missingRunIds.size,
|
|
72
|
+
timedOut: childWorkflow.timedOutRunIds.size,
|
|
73
|
+
runIds: [...childWorkflow.runIds].sort(),
|
|
74
|
+
terminalRunIds: [...childWorkflow.terminalRunIds].sort(),
|
|
75
|
+
missingRunIds: [...childWorkflow.missingRunIds].sort(),
|
|
76
|
+
timedOutRunIds: [...childWorkflow.timedOutRunIds].sort(),
|
|
77
|
+
terminalStepIds: [...childWorkflow.terminalStepIds].sort(),
|
|
78
|
+
missingStepIds: [...childWorkflow.missingStepIds].sort(),
|
|
79
|
+
timedOutStepIds: [...childWorkflow.timedOutStepIds].sort(),
|
|
80
|
+
childRunIds: [...childWorkflow.childRunIds].sort(),
|
|
81
|
+
completedChildRunIds: [...childWorkflow.completedChildRunIds].sort(),
|
|
82
|
+
failedChildRunIds: [...childWorkflow.failedChildRunIds].sort(),
|
|
83
|
+
canceledChildRunIds: [...childWorkflow.canceledChildRunIds].sort(),
|
|
84
|
+
...childWorkflow.nextTimeout === void 0 ? {} : { nextTimeoutAt: childWorkflow.nextTimeout.timestamp },
|
|
85
|
+
...childWorkflow.nextTimeout === void 0 ? {} : { nextTimeoutRunId: childWorkflow.nextTimeout.runId }
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
//#endregion
|
|
89
|
+
export { createWorkflowRecoveryChildWorkflowWaitSummaryReducer };
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { WorkflowRecoveryDueSummary } from "../../types/summary.mjs";
|
|
2
|
+
import { WorkflowRunRecord } from "../../types/run.mjs";
|
|
3
|
+
import { WorkflowRecoveryTimestamp } from "./recovery-run-timestamps.mjs";
|
|
4
|
+
//#region src/engine/summary/recovery-due-runs.d.ts
|
|
5
|
+
interface WorkflowRecoveryDueRunSummaryParts {
|
|
6
|
+
readonly due: WorkflowRecoveryDueSummary;
|
|
7
|
+
readonly dueRunIds: readonly string[];
|
|
8
|
+
readonly nextAvailable?: WorkflowRecoveryTimestamp;
|
|
9
|
+
}
|
|
10
|
+
interface WorkflowRecoveryDueRunSummaryReducer {
|
|
11
|
+
addRun(run: WorkflowRunRecord): void;
|
|
12
|
+
finish(): WorkflowRecoveryDueRunSummaryParts;
|
|
13
|
+
}
|
|
14
|
+
declare function createWorkflowRecoveryDueRunSummaryReducer(now: Temporal.Instant): WorkflowRecoveryDueRunSummaryReducer;
|
|
15
|
+
//#endregion
|
|
16
|
+
export { WorkflowRecoveryDueRunSummaryParts, WorkflowRecoveryDueRunSummaryReducer, createWorkflowRecoveryDueRunSummaryReducer };
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { isScheduledWorkflowRunStatus } from "../../utility.mjs";
|
|
2
|
+
import { earliestWorkflowRecoveryTimestamp, isWorkflowRecoveryRunDueAt } from "./recovery-run-timestamps.mjs";
|
|
3
|
+
//#region src/engine/summary/recovery-due-runs.ts
|
|
4
|
+
function createWorkflowRecoveryDueRunSummaryReducer(now) {
|
|
5
|
+
const due = createWorkflowRecoveryDueRunAccumulator();
|
|
6
|
+
return {
|
|
7
|
+
addRun(run) {
|
|
8
|
+
addWorkflowRecoveryDueRun(due, run, now);
|
|
9
|
+
},
|
|
10
|
+
finish() {
|
|
11
|
+
return {
|
|
12
|
+
due: finishWorkflowRecoveryDueSummary(due),
|
|
13
|
+
dueRunIds: [...due.runIds].sort(),
|
|
14
|
+
...due.nextAvailable === void 0 ? {} : { nextAvailable: due.nextAvailable }
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
function createWorkflowRecoveryDueRunAccumulator() {
|
|
20
|
+
return {
|
|
21
|
+
runIds: /* @__PURE__ */ new Set(),
|
|
22
|
+
pendingRunIds: /* @__PURE__ */ new Set(),
|
|
23
|
+
waitingRunIds: /* @__PURE__ */ new Set(),
|
|
24
|
+
invalidScheduleRunIds: /* @__PURE__ */ new Set()
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
function addWorkflowRecoveryDueRun(due, run, now) {
|
|
28
|
+
if (!isScheduledWorkflowRunStatus(run.status)) return;
|
|
29
|
+
const availableAt = run.availableAt;
|
|
30
|
+
if (isWorkflowRecoveryRunDueAt(availableAt, now)) {
|
|
31
|
+
due.runIds.add(run.id);
|
|
32
|
+
if (run.status === "pending") due.pendingRunIds.add(run.id);
|
|
33
|
+
else due.waitingRunIds.add(run.id);
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
if (availableAt !== void 0) due.nextAvailable = earliestWorkflowRecoveryTimestamp(due.nextAvailable, run.id, availableAt);
|
|
37
|
+
}
|
|
38
|
+
function finishWorkflowRecoveryDueSummary(due) {
|
|
39
|
+
return {
|
|
40
|
+
total: due.runIds.size,
|
|
41
|
+
runIds: [...due.runIds].sort(),
|
|
42
|
+
pendingRunIds: [...due.pendingRunIds].sort(),
|
|
43
|
+
waitingRunIds: [...due.waitingRunIds].sort(),
|
|
44
|
+
invalidScheduleRunIds: [...due.invalidScheduleRunIds].sort(),
|
|
45
|
+
...due.nextAvailable === void 0 ? {} : {
|
|
46
|
+
nextAvailableAt: due.nextAvailable.timestamp,
|
|
47
|
+
nextAvailableRunId: due.nextAvailable.runId
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
//#endregion
|
|
52
|
+
export { createWorkflowRecoveryDueRunSummaryReducer };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { WorkflowRecoveryFailedSummary } from "../../types/summary.mjs";
|
|
2
|
+
import { WorkflowRunRecord } from "../../types/run.mjs";
|
|
3
|
+
//#region src/engine/summary/recovery-failed-runs.d.ts
|
|
4
|
+
interface WorkflowRecoveryFailedRunSummaryParts {
|
|
5
|
+
readonly failed: WorkflowRecoveryFailedSummary;
|
|
6
|
+
readonly failedRunIds: readonly string[];
|
|
7
|
+
}
|
|
8
|
+
interface WorkflowRecoveryFailedRunSummaryReducer {
|
|
9
|
+
addRun(run: WorkflowRunRecord): void;
|
|
10
|
+
finish(): WorkflowRecoveryFailedRunSummaryParts;
|
|
11
|
+
}
|
|
12
|
+
declare function createWorkflowRecoveryFailedRunSummaryReducer(): WorkflowRecoveryFailedRunSummaryReducer;
|
|
13
|
+
//#endregion
|
|
14
|
+
export { WorkflowRecoveryFailedRunSummaryParts, WorkflowRecoveryFailedRunSummaryReducer, createWorkflowRecoveryFailedRunSummaryReducer };
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { latestOptionalWorkflowRecoveryInstant } from "./recovery-run-timestamps.mjs";
|
|
2
|
+
//#region src/engine/summary/recovery-failed-runs.ts
|
|
3
|
+
function createWorkflowRecoveryFailedRunSummaryReducer() {
|
|
4
|
+
const failed = createWorkflowRecoveryFailedRunAccumulator();
|
|
5
|
+
return {
|
|
6
|
+
addRun(run) {
|
|
7
|
+
addWorkflowRecoveryFailedRun(failed, run);
|
|
8
|
+
},
|
|
9
|
+
finish() {
|
|
10
|
+
return {
|
|
11
|
+
failed: finishWorkflowRecoveryFailedSummary(failed),
|
|
12
|
+
failedRunIds: [...failed.runIds].sort()
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
function createWorkflowRecoveryFailedRunAccumulator() {
|
|
18
|
+
return { runIds: /* @__PURE__ */ new Set() };
|
|
19
|
+
}
|
|
20
|
+
function addWorkflowRecoveryFailedRun(failed, run) {
|
|
21
|
+
if (run.status !== "failed") return;
|
|
22
|
+
failed.runIds.add(run.id);
|
|
23
|
+
failed.latestFailedAt = latestOptionalWorkflowRecoveryInstant(failed.latestFailedAt, run.finishedAt);
|
|
24
|
+
}
|
|
25
|
+
function finishWorkflowRecoveryFailedSummary(failed) {
|
|
26
|
+
return {
|
|
27
|
+
total: failed.runIds.size,
|
|
28
|
+
runIds: [...failed.runIds].sort(),
|
|
29
|
+
...failed.latestFailedAt === void 0 ? {} : { latestFailedAt: failed.latestFailedAt }
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
//#endregion
|
|
33
|
+
export { createWorkflowRecoveryFailedRunSummaryReducer };
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { WorkflowRecoveryLeaseSummary } from "../../types/summary.mjs";
|
|
2
|
+
import { WorkflowRunRecord } from "../../types/run.mjs";
|
|
3
|
+
import { WorkflowRecoveryTimestamp } from "./recovery-run-timestamps.mjs";
|
|
4
|
+
//#region src/engine/summary/recovery-lease-runs.d.ts
|
|
5
|
+
interface WorkflowRecoveryLeaseRunSummaryParts {
|
|
6
|
+
readonly lease: WorkflowRecoveryLeaseSummary;
|
|
7
|
+
readonly staleRunIds: readonly string[];
|
|
8
|
+
readonly nextLeaseExpires?: WorkflowRecoveryTimestamp;
|
|
9
|
+
}
|
|
10
|
+
interface WorkflowRecoveryLeaseRunSummaryReducer {
|
|
11
|
+
addRun(run: WorkflowRunRecord): void;
|
|
12
|
+
finish(): WorkflowRecoveryLeaseRunSummaryParts;
|
|
13
|
+
}
|
|
14
|
+
declare function createWorkflowRecoveryLeaseRunSummaryReducer(now: Temporal.Instant): WorkflowRecoveryLeaseRunSummaryReducer;
|
|
15
|
+
//#endregion
|
|
16
|
+
export { WorkflowRecoveryLeaseRunSummaryParts, WorkflowRecoveryLeaseRunSummaryReducer, createWorkflowRecoveryLeaseRunSummaryReducer };
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { earliestWorkflowRecoveryInstant, earliestWorkflowRecoveryTimestamp } from "./recovery-run-timestamps.mjs";
|
|
2
|
+
//#region src/engine/summary/recovery-lease-runs.ts
|
|
3
|
+
function createWorkflowRecoveryLeaseRunSummaryReducer(now) {
|
|
4
|
+
const lease = createWorkflowRecoveryLeaseRunAccumulator();
|
|
5
|
+
return {
|
|
6
|
+
addRun(run) {
|
|
7
|
+
addWorkflowRecoveryLeaseRun(lease, run, now);
|
|
8
|
+
},
|
|
9
|
+
finish() {
|
|
10
|
+
return {
|
|
11
|
+
lease: finishWorkflowRecoveryLeaseSummary(lease),
|
|
12
|
+
staleRunIds: [...lease.staleRunIds].sort(),
|
|
13
|
+
...lease.nextExpires === void 0 ? {} : { nextLeaseExpires: lease.nextExpires }
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
function createWorkflowRecoveryLeaseRunAccumulator() {
|
|
19
|
+
return {
|
|
20
|
+
runIds: /* @__PURE__ */ new Set(),
|
|
21
|
+
staleRunIds: /* @__PURE__ */ new Set(),
|
|
22
|
+
ownerlessRunIds: /* @__PURE__ */ new Set(),
|
|
23
|
+
missingExpiresAtRunIds: /* @__PURE__ */ new Set(),
|
|
24
|
+
invalidExpiresAtRunIds: /* @__PURE__ */ new Set(),
|
|
25
|
+
expiredRunIds: /* @__PURE__ */ new Set(),
|
|
26
|
+
workerIds: /* @__PURE__ */ new Set()
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
function addWorkflowRecoveryLeaseRun(lease, run, now) {
|
|
30
|
+
if (run.status !== "running") return;
|
|
31
|
+
lease.runIds.add(run.id);
|
|
32
|
+
if (run.workerId !== void 0) lease.workerIds.add(run.workerId);
|
|
33
|
+
else {
|
|
34
|
+
lease.staleRunIds.add(run.id);
|
|
35
|
+
lease.ownerlessRunIds.add(run.id);
|
|
36
|
+
}
|
|
37
|
+
if (run.leaseExpiresAt === void 0) {
|
|
38
|
+
lease.staleRunIds.add(run.id);
|
|
39
|
+
lease.missingExpiresAtRunIds.add(run.id);
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
if (Temporal.Instant.compare(run.leaseExpiresAt, now) <= 0) {
|
|
43
|
+
lease.staleRunIds.add(run.id);
|
|
44
|
+
lease.expiredRunIds.add(run.id);
|
|
45
|
+
lease.oldestStaleAt = earliestWorkflowRecoveryInstant(lease.oldestStaleAt, run.leaseExpiresAt);
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
if (run.workerId !== void 0) lease.nextExpires = earliestWorkflowRecoveryTimestamp(lease.nextExpires, run.id, run.leaseExpiresAt);
|
|
49
|
+
}
|
|
50
|
+
function finishWorkflowRecoveryLeaseSummary(lease) {
|
|
51
|
+
return {
|
|
52
|
+
total: lease.runIds.size,
|
|
53
|
+
stale: lease.staleRunIds.size,
|
|
54
|
+
runIds: [...lease.runIds].sort(),
|
|
55
|
+
staleRunIds: [...lease.staleRunIds].sort(),
|
|
56
|
+
ownerlessRunIds: [...lease.ownerlessRunIds].sort(),
|
|
57
|
+
missingExpiresAtRunIds: [...lease.missingExpiresAtRunIds].sort(),
|
|
58
|
+
invalidExpiresAtRunIds: [...lease.invalidExpiresAtRunIds].sort(),
|
|
59
|
+
expiredRunIds: [...lease.expiredRunIds].sort(),
|
|
60
|
+
workerIds: [...lease.workerIds].sort(),
|
|
61
|
+
...lease.nextExpires === void 0 ? {} : {
|
|
62
|
+
nextExpiresAt: lease.nextExpires.timestamp,
|
|
63
|
+
nextExpiringRunId: lease.nextExpires.runId
|
|
64
|
+
},
|
|
65
|
+
...lease.oldestStaleAt === void 0 ? {} : { oldestStaleAt: lease.oldestStaleAt }
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
//#endregion
|
|
69
|
+
export { createWorkflowRecoveryLeaseRunSummaryReducer };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { LockRecord } from "../../types/lock.mjs";
|
|
2
|
+
import { WorkflowRecoveryLockSummary } from "../../types/summary.mjs";
|
|
3
|
+
import { WorkflowStepAttemptRecord } from "../../types/step-attempts.mjs";
|
|
4
|
+
import { WorkflowRunRecord } from "../../types/run.mjs";
|
|
5
|
+
//#region src/engine/summary/recovery-locks.d.ts
|
|
6
|
+
interface WorkflowRecoveryLockWaitDetails {
|
|
7
|
+
readonly key: string;
|
|
8
|
+
readonly waitDeadlineAt?: Temporal.Instant;
|
|
9
|
+
}
|
|
10
|
+
interface WorkflowRecoveryLockSummaryReducer {
|
|
11
|
+
addLock(lock: LockRecord): void;
|
|
12
|
+
addLockWaitAttempt(attempt: WorkflowStepAttemptRecord): void;
|
|
13
|
+
finish(): WorkflowRecoveryLockSummary;
|
|
14
|
+
}
|
|
15
|
+
declare function createWorkflowRecoveryLockSummaryReducer(runs: readonly WorkflowRunRecord[], now: Temporal.Instant): WorkflowRecoveryLockSummaryReducer;
|
|
16
|
+
declare function workflowRecoveryLockWaitDetails(attempt: WorkflowStepAttemptRecord): WorkflowRecoveryLockWaitDetails | undefined;
|
|
17
|
+
//#endregion
|
|
18
|
+
export { WorkflowRecoveryLockSummaryReducer, WorkflowRecoveryLockWaitDetails, createWorkflowRecoveryLockSummaryReducer, workflowRecoveryLockWaitDetails };
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { WorkflowRetryableError } from "../../errors/failures.mjs";
|
|
2
|
+
import "../../errors/mod.mjs";
|
|
3
|
+
import { earliestWorkflowRecoveryInstant, earliestWorkflowRecoveryTimestamp } from "./recovery-run-timestamps.mjs";
|
|
4
|
+
//#region src/engine/summary/recovery-locks.ts
|
|
5
|
+
function createWorkflowRecoveryLockSummaryReducer(runs, now) {
|
|
6
|
+
const locks = createWorkflowRecoveryLockAccumulator();
|
|
7
|
+
const runById = new Map(runs.map((run) => [run.id, run]));
|
|
8
|
+
return {
|
|
9
|
+
addLock(lock) {
|
|
10
|
+
addWorkflowRecoveryLock(locks, lock, now);
|
|
11
|
+
},
|
|
12
|
+
addLockWaitAttempt(attempt) {
|
|
13
|
+
addWorkflowRecoveryLockWaitAttempt(locks, attempt, runById, now);
|
|
14
|
+
},
|
|
15
|
+
finish() {
|
|
16
|
+
return finishWorkflowRecoveryLockSummary(locks);
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
function createWorkflowRecoveryLockAccumulator() {
|
|
21
|
+
return {
|
|
22
|
+
dueWaitingRunIds: /* @__PURE__ */ new Set(),
|
|
23
|
+
holderIds: /* @__PURE__ */ new Set(),
|
|
24
|
+
keys: /* @__PURE__ */ new Set(),
|
|
25
|
+
staleKeys: /* @__PURE__ */ new Set(),
|
|
26
|
+
waitingKeys: /* @__PURE__ */ new Set(),
|
|
27
|
+
waitingRunIds: /* @__PURE__ */ new Set(),
|
|
28
|
+
waitingStepIds: /* @__PURE__ */ new Set()
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
function addWorkflowRecoveryLock(locks, lock, now) {
|
|
32
|
+
if (lock.releasedAt !== void 0) return;
|
|
33
|
+
locks.keys.add(lock.key);
|
|
34
|
+
if (lock.holderId !== void 0) locks.holderIds.add(lock.holderId);
|
|
35
|
+
if (Temporal.Instant.compare(lock.leaseExpiresAt, now) <= 0) {
|
|
36
|
+
locks.staleKeys.add(lock.key);
|
|
37
|
+
locks.oldestStaleAt = earliestWorkflowRecoveryInstant(locks.oldestStaleAt, lock.leaseExpiresAt);
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
locks.nextExpires = earliestWorkflowRecoveryLockExpiration(locks.nextExpires, lock.key, lock.leaseExpiresAt);
|
|
41
|
+
}
|
|
42
|
+
function addWorkflowRecoveryLockWaitAttempt(locks, attempt, runById, now) {
|
|
43
|
+
const details = workflowRecoveryLockWaitDetails(attempt);
|
|
44
|
+
if (details === void 0) return;
|
|
45
|
+
const run = runById.get(attempt.runId);
|
|
46
|
+
if (run === void 0 || run.status !== "waiting" || run.retryReason !== "step") return;
|
|
47
|
+
locks.waitingRunIds.add(attempt.runId);
|
|
48
|
+
locks.waitingStepIds.add(attempt.stepId);
|
|
49
|
+
locks.waitingKeys.add(details.key);
|
|
50
|
+
if (run.retryAt === void 0 || Temporal.Instant.compare(run.retryAt, now) <= 0) locks.dueWaitingRunIds.add(attempt.runId);
|
|
51
|
+
if (details.waitDeadlineAt !== void 0 && Temporal.Instant.compare(details.waitDeadlineAt, now) > 0) locks.nextWaitDeadline = earliestWorkflowRecoveryTimestamp(locks.nextWaitDeadline, attempt.runId, details.waitDeadlineAt);
|
|
52
|
+
}
|
|
53
|
+
function finishWorkflowRecoveryLockSummary(locks) {
|
|
54
|
+
return {
|
|
55
|
+
total: locks.keys.size,
|
|
56
|
+
stale: locks.staleKeys.size,
|
|
57
|
+
keys: [...locks.keys].sort(),
|
|
58
|
+
staleKeys: [...locks.staleKeys].sort(),
|
|
59
|
+
holderIds: [...locks.holderIds].sort(),
|
|
60
|
+
waitingRunIds: [...locks.waitingRunIds].sort(),
|
|
61
|
+
dueWaitingRunIds: [...locks.dueWaitingRunIds].sort(),
|
|
62
|
+
waitingStepIds: [...locks.waitingStepIds].sort(),
|
|
63
|
+
waitingKeys: [...locks.waitingKeys].sort(),
|
|
64
|
+
...locks.nextExpires === void 0 ? {} : {
|
|
65
|
+
nextExpiresAt: locks.nextExpires.timestamp,
|
|
66
|
+
nextExpiringKey: locks.nextExpires.key
|
|
67
|
+
},
|
|
68
|
+
...locks.oldestStaleAt === void 0 ? {} : { oldestStaleAt: locks.oldestStaleAt },
|
|
69
|
+
...locks.nextWaitDeadline === void 0 ? {} : {
|
|
70
|
+
nextWaitDeadlineAt: locks.nextWaitDeadline.timestamp,
|
|
71
|
+
nextWaitDeadlineRunId: locks.nextWaitDeadline.runId
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
function workflowRecoveryLockWaitDetails(attempt) {
|
|
76
|
+
const error = attempt.error;
|
|
77
|
+
if (!(attempt.status === "failed" && attempt.kind === "run" && error !== void 0 && WorkflowRetryableError.isLockAlreadyHeld(error) && typeof error.details?.key === "string" && error.details.key.trim() !== "")) return;
|
|
78
|
+
const waitDeadlineAt = workflowLockWaitDeadline(attempt);
|
|
79
|
+
return {
|
|
80
|
+
key: error.details.key,
|
|
81
|
+
...waitDeadlineAt === void 0 ? {} : { waitDeadlineAt }
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
function workflowLockWaitDeadline(attempt) {
|
|
85
|
+
const deadline = attempt.error?.details?.waitDeadlineAt;
|
|
86
|
+
if (!(typeof deadline === "string" && deadline.trim() !== "")) return;
|
|
87
|
+
try {
|
|
88
|
+
return Temporal.Instant.from(deadline);
|
|
89
|
+
} catch {
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
function earliestWorkflowRecoveryLockExpiration(current, key, timestamp) {
|
|
94
|
+
return current === void 0 || Temporal.Instant.compare(timestamp, current.timestamp) < 0 ? {
|
|
95
|
+
key,
|
|
96
|
+
timestamp
|
|
97
|
+
} : current;
|
|
98
|
+
}
|
|
99
|
+
//#endregion
|
|
100
|
+
export { createWorkflowRecoveryLockSummaryReducer, workflowRecoveryLockWaitDetails };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { WorkflowRecoveryMessageWaitSummary } from "../../types/summary.mjs";
|
|
2
|
+
import { WorkflowStepAttemptRecord } from "../../types/step-attempts.mjs";
|
|
3
|
+
import { EventRecord } from "../../types/events.mjs";
|
|
4
|
+
//#region src/engine/summary/recovery-message-waits.d.ts
|
|
5
|
+
interface WorkflowRecoveryMessageWaitSummaryReducer {
|
|
6
|
+
addAttempts(attempts: readonly WorkflowStepAttemptRecord[]): void;
|
|
7
|
+
finish(): WorkflowRecoveryMessageWaitSummary;
|
|
8
|
+
}
|
|
9
|
+
declare function createWorkflowRecoveryMessageWaitSummaryReducer(eventsByRunId: ReadonlyMap<string, readonly EventRecord[]>, now: Temporal.Instant): WorkflowRecoveryMessageWaitSummaryReducer;
|
|
10
|
+
//#endregion
|
|
11
|
+
export { WorkflowRecoveryMessageWaitSummaryReducer, createWorkflowRecoveryMessageWaitSummaryReducer };
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { WorkflowHistory } from "../../history/mod.mjs";
|
|
2
|
+
import { earliestWorkflowRecoveryTimestamp } from "./recovery-run-timestamps.mjs";
|
|
3
|
+
//#region src/engine/summary/recovery-message-waits.ts
|
|
4
|
+
function createWorkflowRecoveryMessageWaitSummaryReducer(eventsByRunId, now) {
|
|
5
|
+
const message = createMessageWaitAccumulator();
|
|
6
|
+
const historiesByRunId = workflowHistoriesByRunId(eventsByRunId);
|
|
7
|
+
return {
|
|
8
|
+
addAttempts(attempts) {
|
|
9
|
+
for (const attempt of attempts) addMessageWaitAttempt(message, attempt, historiesByRunId, now);
|
|
10
|
+
},
|
|
11
|
+
finish() {
|
|
12
|
+
return finishMessageWaitSummary(message);
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
function createMessageWaitAccumulator() {
|
|
17
|
+
return {
|
|
18
|
+
runIds: /* @__PURE__ */ new Set(),
|
|
19
|
+
readyRunIds: /* @__PURE__ */ new Set(),
|
|
20
|
+
timedOutRunIds: /* @__PURE__ */ new Set(),
|
|
21
|
+
readyStepIds: /* @__PURE__ */ new Set(),
|
|
22
|
+
timedOutStepIds: /* @__PURE__ */ new Set(),
|
|
23
|
+
messageIds: /* @__PURE__ */ new Set()
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
function addMessageWaitAttempt(message, attempt, historiesByRunId, now) {
|
|
27
|
+
if (attempt.status !== "running" || attempt.kind !== "message-wait") return;
|
|
28
|
+
message.runIds.add(attempt.runId);
|
|
29
|
+
if (!addReadyMessageWaitAttempt(message, attempt, historiesByRunId)) addTimedOutMessageWaitAttempt(message, attempt, now);
|
|
30
|
+
}
|
|
31
|
+
function addReadyMessageWaitAttempt(message, attempt, historiesByRunId) {
|
|
32
|
+
if (attempt.messageId === void 0) return false;
|
|
33
|
+
message.messageIds.add(attempt.messageId);
|
|
34
|
+
if (!messageWasDeliveredForAttempt(historiesByRunId.get(attempt.runId), attempt)) return false;
|
|
35
|
+
message.readyRunIds.add(attempt.runId);
|
|
36
|
+
message.readyStepIds.add(attempt.stepId);
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
function messageWasDeliveredForAttempt(history, attempt) {
|
|
40
|
+
return history !== void 0 && attempt.messageId !== void 0 && history.messageForWait(attempt.messageId, attempt.stepId, attempt.timeoutAt) !== void 0;
|
|
41
|
+
}
|
|
42
|
+
function addTimedOutMessageWaitAttempt(message, attempt, now) {
|
|
43
|
+
if (attempt.timeoutAt === void 0) return;
|
|
44
|
+
if (Temporal.Instant.compare(attempt.timeoutAt, now) <= 0) {
|
|
45
|
+
message.timedOutRunIds.add(attempt.runId);
|
|
46
|
+
message.timedOutStepIds.add(attempt.stepId);
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
message.nextTimeout = earliestWorkflowRecoveryTimestamp(message.nextTimeout, attempt.runId, attempt.timeoutAt);
|
|
50
|
+
}
|
|
51
|
+
function workflowHistoriesByRunId(eventsByRunId) {
|
|
52
|
+
const histories = /* @__PURE__ */ new Map();
|
|
53
|
+
for (const [runId, events] of eventsByRunId) histories.set(runId, new WorkflowHistory(events));
|
|
54
|
+
return histories;
|
|
55
|
+
}
|
|
56
|
+
function finishMessageWaitSummary(message) {
|
|
57
|
+
return {
|
|
58
|
+
active: message.runIds.size,
|
|
59
|
+
ready: message.readyRunIds.size,
|
|
60
|
+
timedOut: message.timedOutRunIds.size,
|
|
61
|
+
runIds: [...message.runIds].sort(),
|
|
62
|
+
readyRunIds: [...message.readyRunIds].sort(),
|
|
63
|
+
timedOutRunIds: [...message.timedOutRunIds].sort(),
|
|
64
|
+
readyStepIds: [...message.readyStepIds].sort(),
|
|
65
|
+
timedOutStepIds: [...message.timedOutStepIds].sort(),
|
|
66
|
+
messages: [...message.messageIds].sort(),
|
|
67
|
+
...message.nextTimeout === void 0 ? {} : {
|
|
68
|
+
nextTimeoutAt: message.nextTimeout.timestamp,
|
|
69
|
+
nextTimeoutRunId: message.nextTimeout.runId
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
//#endregion
|
|
74
|
+
export { createWorkflowRecoveryMessageWaitSummaryReducer };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { WorkflowRecoveryMissingImplementationSummary, WorkflowRecoveryRetrySummary } from "../../types/summary.mjs";
|
|
2
|
+
import { WorkflowRunRecord } from "../../types/run.mjs";
|
|
3
|
+
import { WorkflowRecoveryTimestamp } from "./recovery-run-timestamps.mjs";
|
|
4
|
+
//#region src/engine/summary/recovery-retry-runs.d.ts
|
|
5
|
+
interface WorkflowRecoveryRetryRunSummaryParts {
|
|
6
|
+
readonly retry: WorkflowRecoveryRetrySummary;
|
|
7
|
+
readonly missingImplementation: WorkflowRecoveryMissingImplementationSummary;
|
|
8
|
+
readonly dueRetryRunIds: readonly string[];
|
|
9
|
+
readonly nextRetry?: WorkflowRecoveryTimestamp;
|
|
10
|
+
}
|
|
11
|
+
interface WorkflowRecoveryRetryRunSummaryReducer {
|
|
12
|
+
addRun(run: WorkflowRunRecord): void;
|
|
13
|
+
finish(): WorkflowRecoveryRetryRunSummaryParts;
|
|
14
|
+
}
|
|
15
|
+
declare function createWorkflowRecoveryRetryRunSummaryReducer(now: Temporal.Instant): WorkflowRecoveryRetryRunSummaryReducer;
|
|
16
|
+
//#endregion
|
|
17
|
+
export { WorkflowRecoveryRetryRunSummaryParts, WorkflowRecoveryRetryRunSummaryReducer, createWorkflowRecoveryRetryRunSummaryReducer };
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { isScheduledWorkflowRunStatus } from "../../utility.mjs";
|
|
2
|
+
import { earliestWorkflowRecoveryTimestamp, isWorkflowRecoveryRunDueAt } from "./recovery-run-timestamps.mjs";
|
|
3
|
+
//#region src/engine/summary/recovery-retry-runs.ts
|
|
4
|
+
function createWorkflowRecoveryRetryRunSummaryReducer(now) {
|
|
5
|
+
const retry = createWorkflowRecoveryRetryRunAccumulator();
|
|
6
|
+
return {
|
|
7
|
+
addRun(run) {
|
|
8
|
+
addWorkflowRecoveryRetryRun(retry, run, now);
|
|
9
|
+
},
|
|
10
|
+
finish() {
|
|
11
|
+
return {
|
|
12
|
+
retry: finishWorkflowRecoveryRetrySummary(retry),
|
|
13
|
+
missingImplementation: finishWorkflowRecoveryMissingImplementationSummary(retry),
|
|
14
|
+
dueRetryRunIds: [...retry.dueRunIds].sort(),
|
|
15
|
+
...retry.next === void 0 ? {} : { nextRetry: retry.next }
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
function createWorkflowRecoveryRetryRunAccumulator() {
|
|
21
|
+
return {
|
|
22
|
+
runIds: /* @__PURE__ */ new Set(),
|
|
23
|
+
dueRunIds: /* @__PURE__ */ new Set(),
|
|
24
|
+
missingImplementationRunIds: /* @__PURE__ */ new Set(),
|
|
25
|
+
dueMissingImplementationRunIds: /* @__PURE__ */ new Set()
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
function addWorkflowRecoveryRetryRun(retry, run, now) {
|
|
29
|
+
if (!isScheduledWorkflowRunStatus(run.status) || run.retryReason === void 0) return;
|
|
30
|
+
retry.runIds.add(run.id);
|
|
31
|
+
const retryAt = run.retryAt;
|
|
32
|
+
const due = isWorkflowRecoveryRunDueAt(retryAt, now);
|
|
33
|
+
if (due) retry.dueRunIds.add(run.id);
|
|
34
|
+
else if (retryAt !== void 0) retry.next = earliestWorkflowRecoveryTimestamp(retry.next, run.id, retryAt);
|
|
35
|
+
if (run.retryReason !== "missing_implementation") return;
|
|
36
|
+
retry.missingImplementationRunIds.add(run.id);
|
|
37
|
+
if (due) retry.dueMissingImplementationRunIds.add(run.id);
|
|
38
|
+
else if (retryAt !== void 0) retry.nextMissingImplementation = earliestWorkflowRecoveryTimestamp(retry.nextMissingImplementation, run.id, retryAt);
|
|
39
|
+
}
|
|
40
|
+
function finishWorkflowRecoveryRetrySummary(retry) {
|
|
41
|
+
return {
|
|
42
|
+
total: retry.runIds.size,
|
|
43
|
+
due: retry.dueRunIds.size,
|
|
44
|
+
runIds: [...retry.runIds].sort(),
|
|
45
|
+
dueRunIds: [...retry.dueRunIds].sort(),
|
|
46
|
+
...retry.next === void 0 ? {} : {
|
|
47
|
+
nextRetryAt: retry.next.timestamp,
|
|
48
|
+
nextRetryRunId: retry.next.runId
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
function finishWorkflowRecoveryMissingImplementationSummary(retry) {
|
|
53
|
+
return {
|
|
54
|
+
total: retry.missingImplementationRunIds.size,
|
|
55
|
+
due: retry.dueMissingImplementationRunIds.size,
|
|
56
|
+
runIds: [...retry.missingImplementationRunIds].sort(),
|
|
57
|
+
dueRunIds: [...retry.dueMissingImplementationRunIds].sort(),
|
|
58
|
+
...retry.nextMissingImplementation === void 0 ? {} : {
|
|
59
|
+
nextRetryAt: retry.nextMissingImplementation.timestamp,
|
|
60
|
+
nextRetryRunId: retry.nextMissingImplementation.runId
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
//#endregion
|
|
65
|
+
export { createWorkflowRecoveryRetryRunSummaryReducer };
|