@futdevpro/nts-dynamo 1.15.178 → 1.15.179

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.
@@ -40,6 +40,10 @@ export interface DyNTS_SlowRequestSample {
40
40
  * - `enabled?: boolean` default true
41
41
  * - `slowRequestMs?: number` default 1000 — e felett WARN a keres vegen
42
42
  * - `maxHistoryCount?: number` default 50 — a lassu-keres history merete
43
+ * - `slowSummaryWindowMs?: number` default 10000 — FR-346: per-label log coalescing
44
+ * window. The FIRST slow request of a label logs immediately; further slow requests of
45
+ * the SAME label within the window are collapsed into one summary line. `0` disables
46
+ * coalescing (every slow request gets its own line — the pre-FR-346 behaviour).
43
47
  */
44
48
  export declare class DyNTS_RequestHunter {
45
49
  private static instance;
@@ -47,6 +51,8 @@ export declare class DyNTS_RequestHunter {
47
51
  private nextId;
48
52
  private readonly inFlight;
49
53
  private slowHistory;
54
+ /** FR-346 — label → its currently open coalescing window. */
55
+ private readonly slowLogWindows;
50
56
  /** A settings-ertekek feloldasa (minden hivasnal, hogy a runtime-valtoztatas is hasson). */
51
57
  private getSettings;
52
58
  /**
@@ -60,6 +66,24 @@ export declare class DyNTS_RequestHunter {
60
66
  * Hibatur: ismeretlen / 0 id eseten no-op.
61
67
  */
62
68
  end(id: number): void;
69
+ /** One immediate slow-request line — unchanged wording, so existing log greps keep working. */
70
+ private warnSlow;
71
+ /**
72
+ * FR-346 — emit and close every coalescing window whose time is up.
73
+ *
74
+ * The summary carries MORE than the lines it replaces: a count and a min/mean/max spread,
75
+ * which is what actually tells an operator whether this is one outlier or sustained pressure.
76
+ * Windows with nothing suppressed close silently — their single line was already logged.
77
+ */
78
+ private flushExpiredSlowWindows;
79
+ /**
80
+ * Emit every pending summary NOW, regardless of window age.
81
+ *
82
+ * Needed because the flush is lazy: when a burst STOPS, the last window has no following
83
+ * request to trigger it. A diagnostics endpoint or a shutdown hook calls this so the tail of
84
+ * a burst is never lost from the log.
85
+ */
86
+ flushSlowSummaries(): void;
63
87
  /** Az EPPEN futo keresek — a stall-detektor ebbol tudja, mi ragadt be. */
64
88
  getInFlight(now?: number): DyNTS_InFlightRequest[];
65
89
  /** A kozelmult lassu keresei (gorgo history) — `/server/diag`-ba is kitehető. */
@@ -1 +1 @@
1
- {"version":3,"file":"request-hunter.service.d.ts","sourceRoot":"","sources":["../../../src/_services/core/request-hunter.service.ts"],"names":[],"mappings":"AAIA,uDAAuD;AACvD,MAAM,WAAW,qBAAqB;IACpC,uDAAuD;IACvD,KAAK,EAAE,MAAM,CAAC;IACd,6BAA6B;IAC7B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wDAAwD;AACxD,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,qBAAa,mBAAmB;IAE9B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAsB;IAE7C,MAAM,CAAC,WAAW,IAAI,mBAAmB;IAQzC,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgE;IACzF,OAAO,CAAC,WAAW,CAAiC;IAEpD,4FAA4F;IAC5F,OAAO,CAAC,WAAW;IAWnB;;;;OAIG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAW5B;;;OAGG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IA4BrB,0EAA0E;IAC1E,WAAW,CAAC,GAAG,GAAE,MAAmB,GAAG,qBAAqB,EAAE;IAS9D,iFAAiF;IACjF,cAAc,IAAI,uBAAuB,EAAE;IAI3C;;;;OAIG;IACH,gBAAgB,CAAC,GAAG,GAAE,MAAmB,GAAG,MAAM;CAWnD"}
1
+ {"version":3,"file":"request-hunter.service.d.ts","sourceRoot":"","sources":["../../../src/_services/core/request-hunter.service.ts"],"names":[],"mappings":"AAaA,uDAAuD;AACvD,MAAM,WAAW,qBAAqB;IACpC,uDAAuD;IACvD,KAAK,EAAE,MAAM,CAAC;IACd,6BAA6B;IAC7B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wDAAwD;AACxD,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAgBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,qBAAa,mBAAmB;IAE9B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAsB;IAE7C,MAAM,CAAC,WAAW,IAAI,mBAAmB;IAQzC,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgE;IACzF,OAAO,CAAC,WAAW,CAAiC;IACpD,6DAA6D;IAC7D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgE;IAE/F,4FAA4F;IAC5F,OAAO,CAAC,WAAW;IAyBnB;;;;OAIG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAW5B;;;OAGG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IA6DrB,+FAA+F;IAC/F,OAAO,CAAC,QAAQ;IAOhB;;;;;;OAMG;IACH,OAAO,CAAC,uBAAuB;IAqB/B;;;;;;OAMG;IACH,kBAAkB,IAAI,IAAI;IAI1B,0EAA0E;IAC1E,WAAW,CAAC,GAAG,GAAE,MAAmB,GAAG,qBAAqB,EAAE;IAS9D,iFAAiF;IACjF,cAAc,IAAI,uBAAuB,EAAE;IAI3C;;;;OAIG;IACH,gBAAgB,CAAC,GAAG,GAAE,MAAmB,GAAG,MAAM;CAWnD"}
@@ -3,6 +3,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DyNTS_RequestHunter = void 0;
4
4
  const fsm_dynamo_1 = require("@futdevpro/fsm-dynamo");
5
5
  const global_settings_const_1 = require("../../_collections/global-settings.const");
6
+ /**
7
+ * FR-346 default coalescing window (ms).
8
+ *
9
+ * 10 s matches the load-shed warning interval already used elsewhere in the fleet: long
10
+ * enough to collapse a burst, short enough that sustained pressure still reports several
11
+ * times a minute.
12
+ */
13
+ const DEFAULT_SLOW_SUMMARY_WINDOW_MS = 10 * 1000;
6
14
  /**
7
15
  * ISSUE-HUNTER: **melyik keres blokkolta az event-loopot?**
8
16
  *
@@ -32,6 +40,10 @@ const global_settings_const_1 = require("../../_collections/global-settings.cons
32
40
  * - `enabled?: boolean` default true
33
41
  * - `slowRequestMs?: number` default 1000 — e felett WARN a keres vegen
34
42
  * - `maxHistoryCount?: number` default 50 — a lassu-keres history merete
43
+ * - `slowSummaryWindowMs?: number` default 10000 — FR-346: per-label log coalescing
44
+ * window. The FIRST slow request of a label logs immediately; further slow requests of
45
+ * the SAME label within the window are collapsed into one summary line. `0` disables
46
+ * coalescing (every slow request gets its own line — the pre-FR-346 behaviour).
35
47
  */
36
48
  class DyNTS_RequestHunter {
37
49
  static instance;
@@ -44,6 +56,8 @@ class DyNTS_RequestHunter {
44
56
  nextId = 1;
45
57
  inFlight = new Map();
46
58
  slowHistory = [];
59
+ /** FR-346 — label → its currently open coalescing window. */
60
+ slowLogWindows = new Map();
47
61
  /** A settings-ertekek feloldasa (minden hivasnal, hogy a runtime-valtoztatas is hasson). */
48
62
  getSettings() {
49
63
  const s = global_settings_const_1.DyNTS_global_settings.requestHunter ?? {};
@@ -51,6 +65,10 @@ class DyNTS_RequestHunter {
51
65
  enabled: s.enabled !== false,
52
66
  slowRequestMs: typeof s.slowRequestMs === 'number' && s.slowRequestMs > 0 ? s.slowRequestMs : 1000,
53
67
  maxHistoryCount: typeof s.maxHistoryCount === 'number' && s.maxHistoryCount > 0 ? s.maxHistoryCount : 50,
68
+ // `0` is a MEANINGFUL value here (coalescing off), so `>= 0` — not the `> 0` guard above.
69
+ slowSummaryWindowMs: typeof s.slowSummaryWindowMs === 'number' && s.slowSummaryWindowMs >= 0
70
+ ? s.slowSummaryWindowMs
71
+ : DEFAULT_SLOW_SUMMARY_WINDOW_MS,
54
72
  };
55
73
  }
56
74
  /**
@@ -80,17 +98,83 @@ class DyNTS_RequestHunter {
80
98
  }
81
99
  this.inFlight.delete(id);
82
100
  const settings = this.getSettings();
83
- const durationMs = Date.now() - entry.startedAt;
101
+ const now = Date.now();
102
+ // FR-346 — lazy flush: an expired window is emitted on the NEXT `end()`, so no background
103
+ // timer is needed (this codebase forbids background pollers). Cheap: a no-op when the map
104
+ // is empty, which is the steady state.
105
+ this.flushExpiredSlowWindows(now, settings.slowSummaryWindowMs);
106
+ const durationMs = now - entry.startedAt;
84
107
  if (durationMs < settings.slowRequestMs) {
85
108
  return;
86
109
  }
87
- this.slowHistory.push({ at: Date.now(), label: entry.label, durationMs: durationMs });
110
+ // The STRUCTURED sample is recorded for EVERY slow request, coalescing or not — the
111
+ // history is state, and state must not be lossy just because the log line is.
112
+ this.slowHistory.push({ at: now, label: entry.label, durationMs: durationMs });
88
113
  if (this.slowHistory.length > settings.maxHistoryCount) {
89
114
  this.slowHistory = this.slowHistory.slice(-settings.maxHistoryCount);
90
115
  }
91
- fsm_dynamo_1.DyFM_Log.warn(`[REQ-HUNTER] SLOW ${entry.label} ${durationMs}ms`
116
+ if (!settings.slowSummaryWindowMs) {
117
+ this.warnSlow(entry.label, durationMs);
118
+ return;
119
+ }
120
+ const open = this.slowLogWindows.get(entry.label);
121
+ if (!open) {
122
+ // FIRST slow request of this label — logged IMMEDIATELY. Coalescing must never delay
123
+ // the detection of a new problem; it only collapses the repetition that follows.
124
+ this.warnSlow(entry.label, durationMs);
125
+ // The window statistics describe the SUPPRESSED requests only. Seeding min/max with
126
+ // this first duration would mix an already-logged sample into a summary that reports
127
+ // a count of the others - the spread and the count would then describe different sets.
128
+ this.slowLogWindows.set(entry.label, {
129
+ openedAt: now, suppressed: 0, minMs: Number.POSITIVE_INFINITY, maxMs: 0, totalMs: 0,
130
+ });
131
+ return;
132
+ }
133
+ open.suppressed++;
134
+ open.totalMs += durationMs;
135
+ open.minMs = Math.min(open.minMs, durationMs);
136
+ open.maxMs = Math.max(open.maxMs, durationMs);
137
+ }
138
+ /** One immediate slow-request line — unchanged wording, so existing log greps keep working. */
139
+ warnSlow(label, durationMs) {
140
+ fsm_dynamo_1.DyFM_Log.warn(`[REQ-HUNTER] SLOW ${label} ${durationMs}ms`
92
141
  + (this.inFlight.size ? ` (kozben ${this.inFlight.size} masik keres is futott)` : ''));
93
142
  }
143
+ /**
144
+ * FR-346 — emit and close every coalescing window whose time is up.
145
+ *
146
+ * The summary carries MORE than the lines it replaces: a count and a min/mean/max spread,
147
+ * which is what actually tells an operator whether this is one outlier or sustained pressure.
148
+ * Windows with nothing suppressed close silently — their single line was already logged.
149
+ */
150
+ flushExpiredSlowWindows(now, windowMs) {
151
+ if (!this.slowLogWindows.size) {
152
+ return;
153
+ }
154
+ for (const [label, win] of [...this.slowLogWindows.entries()]) {
155
+ if (windowMs && now - win.openedAt < windowMs) {
156
+ continue;
157
+ }
158
+ this.slowLogWindows.delete(label);
159
+ if (!win.suppressed) {
160
+ continue;
161
+ }
162
+ const meanMs = Math.round(win.totalMs / win.suppressed);
163
+ fsm_dynamo_1.DyFM_Log.warn(`[REQ-HUNTER] SLOW ${label} x${win.suppressed} more in ${now - win.openedAt}ms `
164
+ + `(min ${win.minMs}ms, mean ${meanMs}ms, max ${win.maxMs}ms) `
165
+ + '- lines coalesced (FR-346); every sample is in the slow-request history');
166
+ }
167
+ }
168
+ /**
169
+ * Emit every pending summary NOW, regardless of window age.
170
+ *
171
+ * Needed because the flush is lazy: when a burst STOPS, the last window has no following
172
+ * request to trigger it. A diagnostics endpoint or a shutdown hook calls this so the tail of
173
+ * a burst is never lost from the log.
174
+ */
175
+ flushSlowSummaries() {
176
+ this.flushExpiredSlowWindows(Date.now(), 0);
177
+ }
94
178
  /** Az EPPEN futo keresek — a stall-detektor ebbol tudja, mi ragadt be. */
95
179
  getInFlight(now = Date.now()) {
96
180
  const out = [];
@@ -1 +1 @@
1
- {"version":3,"file":"request-hunter.service.js","sourceRoot":"","sources":["../../../src/_services/core/request-hunter.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"request-hunter.service.js","sourceRoot":"","sources":["../../../src/_services/core/request-hunter.service.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@futdevpro/nts-dynamo",
3
- "version": "01.15.178",
3
+ "version": "01.15.179",
4
4
  "description": "Dynamic NodeTS (NodeJS-Typescript), MongoDB Backend System Framework by Future Development Program Ltd.",
5
5
  "DyBu_settings": {
6
6
  "packageType": "server-package",