@adonis-agora/durable 0.58.2 → 0.59.0
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/CHANGELOG.md +50 -0
- package/dist/assets/spa/assets/index-Co0ef3-q.css +1 -0
- package/dist/assets/spa/assets/index-DmgfShPp.js +16 -0
- package/dist/assets/spa/assets/index-DmgfShPp.js.map +1 -0
- package/dist/assets/spa/index.html +2 -2
- package/dist/commands/lifecycle_republish.d.ts +23 -0
- package/dist/commands/lifecycle_republish.d.ts.map +1 -0
- package/dist/commands/lifecycle_republish.js +64 -0
- package/dist/commands/lifecycle_republish.js.map +1 -0
- package/dist/commands/main.d.ts +4 -3
- package/dist/commands/main.d.ts.map +1 -1
- package/dist/commands/main.js +3 -1
- package/dist/commands/main.js.map +1 -1
- package/dist/providers/dashboard_provider.d.ts +2 -0
- package/dist/providers/dashboard_provider.d.ts.map +1 -1
- package/dist/providers/dashboard_provider.js +9 -1
- package/dist/providers/dashboard_provider.js.map +1 -1
- package/dist/src/commands/index.d.ts +1 -1
- package/dist/src/commands/index.d.ts.map +1 -1
- package/dist/src/commands/index.js +1 -1
- package/dist/src/commands/index.js.map +1 -1
- package/dist/src/commands/runs.d.ts +24 -1
- package/dist/src/commands/runs.d.ts.map +1 -1
- package/dist/src/commands/runs.js +50 -0
- package/dist/src/commands/runs.js.map +1 -1
- package/dist/src/commands/worker.d.ts.map +1 -1
- package/dist/src/commands/worker.js +3 -0
- package/dist/src/commands/worker.js.map +1 -1
- package/dist/src/dashboard/gateway-adapter.d.ts +5 -0
- package/dist/src/dashboard/gateway-adapter.d.ts.map +1 -1
- package/dist/src/dashboard/gateway-adapter.js +20 -0
- package/dist/src/dashboard/gateway-adapter.js.map +1 -1
- package/dist/src/dashboard/handlers.d.ts +29 -1
- package/dist/src/dashboard/handlers.d.ts.map +1 -1
- package/dist/src/dashboard/handlers.js +103 -0
- package/dist/src/dashboard/handlers.js.map +1 -1
- package/dist/src/dashboard/index.d.ts +2 -2
- package/dist/src/dashboard/index.d.ts.map +1 -1
- package/dist/src/dashboard/index.js +2 -2
- package/dist/src/dashboard/index.js.map +1 -1
- package/dist/src/dashboard/openapi.d.ts.map +1 -1
- package/dist/src/dashboard/openapi.js +39 -0
- package/dist/src/dashboard/openapi.js.map +1 -1
- package/dist/src/diagnostics-bridge.d.ts +5 -1
- package/dist/src/diagnostics-bridge.d.ts.map +1 -1
- package/dist/src/diagnostics-bridge.js +16 -2
- package/dist/src/diagnostics-bridge.js.map +1 -1
- package/dist/src/engine.d.ts +365 -5
- package/dist/src/engine.d.ts.map +1 -1
- package/dist/src/engine.js +1491 -76
- package/dist/src/engine.js.map +1 -1
- package/dist/src/event-accumulators.d.ts +28 -5
- package/dist/src/event-accumulators.d.ts.map +1 -1
- package/dist/src/event-accumulators.js +102 -21
- package/dist/src/event-accumulators.js.map +1 -1
- package/dist/src/events.d.ts +25 -0
- package/dist/src/events.d.ts.map +1 -1
- package/dist/src/events.js +24 -0
- package/dist/src/events.js.map +1 -1
- package/dist/src/handshake/announced.d.ts +6 -0
- package/dist/src/handshake/announced.d.ts.map +1 -1
- package/dist/src/handshake/announced.js +20 -0
- package/dist/src/handshake/announced.js.map +1 -1
- package/dist/src/handshake/descriptor.d.ts +6 -0
- package/dist/src/handshake/descriptor.d.ts.map +1 -1
- package/dist/src/handshake/descriptor.js +1 -0
- package/dist/src/handshake/descriptor.js.map +1 -1
- package/dist/src/index.d.ts +3 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +3 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/interfaces.d.ts +45 -2
- package/dist/src/interfaces.d.ts.map +1 -1
- package/dist/src/interfaces.js.map +1 -1
- package/dist/src/lifecycle-events.d.ts +372 -0
- package/dist/src/lifecycle-events.d.ts.map +1 -0
- package/dist/src/lifecycle-events.js +383 -0
- package/dist/src/lifecycle-events.js.map +1 -0
- package/dist/src/metrics.d.ts +15 -0
- package/dist/src/metrics.d.ts.map +1 -1
- package/dist/src/metrics.js +36 -1
- package/dist/src/metrics.js.map +1 -1
- package/dist/src/otel/durable-metrics.d.ts +9 -0
- package/dist/src/otel/durable-metrics.d.ts.map +1 -1
- package/dist/src/otel/durable-metrics.js +17 -0
- package/dist/src/otel/durable-metrics.js.map +1 -1
- package/dist/src/otel/durable-otel.d.ts +7 -0
- package/dist/src/otel/durable-otel.d.ts.map +1 -1
- package/dist/src/otel/durable-otel.js +69 -3
- package/dist/src/otel/durable-otel.js.map +1 -1
- package/dist/src/run-detail-summary.d.ts +48 -1
- package/dist/src/run-detail-summary.d.ts.map +1 -1
- package/dist/src/run-detail-summary.js +30 -2
- package/dist/src/run-detail-summary.js.map +1 -1
- package/dist/src/run-gateway/interface.d.ts +16 -0
- package/dist/src/run-gateway/interface.d.ts.map +1 -1
- package/dist/src/run-gateway/proxy-run-gateway.d.ts +31 -1
- package/dist/src/run-gateway/proxy-run-gateway.d.ts.map +1 -1
- package/dist/src/run-gateway/proxy-run-gateway.js +59 -7
- package/dist/src/run-gateway/proxy-run-gateway.js.map +1 -1
- package/dist/src/run-gateway/run-request-responder.d.ts +4 -29
- package/dist/src/run-gateway/run-request-responder.d.ts.map +1 -1
- package/dist/src/run-gateway/run-request-responder.js +183 -6
- package/dist/src/run-gateway/run-request-responder.js.map +1 -1
- package/dist/src/run-gateway/store-run-gateway.d.ts +9 -0
- package/dist/src/run-gateway/store-run-gateway.d.ts.map +1 -1
- package/dist/src/run-gateway/store-run-gateway.js +8 -0
- package/dist/src/run-gateway/store-run-gateway.js.map +1 -1
- package/dist/src/run-waiting.d.ts +1 -0
- package/dist/src/run-waiting.d.ts.map +1 -1
- package/dist/src/run-waiting.js +6 -1
- package/dist/src/run-waiting.js.map +1 -1
- package/dist/src/stores/lucid.d.ts.map +1 -1
- package/dist/src/stores/lucid.js +4 -0
- package/dist/src/stores/lucid.js.map +1 -1
- package/dist/src/telescope/dashboard.d.ts.map +1 -1
- package/dist/src/telescope/dashboard.js +50 -0
- package/dist/src/telescope/dashboard.js.map +1 -1
- package/dist/src/telescope/data-providers.d.ts +19 -0
- package/dist/src/telescope/data-providers.d.ts.map +1 -1
- package/dist/src/telescope/data-providers.js +128 -2
- package/dist/src/telescope/data-providers.js.map +1 -1
- package/dist/src/telescope/extension.d.ts.map +1 -1
- package/dist/src/telescope/extension.js +4 -1
- package/dist/src/telescope/extension.js.map +1 -1
- package/dist/src/telescope/index.d.ts +3 -2
- package/dist/src/telescope/index.d.ts.map +1 -1
- package/dist/src/telescope/index.js +2 -1
- package/dist/src/telescope/index.js.map +1 -1
- package/dist/src/telescope/telescope-sdk.d.ts +16 -0
- package/dist/src/telescope/telescope-sdk.d.ts.map +1 -1
- package/dist/src/telescope/watcher.d.ts +66 -0
- package/dist/src/telescope/watcher.d.ts.map +1 -0
- package/dist/src/telescope/watcher.js +185 -0
- package/dist/src/telescope/watcher.js.map +1 -0
- package/dist/src/testing/in-memory-state-store.d.ts.map +1 -1
- package/dist/src/testing/in-memory-state-store.js +8 -0
- package/dist/src/testing/in-memory-state-store.js.map +1 -1
- package/dist/src/testing-kit/harness.d.ts +1 -1
- package/dist/src/testing-kit/harness.d.ts.map +1 -1
- package/dist/src/testing-kit/harness.js +3 -1
- package/dist/src/testing-kit/harness.js.map +1 -1
- package/dist/src/testing-kit/state-store-conformance.d.ts.map +1 -1
- package/dist/src/testing-kit/state-store-conformance.js +59 -0
- package/dist/src/testing-kit/state-store-conformance.js.map +1 -1
- package/dist/src/workflow-ctx.d.ts.map +1 -1
- package/dist/src/workflow-ctx.js +62 -0
- package/dist/src/workflow-ctx.js.map +1 -1
- package/dist/src/workflow-discovery.d.ts.map +1 -1
- package/dist/src/workflow-discovery.js +1 -0
- package/dist/src/workflow-discovery.js.map +1 -1
- package/dist/src/workflow-events.d.ts +101 -0
- package/dist/src/workflow-events.d.ts.map +1 -1
- package/dist/src/workflow-events.js +79 -1
- package/dist/src/workflow-events.js.map +1 -1
- package/dist/src/workflow-ref.d.ts +17 -2
- package/dist/src/workflow-ref.d.ts.map +1 -1
- package/dist/src/workflow-ref.js.map +1 -1
- package/package.json +4 -4
- package/skills/durable-cluster/SKILL.md +4 -2
- package/dist/assets/spa/assets/index-6nmSTfT7.css +0 -1
- package/dist/assets/spa/assets/index-DjdTutsN.js +0 -16
- package/dist/assets/spa/assets/index-DjdTutsN.js.map +0 -1
|
@@ -0,0 +1,383 @@
|
|
|
1
|
+
import { workflowName, } from './workflow-ref.js';
|
|
2
|
+
/**
|
|
3
|
+
* Lifecycle events: when a run settles, the engine publishes `run.completed:<workflow>` or
|
|
4
|
+
* `run.failed:<workflow>` on the same bus as `publishEvent`, so another workflow can start on it
|
|
5
|
+
* through `onEvent` (or `@OnWorkflowCompleted` / `@OnWorkflowFailed`)
|
|
6
|
+
* without the settling workflow knowing it exists.
|
|
7
|
+
*
|
|
8
|
+
* Delivery is exactly once per subscriber and settled run. The terminal status write also tags the
|
|
9
|
+
* run {@link LIFECYCLE_PENDING_TAG}, so a process that dies before publishing leaves a marker the
|
|
10
|
+
* timer poller's lifecycle sweep picks up; the subscriber's run id is deterministic
|
|
11
|
+
* ({@link lifecycleRunId}), so publishing twice starts it once.
|
|
12
|
+
*/
|
|
13
|
+
/** The event published when a run of `workflow` completes. */
|
|
14
|
+
export function runCompletedEvent(workflow) {
|
|
15
|
+
return `run.completed:${workflowName(workflow)}`;
|
|
16
|
+
}
|
|
17
|
+
/** The event published when a run of `workflow` ends failed, cancelled or dead. */
|
|
18
|
+
export function runFailedEvent(workflow) {
|
|
19
|
+
return `run.failed:${workflowName(workflow)}`;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Tag written with a run's terminal status when some workflow subscribes to its lifecycle event,
|
|
23
|
+
* and removed once the event is published. A settled run still carrying it was never published.
|
|
24
|
+
*
|
|
25
|
+
* Without any {@link LIFECYCLE_OWED_TAG_PREFIX} tag beside it, the run's owed set is unresolved: the
|
|
26
|
+
* terminal write happened before this instance could read the subscriptions the fleet announces
|
|
27
|
+
* (no read yet, or the last one failed). The publish that next reads them successfully resolves it
|
|
28
|
+
* into owed tags; until then, the subscribers registered on an instance are started by it.
|
|
29
|
+
*/
|
|
30
|
+
export const LIFECYCLE_PENDING_TAG = 'durable:lifecycle:pending';
|
|
31
|
+
/**
|
|
32
|
+
* How long after a run settled the lifecycle sweep still looks for subscribers the run owes its
|
|
33
|
+
* event to but was never marked for: one announced by an instance that came up just after the
|
|
34
|
+
* run settled, before the settling instance's snapshot of the fleet's subscriptions saw it. A
|
|
35
|
+
* subscriber that appears later than this is a backfill, done with
|
|
36
|
+
* `WorkflowEngine.republishLifecycle`.
|
|
37
|
+
*/
|
|
38
|
+
export const LIFECYCLE_HEAL_WINDOW_MS = 2 * 60 * 1000;
|
|
39
|
+
/** Prefix of the tags naming the subscribers a settled run started (`durable:triggered:<workflow>`). */
|
|
40
|
+
export const LIFECYCLE_TRIGGERED_TAG_PREFIX = 'durable:triggered:';
|
|
41
|
+
/**
|
|
42
|
+
* Prefix of the tags naming each subscriber a settled run still owes its lifecycle event to
|
|
43
|
+
* (`durable:lifecycle:owed:<workflow>`). Written with the terminal status, beside
|
|
44
|
+
* {@link LIFECYCLE_PENDING_TAG}, for every subscriber registered locally or announced by a live
|
|
45
|
+
* worker. An instance removes the owed tags of the subscribers it starts; the pending tag goes with
|
|
46
|
+
* the last owed tag.
|
|
47
|
+
*/
|
|
48
|
+
export const LIFECYCLE_OWED_TAG_PREFIX = 'durable:lifecycle:owed:';
|
|
49
|
+
/**
|
|
50
|
+
* How long after a run settled the lifecycle sweep keeps an owed subscriber that no live worker
|
|
51
|
+
* announces and this instance does not register. Past it, the owed tag is dropped and the engine
|
|
52
|
+
* emits `run.trigger_failed`, so a removed subscriber does not keep the run from retention forever.
|
|
53
|
+
*/
|
|
54
|
+
export const LIFECYCLE_ORPHAN_MS = 24 * 60 * 60 * 1000;
|
|
55
|
+
/**
|
|
56
|
+
* Prefix of the tags naming each subscriber a settled run could not start
|
|
57
|
+
* (`durable:trigger_failed:<workflow>`): its `where` threw, its input was rejected, its start failed,
|
|
58
|
+
* or the sweep dropped it as an orphan (see {@link LIFECYCLE_ORPHAN_MS}). Written by the same tag
|
|
59
|
+
* write that drops the subscriber's owed tag, and removed by the write that records a later start of
|
|
60
|
+
* it. The reason is not stored: it is in the `run.trigger_failed` event the failure emits.
|
|
61
|
+
*/
|
|
62
|
+
export const LIFECYCLE_TRIGGER_FAILED_TAG_PREFIX = 'durable:trigger_failed:';
|
|
63
|
+
/** The trigger-failed tag of `subscriber` (see {@link LIFECYCLE_TRIGGER_FAILED_TAG_PREFIX}). */
|
|
64
|
+
export function lifecycleTriggerFailedTag(subscriber) {
|
|
65
|
+
return `${LIFECYCLE_TRIGGER_FAILED_TAG_PREFIX}${subscriber}`;
|
|
66
|
+
}
|
|
67
|
+
/** The owed tag of `subscriber` (see {@link LIFECYCLE_OWED_TAG_PREFIX}). */
|
|
68
|
+
export function lifecycleOwedTag(subscriber) {
|
|
69
|
+
return `${LIFECYCLE_OWED_TAG_PREFIX}${subscriber}`;
|
|
70
|
+
}
|
|
71
|
+
/** The subscribers a run still owes its lifecycle event to, read from its owed tags. */
|
|
72
|
+
export function owedSubscribersOf(run) {
|
|
73
|
+
return (run.tags ?? [])
|
|
74
|
+
.filter((tag) => tag.startsWith(LIFECYCLE_OWED_TAG_PREFIX))
|
|
75
|
+
.map((tag) => tag.slice(LIFECYCLE_OWED_TAG_PREFIX.length));
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Prefix of the tags naming each debounce/batch subscriber a settled run's event was routed to
|
|
79
|
+
* (`durable:coalesced:<workflow>`). Such a subscriber starts no run of the source's id, so it gets no
|
|
80
|
+
* {@link LIFECYCLE_TRIGGERED_TAG_PREFIX} tag; this one records the delivery instead, written by the
|
|
81
|
+
* same tag write that drops its owed tag.
|
|
82
|
+
*/
|
|
83
|
+
export const LIFECYCLE_COALESCED_TAG_PREFIX = 'durable:coalesced:';
|
|
84
|
+
/** The coalesced tag of `subscriber` (see {@link LIFECYCLE_COALESCED_TAG_PREFIX}). */
|
|
85
|
+
export function lifecycleCoalescedTag(subscriber) {
|
|
86
|
+
return `${LIFECYCLE_COALESCED_TAG_PREFIX}${subscriber}`;
|
|
87
|
+
}
|
|
88
|
+
/** The subscribers whose {@link LIFECYCLE_COALESCED_TAG_PREFIX} tag is in `tags`. */
|
|
89
|
+
export function coalescedSubscribersOf(tags) {
|
|
90
|
+
return (tags ?? [])
|
|
91
|
+
.filter((tag) => tag.startsWith(LIFECYCLE_COALESCED_TAG_PREFIX))
|
|
92
|
+
.map((tag) => tag.slice(LIFECYCLE_COALESCED_TAG_PREFIX.length));
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* The subscribers a settled run's tags record as done with its event: started (a
|
|
96
|
+
* {@link LIFECYCLE_TRIGGERED_TAG_PREFIX} tag), routed into an accumulator (a
|
|
97
|
+
* {@link LIFECYCLE_COALESCED_TAG_PREFIX} tag) or failed (a {@link LIFECYCLE_TRIGGER_FAILED_TAG_PREFIX}
|
|
98
|
+
* tag).
|
|
99
|
+
*/
|
|
100
|
+
export function deliveredSubscribersOf(run) {
|
|
101
|
+
const out = new Set(coalescedSubscribersOf(run.tags));
|
|
102
|
+
for (const tag of run.tags ?? []) {
|
|
103
|
+
if (tag.startsWith(LIFECYCLE_TRIGGERED_TAG_PREFIX)) {
|
|
104
|
+
out.add(tag.slice(LIFECYCLE_TRIGGERED_TAG_PREFIX.length));
|
|
105
|
+
}
|
|
106
|
+
else if (tag.startsWith(LIFECYCLE_TRIGGER_FAILED_TAG_PREFIX)) {
|
|
107
|
+
out.add(tag.slice(LIFECYCLE_TRIGGER_FAILED_TAG_PREFIX.length));
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return out;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Prefix of the tag holding the W3C `traceparent` of a settled run's own span
|
|
114
|
+
* (`durable:lifecycle:trace:<traceparent>`). Written with the lifecycle marker, when some workflow
|
|
115
|
+
* subscribes to the run's ending and the engine has a run trace provider (see
|
|
116
|
+
* `WorkflowEngine.setRunTraceparent`), so a subscriber's trace can link to its source run from any
|
|
117
|
+
* process.
|
|
118
|
+
*/
|
|
119
|
+
export const LIFECYCLE_TRACE_TAG_PREFIX = 'durable:lifecycle:trace:';
|
|
120
|
+
/** The traceparent a settled run recorded in its {@link LIFECYCLE_TRACE_TAG_PREFIX} tag, if any. */
|
|
121
|
+
export function lifecycleTraceparentOf(tags) {
|
|
122
|
+
const tag = (tags ?? []).find((t) => t.startsWith(LIFECYCLE_TRACE_TAG_PREFIX));
|
|
123
|
+
return tag?.slice(LIFECYCLE_TRACE_TAG_PREFIX.length) || undefined;
|
|
124
|
+
}
|
|
125
|
+
/** Whether `tag` is one of the engine's lifecycle bookkeeping tags rather than a user tag. */
|
|
126
|
+
export function isLifecycleTag(tag) {
|
|
127
|
+
return (tag === LIFECYCLE_PENDING_TAG ||
|
|
128
|
+
tag.startsWith(LIFECYCLE_OWED_TAG_PREFIX) ||
|
|
129
|
+
tag.startsWith(LIFECYCLE_TRIGGERED_TAG_PREFIX) ||
|
|
130
|
+
tag.startsWith(LIFECYCLE_COALESCED_TAG_PREFIX) ||
|
|
131
|
+
tag.startsWith(LIFECYCLE_TRIGGER_FAILED_TAG_PREFIX) ||
|
|
132
|
+
tag.startsWith(LIFECYCLE_TRACE_TAG_PREFIX));
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* The id of the run a lifecycle event starts for `subscriber`. Deterministic, so the same settled
|
|
136
|
+
* run never starts the same subscriber twice, and either side of the link can be found from the other.
|
|
137
|
+
*/
|
|
138
|
+
export function lifecycleRunId(sourceRunId, kind, subscriber) {
|
|
139
|
+
return `evt:${sourceRunId}:${kind}:${subscriber}`;
|
|
140
|
+
}
|
|
141
|
+
/** The lifecycle event a run in `status` published, or undefined while it has not settled. */
|
|
142
|
+
export function lifecycleKindOf(status) {
|
|
143
|
+
if (status === 'completed')
|
|
144
|
+
return 'completed';
|
|
145
|
+
if (status === 'failed' || status === 'cancelled' || status === 'dead')
|
|
146
|
+
return 'failed';
|
|
147
|
+
return undefined;
|
|
148
|
+
}
|
|
149
|
+
/** The event name a run of `workflow` publishes when it settles as `kind`. */
|
|
150
|
+
export function lifecycleEventName(workflow, kind) {
|
|
151
|
+
return kind === 'completed' ? runCompletedEvent(workflow) : runFailedEvent(workflow);
|
|
152
|
+
}
|
|
153
|
+
/** The workflow and ending a lifecycle event name stands for, or undefined for any other event. */
|
|
154
|
+
export function parseLifecycleEvent(event) {
|
|
155
|
+
for (const kind of ['completed', 'failed']) {
|
|
156
|
+
const prefix = `run.${kind}:`;
|
|
157
|
+
if (event.startsWith(prefix) && event.length > prefix.length) {
|
|
158
|
+
return { workflow: event.slice(prefix.length), kind };
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return undefined;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* The run whose settling started `run`, when a lifecycle event started it. Read from the run's id,
|
|
165
|
+
* which ends in `:<kind>:<its own workflow>`, so it holds whatever input the subscriber was given.
|
|
166
|
+
*/
|
|
167
|
+
export function lifecycleSourceOf(run) {
|
|
168
|
+
if (!run.id.startsWith('evt:'))
|
|
169
|
+
return undefined;
|
|
170
|
+
for (const kind of ['completed', 'failed']) {
|
|
171
|
+
const suffix = `:${kind}:${run.workflow}`;
|
|
172
|
+
if (run.id.endsWith(suffix) && run.id.length > 'evt:'.length + suffix.length) {
|
|
173
|
+
return { runId: run.id.slice('evt:'.length, -suffix.length), kind };
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
return undefined;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* The runs `run`'s settling started, read from its {@link LIFECYCLE_TRIGGERED_TAG_PREFIX} tags.
|
|
180
|
+
* Empty for a run that has not settled or started nobody. Needs no subscriber registry, so any
|
|
181
|
+
* process holding the run row can answer it.
|
|
182
|
+
*/
|
|
183
|
+
export function triggeredRunsOf(run) {
|
|
184
|
+
const kind = lifecycleKindOf(run.status);
|
|
185
|
+
if (!kind)
|
|
186
|
+
return [];
|
|
187
|
+
return (run.tags ?? [])
|
|
188
|
+
.filter((tag) => tag.startsWith(LIFECYCLE_TRIGGERED_TAG_PREFIX))
|
|
189
|
+
.map((tag) => lifecycleRunId(run.id, kind, tag.slice(LIFECYCLE_TRIGGERED_TAG_PREFIX.length)));
|
|
190
|
+
}
|
|
191
|
+
/** The {@link WorkflowLifecycleEvent} a settled run publishes. */
|
|
192
|
+
export function lifecycleEventOf(run) {
|
|
193
|
+
const completed = run.status === 'completed';
|
|
194
|
+
return {
|
|
195
|
+
runId: run.id,
|
|
196
|
+
workflow: run.workflow,
|
|
197
|
+
workflowVersion: run.workflowVersion,
|
|
198
|
+
status: run.status,
|
|
199
|
+
namespace: run.namespace,
|
|
200
|
+
input: run.input,
|
|
201
|
+
...(completed ? { output: run.output } : { error: run.error }),
|
|
202
|
+
tags: run.tags?.filter((tag) => !isLifecycleTag(tag)),
|
|
203
|
+
searchAttributes: run.searchAttributes,
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
/** The literal prefix of every `ctx.waitForRun` waiter token. */
|
|
207
|
+
export const RUN_WAIT_TOKEN_PREFIX = 'runwait:';
|
|
208
|
+
/** Token prefix of every `ctx.waitForRun` waiter on `targetRunId`. */
|
|
209
|
+
export function runWaitPrefix(targetRunId) {
|
|
210
|
+
return `${RUN_WAIT_TOKEN_PREFIX}${targetRunId}#`;
|
|
211
|
+
}
|
|
212
|
+
/** The waiter token of one `ctx.waitForRun(targetRunId)` call, unique by the waiting run's `runId#seq`. */
|
|
213
|
+
export function runWaitToken(targetRunId, runId, seq) {
|
|
214
|
+
return `${runWaitPrefix(targetRunId)}${runId}#${seq}`;
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* The run a `ctx.waitForRun` waiter waits for, read from its token, or undefined for any other
|
|
218
|
+
* waiter. The token ends in the waiter's own `#<runId>#<seq>`, so a target id holding `#` still
|
|
219
|
+
* parses.
|
|
220
|
+
*/
|
|
221
|
+
export function runWaitTargetOf(waiter) {
|
|
222
|
+
if (!waiter.token.startsWith(RUN_WAIT_TOKEN_PREFIX))
|
|
223
|
+
return undefined;
|
|
224
|
+
const suffix = `#${waiter.runId}#${waiter.seq}`;
|
|
225
|
+
if (!waiter.token.endsWith(suffix))
|
|
226
|
+
return undefined;
|
|
227
|
+
const target = waiter.token.slice(RUN_WAIT_TOKEN_PREFIX.length, -suffix.length);
|
|
228
|
+
return target.length > 0 ? target : undefined;
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* The {@link LifecycleDelivery} of each subscriber of a settled run, sorted by subscriber: the
|
|
232
|
+
* union of `subscribers` (the ones the run's event goes to now), the owed, triggered, coalesced and
|
|
233
|
+
* trigger-failed tags. A started or coalesced subscriber wins over the others, then an owed one over
|
|
234
|
+
* a failed one. `live` names the subscribers a live instance registers or announces; an owed
|
|
235
|
+
* subscriber outside it gets `orphanAt`. `coalesced` maps each subscriber that coalesces its events
|
|
236
|
+
* to its accumulator run id (undefined when it cannot be derived), the link of a coalesced one; a
|
|
237
|
+
* subscriber in it with no tag at all (a run settled before coalesced deliveries were tagged) is
|
|
238
|
+
* `coalesced` too. Empty for a run that has not settled.
|
|
239
|
+
*/
|
|
240
|
+
export function lifecycleDeliveriesOf(run, opts) {
|
|
241
|
+
const kind = lifecycleKindOf(run.status);
|
|
242
|
+
if (!kind)
|
|
243
|
+
return [];
|
|
244
|
+
const tags = run.tags ?? [];
|
|
245
|
+
const owed = new Set(owedSubscribersOf(run));
|
|
246
|
+
const triggered = new Set(tags
|
|
247
|
+
.filter((t) => t.startsWith(LIFECYCLE_TRIGGERED_TAG_PREFIX))
|
|
248
|
+
.map((t) => t.slice(LIFECYCLE_TRIGGERED_TAG_PREFIX.length)));
|
|
249
|
+
const failed = new Set(tags
|
|
250
|
+
.filter((t) => t.startsWith(LIFECYCLE_TRIGGER_FAILED_TAG_PREFIX))
|
|
251
|
+
.map((t) => t.slice(LIFECYCLE_TRIGGER_FAILED_TAG_PREFIX.length)));
|
|
252
|
+
const coalescedTagged = new Set(coalescedSubscribersOf(tags));
|
|
253
|
+
// A run marked pending without owed tags is owed to every subscriber it has not started.
|
|
254
|
+
const owedToAll = owed.size === 0 && tags.includes(LIFECYCLE_PENDING_TAG);
|
|
255
|
+
const settledAt = run.updatedAt.getTime();
|
|
256
|
+
const names = [
|
|
257
|
+
...new Set([...opts.subscribers, ...owed, ...triggered, ...coalescedTagged, ...failed]),
|
|
258
|
+
].sort();
|
|
259
|
+
const coalescedState = (subscriber) => {
|
|
260
|
+
const runId = opts.coalesced?.get(subscriber);
|
|
261
|
+
return { subscriber, state: 'coalesced', ...(runId !== undefined ? { runId } : {}) };
|
|
262
|
+
};
|
|
263
|
+
return names.map((subscriber) => {
|
|
264
|
+
if (triggered.has(subscriber)) {
|
|
265
|
+
return { subscriber, state: 'started', runId: lifecycleRunId(run.id, kind, subscriber) };
|
|
266
|
+
}
|
|
267
|
+
if (coalescedTagged.has(subscriber))
|
|
268
|
+
return coalescedState(subscriber);
|
|
269
|
+
if (owed.has(subscriber) || owedToAll) {
|
|
270
|
+
return {
|
|
271
|
+
subscriber,
|
|
272
|
+
state: 'owed',
|
|
273
|
+
owedSince: settledAt,
|
|
274
|
+
...(opts.live.has(subscriber) ? {} : { orphanAt: settledAt + LIFECYCLE_ORPHAN_MS }),
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
if (failed.has(subscriber))
|
|
278
|
+
return { subscriber, state: 'failed' };
|
|
279
|
+
if (opts.coalesced?.has(subscriber))
|
|
280
|
+
return coalescedState(subscriber);
|
|
281
|
+
return { subscriber, state: 'not-started' };
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
/** The id of the run a continue-as-new of `runId` hands off to: `r` → `r~1` → `r~2` … */
|
|
285
|
+
export function nextContinuationId(runId) {
|
|
286
|
+
const m = runId.match(/^(.*)~(\d+)$/);
|
|
287
|
+
return m ? `${m[1]}~${Number(m[2]) + 1}` : `${runId}~1`;
|
|
288
|
+
}
|
|
289
|
+
/** How many continue-as-new hops `ctx.waitForRun` follows to the run that ends a chain. */
|
|
290
|
+
export const RUN_WAIT_MAX_HOPS = 100;
|
|
291
|
+
/**
|
|
292
|
+
* The run that ends `runId`'s continue-as-new chain: `runId` itself, or the last continuation it
|
|
293
|
+
* handed off to, following at most {@link RUN_WAIT_MAX_HOPS} hops. A completed run whose
|
|
294
|
+
* continuation exists was a handoff, not the end. Null when `runId` is unknown.
|
|
295
|
+
*/
|
|
296
|
+
export async function lastRunOfChain(getRun, runId) {
|
|
297
|
+
let run = await getRun(runId);
|
|
298
|
+
for (let hop = 0; run?.status === 'completed' && hop < RUN_WAIT_MAX_HOPS; hop += 1) {
|
|
299
|
+
const next = await getRun(nextContinuationId(run.id));
|
|
300
|
+
if (!next)
|
|
301
|
+
break;
|
|
302
|
+
run = next;
|
|
303
|
+
}
|
|
304
|
+
return run;
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* The runs whose continue-as-new chain `runId` may end (`r~3` → `r`, `r~1`, `r~2`, at most
|
|
308
|
+
* {@link RUN_WAIT_MAX_HOPS}), so a `ctx.waitForRun` on an earlier run of the chain is found when the
|
|
309
|
+
* last one settles. Empty for a run that is no continuation.
|
|
310
|
+
*/
|
|
311
|
+
export function chainPredecessorsOf(runId) {
|
|
312
|
+
const m = runId.match(/^(.*)~(\d+)$/);
|
|
313
|
+
if (!m)
|
|
314
|
+
return [];
|
|
315
|
+
const base = m[1];
|
|
316
|
+
const n = Number(m[2]);
|
|
317
|
+
const ids = [];
|
|
318
|
+
for (let i = Math.max(0, n - RUN_WAIT_MAX_HOPS); i < n; i += 1) {
|
|
319
|
+
ids.push(i === 0 ? base : `${base}~${i}`);
|
|
320
|
+
}
|
|
321
|
+
return ids;
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* The internal workflow whose runs make up the lifecycle subscription registry: one completed run
|
|
325
|
+
* per engine that registers `onEvent` subscriptions (lifecycle ones included), id
|
|
326
|
+
* {@link lifecycleRegistryRunId}, tagged {@link LIFECYCLE_REGISTRY_TAG}, its subscriptions in
|
|
327
|
+
* `input` ({@link LifecycleRegistryEntry}) and its `updatedAt` the heartbeat. Each heartbeat also
|
|
328
|
+
* sets `createdAt`, so a read of the live runs is a range over the store's `created_at` index. Kept
|
|
329
|
+
* in the state store, so an engine learns what the others subscribe to over any transport.
|
|
330
|
+
* Retention, run lists and the dashboard skip these runs.
|
|
331
|
+
*/
|
|
332
|
+
export const LIFECYCLE_REGISTRY_WORKFLOW = '__lifecycle_registry';
|
|
333
|
+
/** Tag every registry run carries. Retention never prunes a run that has it. */
|
|
334
|
+
export const LIFECYCLE_REGISTRY_TAG = 'durable:lifecycle:registry';
|
|
335
|
+
/** How often an engine's worker tick rewrites its registry run. */
|
|
336
|
+
export const LIFECYCLE_REGISTRY_HEARTBEAT_MS = 10_000;
|
|
337
|
+
/** How long after its last heartbeat a registry run still counts as a live engine's. */
|
|
338
|
+
export const LIFECYCLE_REGISTRY_TTL_MS = 35_000;
|
|
339
|
+
/** How long after its last heartbeat a registry run is deleted, by the tick of an engine with one. */
|
|
340
|
+
export const LIFECYCLE_REGISTRY_STALE_MS = 10 * 60 * 1000;
|
|
341
|
+
/** The id of the registry run of engine instance `instanceId`. */
|
|
342
|
+
export function lifecycleRegistryRunId(instanceId) {
|
|
343
|
+
return `${LIFECYCLE_REGISTRY_WORKFLOW}:${instanceId}`;
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* The namespace whose settled runs owe their lifecycle events to the subscriptions of a registry
|
|
347
|
+
* run, or `null` for every namespace: the entry's `engineNamespace`, or for a row written without it,
|
|
348
|
+
* the row's `namespace`, read as every namespace when that is `default` (an engine with no namespace
|
|
349
|
+
* wrote it, as far as the row can tell).
|
|
350
|
+
*/
|
|
351
|
+
export function lifecycleRegistryNamespace(input, rowNamespace) {
|
|
352
|
+
const engineNamespace = input
|
|
353
|
+
?.engineNamespace;
|
|
354
|
+
if (engineNamespace === null)
|
|
355
|
+
return null;
|
|
356
|
+
if (typeof engineNamespace === 'string')
|
|
357
|
+
return engineNamespace || 'default';
|
|
358
|
+
const row = rowNamespace || 'default';
|
|
359
|
+
return row === 'default' ? null : row;
|
|
360
|
+
}
|
|
361
|
+
/** The subscriptions a registry run's `input` holds; malformed entries are skipped. */
|
|
362
|
+
export function lifecycleRegistrySubscriptions(input) {
|
|
363
|
+
const subscriptions = input
|
|
364
|
+
?.subscriptions;
|
|
365
|
+
if (!Array.isArray(subscriptions))
|
|
366
|
+
return [];
|
|
367
|
+
return subscriptions.flatMap((entry) => {
|
|
368
|
+
const { workflow, events } = (entry ?? {});
|
|
369
|
+
if (typeof workflow !== 'string' || !Array.isArray(events))
|
|
370
|
+
return [];
|
|
371
|
+
return [{ workflow, events: events.filter((e) => typeof e === 'string') }];
|
|
372
|
+
});
|
|
373
|
+
}
|
|
374
|
+
/**
|
|
375
|
+
* Whether retention must keep a run with these `tags`: its lifecycle event is still owed
|
|
376
|
+
* ({@link LIFECYCLE_PENDING_TAG}), or it is a lifecycle registry run ({@link LIFECYCLE_REGISTRY_TAG}).
|
|
377
|
+
*/
|
|
378
|
+
export function retentionKeeps(tags) {
|
|
379
|
+
if (!Array.isArray(tags))
|
|
380
|
+
return false;
|
|
381
|
+
return tags.includes(LIFECYCLE_PENDING_TAG) || tags.includes(LIFECYCLE_REGISTRY_TAG);
|
|
382
|
+
}
|
|
383
|
+
//# sourceMappingURL=lifecycle-events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle-events.js","sourceRoot":"","sources":["../../src/lifecycle-events.ts"],"names":[],"mappings":"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"}
|
package/dist/src/metrics.d.ts
CHANGED
|
@@ -8,9 +8,24 @@ export interface MetricsSnapshot {
|
|
|
8
8
|
suspended: number;
|
|
9
9
|
routed: number;
|
|
10
10
|
unrouted: number;
|
|
11
|
+
/** Subscriber runs started by a settled run's lifecycle event. */
|
|
12
|
+
triggered: number;
|
|
13
|
+
/** Subscribers a settled run's lifecycle event could not start (`where` threw, start failed). */
|
|
14
|
+
triggerFailed: number;
|
|
11
15
|
};
|
|
12
16
|
/** Routed failures by error code (`*` for a failure without one). */
|
|
13
17
|
routedByCode: Record<string, number>;
|
|
18
|
+
/**
|
|
19
|
+
* Subscriber runs a settled run's lifecycle event started (`run.triggered`), keyed by the settled
|
|
20
|
+
* run's workflow, then by the subscriber. Exposed as `durable_runs_triggered_total{workflow,subscriber}`.
|
|
21
|
+
*/
|
|
22
|
+
triggeredBySubscriber: Record<string, Record<string, number>>;
|
|
23
|
+
/**
|
|
24
|
+
* Subscribers a settled run's lifecycle event could not start (`run.trigger_failed`), keyed by the
|
|
25
|
+
* settled run's workflow, then by the subscriber. Exposed as
|
|
26
|
+
* `durable_runs_trigger_failed_total{workflow,subscriber}`.
|
|
27
|
+
*/
|
|
28
|
+
triggerFailedBySubscriber: Record<string, Record<string, number>>;
|
|
14
29
|
steps: {
|
|
15
30
|
started: number;
|
|
16
31
|
completed: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAGnD,MAAM,WAAW,eAAe;IAC9B,sGAAsG;IACtG,IAAI,EAAE;QACJ,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAGnD,MAAM,WAAW,eAAe;IAC9B,sGAAsG;IACtG,IAAI,EAAE;QACJ,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,kEAAkE;QAClE,SAAS,EAAE,MAAM,CAAC;QAClB,iGAAiG;QACjG,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,qEAAqE;IACrE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC;;;OAGG;IACH,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC9D;;;;OAIG;IACH,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAClE,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9D,yDAAyD;IACzD,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnF,mEAAmE;IACnE,YAAY,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAChD;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,IAAI,eAAe,CAAC;IAC5B,0FAA0F;IAC1F,UAAU,IAAI,MAAM,CAAC;IACrB,mCAAmC;IACnC,IAAI,IAAI,IAAI,CAAC;CACd;AAED,KAAK,YAAY,GAAG;IAAE,SAAS,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,GAAG,MAAM,IAAI,CAAA;CAAE,CAAC;AAEtF;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,gBAAgB,CAuHrE"}
|
package/dist/src/metrics.js
CHANGED
|
@@ -7,8 +7,19 @@ import { isRemoteEvent } from './remote-event.js';
|
|
|
7
7
|
*/
|
|
8
8
|
export function collectMetrics(engine) {
|
|
9
9
|
const m = {
|
|
10
|
-
runs: {
|
|
10
|
+
runs: {
|
|
11
|
+
started: 0,
|
|
12
|
+
completed: 0,
|
|
13
|
+
failed: 0,
|
|
14
|
+
suspended: 0,
|
|
15
|
+
routed: 0,
|
|
16
|
+
unrouted: 0,
|
|
17
|
+
triggered: 0,
|
|
18
|
+
triggerFailed: 0,
|
|
19
|
+
},
|
|
11
20
|
routedByCode: {},
|
|
21
|
+
triggeredBySubscriber: {},
|
|
22
|
+
triggerFailedBySubscriber: {},
|
|
12
23
|
steps: { started: 0, completed: 0, failed: 0 },
|
|
13
24
|
byWorkflow: {},
|
|
14
25
|
stepDuration: { sumMs: 0, count: 0 },
|
|
@@ -52,6 +63,14 @@ export function collectMetrics(engine) {
|
|
|
52
63
|
case 'run.unrouted':
|
|
53
64
|
m.runs.unrouted += 1;
|
|
54
65
|
break;
|
|
66
|
+
case 'run.triggered':
|
|
67
|
+
m.runs.triggered += 1;
|
|
68
|
+
countBySubscriber(m.triggeredBySubscriber, e);
|
|
69
|
+
break;
|
|
70
|
+
case 'run.trigger_failed':
|
|
71
|
+
m.runs.triggerFailed += 1;
|
|
72
|
+
countBySubscriber(m.triggerFailedBySubscriber, e);
|
|
73
|
+
break;
|
|
55
74
|
case 'step.started':
|
|
56
75
|
m.steps.started += 1;
|
|
57
76
|
break;
|
|
@@ -85,6 +104,14 @@ export function collectMetrics(engine) {
|
|
|
85
104
|
lines.push('# TYPE durable_runs_routed_total counter');
|
|
86
105
|
for (const [code, n] of Object.entries(m.routedByCode))
|
|
87
106
|
lines.push(`durable_runs_routed_total{code="${code}"} ${n}`);
|
|
107
|
+
lines.push('# TYPE durable_runs_triggered_total counter');
|
|
108
|
+
for (const [workflow, bySubscriber] of Object.entries(m.triggeredBySubscriber))
|
|
109
|
+
for (const [subscriber, n] of Object.entries(bySubscriber))
|
|
110
|
+
lines.push(`durable_runs_triggered_total{workflow="${workflow}",subscriber="${subscriber}"} ${n}`);
|
|
111
|
+
lines.push('# TYPE durable_runs_trigger_failed_total counter');
|
|
112
|
+
for (const [workflow, bySubscriber] of Object.entries(m.triggerFailedBySubscriber))
|
|
113
|
+
for (const [subscriber, n] of Object.entries(bySubscriber))
|
|
114
|
+
lines.push(`durable_runs_trigger_failed_total{workflow="${workflow}",subscriber="${subscriber}"} ${n}`);
|
|
88
115
|
lines.push('# TYPE durable_step_duration_ms_sum counter');
|
|
89
116
|
lines.push(`durable_step_duration_ms_sum ${m.stepDuration.sumMs}`);
|
|
90
117
|
lines.push('# TYPE durable_step_duration_count counter');
|
|
@@ -93,4 +120,12 @@ export function collectMetrics(engine) {
|
|
|
93
120
|
},
|
|
94
121
|
};
|
|
95
122
|
}
|
|
123
|
+
/** Count a `run.triggered` / `run.trigger_failed` event under its settled workflow and subscriber. */
|
|
124
|
+
function countBySubscriber(into, e) {
|
|
125
|
+
const workflow = e.workflow ?? 'unknown';
|
|
126
|
+
const subscriber = e.name ?? 'unknown';
|
|
127
|
+
const bySubscriber = into[workflow] ?? {};
|
|
128
|
+
bySubscriber[subscriber] = (bySubscriber[subscriber] ?? 0) + 1;
|
|
129
|
+
into[workflow] = bySubscriber;
|
|
130
|
+
}
|
|
96
131
|
//# sourceMappingURL=metrics.js.map
|
package/dist/src/metrics.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/metrics.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/metrics.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,9 +16,18 @@ export interface DurableMetricsSnapshot {
|
|
|
16
16
|
routed: number;
|
|
17
17
|
/** Failures that had onError routes the engine could not apply (workers disagree). */
|
|
18
18
|
unrouted: number;
|
|
19
|
+
/** Subscriber runs started by a settled run's lifecycle event. */
|
|
20
|
+
triggered: number;
|
|
21
|
+
/** Subscribers a settled run's lifecycle event could not start (`where` threw, start failed). */
|
|
22
|
+
triggerFailed: number;
|
|
19
23
|
};
|
|
20
24
|
/** Routed failures by error code (`*` for a failure without one). */
|
|
21
25
|
routedByCode: Record<string, number>;
|
|
26
|
+
/**
|
|
27
|
+
* The `durable.runs.triggered` counter by its attributes: `workflow` (the settled run's) and
|
|
28
|
+
* `subscriber` (the workflow its lifecycle event started), keyed by workflow, then subscriber.
|
|
29
|
+
*/
|
|
30
|
+
triggeredBySubscriber: Record<string, Record<string, number>>;
|
|
22
31
|
steps: {
|
|
23
32
|
completed: number;
|
|
24
33
|
failed: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"durable-metrics.d.ts","sourceRoot":"","sources":["../../../src/otel/durable-metrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE;QACJ,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,wEAAwE;QACxE,MAAM,EAAE,MAAM,CAAC;QACf,sFAAsF;QACtF,QAAQ,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"durable-metrics.d.ts","sourceRoot":"","sources":["../../../src/otel/durable-metrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE;QACJ,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,wEAAwE;QACxE,MAAM,EAAE,MAAM,CAAC;QACf,sFAAsF;QACtF,QAAQ,EAAE,MAAM,CAAC;QACjB,kEAAkE;QAClE,SAAS,EAAE,MAAM,CAAC;QAClB,iGAAiG;QACjG,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,qEAAqE;IACrE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC;;;OAGG;IACH,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC9D,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,kEAAkE;IAClE,cAAc,EAAE,aAAa,CAAC;IAC9B,6DAA6D;IAC7D,aAAa,EAAE,aAAa,CAAC;CAC9B;AAED,MAAM,WAAW,cAAc;IAC7B,qEAAqE;IACrE,QAAQ,IAAI,sBAAsB,CAAC;IACnC,qDAAqD;IACrD,KAAK,IAAI,IAAI,CAAC;IACd,uBAAuB;IACvB,WAAW,IAAI,IAAI,CAAC;CACrB;AAED;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,QAAS,CAAC;AAkC7C;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,GAAG,cAAc,CAyG3E"}
|
|
@@ -53,9 +53,12 @@ export function attachDurableMetrics(engine) {
|
|
|
53
53
|
suspended: 0,
|
|
54
54
|
routed: 0,
|
|
55
55
|
unrouted: 0,
|
|
56
|
+
triggered: 0,
|
|
57
|
+
triggerFailed: 0,
|
|
56
58
|
});
|
|
57
59
|
let runs = zeroRuns();
|
|
58
60
|
let routedByCode = {};
|
|
61
|
+
let triggeredBy = {};
|
|
59
62
|
let steps = { completed: 0, failed: 0 };
|
|
60
63
|
let stepDur = new DurationSamples();
|
|
61
64
|
let runDur = new DurationSamples();
|
|
@@ -104,6 +107,18 @@ export function attachDurableMetrics(engine) {
|
|
|
104
107
|
case 'run.unrouted':
|
|
105
108
|
runs.unrouted += 1;
|
|
106
109
|
break;
|
|
110
|
+
case 'run.triggered': {
|
|
111
|
+
runs.triggered += 1;
|
|
112
|
+
const workflow = e.workflow ?? 'unknown';
|
|
113
|
+
const subscriber = e.name ?? 'unknown';
|
|
114
|
+
const bySubscriber = triggeredBy[workflow] ?? {};
|
|
115
|
+
bySubscriber[subscriber] = (bySubscriber[subscriber] ?? 0) + 1;
|
|
116
|
+
triggeredBy[workflow] = bySubscriber;
|
|
117
|
+
break;
|
|
118
|
+
}
|
|
119
|
+
case 'run.trigger_failed':
|
|
120
|
+
runs.triggerFailed += 1;
|
|
121
|
+
break;
|
|
107
122
|
case 'step.completed':
|
|
108
123
|
steps.completed += 1;
|
|
109
124
|
if (e.durationMs != null)
|
|
@@ -120,6 +135,7 @@ export function attachDurableMetrics(engine) {
|
|
|
120
135
|
snapshot: () => ({
|
|
121
136
|
runs: { ...runs },
|
|
122
137
|
routedByCode: { ...routedByCode },
|
|
138
|
+
triggeredBySubscriber: structuredClone(triggeredBy),
|
|
123
139
|
steps: { ...steps },
|
|
124
140
|
stepDurationMs: stepDur.stats(),
|
|
125
141
|
runDurationMs: runDur.stats(),
|
|
@@ -127,6 +143,7 @@ export function attachDurableMetrics(engine) {
|
|
|
127
143
|
reset: () => {
|
|
128
144
|
runs = zeroRuns();
|
|
129
145
|
routedByCode = {};
|
|
146
|
+
triggeredBy = {};
|
|
130
147
|
steps = { completed: 0, failed: 0 };
|
|
131
148
|
stepDur = new DurationSamples();
|
|
132
149
|
runDur = new DurationSamples();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"durable-metrics.js","sourceRoot":"","sources":["../../../src/otel/durable-metrics.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"durable-metrics.js","sourceRoot":"","sources":["../../../src/otel/durable-metrics.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,6 +15,13 @@ export interface DurableOtelOptions {
|
|
|
15
15
|
* Zero-overhead when no OTel SDK is registered: `@opentelemetry/api` resolves to no-op spans/tracer,
|
|
16
16
|
* so the bridge still subscribes but produces nothing. Pair with {@link otelTraceparent} (wired into
|
|
17
17
|
* the engine's `traceparent` option) for cross-process step continuation.
|
|
18
|
+
*
|
|
19
|
+
* A run a lifecycle event started (`@OnWorkflowCompleted`, `onEvent: [runCompletedEvent(...)]`) has
|
|
20
|
+
* its root span linked to the source run's span, with `durable.lifecycle.source_run_id` and
|
|
21
|
+
* `durable.lifecycle.kind` attributes. The bridge installs the engine's run trace provider
|
|
22
|
+
* (`engine.setRunTraceparent`), so a run with subscribers records the traceparent of the span its
|
|
23
|
+
* first turn opened (with its first suspend, or its terminal write), and the link holds when the
|
|
24
|
+
* run settles, or the subscriber runs, in another process.
|
|
18
25
|
*/
|
|
19
26
|
export declare function attachDurableOtel(engine: WorkflowEngine, options?: DurableOtelOptions): () => void;
|
|
20
27
|
//# sourceMappingURL=durable-otel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"durable-otel.d.ts","sourceRoot":"","sources":["../../../src/otel/durable-otel.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"durable-otel.d.ts","sourceRoot":"","sources":["../../../src/otel/durable-otel.ts"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,MAAM,EACX,KAAK,cAAc,EAEpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAe,cAAc,EAAE,MAAM,aAAa,CAAC;AA2B/D,MAAM,WAAW,kBAAkB;IACjC,wFAAwF;IACxF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qFAAqF;IACrF,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,cAAc,EACtB,OAAO,GAAE,kBAAuB,GAC/B,MAAM,IAAI,CA0JZ"}
|