@adonis-agora/durable 0.56.6 → 0.56.7

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 CHANGED
@@ -1,5 +1,11 @@
1
1
  # @adonis-agora/durable
2
2
 
3
+ ## 0.56.7
4
+
5
+ ### Patch Changes
6
+
7
+ - [#428](https://github.com/DavideCarvalho/adonis-agora-durable/pull/428) [`95b8233`](https://github.com/DavideCarvalho/adonis-agora-durable/commit/95b823315557473af0ae33e7a307d5351b85970b) Thanks [@DavideCarvalho](https://github.com/DavideCarvalho)! - perf(otel): `attachDurableMetrics` no longer leaks memory. Runs that start on this instance but never report a terminal event here (suspended and resumed elsewhere, cancelled) are no longer tracked forever — the oldest of more than 10,000 pending starts is dropped. Duration samples are kept as an exact value histogram, so memory scales with distinct millisecond values instead of sample count and `snapshot()` no longer sorts every sample; reported counts and percentiles are unchanged.
8
+
3
9
  ## 0.56.6
4
10
 
5
11
  ### Patch Changes
@@ -1,5 +1,5 @@
1
1
  /** Keep in sync with this package's `version` in package.json. */
2
- export declare const VERSION = "0.56.6";
2
+ export declare const VERSION = "0.56.7";
3
3
  export type { AccessDeniedInfo, AccessDeniedPageOptions, AccessDeniedReason, } from './access_denied_page.js';
4
4
  export { CONSOLE as ACCESS_DENIED_CONSOLE, escapeHtml, renderAccessDeniedPage, resolveAccessDeniedPage, } from './access_denied_page.js';
5
5
  export type { AuthMode, DashboardAuthOptions, LoginHook, LoginOutcome, ResolvedDashboardAuth, SessionHook, SessionOutcome, } from './auth.js';
@@ -1,5 +1,5 @@
1
1
  /** Keep in sync with this package's `version` in package.json. */
2
- export const VERSION = '0.56.6';
2
+ export const VERSION = '0.56.7';
3
3
  // The built-in "access denied" page (what a browser sees on a refused page navigation).
4
4
  export { CONSOLE as ACCESS_DENIED_CONSOLE, escapeHtml, renderAccessDeniedPage, resolveAccessDeniedPage, } from './access_denied_page.js';
5
5
  // Built-in `dashboardAuth` login screen (optional; opt-in via `config/durable_dashboard.ts`).
@@ -1,5 +1,5 @@
1
1
  /** Keep in sync with this package's `version` in package.json. */
2
- export declare const VERSION = "0.56.6";
2
+ export declare const VERSION = "0.56.7";
3
3
  export { configure } from '../configure.js';
4
4
  export * from './admission.js';
5
5
  export type { AdmissionContext, AdmissionFactory, RedisAdmissionConfig, } from './admissions/factory.js';
package/dist/src/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /** Keep in sync with this package's `version` in package.json. */
2
- export const VERSION = '0.56.6';
2
+ export const VERSION = '0.56.7';
3
3
  // Re-export the configure hook from the package root so `node ace configure` finds it.
4
4
  // AdonisJS imports the package MAIN and reads `configure` off the module namespace —
5
5
  // the `./configure` subpath alone is never consulted.
@@ -36,6 +36,13 @@ export interface DurableMetrics {
36
36
  /** Stop collecting. */
37
37
  unsubscribe(): void;
38
38
  }
39
+ /**
40
+ * Most `run.started` entries kept waiting for their terminal event. A run that starts here but never
41
+ * ends here (suspended and resumed on another pod, cancelled, reclaimed elsewhere) would otherwise
42
+ * stay in the map forever. Past the cap the OLDEST start is dropped — only a run still in flight
43
+ * after this many newer starts loses its (single) duration sample.
44
+ */
45
+ export declare const MAX_TRACKED_RUN_STARTS = 10000;
39
46
  /**
40
47
  * Collect lightweight, dependency-free metrics from engine lifecycle events: run/step counts by
41
48
  * outcome and run/step duration percentiles. Pull `snapshot()` from a `/metrics` route, a Telescope
@@ -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;KAClB,CAAC;IACF,qEAAqE;IACrE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,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;AAUD;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,GAAG,cAAc,CAkF3E"}
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;KAClB,CAAC;IACF,qEAAqE;IACrE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,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,CAwF3E"}
@@ -1,10 +1,41 @@
1
1
  import { isRemoteEvent } from '../remote-event.js';
2
- function stats(xs) {
3
- if (xs.length === 0)
4
- return { count: 0, p50: 0, p95: 0, max: 0 };
5
- const sorted = [...xs].sort((a, b) => a - b);
6
- const at = (p) => sorted[Math.min(sorted.length - 1, Math.floor((p / 100) * sorted.length))] ?? 0;
7
- return { count: sorted.length, p50: at(50), p95: at(95), max: sorted[sorted.length - 1] ?? 0 };
2
+ /**
3
+ * Most `run.started` entries kept waiting for their terminal event. A run that starts here but never
4
+ * ends here (suspended and resumed on another pod, cancelled, reclaimed elsewhere) would otherwise
5
+ * stay in the map forever. Past the cap the OLDEST start is dropped — only a run still in flight
6
+ * after this many newer starts loses its (single) duration sample.
7
+ */
8
+ export const MAX_TRACKED_RUN_STARTS = 10_000;
9
+ /**
10
+ * Exact duration samples as a value → occurrences histogram. Durations are whole milliseconds, so
11
+ * memory grows with the number of DISTINCT values (bounded by the duration range) instead of with
12
+ * the number of samples, and percentiles stay identical to sorting every sample.
13
+ */
14
+ class DurationSamples {
15
+ counts = new Map();
16
+ total = 0;
17
+ add(value) {
18
+ this.counts.set(value, (this.counts.get(value) ?? 0) + 1);
19
+ this.total += 1;
20
+ }
21
+ stats() {
22
+ if (this.total === 0)
23
+ return { count: 0, p50: 0, p95: 0, max: 0 };
24
+ const values = [...this.counts.keys()].sort((a, b) => a - b);
25
+ const n = this.total;
26
+ // The value at sorted-sample index `i`, walking cumulative counts.
27
+ const atIndex = (i) => {
28
+ let seen = 0;
29
+ for (const v of values) {
30
+ seen += this.counts.get(v) ?? 0;
31
+ if (i < seen)
32
+ return v;
33
+ }
34
+ return values[values.length - 1] ?? 0;
35
+ };
36
+ const at = (p) => atIndex(Math.min(n - 1, Math.floor((p / 100) * n)));
37
+ return { count: n, p50: at(50), p95: at(95), max: values[values.length - 1] ?? 0 };
38
+ }
8
39
  }
9
40
  /**
10
41
  * Collect lightweight, dependency-free metrics from engine lifecycle events: run/step counts by
@@ -26,13 +57,13 @@ export function attachDurableMetrics(engine) {
26
57
  let runs = zeroRuns();
27
58
  let routedByCode = {};
28
59
  let steps = { completed: 0, failed: 0 };
29
- let stepDur = [];
30
- let runDur = [];
60
+ let stepDur = new DurationSamples();
61
+ let runDur = new DurationSamples();
31
62
  const runStart = new Map();
32
63
  const finishRun = (runId, at) => {
33
64
  const t0 = runStart.get(runId);
34
65
  if (t0 != null) {
35
- runDur.push(at.getTime() - t0);
66
+ runDur.add(at.getTime() - t0);
36
67
  runStart.delete(runId);
37
68
  }
38
69
  };
@@ -44,7 +75,14 @@ export function attachDurableMetrics(engine) {
44
75
  switch (e.type) {
45
76
  case 'run.started':
46
77
  runs.started += 1;
78
+ // Re-insert so the map's insertion order stays oldest-start-first for eviction.
79
+ runStart.delete(e.runId);
47
80
  runStart.set(e.runId, e.at.getTime());
81
+ if (runStart.size > MAX_TRACKED_RUN_STARTS) {
82
+ const oldest = runStart.keys().next().value;
83
+ if (oldest !== undefined)
84
+ runStart.delete(oldest);
85
+ }
48
86
  break;
49
87
  case 'run.completed':
50
88
  runs.completed += 1;
@@ -69,12 +107,12 @@ export function attachDurableMetrics(engine) {
69
107
  case 'step.completed':
70
108
  steps.completed += 1;
71
109
  if (e.durationMs != null)
72
- stepDur.push(e.durationMs);
110
+ stepDur.add(e.durationMs);
73
111
  break;
74
112
  case 'step.failed':
75
113
  steps.failed += 1;
76
114
  if (e.durationMs != null)
77
- stepDur.push(e.durationMs);
115
+ stepDur.add(e.durationMs);
78
116
  break;
79
117
  }
80
118
  });
@@ -83,15 +121,15 @@ export function attachDurableMetrics(engine) {
83
121
  runs: { ...runs },
84
122
  routedByCode: { ...routedByCode },
85
123
  steps: { ...steps },
86
- stepDurationMs: stats(stepDur),
87
- runDurationMs: stats(runDur),
124
+ stepDurationMs: stepDur.stats(),
125
+ runDurationMs: runDur.stats(),
88
126
  }),
89
127
  reset: () => {
90
128
  runs = zeroRuns();
91
129
  routedByCode = {};
92
130
  steps = { completed: 0, failed: 0 };
93
- stepDur = [];
94
- runDur = [];
131
+ stepDur = new DurationSamples();
132
+ runDur = new DurationSamples();
95
133
  runStart.clear();
96
134
  },
97
135
  unsubscribe,
@@ -1 +1 @@
1
- {"version":3,"file":"durable-metrics.js","sourceRoot":"","sources":["../../../src/otel/durable-metrics.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"durable-metrics.js","sourceRoot":"","sources":["../../../src/otel/durable-metrics.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adonis-agora/durable",
3
- "version": "0.56.6",
3
+ "version": "0.56.7",
4
4
  "description": "Durable cross-app workflows for AdonisJS — deterministic replay engine, AdonisJS binding, ace commands, dashboard, OpenTelemetry, Telescope, testing harness and Redis admission, all in one package. Part of the Agora ecosystem.",
5
5
  "license": "MIT",
6
6
  "repository": {