@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.
- package/LICENSE +21 -21
- package/README.md +794 -794
- package/build/_services/core/request-hunter.service.d.ts +24 -0
- package/build/_services/core/request-hunter.service.d.ts.map +1 -1
- package/build/_services/core/request-hunter.service.js +87 -3
- package/build/_services/core/request-hunter.service.js.map +1 -1
- package/package.json +1 -1
|
@@ -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":"
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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":";;;AAAA,sDAAiD;AAEjD,oFAAiF;
|
|
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.
|
|
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",
|