@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,13 @@
|
|
|
1
|
+
import { RunId } from "../../types/run-id.mjs";
|
|
2
|
+
import "../../types/run.mjs";
|
|
3
|
+
//#region src/engine/summary/recovery-run-timestamps.d.ts
|
|
4
|
+
interface WorkflowRecoveryTimestamp {
|
|
5
|
+
readonly runId: RunId;
|
|
6
|
+
readonly timestamp: Temporal.Instant;
|
|
7
|
+
}
|
|
8
|
+
declare function isWorkflowRecoveryRunDueAt(timestamp: Temporal.Instant | undefined, now: Temporal.Instant): boolean;
|
|
9
|
+
declare function earliestWorkflowRecoveryTimestamp(current: WorkflowRecoveryTimestamp | undefined, runId: RunId, timestamp: Temporal.Instant): WorkflowRecoveryTimestamp;
|
|
10
|
+
declare function earliestWorkflowRecoveryInstant(current: Temporal.Instant | undefined, timestamp: Temporal.Instant): Temporal.Instant;
|
|
11
|
+
declare function latestOptionalWorkflowRecoveryInstant(current: Temporal.Instant | undefined, timestamp: Temporal.Instant | undefined): Temporal.Instant | undefined;
|
|
12
|
+
//#endregion
|
|
13
|
+
export { WorkflowRecoveryTimestamp, earliestWorkflowRecoveryInstant, earliestWorkflowRecoveryTimestamp, isWorkflowRecoveryRunDueAt, latestOptionalWorkflowRecoveryInstant };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
//#region src/engine/summary/recovery-run-timestamps.ts
|
|
2
|
+
function isWorkflowRecoveryRunDueAt(timestamp, now) {
|
|
3
|
+
return timestamp === void 0 || Temporal.Instant.compare(timestamp, now) <= 0;
|
|
4
|
+
}
|
|
5
|
+
function earliestWorkflowRecoveryTimestamp(current, runId, timestamp) {
|
|
6
|
+
return current === void 0 || Temporal.Instant.compare(timestamp, current.timestamp) < 0 ? {
|
|
7
|
+
runId,
|
|
8
|
+
timestamp
|
|
9
|
+
} : current;
|
|
10
|
+
}
|
|
11
|
+
function earliestWorkflowRecoveryInstant(current, timestamp) {
|
|
12
|
+
return current === void 0 || Temporal.Instant.compare(timestamp, current) < 0 ? timestamp : current;
|
|
13
|
+
}
|
|
14
|
+
function latestOptionalWorkflowRecoveryInstant(current, timestamp) {
|
|
15
|
+
return timestamp === void 0 || current !== void 0 && Temporal.Instant.compare(timestamp, current) <= 0 ? current : timestamp;
|
|
16
|
+
}
|
|
17
|
+
//#endregion
|
|
18
|
+
export { earliestWorkflowRecoveryInstant, earliestWorkflowRecoveryTimestamp, isWorkflowRecoveryRunDueAt, latestOptionalWorkflowRecoveryInstant };
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { WorkflowRecoveryDueSummary, WorkflowRecoveryFailedSummary, WorkflowRecoveryLeaseSummary, 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-runs.d.ts
|
|
5
|
+
interface WorkflowRecoveryRunSummaryParts {
|
|
6
|
+
readonly total: number;
|
|
7
|
+
readonly recoverableRunIds: readonly string[];
|
|
8
|
+
readonly due: WorkflowRecoveryDueSummary;
|
|
9
|
+
readonly lease: WorkflowRecoveryLeaseSummary;
|
|
10
|
+
readonly retry: WorkflowRecoveryRetrySummary;
|
|
11
|
+
readonly missingImplementation: WorkflowRecoveryMissingImplementationSummary;
|
|
12
|
+
readonly failed: WorkflowRecoveryFailedSummary;
|
|
13
|
+
readonly nextAvailable?: WorkflowRecoveryTimestamp;
|
|
14
|
+
readonly nextLeaseExpires?: WorkflowRecoveryTimestamp;
|
|
15
|
+
readonly nextRetry?: WorkflowRecoveryTimestamp;
|
|
16
|
+
}
|
|
17
|
+
interface WorkflowRecoveryRunSummaryReducer {
|
|
18
|
+
addRun(run: WorkflowRunRecord): void;
|
|
19
|
+
finish(): WorkflowRecoveryRunSummaryParts;
|
|
20
|
+
}
|
|
21
|
+
declare function createWorkflowRecoveryRunSummaryReducer(now: Temporal.Instant): WorkflowRecoveryRunSummaryReducer;
|
|
22
|
+
//#endregion
|
|
23
|
+
export { WorkflowRecoveryRunSummaryParts, WorkflowRecoveryRunSummaryReducer, createWorkflowRecoveryRunSummaryReducer };
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { createWorkflowRecoveryDueRunSummaryReducer } from "./recovery-due-runs.mjs";
|
|
2
|
+
import { createWorkflowRecoveryFailedRunSummaryReducer } from "./recovery-failed-runs.mjs";
|
|
3
|
+
import { createWorkflowRecoveryLeaseRunSummaryReducer } from "./recovery-lease-runs.mjs";
|
|
4
|
+
import { createWorkflowRecoveryRetryRunSummaryReducer } from "./recovery-retry-runs.mjs";
|
|
5
|
+
//#region src/engine/summary/recovery-runs.ts
|
|
6
|
+
function createWorkflowRecoveryRunSummaryReducer(now) {
|
|
7
|
+
const due = createWorkflowRecoveryDueRunSummaryReducer(now);
|
|
8
|
+
const lease = createWorkflowRecoveryLeaseRunSummaryReducer(now);
|
|
9
|
+
const retry = createWorkflowRecoveryRetryRunSummaryReducer(now);
|
|
10
|
+
const failed = createWorkflowRecoveryFailedRunSummaryReducer();
|
|
11
|
+
let total = 0;
|
|
12
|
+
return {
|
|
13
|
+
addRun(run) {
|
|
14
|
+
total++;
|
|
15
|
+
due.addRun(run);
|
|
16
|
+
lease.addRun(run);
|
|
17
|
+
retry.addRun(run);
|
|
18
|
+
failed.addRun(run);
|
|
19
|
+
},
|
|
20
|
+
finish() {
|
|
21
|
+
const dueParts = due.finish();
|
|
22
|
+
const leaseParts = lease.finish();
|
|
23
|
+
const retryParts = retry.finish();
|
|
24
|
+
const failedParts = failed.finish();
|
|
25
|
+
return {
|
|
26
|
+
total,
|
|
27
|
+
recoverableRunIds: finishWorkflowRecoveryRecoverableRunIds(dueParts, leaseParts, retryParts, failedParts),
|
|
28
|
+
due: dueParts.due,
|
|
29
|
+
lease: leaseParts.lease,
|
|
30
|
+
retry: retryParts.retry,
|
|
31
|
+
missingImplementation: retryParts.missingImplementation,
|
|
32
|
+
failed: failedParts.failed,
|
|
33
|
+
...finishWorkflowRecoveryNextSummary(dueParts, leaseParts, retryParts)
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
function finishWorkflowRecoveryRecoverableRunIds(due, lease, retry, failed) {
|
|
39
|
+
return [.../* @__PURE__ */ new Set([
|
|
40
|
+
...due.dueRunIds,
|
|
41
|
+
...lease.staleRunIds,
|
|
42
|
+
...retry.dueRetryRunIds,
|
|
43
|
+
...failed.failedRunIds
|
|
44
|
+
])].sort();
|
|
45
|
+
}
|
|
46
|
+
function finishWorkflowRecoveryNextSummary(due, lease, retry) {
|
|
47
|
+
return {
|
|
48
|
+
...due.nextAvailable === void 0 ? {} : { nextAvailable: due.nextAvailable },
|
|
49
|
+
...lease.nextLeaseExpires === void 0 ? {} : { nextLeaseExpires: lease.nextLeaseExpires },
|
|
50
|
+
...retry.nextRetry === void 0 ? {} : { nextRetry: retry.nextRetry }
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
//#endregion
|
|
54
|
+
export { createWorkflowRecoveryRunSummaryReducer };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ScheduleRecord } from "../../types/schedule.mjs";
|
|
2
|
+
import { WorkflowRecoveryScheduleSummary } from "../../types/summary.mjs";
|
|
3
|
+
//#region src/engine/summary/recovery-schedules.d.ts
|
|
4
|
+
interface WorkflowRecoveryScheduleSummaryReducer {
|
|
5
|
+
addSchedule(schedule: ScheduleRecord): void;
|
|
6
|
+
finish(): WorkflowRecoveryScheduleSummary;
|
|
7
|
+
}
|
|
8
|
+
declare function createWorkflowRecoveryScheduleSummaryReducer(now: Temporal.Instant): WorkflowRecoveryScheduleSummaryReducer;
|
|
9
|
+
//#endregion
|
|
10
|
+
export { WorkflowRecoveryScheduleSummaryReducer, createWorkflowRecoveryScheduleSummaryReducer };
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
//#region src/engine/summary/recovery-schedules.ts
|
|
2
|
+
function createWorkflowRecoveryScheduleSummaryReducer(now) {
|
|
3
|
+
const schedules = createWorkflowRecoveryScheduleAccumulator();
|
|
4
|
+
return {
|
|
5
|
+
addSchedule(schedule) {
|
|
6
|
+
addWorkflowRecoverySchedule(schedules, schedule, now);
|
|
7
|
+
},
|
|
8
|
+
finish() {
|
|
9
|
+
return finishWorkflowRecoveryScheduleSummary(schedules);
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
function createWorkflowRecoveryScheduleAccumulator() {
|
|
14
|
+
return {
|
|
15
|
+
dueScheduleIds: /* @__PURE__ */ new Set(),
|
|
16
|
+
invalidNextFireScheduleIds: /* @__PURE__ */ new Set(),
|
|
17
|
+
scheduleIds: /* @__PURE__ */ new Set()
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
function addWorkflowRecoverySchedule(schedules, schedule, now) {
|
|
21
|
+
if (schedule.status !== "active") return;
|
|
22
|
+
schedules.scheduleIds.add(schedule.id);
|
|
23
|
+
if (Temporal.Instant.compare(schedule.nextFireAt, now) <= 0) schedules.dueScheduleIds.add(schedule.id);
|
|
24
|
+
schedules.nextFire = earliestWorkflowRecoveryScheduleFire(schedules.nextFire, schedule.id, schedule.nextFireAt);
|
|
25
|
+
}
|
|
26
|
+
function finishWorkflowRecoveryScheduleSummary(schedules) {
|
|
27
|
+
return {
|
|
28
|
+
total: schedules.scheduleIds.size,
|
|
29
|
+
due: schedules.dueScheduleIds.size,
|
|
30
|
+
scheduleIds: [...schedules.scheduleIds].sort(),
|
|
31
|
+
dueScheduleIds: [...schedules.dueScheduleIds].sort(),
|
|
32
|
+
invalidNextFireScheduleIds: [...schedules.invalidNextFireScheduleIds].sort(),
|
|
33
|
+
...schedules.nextFire === void 0 ? {} : {
|
|
34
|
+
nextFireAt: schedules.nextFire.timestamp,
|
|
35
|
+
nextFireScheduleId: schedules.nextFire.scheduleId
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
function earliestWorkflowRecoveryScheduleFire(current, scheduleId, timestamp) {
|
|
40
|
+
return current === void 0 || Temporal.Instant.compare(timestamp, current.timestamp) < 0 ? {
|
|
41
|
+
scheduleId,
|
|
42
|
+
timestamp
|
|
43
|
+
} : current;
|
|
44
|
+
}
|
|
45
|
+
//#endregion
|
|
46
|
+
export { createWorkflowRecoveryScheduleSummaryReducer };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { WorkflowRecoverySleepWaitSummary } from "../../types/summary.mjs";
|
|
2
|
+
import { WorkflowStepAttemptRecord } from "../../types/step-attempts.mjs";
|
|
3
|
+
//#region src/engine/summary/recovery-sleep-waits.d.ts
|
|
4
|
+
interface WorkflowRecoverySleepWaitSummaryReducer {
|
|
5
|
+
addAttempts(attempts: readonly WorkflowStepAttemptRecord[]): void;
|
|
6
|
+
finish(): WorkflowRecoverySleepWaitSummary;
|
|
7
|
+
}
|
|
8
|
+
declare function createWorkflowRecoverySleepWaitSummaryReducer(now: Temporal.Instant): WorkflowRecoverySleepWaitSummaryReducer;
|
|
9
|
+
//#endregion
|
|
10
|
+
export { WorkflowRecoverySleepWaitSummaryReducer, createWorkflowRecoverySleepWaitSummaryReducer };
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { earliestWorkflowRecoveryTimestamp } from "./recovery-run-timestamps.mjs";
|
|
2
|
+
//#region src/engine/summary/recovery-sleep-waits.ts
|
|
3
|
+
function createWorkflowRecoverySleepWaitSummaryReducer(now) {
|
|
4
|
+
const sleep = createWorkflowSleepWaitAccumulator();
|
|
5
|
+
return {
|
|
6
|
+
addAttempts(attempts) {
|
|
7
|
+
for (const attempt of attempts) addWorkflowSleepWaitAttempt(sleep, attempt, now);
|
|
8
|
+
},
|
|
9
|
+
finish() {
|
|
10
|
+
return finishWorkflowSleepWaitSummary(sleep);
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
function createWorkflowSleepWaitAccumulator() {
|
|
15
|
+
return {
|
|
16
|
+
runIds: /* @__PURE__ */ new Set(),
|
|
17
|
+
dueRunIds: /* @__PURE__ */ new Set(),
|
|
18
|
+
dueStepIds: /* @__PURE__ */ new Set(),
|
|
19
|
+
invalidUntilRunIds: /* @__PURE__ */ new Set()
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
function addWorkflowSleepWaitAttempt(sleep, attempt, now) {
|
|
23
|
+
if (attempt.status !== "running" || attempt.kind !== "sleep") return;
|
|
24
|
+
sleep.runIds.add(attempt.runId);
|
|
25
|
+
if (attempt.until === void 0) {
|
|
26
|
+
sleep.dueRunIds.add(attempt.runId);
|
|
27
|
+
sleep.dueStepIds.add(attempt.stepId);
|
|
28
|
+
sleep.invalidUntilRunIds.add(attempt.runId);
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
if (Temporal.Instant.compare(attempt.until, now) <= 0) {
|
|
32
|
+
sleep.dueRunIds.add(attempt.runId);
|
|
33
|
+
sleep.dueStepIds.add(attempt.stepId);
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
sleep.nextWake = earliestWorkflowRecoveryTimestamp(sleep.nextWake, attempt.runId, attempt.until);
|
|
37
|
+
}
|
|
38
|
+
function finishWorkflowSleepWaitSummary(sleep) {
|
|
39
|
+
return {
|
|
40
|
+
active: sleep.runIds.size,
|
|
41
|
+
due: sleep.dueRunIds.size,
|
|
42
|
+
runIds: [...sleep.runIds].sort(),
|
|
43
|
+
dueRunIds: [...sleep.dueRunIds].sort(),
|
|
44
|
+
dueStepIds: [...sleep.dueStepIds].sort(),
|
|
45
|
+
invalidUntilRunIds: [...sleep.invalidUntilRunIds].sort(),
|
|
46
|
+
...sleep.nextWake === void 0 ? {} : {
|
|
47
|
+
nextWakeAt: sleep.nextWake.timestamp,
|
|
48
|
+
nextWakeRunId: sleep.nextWake.runId
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
//#endregion
|
|
53
|
+
export { createWorkflowRecoverySleepWaitSummaryReducer };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { WorkflowRecoveryWaitSummary } from "../../types/summary.mjs";
|
|
2
|
+
import { WorkflowStepAttemptRecord } from "../../types/step-attempts.mjs";
|
|
3
|
+
import { WorkflowRunRecord } from "../../types/run.mjs";
|
|
4
|
+
import { EventRecord } from "../../types/events.mjs";
|
|
5
|
+
//#region src/engine/summary/recovery-waits.d.ts
|
|
6
|
+
interface WorkflowRecoveryWaitInputs {
|
|
7
|
+
readonly sleepAttempts?: readonly WorkflowStepAttemptRecord[];
|
|
8
|
+
readonly messageWaitAttempts?: readonly WorkflowStepAttemptRecord[];
|
|
9
|
+
readonly childWorkflowAttempts?: readonly WorkflowStepAttemptRecord[];
|
|
10
|
+
readonly childRuns?: readonly WorkflowRunRecord[];
|
|
11
|
+
readonly eventsByRunId?: ReadonlyMap<string, readonly EventRecord[]>;
|
|
12
|
+
}
|
|
13
|
+
interface WorkflowRecoveryWaitSummaryReducer {
|
|
14
|
+
addSleepAttempts(attempts: readonly WorkflowStepAttemptRecord[]): void;
|
|
15
|
+
addMessageWaitAttempts(attempts: readonly WorkflowStepAttemptRecord[]): void;
|
|
16
|
+
addChildWorkflowAttempts(attempts: readonly WorkflowStepAttemptRecord[]): void;
|
|
17
|
+
finish(): WorkflowRecoveryWaitSummary;
|
|
18
|
+
}
|
|
19
|
+
declare function createWorkflowRecoveryWaitSummaryReducer(inputs: WorkflowRecoveryWaitInputs, now: Temporal.Instant): WorkflowRecoveryWaitSummaryReducer;
|
|
20
|
+
//#endregion
|
|
21
|
+
export { WorkflowRecoveryWaitInputs, WorkflowRecoveryWaitSummaryReducer, createWorkflowRecoveryWaitSummaryReducer };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { createWorkflowRecoveryChildWorkflowWaitSummaryReducer } from "./recovery-child-workflow-waits.mjs";
|
|
2
|
+
import { createWorkflowRecoveryMessageWaitSummaryReducer } from "./recovery-message-waits.mjs";
|
|
3
|
+
import { createWorkflowRecoverySleepWaitSummaryReducer } from "./recovery-sleep-waits.mjs";
|
|
4
|
+
//#region src/engine/summary/recovery-waits.ts
|
|
5
|
+
function createWorkflowRecoveryWaitSummaryReducer(inputs, now) {
|
|
6
|
+
const sleep = createWorkflowRecoverySleepWaitSummaryReducer(now);
|
|
7
|
+
const message = createWorkflowRecoveryMessageWaitSummaryReducer(inputs.eventsByRunId ?? /* @__PURE__ */ new Map(), now);
|
|
8
|
+
const childWorkflow = createWorkflowRecoveryChildWorkflowWaitSummaryReducer(inputs.childRuns ?? [], now);
|
|
9
|
+
return {
|
|
10
|
+
addSleepAttempts(attempts) {
|
|
11
|
+
sleep.addAttempts(attempts);
|
|
12
|
+
},
|
|
13
|
+
addMessageWaitAttempts(attempts) {
|
|
14
|
+
message.addAttempts(attempts);
|
|
15
|
+
},
|
|
16
|
+
addChildWorkflowAttempts(attempts) {
|
|
17
|
+
childWorkflow.addAttempts(attempts);
|
|
18
|
+
},
|
|
19
|
+
finish() {
|
|
20
|
+
return {
|
|
21
|
+
sleep: sleep.finish(),
|
|
22
|
+
message: message.finish(),
|
|
23
|
+
childWorkflow: childWorkflow.finish()
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
//#endregion
|
|
29
|
+
export { createWorkflowRecoveryWaitSummaryReducer };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { WorkflowRunRecord } from "../../types/run.mjs";
|
|
2
|
+
//#region src/engine/summary/run-availability.d.ts
|
|
3
|
+
interface WorkflowRunAvailabilitySummaryFields {
|
|
4
|
+
readonly nextAvailableAt?: Temporal.Instant;
|
|
5
|
+
readonly oldestPendingAt?: Temporal.Instant;
|
|
6
|
+
readonly oldestRunningAt?: Temporal.Instant;
|
|
7
|
+
}
|
|
8
|
+
declare function createWorkflowRunAvailabilitySummaryReducer(): {
|
|
9
|
+
readonly addRun: (run: WorkflowRunRecord) => void;
|
|
10
|
+
readonly finish: () => WorkflowRunAvailabilitySummaryFields;
|
|
11
|
+
};
|
|
12
|
+
//#endregion
|
|
13
|
+
export { WorkflowRunAvailabilitySummaryFields, createWorkflowRunAvailabilitySummaryReducer };
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { isScheduledWorkflowRunStatus } from "../../utility.mjs";
|
|
2
|
+
import { earliestOptionalTimestamp } from "../../temporal.mjs";
|
|
3
|
+
//#region src/engine/summary/run-availability.ts
|
|
4
|
+
function createWorkflowRunAvailabilitySummaryReducer() {
|
|
5
|
+
const availability = createWorkflowRunAvailabilityAccumulator();
|
|
6
|
+
return {
|
|
7
|
+
addRun(run) {
|
|
8
|
+
addWorkflowRunAvailability(availability, run);
|
|
9
|
+
},
|
|
10
|
+
finish() {
|
|
11
|
+
return finishWorkflowRunAvailabilitySummary(availability);
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
function createWorkflowRunAvailabilityAccumulator() {
|
|
16
|
+
return {};
|
|
17
|
+
}
|
|
18
|
+
function addWorkflowRunAvailability(availability, run) {
|
|
19
|
+
if (isScheduledWorkflowRunStatus(run.status)) setWorkflowRunAvailabilityScheduled(availability, run);
|
|
20
|
+
if (run.status === "running") setWorkflowRunAvailabilityRunning(availability, run);
|
|
21
|
+
}
|
|
22
|
+
function setWorkflowRunAvailabilityScheduled(availability, run) {
|
|
23
|
+
availability.nextAvailableAt = earliestOptionalTimestamp(availability.nextAvailableAt, run.availableAt);
|
|
24
|
+
availability.oldestPendingAt = earliestOptionalTimestamp(availability.oldestPendingAt, run.createdAt);
|
|
25
|
+
}
|
|
26
|
+
function setWorkflowRunAvailabilityRunning(availability, run) {
|
|
27
|
+
availability.oldestRunningAt = earliestOptionalTimestamp(availability.oldestRunningAt, run.startedAt ?? run.createdAt);
|
|
28
|
+
}
|
|
29
|
+
function finishWorkflowRunAvailabilitySummary(availability) {
|
|
30
|
+
return {
|
|
31
|
+
...availability.nextAvailableAt === void 0 ? {} : { nextAvailableAt: availability.nextAvailableAt },
|
|
32
|
+
...availability.oldestPendingAt === void 0 ? {} : { oldestPendingAt: availability.oldestPendingAt },
|
|
33
|
+
...availability.oldestRunningAt === void 0 ? {} : { oldestRunningAt: availability.oldestRunningAt }
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
//#endregion
|
|
37
|
+
export { createWorkflowRunAvailabilitySummaryReducer };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { WorkflowRunCleanupSummary } from "../../types/summary.mjs";
|
|
2
|
+
import { WorkflowRunRecord } from "../../types/run.mjs";
|
|
3
|
+
//#region src/engine/summary/run-cleanup.d.ts
|
|
4
|
+
interface WorkflowRunCleanupSummaryFields {
|
|
5
|
+
readonly cleanup?: WorkflowRunCleanupSummary;
|
|
6
|
+
}
|
|
7
|
+
interface WorkflowRunCleanupSummaryReducer {
|
|
8
|
+
readonly addRun: (run: WorkflowRunRecord) => void;
|
|
9
|
+
readonly finish: () => WorkflowRunCleanupSummaryFields;
|
|
10
|
+
}
|
|
11
|
+
/** Creates an accumulator for terminal-run cleanup eligibility summary fields. */
|
|
12
|
+
declare function createWorkflowRunCleanupSummaryReducer(cutoff: Temporal.Instant | undefined): WorkflowRunCleanupSummaryReducer;
|
|
13
|
+
//#endregion
|
|
14
|
+
export { WorkflowRunCleanupSummaryReducer, createWorkflowRunCleanupSummaryReducer };
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { earliestOptionalTimestamp, latestOptionalTimestamp } from "../../temporal.mjs";
|
|
2
|
+
import { createWorkflowTerminalRunStatusCounts, createWorkflowTerminalRunStatusRunIds, sortedWorkflowTerminalRunStatusRunIds } from "./run-metrics.mjs";
|
|
3
|
+
//#region src/engine/summary/run-cleanup.ts
|
|
4
|
+
/** Creates an accumulator for terminal-run cleanup eligibility summary fields. */
|
|
5
|
+
function createWorkflowRunCleanupSummaryReducer(cutoff) {
|
|
6
|
+
const cleanup = createWorkflowRunCleanupAccumulator();
|
|
7
|
+
return {
|
|
8
|
+
addRun(run) {
|
|
9
|
+
addWorkflowRunCleanupEligibility(cleanup, run, cutoff);
|
|
10
|
+
},
|
|
11
|
+
finish() {
|
|
12
|
+
return finishWorkflowRunCleanupSummary(cleanup, cutoff);
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
function createWorkflowRunCleanupAccumulator() {
|
|
17
|
+
return {
|
|
18
|
+
eligibleRuns: 0,
|
|
19
|
+
status: createWorkflowTerminalRunStatusCounts(),
|
|
20
|
+
statusRunIds: createWorkflowTerminalRunStatusRunIds()
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
function addWorkflowRunCleanupEligibility(cleanup, run, cutoff) {
|
|
24
|
+
if (cutoff === void 0 || run.status !== "completed" && run.status !== "failed" && run.status !== "canceled" || run.finishedAt === void 0 || Temporal.Instant.compare(run.finishedAt, cutoff) >= 0) return;
|
|
25
|
+
cleanup.eligibleRuns++;
|
|
26
|
+
cleanup.status[run.status]++;
|
|
27
|
+
cleanup.statusRunIds[run.status].push(run.id);
|
|
28
|
+
setWorkflowRunCleanupFinishedRange(cleanup, run);
|
|
29
|
+
}
|
|
30
|
+
function setWorkflowRunCleanupFinishedRange(cleanup, run) {
|
|
31
|
+
cleanup.oldestFinishedAt = earliestOptionalTimestamp(cleanup.oldestFinishedAt, run.finishedAt);
|
|
32
|
+
cleanup.newestFinishedAt = latestOptionalTimestamp(cleanup.newestFinishedAt, run.finishedAt);
|
|
33
|
+
}
|
|
34
|
+
function finishWorkflowRunCleanupSummary(cleanup, cutoff) {
|
|
35
|
+
return cutoff === void 0 ? {} : { cleanup: {
|
|
36
|
+
eligibleRuns: cleanup.eligibleRuns,
|
|
37
|
+
status: cleanup.status,
|
|
38
|
+
statusRunIds: sortedWorkflowTerminalRunStatusRunIds(cleanup.statusRunIds),
|
|
39
|
+
...cleanup.oldestFinishedAt === void 0 ? {} : { oldestFinishedAt: cleanup.oldestFinishedAt },
|
|
40
|
+
...cleanup.newestFinishedAt === void 0 ? {} : { newestFinishedAt: cleanup.newestFinishedAt }
|
|
41
|
+
} };
|
|
42
|
+
}
|
|
43
|
+
//#endregion
|
|
44
|
+
export { createWorkflowRunCleanupSummaryReducer };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { WorkflowRunFailureSummary } from "../../types/summary.mjs";
|
|
2
|
+
import { WorkflowRunRecord } from "../../types/run.mjs";
|
|
3
|
+
//#region src/engine/summary/run-failure.d.ts
|
|
4
|
+
interface WorkflowRunFailureSummaryFields {
|
|
5
|
+
readonly failure?: WorkflowRunFailureSummary;
|
|
6
|
+
}
|
|
7
|
+
interface WorkflowRunFailureSummaryReducer {
|
|
8
|
+
readonly addRun: (run: WorkflowRunRecord) => void;
|
|
9
|
+
readonly finish: () => WorkflowRunFailureSummaryFields;
|
|
10
|
+
}
|
|
11
|
+
/** Creates an accumulator for failed-run summary fields. */
|
|
12
|
+
declare function createWorkflowRunFailureSummaryReducer(): WorkflowRunFailureSummaryReducer;
|
|
13
|
+
//#endregion
|
|
14
|
+
export { WorkflowRunFailureSummaryReducer, createWorkflowRunFailureSummaryReducer };
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { latestOptionalTimestamp } from "../../temporal.mjs";
|
|
2
|
+
//#region src/engine/summary/run-failure.ts
|
|
3
|
+
/** Creates an accumulator for failed-run summary fields. */
|
|
4
|
+
function createWorkflowRunFailureSummaryReducer() {
|
|
5
|
+
const failure = createWorkflowRunFailureAccumulator();
|
|
6
|
+
return {
|
|
7
|
+
addRun(run) {
|
|
8
|
+
if (run.status === "failed") addWorkflowRunFailure(failure, run);
|
|
9
|
+
},
|
|
10
|
+
finish() {
|
|
11
|
+
return finishWorkflowRunFailureSummary(failure);
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
function createWorkflowRunFailureAccumulator() {
|
|
16
|
+
return {
|
|
17
|
+
total: 0,
|
|
18
|
+
failedRunIds: /* @__PURE__ */ new Set(),
|
|
19
|
+
errors: /* @__PURE__ */ new Map()
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
function addWorkflowRunFailure(failure, run) {
|
|
23
|
+
failure.total++;
|
|
24
|
+
failure.failedRunIds.add(run.id);
|
|
25
|
+
setWorkflowRunFailureLatestFailure(failure, run);
|
|
26
|
+
addWorkflowRunFailureError(failure, run);
|
|
27
|
+
}
|
|
28
|
+
function setWorkflowRunFailureLatestFailure(failure, run) {
|
|
29
|
+
failure.latestFailedAt = latestOptionalTimestamp(failure.latestFailedAt, run.finishedAt);
|
|
30
|
+
}
|
|
31
|
+
function addWorkflowRunFailureError(failure, run) {
|
|
32
|
+
const errorName = run.error?.name ?? "Error";
|
|
33
|
+
const current = failure.errors.get(errorName) ?? {
|
|
34
|
+
count: 0,
|
|
35
|
+
failedRunIds: /* @__PURE__ */ new Set()
|
|
36
|
+
};
|
|
37
|
+
current.count++;
|
|
38
|
+
current.failedRunIds.add(run.id);
|
|
39
|
+
setWorkflowRunFailureErrorLatestFailure(current, run);
|
|
40
|
+
failure.errors.set(errorName, current);
|
|
41
|
+
}
|
|
42
|
+
function setWorkflowRunFailureErrorLatestFailure(error, run) {
|
|
43
|
+
error.latestFailedAt = latestOptionalTimestamp(error.latestFailedAt, run.finishedAt);
|
|
44
|
+
}
|
|
45
|
+
function finishWorkflowRunFailureSummary(failure) {
|
|
46
|
+
return failure.total === 0 ? {} : { failure: {
|
|
47
|
+
total: failure.total,
|
|
48
|
+
failedRunIds: [...failure.failedRunIds].sort(),
|
|
49
|
+
errors: finishWorkflowRunFailureErrors(failure.errors),
|
|
50
|
+
...failure.latestFailedAt === void 0 ? {} : { latestFailedAt: failure.latestFailedAt }
|
|
51
|
+
} };
|
|
52
|
+
}
|
|
53
|
+
function finishWorkflowRunFailureErrors(errors) {
|
|
54
|
+
return [...errors.entries()].sort(([left], [right]) => left.localeCompare(right)).map(([name, summary]) => ({
|
|
55
|
+
name,
|
|
56
|
+
count: summary.count,
|
|
57
|
+
failedRunIds: [...summary.failedRunIds].sort(),
|
|
58
|
+
...summary.latestFailedAt === void 0 ? {} : { latestFailedAt: summary.latestFailedAt }
|
|
59
|
+
}));
|
|
60
|
+
}
|
|
61
|
+
//#endregion
|
|
62
|
+
export { createWorkflowRunFailureSummaryReducer };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { RunId } from "../../types/run-id.mjs";
|
|
2
|
+
import { WorkflowRunHookSummary } from "../../types/summary.mjs";
|
|
3
|
+
import "../../types/run.mjs";
|
|
4
|
+
import { ActiveWorkflowHookSummary } from "./active-events.mjs";
|
|
5
|
+
//#region src/engine/summary/run-hooks.d.ts
|
|
6
|
+
interface WorkflowRunHookActivitySummary {
|
|
7
|
+
readonly hook?: WorkflowRunHookSummary;
|
|
8
|
+
}
|
|
9
|
+
declare function createWorkflowRunHookActivitySummaryReducer(): {
|
|
10
|
+
readonly addHook: (runId: RunId, hook: ActiveWorkflowHookSummary) => void;
|
|
11
|
+
readonly finish: () => WorkflowRunHookActivitySummary;
|
|
12
|
+
};
|
|
13
|
+
//#endregion
|
|
14
|
+
export { createWorkflowRunHookActivitySummaryReducer };
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { earliestOptionalTimestamp, shouldReplaceWorkflowEarliestDefinedInstant } from "../../temporal.mjs";
|
|
2
|
+
//#region src/engine/summary/run-hooks.ts
|
|
3
|
+
function createWorkflowRunHookActivitySummaryReducer() {
|
|
4
|
+
const hooks = createWorkflowRunHookActivityAccumulator();
|
|
5
|
+
return {
|
|
6
|
+
addHook(runId, hook) {
|
|
7
|
+
addWorkflowRunHookActivity(hooks, runId, hook);
|
|
8
|
+
},
|
|
9
|
+
finish() {
|
|
10
|
+
return finishWorkflowRunHookActivitySummary(hooks);
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
function createWorkflowRunHookActivityAccumulator() {
|
|
15
|
+
return {
|
|
16
|
+
hookTotal: 0,
|
|
17
|
+
webhookTotal: 0,
|
|
18
|
+
hookNames: /* @__PURE__ */ new Set(),
|
|
19
|
+
messages: /* @__PURE__ */ new Set(),
|
|
20
|
+
runIds: /* @__PURE__ */ new Set(),
|
|
21
|
+
stepIds: /* @__PURE__ */ new Set(),
|
|
22
|
+
webhookNames: /* @__PURE__ */ new Set()
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
function addWorkflowRunHookActivity(hooks, runId, hook) {
|
|
26
|
+
if (hook.source === "hook") {
|
|
27
|
+
hooks.hookTotal++;
|
|
28
|
+
hooks.hookNames.add(hook.name);
|
|
29
|
+
} else {
|
|
30
|
+
hooks.webhookTotal++;
|
|
31
|
+
hooks.webhookNames.add(hook.name);
|
|
32
|
+
}
|
|
33
|
+
hooks.runIds.add(runId);
|
|
34
|
+
hooks.stepIds.add(hook.stepId);
|
|
35
|
+
hooks.messages.add(hook.messageId);
|
|
36
|
+
hooks.oldestStartedAt = earliestOptionalTimestamp(hooks.oldestStartedAt, hook.startedAt);
|
|
37
|
+
if (shouldReplaceWorkflowEarliestDefinedInstant(hooks.nextTimeoutAt, hook.timeoutAt)) setWorkflowRunHookNextTimeout(hooks, runId, hook);
|
|
38
|
+
}
|
|
39
|
+
function setWorkflowRunHookNextTimeout(hooks, runId, hook) {
|
|
40
|
+
hooks.nextTimeoutAt = hook.timeoutAt;
|
|
41
|
+
hooks.nextTimeoutRunId = runId;
|
|
42
|
+
hooks.nextTimeoutStepId = hook.stepId;
|
|
43
|
+
}
|
|
44
|
+
function finishWorkflowRunHookActivitySummary(hooks) {
|
|
45
|
+
return hooks.hookTotal + hooks.webhookTotal === 0 ? {} : { hook: {
|
|
46
|
+
activeHooks: hooks.hookTotal,
|
|
47
|
+
activeWebhooks: hooks.webhookTotal,
|
|
48
|
+
activeHookRuns: hooks.runIds.size,
|
|
49
|
+
hookRunIds: [...hooks.runIds].sort(),
|
|
50
|
+
hookStepIds: [...hooks.stepIds].sort(),
|
|
51
|
+
hookNames: [...hooks.hookNames].sort(),
|
|
52
|
+
webhookNames: [...hooks.webhookNames].sort(),
|
|
53
|
+
messages: [...hooks.messages].sort(),
|
|
54
|
+
...hooks.oldestStartedAt === void 0 ? {} : { oldestStartedAt: hooks.oldestStartedAt },
|
|
55
|
+
...hooks.nextTimeoutAt === void 0 ? {} : {
|
|
56
|
+
nextTimeoutAt: hooks.nextTimeoutAt,
|
|
57
|
+
...hooks.nextTimeoutRunId === void 0 ? {} : { nextTimeoutRunId: hooks.nextTimeoutRunId },
|
|
58
|
+
...hooks.nextTimeoutStepId === void 0 ? {} : { nextTimeoutStepId: hooks.nextTimeoutStepId }
|
|
59
|
+
}
|
|
60
|
+
} };
|
|
61
|
+
}
|
|
62
|
+
//#endregion
|
|
63
|
+
export { createWorkflowRunHookActivitySummaryReducer };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { WorkflowRunLeaseSummary } from "../../types/summary.mjs";
|
|
2
|
+
import { WorkflowRunRecord } from "../../types/run.mjs";
|
|
3
|
+
//#region src/engine/summary/run-lease.d.ts
|
|
4
|
+
interface WorkflowRunLeaseSummaryReducer {
|
|
5
|
+
readonly addRun: (run: WorkflowRunRecord) => void;
|
|
6
|
+
readonly finish: () => WorkflowRunLeaseSummary;
|
|
7
|
+
}
|
|
8
|
+
/** Creates an accumulator for running-run lease summary fields. */
|
|
9
|
+
declare function createWorkflowRunLeaseSummaryReducer(now: Temporal.Instant): WorkflowRunLeaseSummaryReducer;
|
|
10
|
+
//#endregion
|
|
11
|
+
export { WorkflowRunLeaseSummaryReducer, createWorkflowRunLeaseSummaryReducer };
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { earliestOptionalTimestamp } from "../../temporal.mjs";
|
|
2
|
+
//#region src/engine/summary/run-lease.ts
|
|
3
|
+
/** Creates an accumulator for running-run lease summary fields. */
|
|
4
|
+
function createWorkflowRunLeaseSummaryReducer(now) {
|
|
5
|
+
const lease = createWorkflowRunLeaseAccumulator();
|
|
6
|
+
return {
|
|
7
|
+
addRun(run) {
|
|
8
|
+
if (run.status === "running") addWorkflowRunLease(lease, run, now);
|
|
9
|
+
},
|
|
10
|
+
finish() {
|
|
11
|
+
return finishWorkflowRunLeaseSummary(lease);
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
function createWorkflowRunLeaseAccumulator() {
|
|
16
|
+
return {
|
|
17
|
+
total: 0,
|
|
18
|
+
expired: 0,
|
|
19
|
+
runIds: /* @__PURE__ */ new Set(),
|
|
20
|
+
expiredRunIds: /* @__PURE__ */ new Set(),
|
|
21
|
+
workerIds: /* @__PURE__ */ new Set()
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
function addWorkflowRunLease(lease, run, now) {
|
|
25
|
+
lease.total++;
|
|
26
|
+
lease.runIds.add(run.id);
|
|
27
|
+
if (run.workerId !== void 0) lease.workerIds.add(run.workerId);
|
|
28
|
+
if (run.workerId === void 0 || run.leaseExpiresAt === void 0) {
|
|
29
|
+
lease.expired++;
|
|
30
|
+
lease.expiredRunIds.add(run.id);
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
if (Temporal.Instant.compare(run.leaseExpiresAt, now) <= 0) {
|
|
34
|
+
lease.expired++;
|
|
35
|
+
lease.expiredRunIds.add(run.id);
|
|
36
|
+
setWorkflowRunLeaseOldestExpiration(lease, run);
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
setWorkflowRunLeaseNextExpiration(lease, run.id, run.leaseExpiresAt);
|
|
40
|
+
}
|
|
41
|
+
function setWorkflowRunLeaseOldestExpiration(lease, run) {
|
|
42
|
+
lease.oldestExpiredAt = earliestOptionalTimestamp(lease.oldestExpiredAt, run.leaseExpiresAt);
|
|
43
|
+
}
|
|
44
|
+
function setWorkflowRunLeaseNextExpiration(lease, runId, leaseExpiresAt) {
|
|
45
|
+
if (lease.nextExpiresAt !== void 0 && Temporal.Instant.compare(leaseExpiresAt, lease.nextExpiresAt) >= 0) return;
|
|
46
|
+
lease.nextExpiresAt = leaseExpiresAt;
|
|
47
|
+
lease.nextExpiringRunId = runId;
|
|
48
|
+
}
|
|
49
|
+
function finishWorkflowRunLeaseSummary(lease) {
|
|
50
|
+
return {
|
|
51
|
+
total: lease.total,
|
|
52
|
+
expired: lease.expired,
|
|
53
|
+
runIds: [...lease.runIds].sort(),
|
|
54
|
+
expiredRunIds: [...lease.expiredRunIds].sort(),
|
|
55
|
+
workerIds: [...lease.workerIds].sort(),
|
|
56
|
+
...lease.nextExpiresAt === void 0 ? {} : {
|
|
57
|
+
nextExpiresAt: lease.nextExpiresAt,
|
|
58
|
+
...lease.nextExpiringRunId === void 0 ? {} : { nextExpiringRunId: lease.nextExpiringRunId }
|
|
59
|
+
},
|
|
60
|
+
...lease.oldestExpiredAt === void 0 ? {} : { oldestExpiredAt: lease.oldestExpiredAt }
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
//#endregion
|
|
64
|
+
export { createWorkflowRunLeaseSummaryReducer };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { RunId } from "../../types/run-id.mjs";
|
|
2
|
+
import { WorkflowRunMessageSummary } from "../../types/summary.mjs";
|
|
3
|
+
import { WorkflowStepAttemptRecord } from "../../types/step-attempts.mjs";
|
|
4
|
+
import "../../types/run.mjs";
|
|
5
|
+
//#region src/engine/summary/run-message-waits.d.ts
|
|
6
|
+
interface WorkflowRunMessageWaitSummary {
|
|
7
|
+
readonly messageId?: WorkflowRunMessageSummary;
|
|
8
|
+
}
|
|
9
|
+
declare function createWorkflowRunMessageWaitSummaryReducer(): {
|
|
10
|
+
readonly addAttempt: (runId: RunId, attempt: WorkflowStepAttemptRecord) => void;
|
|
11
|
+
readonly addAttempts: (runId: RunId, attempts: readonly WorkflowStepAttemptRecord[]) => void;
|
|
12
|
+
readonly finish: () => WorkflowRunMessageWaitSummary;
|
|
13
|
+
};
|
|
14
|
+
//#endregion
|
|
15
|
+
export { createWorkflowRunMessageWaitSummaryReducer };
|