@futdevpro/nts-dynamo 1.15.439 → 1.15.440

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.
@@ -0,0 +1,68 @@
1
+ /** The measurement of one path. */
2
+ export interface DyNTS_FsReadMeterRow_Interface {
3
+ path: string;
4
+ bytes: number;
5
+ reads: number;
6
+ /** The most frequent callers (`<file>:<line>` under the source root), at most two. */
7
+ callers: {
8
+ caller: string;
9
+ count: number;
10
+ }[];
11
+ }
12
+ /**
13
+ * BFR-FLEET-033 — the READ meter of a process: which file is read again and again (one per process).
14
+ *
15
+ * @description Transplanted from My Assistant (`cli/src/diagnostics/fs-read-meter.ts`), the logic unchanged. There a
16
+ * watcher read whole files ~15 times a minute, and nothing told WHICH reader it was; this meter told it.
17
+ * - `fs.promises.readFile` and `fs.readFileSync` are replaced by a thin counter (the behaviour is unchanged); the
18
+ * already imported ESM names follow through `syncBuiltinESMExports()`;
19
+ * - one report line per minute, ONLY if the minute read more than `HEAVY_BYTES_PER_MINUTE`;
20
+ * - each line names the CALLER too (taken from the stack at the moment of the read, before the `await`, because
21
+ * after it the caller is lost);
22
+ * - ⛔ it never throws (an error of the measurement must not stop the process).
23
+ *
24
+ * Adapted for the bedrock: the caller root is a setting (`sourceRoot`, default `src`; My Assistant: `cli/src`), and
25
+ * frames under `node_modules` are never the caller.
26
+ */
27
+ export declare class DyNTS_FsReadMeter_Util {
28
+ /** This much reading per minute is worth a report line. */
29
+ static readonly HEAVY_BYTES_PER_MINUTE: number;
30
+ /** The report period. */
31
+ static readonly REPORT_EVERY_MS: number;
32
+ /** The folder the callers are shown relative to (`/` separated, e.g. `src` or `cli/src`). */
33
+ static sourceRoot: string;
34
+ private static readonly rows;
35
+ private static original;
36
+ /**
37
+ * The caller from the stack: the first frame under the source root that is NOT the meter itself and not under
38
+ * `node_modules`. No such frame ⇒ `?`. **Pure function.**
39
+ *
40
+ * @param stack the stack text
41
+ * @param sourceRoot the source root (default: `DyNTS_FsReadMeter_Util.sourceRoot`)
42
+ */
43
+ static callerOf(stack: string | undefined, sourceRoot?: string): string;
44
+ /** Records one read. */
45
+ static record(path: unknown, result: unknown, caller?: string): void;
46
+ /** Drains the measurement so far: the `top` largest paths + the totals. */
47
+ static drain(top?: number): {
48
+ rows: DyNTS_FsReadMeterRow_Interface[];
49
+ totalBytes: number;
50
+ totalReads: number;
51
+ };
52
+ /** The report line (MB, count, shortened path). */
53
+ static describe(report: {
54
+ rows: DyNTS_FsReadMeterRow_Interface[];
55
+ totalBytes: number;
56
+ totalReads: number;
57
+ }): string;
58
+ /**
59
+ * Turns the meter on (once per process) + the per-minute report.
60
+ *
61
+ * @param onHeavy called with the report line of a heavy minute
62
+ * @returns the timer (`unref`), or `null` if it was already on
63
+ */
64
+ static install(onHeavy: (line: string) => void): NodeJS.Timeout | null;
65
+ /** Turns the meter off (spec). */
66
+ static uninstall(): void;
67
+ }
68
+ //# sourceMappingURL=fs-read-meter.util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs-read-meter.util.d.ts","sourceRoot":"","sources":["../../../src/_modules/machine-monitor/fs-read-meter.util.ts"],"names":[],"mappings":"AAGA,mCAAmC;AACnC,MAAM,WAAW,8BAA8B;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,sFAAsF;IACtF,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC9C;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,sBAAsB;IAEjC,2DAA2D;IAC3D,MAAM,CAAC,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAoB;IAElE,yBAAyB;IACzB,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAU;IAEjD,6FAA6F;IAC7F,MAAM,CAAC,UAAU,EAAE,MAAM,CAAS;IAElC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAA0F;IAEtH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAgG;IAEvH;;;;;;OAMG;IACH,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,UAAU,GAAE,MAA0C,GAAG,MAAM;IAiB1G,wBAAwB;IACxB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAE,MAAY,GAAG,IAAI;IAkBzE,2EAA2E;IAC3E,MAAM,CAAC,KAAK,CAAC,GAAG,GAAE,MAAU,GAAG;QAAE,IAAI,EAAE,8BAA8B,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE;IAqBjH,mDAAmD;IACnD,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,8BAA8B,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM;IAWnH;;;;;OAKG;IACH,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,MAAM,CAAC,OAAO,GAAG,IAAI;IA0CtE,kCAAkC;IAClC,MAAM,CAAC,SAAS,IAAI,IAAI;CASzB"}
@@ -0,0 +1,145 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DyNTS_FsReadMeter_Util = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const fs_1 = tslib_1.__importDefault(require("fs"));
6
+ const module_1 = require("module");
7
+ /**
8
+ * BFR-FLEET-033 — the READ meter of a process: which file is read again and again (one per process).
9
+ *
10
+ * @description Transplanted from My Assistant (`cli/src/diagnostics/fs-read-meter.ts`), the logic unchanged. There a
11
+ * watcher read whole files ~15 times a minute, and nothing told WHICH reader it was; this meter told it.
12
+ * - `fs.promises.readFile` and `fs.readFileSync` are replaced by a thin counter (the behaviour is unchanged); the
13
+ * already imported ESM names follow through `syncBuiltinESMExports()`;
14
+ * - one report line per minute, ONLY if the minute read more than `HEAVY_BYTES_PER_MINUTE`;
15
+ * - each line names the CALLER too (taken from the stack at the moment of the read, before the `await`, because
16
+ * after it the caller is lost);
17
+ * - ⛔ it never throws (an error of the measurement must not stop the process).
18
+ *
19
+ * Adapted for the bedrock: the caller root is a setting (`sourceRoot`, default `src`; My Assistant: `cli/src`), and
20
+ * frames under `node_modules` are never the caller.
21
+ */
22
+ class DyNTS_FsReadMeter_Util {
23
+ /** This much reading per minute is worth a report line. */
24
+ static HEAVY_BYTES_PER_MINUTE = 10 * 1024 * 1024;
25
+ /** The report period. */
26
+ static REPORT_EVERY_MS = 60_000;
27
+ /** The folder the callers are shown relative to (`/` separated, e.g. `src` or `cli/src`). */
28
+ static sourceRoot = 'src';
29
+ static rows = new Map();
30
+ static original = null;
31
+ /**
32
+ * The caller from the stack: the first frame under the source root that is NOT the meter itself and not under
33
+ * `node_modules`. No such frame ⇒ `?`. **Pure function.**
34
+ *
35
+ * @param stack the stack text
36
+ * @param sourceRoot the source root (default: `DyNTS_FsReadMeter_Util.sourceRoot`)
37
+ */
38
+ static callerOf(stack, sourceRoot = DyNTS_FsReadMeter_Util.sourceRoot) {
39
+ const root = sourceRoot.split('/').map((part) => part.replace(/[.*+?^${}()|[\]\\]/gu, '\\$&')).join('[\\\\/]');
40
+ const frame = new RegExp(`[\\\\/]${root}[\\\\/](.+?):(\\d+):\\d+\\)?\\s*$`, 'u');
41
+ for (const line of (stack ?? '').split('\n').slice(1)) {
42
+ if (/[\\/]node_modules[\\/]/u.test(line))
43
+ continue;
44
+ const match = frame.exec(line);
45
+ const file = match?.[1]?.replace(/\\/gu, '/');
46
+ if (file && !/(?:^|\/)fs-read-meter\.util\.(?:ts|js)$/u.test(file))
47
+ return `${file}:${match?.[2] ?? '?'}`;
48
+ }
49
+ return '?';
50
+ }
51
+ /** Records one read. */
52
+ static record(path, result, caller = '?') {
53
+ try {
54
+ const key = typeof path === 'string'
55
+ ? path : path instanceof URL ? path.pathname : Buffer.isBuffer(path) ? path.toString() : 'fd';
56
+ const bytes = typeof result === 'string' ? Buffer.byteLength(result) : Buffer.isBuffer(result) ? result.length : 0;
57
+ const row = DyNTS_FsReadMeter_Util.rows.get(key) ?? { bytes: 0, reads: 0, callers: new Map() };
58
+ row.bytes += bytes;
59
+ row.reads += 1;
60
+ row.callers.set(caller, (row.callers.get(caller) ?? 0) + 1);
61
+ DyNTS_FsReadMeter_Util.rows.set(key, row);
62
+ }
63
+ catch {
64
+ // ⛔ an error of the measurement never reaches the caller
65
+ }
66
+ }
67
+ /** Drains the measurement so far: the `top` largest paths + the totals. */
68
+ static drain(top = 5) {
69
+ const rows = [...DyNTS_FsReadMeter_Util.rows.entries()]
70
+ .map(([path, row]) => ({
71
+ path: path,
72
+ bytes: row.bytes,
73
+ reads: row.reads,
74
+ callers: [...row.callers.entries()]
75
+ .map(([caller, count]) => ({ caller: caller, count: count }))
76
+ .sort((a, b) => b.count - a.count).slice(0, 2),
77
+ }))
78
+ .sort((a, b) => b.bytes - a.bytes);
79
+ DyNTS_FsReadMeter_Util.rows.clear();
80
+ return {
81
+ rows: rows.slice(0, top),
82
+ totalBytes: rows.reduce((sum, row) => sum + row.bytes, 0),
83
+ totalReads: rows.reduce((sum, row) => sum + row.reads, 0),
84
+ };
85
+ }
86
+ /** The report line (MB, count, shortened path). */
87
+ static describe(report) {
88
+ const mb = (bytes) => (bytes / 1024 / 1024).toFixed(1);
89
+ return `${mb(report.totalBytes)} MB / min, ${report.totalReads} reads — most: `
90
+ + report.rows.map((row) => `${row.path.split(/[\\/]/u).slice(-2).join('/')} ${mb(row.bytes)} MB (${row.reads}×`
91
+ + `${row.callers.length
92
+ ? ` ← ${row.callers.map((entry) => `${entry.caller} ${entry.count}×`).join(', ')}` : ''})`)
93
+ .join('; ');
94
+ }
95
+ /**
96
+ * Turns the meter on (once per process) + the per-minute report.
97
+ *
98
+ * @param onHeavy called with the report line of a heavy minute
99
+ * @returns the timer (`unref`), or `null` if it was already on
100
+ */
101
+ static install(onHeavy) {
102
+ if (DyNTS_FsReadMeter_Util.original)
103
+ return null;
104
+ const readFile = fs_1.default.promises.readFile;
105
+ const readFileSync = fs_1.default.readFileSync;
106
+ DyNTS_FsReadMeter_Util.original = { readFile: readFile, readFileSync: readFileSync };
107
+ Object.assign(fs_1.default.promises, {
108
+ readFile: async (...args) => {
109
+ // ⚠️ the caller BEFORE the `await` — after it the stack no longer shows it
110
+ const caller = DyNTS_FsReadMeter_Util.callerOf(new Error().stack);
111
+ const result = await readFile(...args);
112
+ DyNTS_FsReadMeter_Util.record(args[0], result, caller);
113
+ return result;
114
+ },
115
+ });
116
+ Object.assign(fs_1.default, {
117
+ readFileSync: (...args) => {
118
+ const result = readFileSync(...args);
119
+ DyNTS_FsReadMeter_Util.record(args[0], result, DyNTS_FsReadMeter_Util.callerOf(new Error().stack));
120
+ return result;
121
+ },
122
+ });
123
+ (0, module_1.syncBuiltinESMExports)();
124
+ const timer = setInterval(() => {
125
+ const report = DyNTS_FsReadMeter_Util.drain();
126
+ if (report.totalBytes >= DyNTS_FsReadMeter_Util.HEAVY_BYTES_PER_MINUTE) {
127
+ onHeavy(DyNTS_FsReadMeter_Util.describe(report));
128
+ }
129
+ }, DyNTS_FsReadMeter_Util.REPORT_EVERY_MS);
130
+ timer.unref();
131
+ return timer;
132
+ }
133
+ /** Turns the meter off (spec). */
134
+ static uninstall() {
135
+ if (!DyNTS_FsReadMeter_Util.original)
136
+ return;
137
+ Object.assign(fs_1.default.promises, { readFile: DyNTS_FsReadMeter_Util.original.readFile });
138
+ Object.assign(fs_1.default, { readFileSync: DyNTS_FsReadMeter_Util.original.readFileSync });
139
+ (0, module_1.syncBuiltinESMExports)();
140
+ DyNTS_FsReadMeter_Util.original = null;
141
+ DyNTS_FsReadMeter_Util.rows.clear();
142
+ }
143
+ }
144
+ exports.DyNTS_FsReadMeter_Util = DyNTS_FsReadMeter_Util;
145
+ //# sourceMappingURL=fs-read-meter.util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs-read-meter.util.js","sourceRoot":"","sources":["../../../src/_modules/machine-monitor/fs-read-meter.util.ts"],"names":[],"mappings":"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"}
@@ -9,4 +9,5 @@ export { DyNTS_DiskAlert_Interface, DyNTS_DiskAlertState, DyNTS_DiskReading_Inte
9
9
  export { DyNTS_DiskSpace_Util } from './disk-space.util';
10
10
  export { DyNTS_DiskSpace_Runner } from './disk-space.runner';
11
11
  export { DyNTS_DiskSpaceWindowsReader_Util } from './disk-space-windows-reader.util';
12
+ export { DyNTS_FsReadMeter_Util, DyNTS_FsReadMeterRow_Interface } from './fs-read-meter.util';
12
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/_modules/machine-monitor/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gCAAgC,EAChC,8BAA8B,EAC9B,oCAAoC,EACpC,+BAA+B,GAChC,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,mCAAmC,EAAE,MAAM,2CAA2C,CAAC;AAChG,OAAO,EAAE,wCAAwC,EAAE,MAAM,iDAAiD,CAAC;AAC3G,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,EAAE,qCAAqC,EAAE,MAAM,sCAAsC,CAAC;AAC7F,OAAO,EACL,yBAAyB,EACzB,oBAAoB,EACpB,2BAA2B,EAC3B,mCAAmC,GACpC,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,iCAAiC,EAAE,MAAM,kCAAkC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/_modules/machine-monitor/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gCAAgC,EAChC,8BAA8B,EAC9B,oCAAoC,EACpC,+BAA+B,GAChC,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,mCAAmC,EAAE,MAAM,2CAA2C,CAAC;AAChG,OAAO,EAAE,wCAAwC,EAAE,MAAM,iDAAiD,CAAC;AAC3G,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,EAAE,qCAAqC,EAAE,MAAM,sCAAsC,CAAC;AAC7F,OAAO,EACL,yBAAyB,EACzB,oBAAoB,EACpB,2BAA2B,EAC3B,mCAAmC,GACpC,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,iCAAiC,EAAE,MAAM,kCAAkC,CAAC;AACrF,OAAO,EAAE,sBAAsB,EAAE,8BAA8B,EAAE,MAAM,sBAAsB,CAAC"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DyNTS_DiskSpaceWindowsReader_Util = exports.DyNTS_DiskSpace_Runner = exports.DyNTS_DiskSpace_Util = exports.DyNTS_MachineStateWindowsRunners_Util = exports.DyNTS_MachineState_Recorder = exports.DyNTS_MachineStateWindow_Util = exports.DyNTS_MachineState_Util = void 0;
3
+ exports.DyNTS_FsReadMeter_Util = exports.DyNTS_DiskSpaceWindowsReader_Util = exports.DyNTS_DiskSpace_Runner = exports.DyNTS_DiskSpace_Util = exports.DyNTS_MachineStateWindowsRunners_Util = exports.DyNTS_MachineState_Recorder = exports.DyNTS_MachineStateWindow_Util = exports.DyNTS_MachineState_Util = void 0;
4
4
  var machine_state_util_1 = require("./machine-state.util");
5
5
  Object.defineProperty(exports, "DyNTS_MachineState_Util", { enumerable: true, get: function () { return machine_state_util_1.DyNTS_MachineState_Util; } });
6
6
  var machine_state_window_util_1 = require("./machine-state-window.util");
@@ -15,4 +15,6 @@ var disk_space_runner_1 = require("./disk-space.runner");
15
15
  Object.defineProperty(exports, "DyNTS_DiskSpace_Runner", { enumerable: true, get: function () { return disk_space_runner_1.DyNTS_DiskSpace_Runner; } });
16
16
  var disk_space_windows_reader_util_1 = require("./disk-space-windows-reader.util");
17
17
  Object.defineProperty(exports, "DyNTS_DiskSpaceWindowsReader_Util", { enumerable: true, get: function () { return disk_space_windows_reader_util_1.DyNTS_DiskSpaceWindowsReader_Util; } });
18
+ var fs_read_meter_util_1 = require("./fs-read-meter.util");
19
+ Object.defineProperty(exports, "DyNTS_FsReadMeter_Util", { enumerable: true, get: function () { return fs_read_meter_util_1.DyNTS_FsReadMeter_Util; } });
18
20
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/_modules/machine-monitor/index.ts"],"names":[],"mappings":";;;AAQA,2DAA+D;AAAtD,6HAAA,uBAAuB,OAAA;AAChC,yEAA4E;AAAnE,0IAAA,6BAA6B,OAAA;AACtC,mEAAuE;AAA9D,qIAAA,2BAA2B,OAAA;AACpC,2FAA6F;AAApF,2JAAA,qCAAqC,OAAA;AAO9C,qDAAyD;AAAhD,uHAAA,oBAAoB,OAAA;AAC7B,yDAA6D;AAApD,2HAAA,sBAAsB,OAAA;AAC/B,mFAAqF;AAA5E,mJAAA,iCAAiC,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/_modules/machine-monitor/index.ts"],"names":[],"mappings":";;;AAQA,2DAA+D;AAAtD,6HAAA,uBAAuB,OAAA;AAChC,yEAA4E;AAAnE,0IAAA,6BAA6B,OAAA;AACtC,mEAAuE;AAA9D,qIAAA,2BAA2B,OAAA;AACpC,2FAA6F;AAApF,2JAAA,qCAAqC,OAAA;AAO9C,qDAAyD;AAAhD,uHAAA,oBAAoB,OAAA;AAC7B,yDAA6D;AAApD,2HAAA,sBAAsB,OAAA;AAC/B,mFAAqF;AAA5E,mJAAA,iCAAiC,OAAA;AAC1C,2DAA8F;AAArF,4HAAA,sBAAsB,OAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@futdevpro/nts-dynamo",
3
- "version": "01.15.439",
3
+ "version": "01.15.440",
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",