nestjs-profiler 1.0.27 → 1.0.28
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/README.md +67 -1
- package/controllers/profiler.controller.d.ts +11 -1
- package/controllers/profiler.controller.js +65 -4
- package/controllers/profiler.controller.js.map +1 -1
- package/interceptors/request-profiler.interceptor.d.ts +3 -1
- package/interceptors/request-profiler.interceptor.js +10 -5
- package/interceptors/request-profiler.interceptor.js.map +1 -1
- package/package.json +1 -1
- package/profiler.module.js +5 -2
- package/profiler.module.js.map +1 -1
- package/services/memory.service.d.ts +58 -0
- package/services/memory.service.js +223 -0
- package/services/memory.service.js.map +1 -0
- package/services/view.service.js +2 -0
- package/services/view.service.js.map +1 -1
- package/views/layout.html +9 -0
- package/views/memory.html +380 -0
package/README.md
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
<img src="https://img.shields.io/badge/license-MIT-blue" alt="license" />
|
|
12
12
|
</p>
|
|
13
13
|
|
|
14
|
-
> A drop-in debugging dashboard for NestJS. Inspect HTTP requests, database queries, outbound calls, logs, events, scheduled jobs, and code health — all from one browser tab, with zero instrumentation required.
|
|
14
|
+
> A drop-in debugging dashboard for NestJS. Inspect HTTP requests, database queries, outbound calls, logs, events, scheduled jobs, memory usage, and code health — all from one browser tab, with zero instrumentation required.
|
|
15
15
|
|
|
16
16
|
---
|
|
17
17
|
|
|
@@ -106,6 +106,34 @@ Tracks `get`, `set`, `del`, and `reset` operations with hit/miss ratio when usin
|
|
|
106
106
|
- **Event Tracking** — intercepts every `EventEmitter2` emission and renders a cascading tree: which service fired it, which listeners handled it, individual timings, child events, and errors. Requires `@nestjs/event-emitter`
|
|
107
107
|
- **Scheduled Jobs** — live view of all `@Cron`, `@Interval`, and `@Timeout` jobs from `@nestjs/schedule`, with countdowns, last run times, cycle progress, and handler details. Requires `@nestjs/schedule`
|
|
108
108
|
|
|
109
|
+
### Memory Monitor
|
|
110
|
+
Continuously samples Node.js heap statistics using `process.memoryUsage()` and `v8.getHeapStatistics()` (zero extra dependencies). Stores a 60-sample rolling window (10 minutes at 10-second intervals) and computes a 0–100 leak score from three signals: heap growth rate across the window, number of V8 detached contexts, and sustained growth ratio. Trend is classified as `stable`, `growing`, or `likely_leak`.
|
|
111
|
+
|
|
112
|
+
- **Live heap chart** — SVG line chart of `heapUsed` across the rolling window, auto-refreshes every 15 seconds
|
|
113
|
+
- **Stat cards** — heap used, heap total, RSS, detached contexts, and heap size limit
|
|
114
|
+
- **Leak score ring** — 0–100 circular gauge with score breakdown by component
|
|
115
|
+
- **Per-request memory delta** — every intercepted request records `heapUsed` before and after the handler; the top 20 highest-delta requests are shown in a table
|
|
116
|
+
- **Force GC** — manually triggers garbage collection (requires `--expose-gc`, pre-wired in `start:dev`)
|
|
117
|
+
- **Heap Snapshot** — generates a V8 heap snapshot and streams it directly to the browser as a `.heapsnapshot` download; open in Chrome DevTools → Memory tab → Load for a full object-level leak analysis
|
|
118
|
+
|
|
119
|
+
**Leak score breakdown:**
|
|
120
|
+
|
|
121
|
+
| Component | Max pts | Signal |
|
|
122
|
+
|---|---|---|
|
|
123
|
+
| Growth rate | 40 | `(avg second half − avg first half) / avg first half` of rolling window |
|
|
124
|
+
| Detached contexts | 40 | `numberOfDetachedContexts × 8` from V8 GC metadata |
|
|
125
|
+
| Sustained growth | 20 | Fraction of 10s intervals where heap grew (>70% = full 20 pts) |
|
|
126
|
+
|
|
127
|
+
Score < 30 → `stable` · 30–59 or growth ≥ 5% → `growing` · ≥ 60 or growth ≥ 15% → `likely_leak`
|
|
128
|
+
|
|
129
|
+
**Enabling GC and snapshots in development:**
|
|
130
|
+
|
|
131
|
+
The `start:dev`, `start:debug`, and `start:prod` scripts all pass `--expose-gc` automatically. If you run Node directly:
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
node --expose-gc dist/main
|
|
135
|
+
```
|
|
136
|
+
|
|
109
137
|
### Security
|
|
110
138
|
- **Dashboard Authentication** — optional login wall with HMAC-SHA256 tokens stored in `localStorage`, 24-hour TTL. No separate auth server needed
|
|
111
139
|
|
|
@@ -220,6 +248,7 @@ Navigate to `/__profiler` after starting your app.
|
|
|
220
248
|
| `/__profiler/view/code-quality` | ESLint and TypeScript static analysis |
|
|
221
249
|
| `/__profiler/view/events` | Event cascade tree for `EventEmitter2` emissions |
|
|
222
250
|
| `/__profiler/view/cron-jobs` | Live scheduled job monitor — cron, intervals, and timeouts |
|
|
251
|
+
| `/__profiler/view/memory` | Heap monitor — live chart, leak score, per-request memory deltas, GC and snapshot controls |
|
|
223
252
|
| `/__profiler/:id` | Full detail view for a single request |
|
|
224
253
|
|
|
225
254
|
### JSON API
|
|
@@ -235,6 +264,9 @@ GET /__profiler/api/code-quality # static analysis (5 min cache)
|
|
|
235
264
|
GET /__profiler/api/code-quality?force=true
|
|
236
265
|
GET /__profiler/api/events # event log (live, not cached)
|
|
237
266
|
GET /__profiler/api/cron-jobs # scheduled job state (live, not cached)
|
|
267
|
+
GET /__profiler/api/memory # current heap report + leak score + top request deltas
|
|
268
|
+
POST /__profiler/api/memory/gc # force GC (requires --expose-gc)
|
|
269
|
+
POST /__profiler/api/memory/snapshot # generate and download a .heapsnapshot file
|
|
238
270
|
```
|
|
239
271
|
|
|
240
272
|
---
|
|
@@ -348,6 +380,40 @@ export class TasksService {
|
|
|
348
380
|
|
|
349
381
|
---
|
|
350
382
|
|
|
383
|
+
### Memory Monitor
|
|
384
|
+
|
|
385
|
+
No configuration needed — the Memory Monitor starts automatically when the profiler is enabled. It polls every 10 seconds and becomes meaningful after roughly 2 minutes of uptime (20 samples).
|
|
386
|
+
|
|
387
|
+
Navigate to `/__profiler/view/memory` to see the live dashboard.
|
|
388
|
+
|
|
389
|
+
**Force GC** triggers `global.gc()` if Node was started with `--expose-gc`. The `start:dev`, `start:debug`, and `start:prod` scripts in this package include the flag automatically. If you manage your own start command:
|
|
390
|
+
|
|
391
|
+
```bash
|
|
392
|
+
node --expose-gc dist/main
|
|
393
|
+
```
|
|
394
|
+
|
|
395
|
+
**Heap Snapshot** generates a V8 heap snapshot on the server, streams it directly to your browser as a file download, and deletes the temp file. To analyse it:
|
|
396
|
+
|
|
397
|
+
1. Open Chrome DevTools
|
|
398
|
+
2. Go to the **Memory** tab
|
|
399
|
+
3. Click the **Load** icon (folder button at the top)
|
|
400
|
+
4. Select the downloaded `.heapsnapshot` file
|
|
401
|
+
|
|
402
|
+
The snapshot shows every object in the heap — retained size, shallow size, constructor name, distance from GC root — searchable and filterable. Useful for identifying *what* is leaking after the Memory Monitor tells you *that* something is leaking.
|
|
403
|
+
|
|
404
|
+
**Reading the leak score:**
|
|
405
|
+
|
|
406
|
+
Trigger a few demo patterns (if you have the demo module enabled) and watch the score climb in real time:
|
|
407
|
+
|
|
408
|
+
```
|
|
409
|
+
POST /demo/memory/leak/array # unbounded array — grows heapUsed
|
|
410
|
+
POST /demo/memory/leak/listeners # orphaned listeners — raises detached contexts
|
|
411
|
+
POST /demo/memory/leak/cache # unbounded Map — slow steady growth
|
|
412
|
+
DELETE /demo/memory/leak/all # clear everything
|
|
413
|
+
```
|
|
414
|
+
|
|
415
|
+
---
|
|
416
|
+
|
|
351
417
|
### Route Explorer
|
|
352
418
|
|
|
353
419
|
Populated by `ProfilerModule.initialize(app)`. Lists every route grouped by controller in an expandable accordion. Each route surfaces:
|
|
@@ -7,6 +7,7 @@ import { RouteExplorerService } from '../services/route-explorer.service';
|
|
|
7
7
|
import { HealthService } from '../services/health.service';
|
|
8
8
|
import { CodeQualityService } from '../services/code-quality.service';
|
|
9
9
|
import { CronExplorerService } from '../services/cron-explorer.service';
|
|
10
|
+
import { MemoryService } from '../services/memory.service';
|
|
10
11
|
import { ProfilerOptions } from '../common/profiler-options.interface';
|
|
11
12
|
export declare class ProfilerController {
|
|
12
13
|
private readonly profilerService;
|
|
@@ -17,8 +18,9 @@ export declare class ProfilerController {
|
|
|
17
18
|
private readonly healthService;
|
|
18
19
|
private readonly codeQualityService;
|
|
19
20
|
private readonly cronExplorer;
|
|
21
|
+
private readonly memoryService;
|
|
20
22
|
private readonly profilerOptions;
|
|
21
|
-
constructor(profilerService: ProfilerService, viewService: ViewService, templateBuilder: TemplateBuilderService, entityExplorer: EntityExplorerService, routeExplorer: RouteExplorerService, healthService: HealthService, codeQualityService: CodeQualityService, cronExplorer: CronExplorerService, profilerOptions: ProfilerOptions);
|
|
23
|
+
constructor(profilerService: ProfilerService, viewService: ViewService, templateBuilder: TemplateBuilderService, entityExplorer: EntityExplorerService, routeExplorer: RouteExplorerService, healthService: HealthService, codeQualityService: CodeQualityService, cronExplorer: CronExplorerService, memoryService: MemoryService, profilerOptions: ProfilerOptions);
|
|
22
24
|
private get authEnabled();
|
|
23
25
|
private renderLayout;
|
|
24
26
|
dashboard(res: Response): Promise<void>;
|
|
@@ -58,6 +60,14 @@ export declare class ProfilerController {
|
|
|
58
60
|
cronJobsApi(): Promise<import("../services/cron-explorer.service").CronReport>;
|
|
59
61
|
liveLogsPage(res: Response): Promise<void>;
|
|
60
62
|
liveLogsStream(res: Response): void;
|
|
63
|
+
memoryPage(res: Response): Promise<void>;
|
|
64
|
+
memoryApi(): Promise<import("../services/memory.service").MemoryReport>;
|
|
65
|
+
memoryGc(): Promise<{
|
|
66
|
+
success: boolean;
|
|
67
|
+
message: string;
|
|
68
|
+
heapFreedBytes?: number;
|
|
69
|
+
}>;
|
|
70
|
+
memorySnapshot(res: Response): Promise<void>;
|
|
61
71
|
serveAsset(file: string, res: Response): Promise<void>;
|
|
62
72
|
serveJs(file: string, res: Response): Promise<void>;
|
|
63
73
|
}
|
|
@@ -22,9 +22,10 @@ const route_explorer_service_1 = require("../services/route-explorer.service");
|
|
|
22
22
|
const health_service_1 = require("../services/health.service");
|
|
23
23
|
const code_quality_service_1 = require("../services/code-quality.service");
|
|
24
24
|
const cron_explorer_service_1 = require("../services/cron-explorer.service");
|
|
25
|
+
const memory_service_1 = require("../services/memory.service");
|
|
25
26
|
const crypto_1 = require("crypto");
|
|
26
27
|
let ProfilerController = class ProfilerController {
|
|
27
|
-
constructor(profilerService, viewService, templateBuilder, entityExplorer, routeExplorer, healthService, codeQualityService, cronExplorer, profilerOptions) {
|
|
28
|
+
constructor(profilerService, viewService, templateBuilder, entityExplorer, routeExplorer, healthService, codeQualityService, cronExplorer, memoryService, profilerOptions) {
|
|
28
29
|
this.profilerService = profilerService;
|
|
29
30
|
this.viewService = viewService;
|
|
30
31
|
this.templateBuilder = templateBuilder;
|
|
@@ -33,6 +34,7 @@ let ProfilerController = class ProfilerController {
|
|
|
33
34
|
this.healthService = healthService;
|
|
34
35
|
this.codeQualityService = codeQualityService;
|
|
35
36
|
this.cronExplorer = cronExplorer;
|
|
37
|
+
this.memoryService = memoryService;
|
|
36
38
|
this.profilerOptions = profilerOptions;
|
|
37
39
|
}
|
|
38
40
|
get authEnabled() {
|
|
@@ -256,6 +258,38 @@ let ProfilerController = class ProfilerController {
|
|
|
256
258
|
this.profilerService.logEmitter.setMaxListeners(Math.max(1, this.profilerService.logEmitter.getMaxListeners() - 1));
|
|
257
259
|
});
|
|
258
260
|
}
|
|
261
|
+
async memoryPage(res) {
|
|
262
|
+
const report = this.memoryService.getReport();
|
|
263
|
+
const reportJson = JSON.stringify(report);
|
|
264
|
+
const content = this.viewService.render('memory', { reportJson });
|
|
265
|
+
const html = this.renderLayout('Memory', content, 'memory');
|
|
266
|
+
res.header('Content-Type', 'text/html').send(html);
|
|
267
|
+
}
|
|
268
|
+
async memoryApi() {
|
|
269
|
+
return this.memoryService.getReport();
|
|
270
|
+
}
|
|
271
|
+
async memoryGc() {
|
|
272
|
+
return this.memoryService.forceGc();
|
|
273
|
+
}
|
|
274
|
+
async memorySnapshot(res) {
|
|
275
|
+
const result = this.memoryService.takeSnapshot();
|
|
276
|
+
if (!result.success || !result.filePath) {
|
|
277
|
+
res.status(500).json({ success: false, message: result.message });
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
280
|
+
const fs = require('fs');
|
|
281
|
+
const path = require('path');
|
|
282
|
+
const fileName = path.basename(result.filePath);
|
|
283
|
+
res.setHeader('Content-Type', 'application/octet-stream');
|
|
284
|
+
res.setHeader('Content-Disposition', `attachment; filename="${fileName}"`);
|
|
285
|
+
const stream = fs.createReadStream(result.filePath);
|
|
286
|
+
stream.pipe(res);
|
|
287
|
+
res.on('finish', () => fs.unlink(result.filePath, () => { }));
|
|
288
|
+
stream.on('error', () => {
|
|
289
|
+
res.status(500).json({ success: false, message: 'Failed to stream snapshot' });
|
|
290
|
+
fs.unlink(result.filePath, () => { });
|
|
291
|
+
});
|
|
292
|
+
}
|
|
259
293
|
async serveAsset(file, res) {
|
|
260
294
|
const fs = require('fs');
|
|
261
295
|
const path = require('path');
|
|
@@ -480,6 +514,32 @@ __decorate([
|
|
|
480
514
|
__metadata("design:paramtypes", [Object]),
|
|
481
515
|
__metadata("design:returntype", void 0)
|
|
482
516
|
], ProfilerController.prototype, "liveLogsStream", null);
|
|
517
|
+
__decorate([
|
|
518
|
+
(0, common_1.Get)('view/memory'),
|
|
519
|
+
__param(0, (0, common_1.Res)()),
|
|
520
|
+
__metadata("design:type", Function),
|
|
521
|
+
__metadata("design:paramtypes", [Object]),
|
|
522
|
+
__metadata("design:returntype", Promise)
|
|
523
|
+
], ProfilerController.prototype, "memoryPage", null);
|
|
524
|
+
__decorate([
|
|
525
|
+
(0, common_1.Get)('api/memory'),
|
|
526
|
+
__metadata("design:type", Function),
|
|
527
|
+
__metadata("design:paramtypes", []),
|
|
528
|
+
__metadata("design:returntype", Promise)
|
|
529
|
+
], ProfilerController.prototype, "memoryApi", null);
|
|
530
|
+
__decorate([
|
|
531
|
+
(0, common_1.Post)('api/memory/gc'),
|
|
532
|
+
__metadata("design:type", Function),
|
|
533
|
+
__metadata("design:paramtypes", []),
|
|
534
|
+
__metadata("design:returntype", Promise)
|
|
535
|
+
], ProfilerController.prototype, "memoryGc", null);
|
|
536
|
+
__decorate([
|
|
537
|
+
(0, common_1.Post)('api/memory/snapshot'),
|
|
538
|
+
__param(0, (0, common_1.Res)()),
|
|
539
|
+
__metadata("design:type", Function),
|
|
540
|
+
__metadata("design:paramtypes", [Object]),
|
|
541
|
+
__metadata("design:returntype", Promise)
|
|
542
|
+
], ProfilerController.prototype, "memorySnapshot", null);
|
|
483
543
|
__decorate([
|
|
484
544
|
(0, common_1.Get)('assets/:file'),
|
|
485
545
|
__param(0, (0, common_1.Param)('file')),
|
|
@@ -498,8 +558,8 @@ __decorate([
|
|
|
498
558
|
], ProfilerController.prototype, "serveJs", null);
|
|
499
559
|
exports.ProfilerController = ProfilerController = __decorate([
|
|
500
560
|
(0, common_1.Controller)('__profiler'),
|
|
501
|
-
__param(
|
|
502
|
-
__param(
|
|
561
|
+
__param(9, (0, common_1.Optional)()),
|
|
562
|
+
__param(9, (0, common_1.Inject)('PROFILER_OPTIONS')),
|
|
503
563
|
__metadata("design:paramtypes", [profiler_service_1.ProfilerService,
|
|
504
564
|
view_service_1.ViewService,
|
|
505
565
|
template_builder_service_1.TemplateBuilderService,
|
|
@@ -507,6 +567,7 @@ exports.ProfilerController = ProfilerController = __decorate([
|
|
|
507
567
|
route_explorer_service_1.RouteExplorerService,
|
|
508
568
|
health_service_1.HealthService,
|
|
509
569
|
code_quality_service_1.CodeQualityService,
|
|
510
|
-
cron_explorer_service_1.CronExplorerService,
|
|
570
|
+
cron_explorer_service_1.CronExplorerService,
|
|
571
|
+
memory_service_1.MemoryService, Object])
|
|
511
572
|
], ProfilerController);
|
|
512
573
|
//# sourceMappingURL=profiler.controller.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profiler.controller.js","sourceRoot":"","sources":["../../../libs/nestjs-profiler/src/controllers/profiler.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAawB;AAExB,mEAA+D;AAC/D,2DAAuD;AACvD,mFAA8E;AAC9E,iFAA4E;AAC5E,+EAA0E;AAC1E,+DAA2D;AAC3D,2EAAsE;AACtE,6EAAwE;AAExE,mCAAoC;AAG7B,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IAC7B,YACmB,eAAgC,EAChC,WAAwB,EACxB,eAAuC,EACvC,cAAqC,EACrC,aAAmC,EACnC,aAA4B,EAC5B,kBAAsC,EACtC,YAAiC,EACO,eAAgC;QARxE,oBAAe,GAAf,eAAe,CAAiB;QAChC,gBAAW,GAAX,WAAW,CAAa;QACxB,oBAAe,GAAf,eAAe,CAAwB;QACvC,mBAAc,GAAd,cAAc,CAAuB;QACrC,kBAAa,GAAb,aAAa,CAAsB;QACnC,kBAAa,GAAb,aAAa,CAAe;QAC5B,uBAAkB,GAAlB,kBAAkB,CAAoB;QACtC,iBAAY,GAAZ,YAAY,CAAqB;QACO,oBAAe,GAAf,eAAe,CAAiB;IACxF,CAAC;IAEJ,IAAY,WAAW;QACrB,OAAO,IAAI,CAAC,eAAe,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtD,CAAC;IAEO,YAAY,CAAC,KAAa,EAAE,OAAe,EAAE,SAAkB;QACrE,OAAO,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IACxF,CAAC;IAGK,AAAN,KAAK,CAAC,SAAS,CAAQ,GAAa;QAClC,GAAG,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC;IAC3C,CAAC;IAGK,AAAN,KAAK,CAAC,YAAY,CAAQ,GAAa;QACrC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,gBAAgB,EAAE,CAAC;QAC/D,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAC9D,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAC5B,UAAU,EACV,OAAO,EACP,UAAU,CACX,CAAC;QACF,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;QACxC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC;IAGK,AAAN,KAAK,CAAC,QAAQ;QACZ,OAAO,IAAI,CAAC,eAAe,CAAC,kBAAkB,EAAE,CAAC;IACnD,CAAC;IAGK,AAAN,KAAK,CAAC,UAAU;QACd,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC;YACxB,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,WAAW;YACxC,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,UAAU;YACvC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,UAAU;YAC/C,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,UAAU;SAC5C,CAAC,CAAC;QACH,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;YACvB,MAAM,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;YAC7C,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC;YACnB,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,iCAAiC,EAAE,CAAC;QAC3E,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,OAAO;gBACL,MAAM,EAAE,OAAO;gBACf,OAAO,EAAE,sBAAsB,CAAC,CAAC,OAAO,EAAE;gBAC1C,GAAG,EAAE,sFAAsF;aAC5F,CAAC;QACJ,CAAC;IACH,CAAC;IAKK,AAAN,KAAK,CAAC,SAAS,CACN,GAAa,EACD,QAAiB;QAEpC,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE;YAC5C,QAAQ,EAAE,QAAQ,IAAI,aAAa;SACpC,CAAC,CAAC;QACH,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;QACxC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC;IAIK,AAAN,KAAK,CAAC,QAAQ,CACL,GAAa,EACZ,IAA8C;QAEtD,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC;QAGxC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;YACpC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;YACnD,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;YAC1C,OAAO;QACT,CAAC;QAED,MAAM,EAAE,QAAQ,GAAG,EAAE,EAAE,QAAQ,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC;QAE9C,IAAI,QAAQ,KAAK,IAAI,CAAC,QAAQ,IAAI,QAAQ,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;YACnD,MAAM,KAAK,GAAG,IAAA,mBAAU,EAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC;iBAC9C,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,IAAI,SAAS,EAAE,CAAC;iBACvC,MAAM,CAAC,KAAK,CAAC,CAAC;YACjB,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC1D,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,MAAM,CAAC,mBAAU,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,+BAA+B,EAAE,CAAC,CAAC;QACvF,CAAC;IACH,CAAC;IAIK,AAAN,KAAK,CAAC,MAAM,CAAQ,GAAa;QAC/B,MAAM,IAAI,GAAG;;4BAEW,CAAC;QACzB,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrD,CAAC;IAKK,AAAN,KAAK,CAAC,MAAM,CAAc,EAAU,EAAS,GAAa;QACxD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;QAEhE,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;YACvD,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAC5B,mBAAmB,EACnB,OAAO,CACR,CAAC;YACF,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;YACxC,GAAG,CAAC,MAAM,CAAC,mBAAU,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5C,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAC5B,WAAW,OAAO,CAAC,EAAE,EAAE,EACvB,OAAO,CACR,CAAC;QAEF,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;QACxC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC;IAGK,AAAN,KAAK,CAAC,UAAU,CAAc,EAAU;QACtC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;QAC9D,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,0BAAiB,CAAC,mBAAmB,CAAC,CAAC;QAC/D,OAAO,OAAO,CAAC;IACjB,CAAC;IAGK,AAAN,KAAK,CAAC,OAAO,CAAQ,GAAa;QAChC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE,CAAC;QAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC7D,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAC5B,SAAS,EACT,OAAO,EACP,SAAS,CACV,CAAC;QAEF,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;QACxC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC;IAGK,AAAN,KAAK,CAAC,WAAW,CAAQ,GAAa;QACpC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,CAAC;QAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC/D,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAC5B,kBAAkB,EAClB,OAAO,EACP,SAAS,CACV,CAAC;QAEF,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;QACxC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC;IAGK,AAAN,KAAK,CAAC,QAAQ,CAAQ,GAAa,EAAiB,OAAe,CAAC;QAClE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,GAChD,MAAM,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CAChD,IAAI,EACJ,WAAW,EACX,UAAU,EACV,SAAS,CACV,CAAC;QACF,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAC5B,kBAAkB,EAClB,OAAO,EACP,MAAM,CACP,CAAC;QAEF,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;QACxC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC;IAGK,AAAN,KAAK,CAAC,YAAY,CAAQ,GAAa;QACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC;QACnD,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QACjE,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAC5B,iBAAiB,EACjB,OAAO,EACP,UAAU,CACX,CAAC;QAEF,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;QACxC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC;IAGK,AAAN,KAAK,CAAC,UAAU,CAAQ,GAAa;QACnC,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC;QAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAC7D,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAC5B,iBAAiB,EACjB,OAAO,EACP,QAAQ,CACT,CAAC;QAEF,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;QACxC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC;IAGK,AAAN,KAAK,CAAC,SAAS,CAAQ,GAAa;QAClC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC;QAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAC9D,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAC5B,kBAAkB,EAClB,OAAO,EACP,OAAO,CACR,CAAC;QAEF,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;QACxC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC;IAGK,AAAN,KAAK,CAAC,aAAa,CAAQ,GAAa;QACtC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,gBAAgB,EAAE,CAAC;QAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAC/D,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAC5B,eAAe,EACf,OAAO,EACP,YAAY,CACb,CAAC;QAEF,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;QACxC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC;IAGK,AAAN,KAAK,CAAC,UAAU,CAAQ,GAAa;QACnC,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAC5B,QAAQ,EACR,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE,EACtC,QAAQ,CACT,CAAC;QACF,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;QACxC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC;IAGK,AAAN,KAAK,CAAC,WAAW,CAAiB,KAAc;QAC9C,OAAO,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC;IAC7D,CAAC;IAGK,AAAN,KAAK,CAAC,eAAe,CAAQ,GAAa;QACxC,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAC5B,cAAc,EACd,IAAI,CAAC,eAAe,CAAC,oBAAoB,EAAE,EAC3C,cAAc,CACf,CAAC;QACF,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;QACxC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC;IAGK,AAAN,KAAK,CAAC,gBAAgB,CAAiB,KAAc;QACnD,OAAO,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC;IAC5D,CAAC;IAGK,AAAN,KAAK,CAAC,UAAU,CAAQ,GAAa;QACnC,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAC5B,gBAAgB,EAChB,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE,EACtC,QAAQ,CACT,CAAC;QACF,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;QACxC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC;IAGK,AAAN,KAAK,CAAC,SAAS;QACb,OAAO,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,CAAC;IAC9C,CAAC;IAGK,AAAN,KAAK,CAAC,YAAY,CAAQ,GAAa;QACrC,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC;QAC7C,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC;QACvE,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,gBAAgB,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;QACvE,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrD,CAAC;IAGK,AAAN,KAAK,CAAC,WAAW;QACf,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC;IACvC,CAAC;IAGK,AAAN,KAAK,CAAC,YAAY,CAAQ,GAAa;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAC5B,WAAW,EACX,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE,EACxC,WAAW,CACZ,CAAC;QACF,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;QACxC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC;IAGD,cAAc,CAAQ,GAAa;QACjC,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,mBAAmB,CAAC,CAAC;QACnD,GAAG,CAAC,SAAS,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;QAC3C,GAAG,CAAC,SAAS,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;QAC1C,GAAG,CAAC,SAAS,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;QACzC,GAAG,CAAC,YAAY,EAAE,CAAC;QAGnB,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,eAAe,CAC7C,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,eAAe,EAAE,GAAG,CAAC,CACtD,CAAC;QAGF,GAAG,CAAC,KAAK,CACP,SAAS,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CACvG,CAAC;QAIF,MAAM,KAAK,GAAU,EAAE,CAAC;QACxB,IAAI,UAAU,GAAyC,IAAI,CAAC;QAE5D,MAAM,KAAK,GAAG,GAAG,EAAE;YACjB,UAAU,GAAG,IAAI,CAAC;YAClB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAK,GAAW,CAAC,aAAa;gBAAE,OAAO;YAC7D,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAChC,GAAG,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAClD,IAAI,OAAQ,GAAW,CAAC,KAAK,KAAK,UAAU;gBAAG,GAAW,CAAC,KAAK,EAAE,CAAC;QACrE,CAAC,CAAC;QAEF,MAAM,KAAK,GAAG,CAAC,GAAQ,EAAE,EAAE;YACzB,IAAK,GAAW,CAAC,aAAa;gBAAE,OAAO;YACvC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAChB,IAAI,CAAC,UAAU;gBAAE,UAAU,GAAG,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACtD,CAAC,CAAC;QAGF,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE;YACjC,IAAI,CAAE,GAAW,CAAC,aAAa;gBAAE,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAChE,CAAC,EAAE,MAAM,CAAC,CAAC;QAEX,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAEjD,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACnB,aAAa,CAAC,SAAS,CAAC,CAAC;YACzB,IAAI,UAAU;gBAAE,YAAY,CAAC,UAAU,CAAC,CAAC;YACzC,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAClD,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,eAAe,CAC7C,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC,CACnE,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAGK,AAAN,KAAK,CAAC,UAAU,CAAgB,IAAY,EAAS,GAAa;QAChE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACzB,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;QAC7B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAE7C,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC/B,IAAI,WAAW,GAAG,YAAY,CAAC;YAC/B,IAAI,GAAG,KAAK,MAAM;gBAAE,WAAW,GAAG,WAAW,CAAC;YAC9C,IAAI,GAAG,KAAK,MAAM;gBAAE,WAAW,GAAG,cAAc,CAAC;YACjD,IAAI,GAAG,KAAK,MAAM;gBAAE,WAAW,GAAG,eAAe,CAAC;YAClD,IAAI,GAAG,KAAK,MAAM;gBAAE,WAAW,GAAG,UAAU,CAAC;YAC7C,IAAI,GAAG,KAAK,KAAK;gBAAE,WAAW,GAAG,iBAAiB,CAAC;YAEnD,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;YAExC,GAAG,CAAC,MAAM,CAAC,eAAe,EAAE,uBAAuB,CAAC,CAAC;YACrD,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,MAAM,CAAC,mBAAU,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAGK,AAAN,KAAK,CAAC,OAAO,CAAgB,IAAY,EAAS,GAAa;QAC7D,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACzB,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAEzC,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC;YAE9C,GAAG,CAAC,MAAM,CAAC,eAAe,EAAE,uBAAuB,CAAC,CAAC;YACrD,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,MAAM,CAAC,mBAAU,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;CACF,CAAA;AAzaY,gDAAkB;AAsBvB;IADL,IAAA,YAAG,GAAE;IACW,WAAA,IAAA,YAAG,GAAE,CAAA;;;;mDAErB;AAGK;IADL,IAAA,YAAG,EAAC,eAAe,CAAC;IACD,WAAA,IAAA,YAAG,GAAE,CAAA;;;;sDAUxB;AAGK;IADL,IAAA,YAAG,EAAC,MAAM,CAAC;;;;kDAGX;AAGK;IADL,IAAA,YAAG,EAAC,kBAAkB,CAAC;;;;oDAsBvB;AAKK;IADL,IAAA,YAAG,EAAC,OAAO,CAAC;IAEV,WAAA,IAAA,YAAG,GAAE,CAAA;IACL,WAAA,IAAA,cAAK,EAAC,UAAU,CAAC,CAAA;;;;mDAOnB;AAIK;IADL,IAAA,aAAI,EAAC,WAAW,CAAC;IAEf,WAAA,IAAA,YAAG,GAAE,CAAA;IACL,WAAA,IAAA,aAAI,GAAE,CAAA;;;;kDAsBR;AAIK;IADL,IAAA,YAAG,EAAC,QAAQ,CAAC;IACA,WAAA,IAAA,YAAG,GAAE,CAAA;;;;gDAKlB;AAKK;IADL,IAAA,YAAG,EAAC,KAAK,CAAC;IACG,WAAA,IAAA,cAAK,EAAC,IAAI,CAAC,CAAA;IAAc,WAAA,IAAA,YAAG,GAAE,CAAA;;;;gDAsB3C;AAGK;IADL,IAAA,YAAG,EAAC,UAAU,CAAC;IACE,WAAA,IAAA,cAAK,EAAC,IAAI,CAAC,CAAA;;;;oDAI5B;AAGK;IADL,IAAA,YAAG,EAAC,cAAc,CAAC;IACL,WAAA,IAAA,YAAG,GAAE,CAAA;;;;iDAWnB;AAGK;IADL,IAAA,YAAG,EAAC,cAAc,CAAC;IACD,WAAA,IAAA,YAAG,GAAE,CAAA;;;;qDAWvB;AAGK;IADL,IAAA,YAAG,EAAC,WAAW,CAAC;IACD,WAAA,IAAA,YAAG,GAAE,CAAA;IAAiB,WAAA,IAAA,cAAK,EAAC,MAAM,CAAC,CAAA;;;;kDAiBlD;AAGK;IADL,IAAA,YAAG,EAAC,eAAe,CAAC;IACD,WAAA,IAAA,YAAG,GAAE,CAAA;;;;sDAWxB;AAGK;IADL,IAAA,YAAG,EAAC,aAAa,CAAC;IACD,WAAA,IAAA,YAAG,GAAE,CAAA;;;;oDAWtB;AAGK;IADL,IAAA,YAAG,EAAC,YAAY,CAAC;IACD,WAAA,IAAA,YAAG,GAAE,CAAA;;;;mDAWrB;AAGK;IADL,IAAA,YAAG,EAAC,iBAAiB,CAAC;IACF,WAAA,IAAA,YAAG,GAAE,CAAA;;;;uDAWzB;AAGK;IADL,IAAA,YAAG,EAAC,aAAa,CAAC;IACD,WAAA,IAAA,YAAG,GAAE,CAAA;;;;oDAQtB;AAGK;IADL,IAAA,YAAG,EAAC,YAAY,CAAC;IACC,WAAA,IAAA,cAAK,EAAC,OAAO,CAAC,CAAA;;;;qDAEhC;AAGK;IADL,IAAA,YAAG,EAAC,mBAAmB,CAAC;IACF,WAAA,IAAA,YAAG,GAAE,CAAA;;;;yDAQ3B;AAGK;IADL,IAAA,YAAG,EAAC,kBAAkB,CAAC;IACA,WAAA,IAAA,cAAK,EAAC,OAAO,CAAC,CAAA;;;;0DAErC;AAGK;IADL,IAAA,YAAG,EAAC,aAAa,CAAC;IACD,WAAA,IAAA,YAAG,GAAE,CAAA;;;;oDAQtB;AAGK;IADL,IAAA,YAAG,EAAC,YAAY,CAAC;;;;mDAGjB;AAGK;IADL,IAAA,YAAG,EAAC,gBAAgB,CAAC;IACF,WAAA,IAAA,YAAG,GAAE,CAAA;;;;sDAMxB;AAGK;IADL,IAAA,YAAG,EAAC,eAAe,CAAC;;;;qDAGpB;AAGK;IADL,IAAA,YAAG,EAAC,gBAAgB,CAAC;IACF,WAAA,IAAA,YAAG,GAAE,CAAA;;;;sDAQxB;AAGD;IADC,IAAA,YAAG,EAAC,aAAa,CAAC;IACH,WAAA,IAAA,YAAG,GAAE,CAAA;;;;wDAmDpB;AAGK;IADL,IAAA,YAAG,EAAC,cAAc,CAAC;IACF,WAAA,IAAA,cAAK,EAAC,MAAM,CAAC,CAAA;IAAgB,WAAA,IAAA,YAAG,GAAE,CAAA;;;;oDAsBnD;AAGK;IADL,IAAA,YAAG,EAAC,UAAU,CAAC;IACD,WAAA,IAAA,cAAK,EAAC,MAAM,CAAC,CAAA;IAAgB,WAAA,IAAA,YAAG,GAAE,CAAA;;;;iDAchD;6BAxaU,kBAAkB;IAD9B,IAAA,mBAAU,EAAC,YAAY,CAAC;IAWpB,WAAA,IAAA,iBAAQ,GAAE,CAAA;IAAE,WAAA,IAAA,eAAM,EAAC,kBAAkB,CAAC,CAAA;qCARL,kCAAe;QACnB,0BAAW;QACP,iDAAsB;QACvB,+CAAqB;QACtB,6CAAoB;QACpB,8BAAa;QACR,yCAAkB;QACxB,2CAAmB;GATzC,kBAAkB,CAya9B"}
|
|
1
|
+
{"version":3,"file":"profiler.controller.js","sourceRoot":"","sources":["../../../libs/nestjs-profiler/src/controllers/profiler.controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { CallHandler, ExecutionContext, NestInterceptor } from '@nestjs/common';
|
|
2
2
|
import { Observable } from 'rxjs';
|
|
3
3
|
import { ProfilerService } from '../services/profiler.service';
|
|
4
|
+
import { MemoryService } from '../services/memory.service';
|
|
4
5
|
export declare class RequestProfilerInterceptor implements NestInterceptor {
|
|
5
6
|
private profiler;
|
|
7
|
+
private memoryService;
|
|
6
8
|
private logger;
|
|
7
|
-
constructor(profiler: ProfilerService);
|
|
9
|
+
constructor(profiler: ProfilerService, memoryService: MemoryService);
|
|
8
10
|
intercept(context: ExecutionContext, next: CallHandler): Observable<any>;
|
|
9
11
|
private finishProfile;
|
|
10
12
|
private sanitizeHeaders;
|
|
@@ -14,9 +14,11 @@ exports.RequestProfilerInterceptor = void 0;
|
|
|
14
14
|
const common_1 = require("@nestjs/common");
|
|
15
15
|
const operators_1 = require("rxjs/operators");
|
|
16
16
|
const profiler_service_1 = require("../services/profiler.service");
|
|
17
|
+
const memory_service_1 = require("../services/memory.service");
|
|
17
18
|
let RequestProfilerInterceptor = RequestProfilerInterceptor_1 = class RequestProfilerInterceptor {
|
|
18
|
-
constructor(profiler) {
|
|
19
|
+
constructor(profiler, memoryService) {
|
|
19
20
|
this.profiler = profiler;
|
|
21
|
+
this.memoryService = memoryService;
|
|
20
22
|
this.logger = new common_1.Logger(RequestProfilerInterceptor_1.name);
|
|
21
23
|
}
|
|
22
24
|
intercept(context, next) {
|
|
@@ -35,6 +37,7 @@ let RequestProfilerInterceptor = RequestProfilerInterceptor_1 = class RequestPro
|
|
|
35
37
|
req._profilerAttached = true;
|
|
36
38
|
const interceptorStartTime = Date.now();
|
|
37
39
|
const middlewareStartTime = req._profilerT0 || interceptorStartTime;
|
|
40
|
+
const heapBefore = this.memoryService.snapshotBefore();
|
|
38
41
|
const profile = this.profiler.startRequest();
|
|
39
42
|
if (profile) {
|
|
40
43
|
profile.method = req.method;
|
|
@@ -48,7 +51,7 @@ let RequestProfilerInterceptor = RequestProfilerInterceptor_1 = class RequestPro
|
|
|
48
51
|
next: () => {
|
|
49
52
|
if (profile) {
|
|
50
53
|
profile.statusCode = res.statusCode;
|
|
51
|
-
this.finishProfile(profile, interceptorStartTime, middlewareStartTime);
|
|
54
|
+
this.finishProfile(profile, interceptorStartTime, middlewareStartTime, heapBefore);
|
|
52
55
|
}
|
|
53
56
|
},
|
|
54
57
|
error: (err) => {
|
|
@@ -66,12 +69,12 @@ let RequestProfilerInterceptor = RequestProfilerInterceptor_1 = class RequestPro
|
|
|
66
69
|
error: err.message,
|
|
67
70
|
database: 'postgres',
|
|
68
71
|
});
|
|
69
|
-
this.finishProfile(profile, interceptorStartTime, middlewareStartTime);
|
|
72
|
+
this.finishProfile(profile, interceptorStartTime, middlewareStartTime, heapBefore);
|
|
70
73
|
}
|
|
71
74
|
},
|
|
72
75
|
}));
|
|
73
76
|
}
|
|
74
|
-
finishProfile(profile, interceptorStartTime, middlewareStartTime) {
|
|
77
|
+
finishProfile(profile, interceptorStartTime, middlewareStartTime, heapBefore) {
|
|
75
78
|
const endTime = Date.now();
|
|
76
79
|
const totalDuration = endTime - middlewareStartTime;
|
|
77
80
|
const middlewareDuration = interceptorStartTime - middlewareStartTime;
|
|
@@ -82,6 +85,7 @@ let RequestProfilerInterceptor = RequestProfilerInterceptor_1 = class RequestPro
|
|
|
82
85
|
handler: Math.max(0, handlerDuration)
|
|
83
86
|
};
|
|
84
87
|
profile.duration = totalDuration;
|
|
88
|
+
this.memoryService.recordDelta(profile.method ?? 'UNKNOWN', profile.url ?? '/', heapBefore, totalDuration);
|
|
85
89
|
this.profiler.endRequest(profile);
|
|
86
90
|
}
|
|
87
91
|
sanitizeHeaders(headers) {
|
|
@@ -98,6 +102,7 @@ let RequestProfilerInterceptor = RequestProfilerInterceptor_1 = class RequestPro
|
|
|
98
102
|
exports.RequestProfilerInterceptor = RequestProfilerInterceptor;
|
|
99
103
|
exports.RequestProfilerInterceptor = RequestProfilerInterceptor = RequestProfilerInterceptor_1 = __decorate([
|
|
100
104
|
(0, common_1.Injectable)(),
|
|
101
|
-
__metadata("design:paramtypes", [profiler_service_1.ProfilerService
|
|
105
|
+
__metadata("design:paramtypes", [profiler_service_1.ProfilerService,
|
|
106
|
+
memory_service_1.MemoryService])
|
|
102
107
|
], RequestProfilerInterceptor);
|
|
103
108
|
//# sourceMappingURL=request-profiler.interceptor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request-profiler.interceptor.js","sourceRoot":"","sources":["../../../libs/nestjs-profiler/src/interceptors/request-profiler.interceptor.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAAoG;AAEpG,8CAAiD;AACjD,mEAA+D;
|
|
1
|
+
{"version":3,"file":"request-profiler.interceptor.js","sourceRoot":"","sources":["../../../libs/nestjs-profiler/src/interceptors/request-profiler.interceptor.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nestjs-profiler",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.28",
|
|
4
4
|
"description": "A NestJS module for profiling HTTP requests, database queries, cache operations, outbound HTTP calls, application logs, package health, code quality, and event tracking. Inspired by Symfony Profiler, it provides a web-based dashboard to inspect everything that happens inside a request — from DB queries to downstream API calls — in real time.",
|
|
5
5
|
"author": "Mohamed Raslan",
|
|
6
6
|
"main": "./index.js",
|
package/profiler.module.js
CHANGED
|
@@ -31,6 +31,7 @@ const core_1 = require("@nestjs/core");
|
|
|
31
31
|
const profiler_logger_1 = require("./profiler-logger");
|
|
32
32
|
const profiler_middleware_1 = require("./middleware/profiler.middleware");
|
|
33
33
|
const cron_explorer_service_1 = require("./services/cron-explorer.service");
|
|
34
|
+
const memory_service_1 = require("./services/memory.service");
|
|
34
35
|
let ProfilerModule = ProfilerModule_1 = class ProfilerModule {
|
|
35
36
|
configure(consumer) {
|
|
36
37
|
consumer
|
|
@@ -70,13 +71,14 @@ let ProfilerModule = ProfilerModule_1 = class ProfilerModule {
|
|
|
70
71
|
health_service_1.HealthService,
|
|
71
72
|
code_quality_service_1.CodeQualityService,
|
|
72
73
|
cron_explorer_service_1.CronExplorerService,
|
|
74
|
+
memory_service_1.MemoryService,
|
|
73
75
|
explain_analyzer_1.ExplainAnalyzer,
|
|
74
76
|
{
|
|
75
77
|
provide: core_1.APP_INTERCEPTOR,
|
|
76
78
|
useClass: request_profiler_interceptor_1.RequestProfilerInterceptor,
|
|
77
79
|
},
|
|
78
80
|
],
|
|
79
|
-
exports: [profiler_service_1.ProfilerService],
|
|
81
|
+
exports: [profiler_service_1.ProfilerService, memory_service_1.MemoryService],
|
|
80
82
|
};
|
|
81
83
|
}
|
|
82
84
|
static initialize(app) {
|
|
@@ -206,8 +208,9 @@ exports.ProfilerModule = ProfilerModule = ProfilerModule_1 = __decorate([
|
|
|
206
208
|
entity_explorer_service_1.EntityExplorerService,
|
|
207
209
|
route_explorer_service_1.RouteExplorerService,
|
|
208
210
|
cron_explorer_service_1.CronExplorerService,
|
|
211
|
+
memory_service_1.MemoryService,
|
|
209
212
|
],
|
|
210
|
-
exports: [profiler_service_1.ProfilerService, entity_explorer_service_1.EntityExplorerService, route_explorer_service_1.RouteExplorerService, cron_explorer_service_1.CronExplorerService],
|
|
213
|
+
exports: [profiler_service_1.ProfilerService, entity_explorer_service_1.EntityExplorerService, route_explorer_service_1.RouteExplorerService, cron_explorer_service_1.CronExplorerService, memory_service_1.MemoryService],
|
|
211
214
|
})
|
|
212
215
|
], ProfilerModule);
|
|
213
216
|
//# sourceMappingURL=profiler.module.js.map
|
package/profiler.module.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profiler.module.js","sourceRoot":"","sources":["../../libs/nestjs-profiler/src/profiler.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAQwB;AAExB,kEAA8D;AAC9D,0DAAsD;AACtD,kFAA6E;AAC7E,gFAA2E;AAC3E,8EAAyE;AACzE,wEAAoE;AACpE,kEAA8D;AAC9D,kEAA8D;AAC9D,8DAA0D;AAC1D,kEAA8D;AAC9D,gEAA4D;AAC5D,kEAA8D;AAC9D,8DAA0D;AAC1D,0EAAqE;AACrE,mEAA+D;AAC/D,qFAA+E;AAC/E,2EAAuE;AACvE,8FAAyF;AACzF,uCAA+C;AAC/C,uDAAmD;AACnD,0EAAsE;AACtE,4EAAuE;
|
|
1
|
+
{"version":3,"file":"profiler.module.js","sourceRoot":"","sources":["../../libs/nestjs-profiler/src/profiler.module.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { OnModuleInit, OnModuleDestroy } from '@nestjs/common';
|
|
2
|
+
export interface MemorySample {
|
|
3
|
+
timestamp: number;
|
|
4
|
+
heapUsed: number;
|
|
5
|
+
heapTotal: number;
|
|
6
|
+
rss: number;
|
|
7
|
+
external: number;
|
|
8
|
+
arrayBuffers: number;
|
|
9
|
+
heapSizeLimit: number;
|
|
10
|
+
detachedContexts: number;
|
|
11
|
+
}
|
|
12
|
+
export type MemoryTrend = 'stable' | 'growing' | 'likely_leak';
|
|
13
|
+
export interface MemoryReport {
|
|
14
|
+
current: MemorySample;
|
|
15
|
+
trend: MemoryTrend;
|
|
16
|
+
leakScore: number;
|
|
17
|
+
leakScoreBreakdown: {
|
|
18
|
+
growthRate: number;
|
|
19
|
+
detachedContexts: number;
|
|
20
|
+
sustained: number;
|
|
21
|
+
};
|
|
22
|
+
windowSize: number;
|
|
23
|
+
samples: MemorySample[];
|
|
24
|
+
topMemoryRequests: RequestMemoryDelta[];
|
|
25
|
+
gcAvailable: boolean;
|
|
26
|
+
alerts: string[];
|
|
27
|
+
}
|
|
28
|
+
export interface RequestMemoryDelta {
|
|
29
|
+
method: string;
|
|
30
|
+
url: string;
|
|
31
|
+
heapDeltaBytes: number;
|
|
32
|
+
timestamp: number;
|
|
33
|
+
durationMs: number;
|
|
34
|
+
}
|
|
35
|
+
export declare class MemoryService implements OnModuleInit, OnModuleDestroy {
|
|
36
|
+
private readonly logger;
|
|
37
|
+
private samples;
|
|
38
|
+
private requestDeltas;
|
|
39
|
+
private pollTimer;
|
|
40
|
+
onModuleInit(): void;
|
|
41
|
+
onModuleDestroy(): void;
|
|
42
|
+
private takeSample;
|
|
43
|
+
snapshotBefore(): number;
|
|
44
|
+
recordDelta(method: string, url: string, heapBefore: number, durationMs: number): void;
|
|
45
|
+
private computeTrend;
|
|
46
|
+
getReport(): MemoryReport;
|
|
47
|
+
forceGc(): {
|
|
48
|
+
success: boolean;
|
|
49
|
+
message: string;
|
|
50
|
+
heapFreedBytes?: number;
|
|
51
|
+
};
|
|
52
|
+
takeSnapshot(): {
|
|
53
|
+
success: boolean;
|
|
54
|
+
filePath?: string;
|
|
55
|
+
message: string;
|
|
56
|
+
};
|
|
57
|
+
private buildCurrentSample;
|
|
58
|
+
}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
19
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
20
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
21
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
22
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
23
|
+
};
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
var MemoryService_1;
|
|
42
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
43
|
+
exports.MemoryService = void 0;
|
|
44
|
+
const common_1 = require("@nestjs/common");
|
|
45
|
+
const v8 = __importStar(require("v8"));
|
|
46
|
+
const path = __importStar(require("path"));
|
|
47
|
+
const POLL_INTERVAL_MS = 10_000;
|
|
48
|
+
const WINDOW_SIZE = 60;
|
|
49
|
+
const MAX_REQUEST_DELTAS = 50;
|
|
50
|
+
const GROWTH_THRESHOLD = 0.05;
|
|
51
|
+
const LEAK_THRESHOLD = 0.15;
|
|
52
|
+
const MB = 1024 * 1024;
|
|
53
|
+
let MemoryService = MemoryService_1 = class MemoryService {
|
|
54
|
+
constructor() {
|
|
55
|
+
this.logger = new common_1.Logger(MemoryService_1.name);
|
|
56
|
+
this.samples = [];
|
|
57
|
+
this.requestDeltas = [];
|
|
58
|
+
this.pollTimer = null;
|
|
59
|
+
}
|
|
60
|
+
onModuleInit() {
|
|
61
|
+
this.takeSample();
|
|
62
|
+
this.pollTimer = setInterval(() => this.takeSample(), POLL_INTERVAL_MS);
|
|
63
|
+
this.logger.log('MemoryService started — polling every 10 s');
|
|
64
|
+
}
|
|
65
|
+
onModuleDestroy() {
|
|
66
|
+
if (this.pollTimer) {
|
|
67
|
+
clearInterval(this.pollTimer);
|
|
68
|
+
this.pollTimer = null;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
takeSample() {
|
|
72
|
+
const mem = process.memoryUsage();
|
|
73
|
+
const heap = v8.getHeapStatistics();
|
|
74
|
+
const sample = {
|
|
75
|
+
timestamp: Date.now(),
|
|
76
|
+
heapUsed: mem.heapUsed,
|
|
77
|
+
heapTotal: mem.heapTotal,
|
|
78
|
+
rss: mem.rss,
|
|
79
|
+
external: mem.external,
|
|
80
|
+
arrayBuffers: mem.arrayBuffers,
|
|
81
|
+
heapSizeLimit: heap.heap_size_limit,
|
|
82
|
+
detachedContexts: heap.number_of_detached_contexts,
|
|
83
|
+
};
|
|
84
|
+
this.samples.push(sample);
|
|
85
|
+
if (this.samples.length > WINDOW_SIZE) {
|
|
86
|
+
this.samples.shift();
|
|
87
|
+
}
|
|
88
|
+
if (sample.detachedContexts > 5) {
|
|
89
|
+
this.logger.warn(`[memory] ${sample.detachedContexts} detached V8 contexts detected — possible leak`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
snapshotBefore() {
|
|
93
|
+
return process.memoryUsage().heapUsed;
|
|
94
|
+
}
|
|
95
|
+
recordDelta(method, url, heapBefore, durationMs) {
|
|
96
|
+
const heapDeltaBytes = process.memoryUsage().heapUsed - heapBefore;
|
|
97
|
+
if (Math.abs(heapDeltaBytes) < 1024)
|
|
98
|
+
return;
|
|
99
|
+
this.requestDeltas.push({
|
|
100
|
+
method,
|
|
101
|
+
url,
|
|
102
|
+
heapDeltaBytes,
|
|
103
|
+
timestamp: Date.now(),
|
|
104
|
+
durationMs,
|
|
105
|
+
});
|
|
106
|
+
if (this.requestDeltas.length > MAX_REQUEST_DELTAS) {
|
|
107
|
+
this.requestDeltas.shift();
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
computeTrend() {
|
|
111
|
+
if (this.samples.length < 10) {
|
|
112
|
+
return { trend: 'stable', leakScore: 0, breakdown: { growthRate: 0, detachedContexts: 0, sustained: 0 } };
|
|
113
|
+
}
|
|
114
|
+
const half = Math.floor(this.samples.length / 2);
|
|
115
|
+
const first = this.samples.slice(0, half);
|
|
116
|
+
const second = this.samples.slice(half);
|
|
117
|
+
const avgFirst = first.reduce((s, x) => s + x.heapUsed, 0) / first.length;
|
|
118
|
+
const avgSecond = second.reduce((s, x) => s + x.heapUsed, 0) / second.length;
|
|
119
|
+
const growthRate = avgFirst > 0 ? (avgSecond - avgFirst) / avgFirst : 0;
|
|
120
|
+
const latest = this.samples[this.samples.length - 1];
|
|
121
|
+
const detachedPts = Math.min(40, latest.detachedContexts * 8);
|
|
122
|
+
const growthPts = Math.min(40, Math.max(0, growthRate / LEAK_THRESHOLD) * 40);
|
|
123
|
+
let growingIntervals = 0;
|
|
124
|
+
for (let i = 1; i < this.samples.length; i++) {
|
|
125
|
+
if (this.samples[i].heapUsed > this.samples[i - 1].heapUsed)
|
|
126
|
+
growingIntervals++;
|
|
127
|
+
}
|
|
128
|
+
const sustainedRatio = growingIntervals / (this.samples.length - 1);
|
|
129
|
+
const sustainedPts = sustainedRatio > 0.7 ? Math.round(sustainedRatio * 20) : 0;
|
|
130
|
+
const leakScore = Math.round(Math.min(100, detachedPts + growthPts + sustainedPts));
|
|
131
|
+
let trend;
|
|
132
|
+
if (growthRate >= LEAK_THRESHOLD || leakScore >= 60) {
|
|
133
|
+
trend = 'likely_leak';
|
|
134
|
+
}
|
|
135
|
+
else if (growthRate >= GROWTH_THRESHOLD || leakScore >= 30) {
|
|
136
|
+
trend = 'growing';
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
trend = 'stable';
|
|
140
|
+
}
|
|
141
|
+
return {
|
|
142
|
+
trend,
|
|
143
|
+
leakScore,
|
|
144
|
+
breakdown: {
|
|
145
|
+
growthRate: Math.round(growthPts),
|
|
146
|
+
detachedContexts: Math.round(detachedPts),
|
|
147
|
+
sustained: Math.round(sustainedPts),
|
|
148
|
+
},
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
getReport() {
|
|
152
|
+
const { trend, leakScore, breakdown } = this.computeTrend();
|
|
153
|
+
const latest = this.samples[this.samples.length - 1] ?? this.buildCurrentSample();
|
|
154
|
+
const topRequests = [...this.requestDeltas]
|
|
155
|
+
.sort((a, b) => b.heapDeltaBytes - a.heapDeltaBytes)
|
|
156
|
+
.slice(0, 20);
|
|
157
|
+
const alerts = [];
|
|
158
|
+
if (leakScore >= 60)
|
|
159
|
+
alerts.push('High leak score — memory is growing rapidly');
|
|
160
|
+
if (latest.detachedContexts > 5)
|
|
161
|
+
alerts.push(`${latest.detachedContexts} detached V8 contexts detected`);
|
|
162
|
+
if (latest.heapUsed / latest.heapSizeLimit > 0.85)
|
|
163
|
+
alerts.push('Heap usage above 85% of limit');
|
|
164
|
+
return {
|
|
165
|
+
current: latest,
|
|
166
|
+
trend,
|
|
167
|
+
leakScore,
|
|
168
|
+
leakScoreBreakdown: breakdown,
|
|
169
|
+
windowSize: this.samples.length,
|
|
170
|
+
samples: [...this.samples],
|
|
171
|
+
topMemoryRequests: topRequests,
|
|
172
|
+
gcAvailable: typeof global.gc === 'function',
|
|
173
|
+
alerts,
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
forceGc() {
|
|
177
|
+
const gc = global.gc;
|
|
178
|
+
if (typeof gc !== 'function') {
|
|
179
|
+
return {
|
|
180
|
+
success: false,
|
|
181
|
+
message: 'GC not available. Start Node with --expose-gc to enable manual GC.',
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
const before = process.memoryUsage().heapUsed;
|
|
185
|
+
gc();
|
|
186
|
+
this.takeSample();
|
|
187
|
+
const after = process.memoryUsage().heapUsed;
|
|
188
|
+
const freed = before - after;
|
|
189
|
+
this.logger.log(`[memory] Manual GC freed ${(freed / MB).toFixed(2)} MB`);
|
|
190
|
+
return { success: true, message: `GC complete — freed ~${(freed / MB).toFixed(2)} MB`, heapFreedBytes: freed };
|
|
191
|
+
}
|
|
192
|
+
takeSnapshot() {
|
|
193
|
+
try {
|
|
194
|
+
const fileName = `Heap-${Date.now()}.heapsnapshot`;
|
|
195
|
+
const filePath = path.join(process.cwd(), fileName);
|
|
196
|
+
v8.writeHeapSnapshot(filePath);
|
|
197
|
+
this.logger.log(`[memory] Heap snapshot written to ${filePath}`);
|
|
198
|
+
return { success: true, filePath, message: `Snapshot saved: ${fileName} (open in Chrome DevTools → Memory tab)` };
|
|
199
|
+
}
|
|
200
|
+
catch (err) {
|
|
201
|
+
return { success: false, message: `Snapshot failed: ${err?.message ?? err}` };
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
buildCurrentSample() {
|
|
205
|
+
const mem = process.memoryUsage();
|
|
206
|
+
const heap = v8.getHeapStatistics();
|
|
207
|
+
return {
|
|
208
|
+
timestamp: Date.now(),
|
|
209
|
+
heapUsed: mem.heapUsed,
|
|
210
|
+
heapTotal: mem.heapTotal,
|
|
211
|
+
rss: mem.rss,
|
|
212
|
+
external: mem.external,
|
|
213
|
+
arrayBuffers: mem.arrayBuffers,
|
|
214
|
+
heapSizeLimit: heap.heap_size_limit,
|
|
215
|
+
detachedContexts: heap.number_of_detached_contexts,
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
};
|
|
219
|
+
exports.MemoryService = MemoryService;
|
|
220
|
+
exports.MemoryService = MemoryService = MemoryService_1 = __decorate([
|
|
221
|
+
(0, common_1.Injectable)()
|
|
222
|
+
], MemoryService);
|
|
223
|
+
//# sourceMappingURL=memory.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.service.js","sourceRoot":"","sources":["../../../libs/nestjs-profiler/src/services/memory.service.ts"],"names":[],"mappings":"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"}
|
package/services/view.service.js
CHANGED
|
@@ -89,6 +89,7 @@ let ViewService = class ViewService {
|
|
|
89
89
|
codeQualityActive: active('code-quality'),
|
|
90
90
|
eventsActive: active('events'),
|
|
91
91
|
cronJobsActive: active('cron-jobs'),
|
|
92
|
+
memoryActive: active('memory'),
|
|
92
93
|
summaryIconClass: activeIcon('summary'),
|
|
93
94
|
requestsIconClass: activeIcon('requests'),
|
|
94
95
|
queriesIconClass: activeIcon('queries'),
|
|
@@ -102,6 +103,7 @@ let ViewService = class ViewService {
|
|
|
102
103
|
liveLogsIconClass: activeIcon('live-logs'),
|
|
103
104
|
codeQualityIconClass: activeIcon('code-quality'),
|
|
104
105
|
cronJobsIconClass: activeIcon('cron-jobs'),
|
|
106
|
+
memoryIconClass: activeIcon('memory'),
|
|
105
107
|
};
|
|
106
108
|
layout = this.interpolate(layout, data);
|
|
107
109
|
return layout;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"view.service.js","sourceRoot":"","sources":["../../../libs/nestjs-profiler/src/services/view.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA4C;AAC5C,uCAAyB;AACzB,2CAA6B;AAGtB,IAAM,WAAW,GAAjB,MAAM,WAAW;IAGtB;QAGE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACvD,CAAC;IAKD,MAAM,CAAC,QAAgB;QACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,QAAQ,OAAO,CAAC,CAAC;QAC/D,OAAO,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACjC,CAAC;IAED,MAAM,CAAC,QAAgB,EAAE,OAAY,EAAE;QACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,QAAQ,OAAO,CAAC,CAAC;QAC/D,IAAI,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAG3C,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAE5C,OAAO,QAAQ,CAAC;IAClB,CAAC;IAKD,gBAAgB,CACd,KAAa,EACb,OAAe,EACf,YAAoB,UAAU,EAC9B,cAAuB,KAAK;QAE5B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;QAC5D,IAAI,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QAE3C,MAAM,MAAM,GAAG,CAAC,GAAW,EAAE,EAAE,CAC7B,SAAS,KAAK,GAAG;YACf,CAAC,CAAC,0BAA0B;YAC5B,CAAC,CAAC,oDAAoD,CAAC;QAC3D,MAAM,UAAU,GAAG,CAAC,GAAW,EAAE,EAAE,CACjC,SAAS,KAAK,GAAG;YACf,CAAC,CAAC,iBAAiB;YACnB,CAAC,CAAC,uCAAuC,CAAC;QAE9C,MAAM,IAAI,GAAG;YACX,KAAK;YACL,OAAO;YACP,SAAS;YACT,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;YAC3C,WAAW,EAAE,0BAA0B;YACvC,aAAa,EAAE,oDAAoD;YACnE,aAAa,EAAE,MAAM,CAAC,SAAS,CAAC;YAChC,cAAc,EAAE,MAAM,CAAC,UAAU,CAAC;YAClC,aAAa,EAAE,MAAM,CAAC,SAAS,CAAC;YAChC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC;YAC1B,cAAc,EAAE,MAAM,CAAC,UAAU,CAAC;YAClC,YAAY,EAAE,MAAM,CAAC,QAAQ,CAAC;YAC9B,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC;YAC5B,eAAe,EAAE,MAAM,CAAC,YAAY,CAAC;YACrC,YAAY,EAAE,MAAM,CAAC,QAAQ,CAAC;YAC9B,cAAc,EAAE,MAAM,CAAC,WAAW,CAAC;YACnC,iBAAiB,EAAE,MAAM,CAAC,cAAc,CAAC;YACzC,YAAY,EAAE,MAAM,CAAC,QAAQ,CAAC;YAC9B,cAAc,EAAE,MAAM,CAAC,WAAW,CAAC;YACnC,gBAAgB,EAAE,UAAU,CAAC,SAAS,CAAC;YACvC,iBAAiB,EAAE,UAAU,CAAC,UAAU,CAAC;YACzC,gBAAgB,EAAE,UAAU,CAAC,SAAS,CAAC;YACvC,aAAa,EAAE,UAAU,CAAC,MAAM,CAAC;YACjC,iBAAiB,EAAE,UAAU,CAAC,UAAU,CAAC;YACzC,eAAe,EAAE,UAAU,CAAC,QAAQ,CAAC;YACrC,cAAc,EAAE,UAAU,CAAC,OAAO,CAAC;YACnC,eAAe,EAAE,UAAU,CAAC,QAAQ,CAAC;YACrC,kBAAkB,EAAE,UAAU,CAAC,YAAY,CAAC;YAC5C,eAAe,EAAE,UAAU,CAAC,QAAQ,CAAC;YACrC,iBAAiB,EAAE,UAAU,CAAC,WAAW,CAAC;YAC1C,oBAAoB,EAAE,UAAU,CAAC,cAAc,CAAC;YAChD,iBAAiB,EAAE,UAAU,CAAC,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"view.service.js","sourceRoot":"","sources":["../../../libs/nestjs-profiler/src/services/view.service.ts"],"names":[],"mappings":"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"}
|
package/views/layout.html
CHANGED
|
@@ -213,6 +213,15 @@
|
|
|
213
213
|
</svg>
|
|
214
214
|
Cron Jobs
|
|
215
215
|
</a>
|
|
216
|
+
<a href="/__profiler/view/memory"
|
|
217
|
+
class="flex items-center px-2 py-2 text-sm font-medium rounded-md group {{{ memoryActive }}}">
|
|
218
|
+
<svg class="mr-3 flex-shrink-0 h-6 w-6 {{{ memoryIconClass }}}" fill="none" viewBox="0 0 24 24"
|
|
219
|
+
stroke="currentColor">
|
|
220
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
|
|
221
|
+
d="M9 3H5a2 2 0 00-2 2v4m6-6h10a2 2 0 012 2v4M9 3v18m0 0h10a2 2 0 002-2V9M9 21H5a2 2 0 01-2-2V9m0 0h18" />
|
|
222
|
+
</svg>
|
|
223
|
+
Memory
|
|
224
|
+
</a>
|
|
216
225
|
<a href="/__profiler/view/logs/live"
|
|
217
226
|
class="flex items-center px-2 py-2 text-sm font-medium rounded-md group {{{ liveLogsActive }}}">
|
|
218
227
|
<svg class="mr-3 flex-shrink-0 h-6 w-6 {{{ liveLogsIconClass }}}" fill="none" viewBox="0 0 24 24"
|
|
@@ -0,0 +1,380 @@
|
|
|
1
|
+
<script>const MEMORY_DATA = {{{ reportJson }}};</script>
|
|
2
|
+
|
|
3
|
+
<style>
|
|
4
|
+
@keyframes fade-in {
|
|
5
|
+
from { opacity: 0; transform: translateY(6px); }
|
|
6
|
+
to { opacity: 1; transform: translateY(0); }
|
|
7
|
+
}
|
|
8
|
+
@keyframes pulse-red {
|
|
9
|
+
0%,100% { box-shadow: 0 0 0 0 rgba(239,68,68,.5); }
|
|
10
|
+
50% { box-shadow: 0 0 0 6px rgba(239,68,68,0); }
|
|
11
|
+
}
|
|
12
|
+
@keyframes pulse-amber {
|
|
13
|
+
0%,100% { box-shadow: 0 0 0 0 rgba(245,158,11,.4); }
|
|
14
|
+
50% { box-shadow: 0 0 0 6px rgba(245,158,11,0); }
|
|
15
|
+
}
|
|
16
|
+
.fade-in { animation: fade-in .3s ease; }
|
|
17
|
+
.pulse-red { animation: pulse-red 1.8s ease-in-out infinite; }
|
|
18
|
+
.pulse-amber { animation: pulse-amber 1.8s ease-in-out infinite; }
|
|
19
|
+
.chart-svg { width: 100%; height: 160px; }
|
|
20
|
+
.stat-card { transition: transform .15s, box-shadow .15s; }
|
|
21
|
+
.stat-card:hover { transform: translateY(-2px); box-shadow: 0 4px 20px rgba(0,0,0,.08); }
|
|
22
|
+
.score-ring { transform: rotate(-90deg); transform-origin: 50% 50%; }
|
|
23
|
+
</style>
|
|
24
|
+
|
|
25
|
+
<main class="flex-1 p-6 fade-in" id="memoryRoot">
|
|
26
|
+
|
|
27
|
+
<!-- Header row -->
|
|
28
|
+
<div class="flex items-center justify-between mb-6">
|
|
29
|
+
<div>
|
|
30
|
+
<h1 class="text-2xl font-bold text-gray-900">Memory Monitor</h1>
|
|
31
|
+
<p class="text-sm text-gray-500 mt-0.5">V8 heap statistics · rolling 10-minute window · auto-refreshes every 15 s</p>
|
|
32
|
+
</div>
|
|
33
|
+
<div class="flex items-center gap-3">
|
|
34
|
+
<button id="btnGc"
|
|
35
|
+
class="inline-flex items-center gap-1.5 px-3 py-1.5 rounded-lg border border-gray-300 bg-white text-sm font-medium text-gray-700 hover:bg-gray-50 transition-colors"
|
|
36
|
+
title="Force garbage collection (requires --expose-gc)">
|
|
37
|
+
<svg class="w-4 h-4 text-gray-500" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">
|
|
38
|
+
<path stroke-linecap="round" stroke-linejoin="round" d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"/>
|
|
39
|
+
</svg>
|
|
40
|
+
Force GC
|
|
41
|
+
</button>
|
|
42
|
+
<button id="btnSnapshot"
|
|
43
|
+
class="inline-flex items-center gap-1.5 px-3 py-1.5 rounded-lg border border-indigo-300 bg-indigo-50 text-sm font-medium text-indigo-700 hover:bg-indigo-100 transition-colors">
|
|
44
|
+
<svg class="w-4 h-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">
|
|
45
|
+
<path stroke-linecap="round" stroke-linejoin="round" d="M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4"/>
|
|
46
|
+
</svg>
|
|
47
|
+
Heap Snapshot
|
|
48
|
+
</button>
|
|
49
|
+
<span id="refreshBadge" class="text-xs text-gray-400 tabular-nums"></span>
|
|
50
|
+
</div>
|
|
51
|
+
</div>
|
|
52
|
+
|
|
53
|
+
<!-- Alerts -->
|
|
54
|
+
<div id="alertsSection"></div>
|
|
55
|
+
|
|
56
|
+
<!-- Stat cards row -->
|
|
57
|
+
<div class="grid grid-cols-2 lg:grid-cols-4 gap-4 mb-6">
|
|
58
|
+
<!-- Heap Used -->
|
|
59
|
+
<div class="stat-card bg-white rounded-xl border border-gray-200 p-4">
|
|
60
|
+
<p class="text-xs font-medium text-gray-500 uppercase tracking-wide mb-1">Heap Used</p>
|
|
61
|
+
<p id="statHeapUsed" class="text-2xl font-bold text-gray-900">—</p>
|
|
62
|
+
<p id="statHeapUsedPct" class="text-xs text-gray-400 mt-0.5">— of heap total</p>
|
|
63
|
+
</div>
|
|
64
|
+
<!-- Heap Total -->
|
|
65
|
+
<div class="stat-card bg-white rounded-xl border border-gray-200 p-4">
|
|
66
|
+
<p class="text-xs font-medium text-gray-500 uppercase tracking-wide mb-1">Heap Total</p>
|
|
67
|
+
<p id="statHeapTotal" class="text-2xl font-bold text-gray-900">—</p>
|
|
68
|
+
<p id="statRss" class="text-xs text-gray-400 mt-0.5">— RSS</p>
|
|
69
|
+
</div>
|
|
70
|
+
<!-- Detached Contexts -->
|
|
71
|
+
<div class="stat-card bg-white rounded-xl border border-gray-200 p-4">
|
|
72
|
+
<p class="text-xs font-medium text-gray-500 uppercase tracking-wide mb-1">Detached Contexts</p>
|
|
73
|
+
<p id="statDetached" class="text-2xl font-bold text-gray-900">—</p>
|
|
74
|
+
<p class="text-xs text-gray-400 mt-0.5">V8 leak indicator</p>
|
|
75
|
+
</div>
|
|
76
|
+
<!-- Heap Limit -->
|
|
77
|
+
<div class="stat-card bg-white rounded-xl border border-gray-200 p-4">
|
|
78
|
+
<p class="text-xs font-medium text-gray-500 uppercase tracking-wide mb-1">Heap Limit</p>
|
|
79
|
+
<p id="statHeapLimit" class="text-2xl font-bold text-gray-900">—</p>
|
|
80
|
+
<p id="statLimitPct" class="text-xs text-gray-400 mt-0.5">— used</p>
|
|
81
|
+
</div>
|
|
82
|
+
</div>
|
|
83
|
+
|
|
84
|
+
<!-- Chart + Leak Score -->
|
|
85
|
+
<div class="grid grid-cols-1 lg:grid-cols-3 gap-4 mb-6">
|
|
86
|
+
|
|
87
|
+
<!-- Heap chart (2/3 width) -->
|
|
88
|
+
<div class="lg:col-span-2 bg-white rounded-xl border border-gray-200 p-4">
|
|
89
|
+
<div class="flex items-center justify-between mb-3">
|
|
90
|
+
<h2 class="text-sm font-semibold text-gray-700">Heap Used — last <span id="chartSamples">0</span> samples</h2>
|
|
91
|
+
<span id="trendBadge" class="text-xs px-2.5 py-1 rounded-full font-medium">—</span>
|
|
92
|
+
</div>
|
|
93
|
+
<svg id="heapChart" class="chart-svg" viewBox="0 0 600 160" preserveAspectRatio="none">
|
|
94
|
+
<defs>
|
|
95
|
+
<linearGradient id="heapGrad" x1="0" y1="0" x2="0" y2="1">
|
|
96
|
+
<stop offset="0%" stop-color="#6366f1" stop-opacity="0.3"/>
|
|
97
|
+
<stop offset="100%" stop-color="#6366f1" stop-opacity="0.02"/>
|
|
98
|
+
</linearGradient>
|
|
99
|
+
</defs>
|
|
100
|
+
<text x="300" y="85" text-anchor="middle" fill="#9ca3af" font-size="13">Collecting samples…</text>
|
|
101
|
+
</svg>
|
|
102
|
+
</div>
|
|
103
|
+
|
|
104
|
+
<!-- Leak Score (1/3 width) -->
|
|
105
|
+
<div class="bg-white rounded-xl border border-gray-200 p-4 flex flex-col items-center justify-center">
|
|
106
|
+
<h2 class="text-sm font-semibold text-gray-700 mb-3 self-start">Leak Score</h2>
|
|
107
|
+
<div class="relative w-36 h-36">
|
|
108
|
+
<svg viewBox="0 0 36 36" class="w-full h-full -rotate-90">
|
|
109
|
+
<circle cx="18" cy="18" r="15.915" fill="none" stroke="#e5e7eb" stroke-width="3"/>
|
|
110
|
+
<circle id="scoreArc" cx="18" cy="18" r="15.915" fill="none" stroke="#10b981"
|
|
111
|
+
stroke-width="3" stroke-linecap="round"
|
|
112
|
+
stroke-dasharray="0 100" stroke-dashoffset="0"
|
|
113
|
+
style="transition: stroke-dasharray .6s ease, stroke .4s ease;"/>
|
|
114
|
+
</svg>
|
|
115
|
+
<div class="absolute inset-0 flex flex-col items-center justify-center">
|
|
116
|
+
<span id="scoreNumber" class="text-3xl font-bold text-gray-900">0</span>
|
|
117
|
+
<span class="text-xs text-gray-400">/ 100</span>
|
|
118
|
+
</div>
|
|
119
|
+
</div>
|
|
120
|
+
<div class="mt-4 w-full space-y-2">
|
|
121
|
+
<div class="flex justify-between text-xs">
|
|
122
|
+
<span class="text-gray-500">Growth rate</span>
|
|
123
|
+
<span id="scoreGrowth" class="font-medium text-gray-700">0 pts</span>
|
|
124
|
+
</div>
|
|
125
|
+
<div class="flex justify-between text-xs">
|
|
126
|
+
<span class="text-gray-500">Detached contexts</span>
|
|
127
|
+
<span id="scoreDetached" class="font-medium text-gray-700">0 pts</span>
|
|
128
|
+
</div>
|
|
129
|
+
<div class="flex justify-between text-xs">
|
|
130
|
+
<span class="text-gray-500">Sustained growth</span>
|
|
131
|
+
<span id="scoreSustained" class="font-medium text-gray-700">0 pts</span>
|
|
132
|
+
</div>
|
|
133
|
+
</div>
|
|
134
|
+
</div>
|
|
135
|
+
</div>
|
|
136
|
+
|
|
137
|
+
<!-- Top memory-heavy requests -->
|
|
138
|
+
<div class="bg-white rounded-xl border border-gray-200 overflow-hidden mb-6">
|
|
139
|
+
<div class="px-5 py-4 border-b border-gray-100 flex items-center justify-between">
|
|
140
|
+
<h2 class="text-sm font-semibold text-gray-700">Top Memory-Heavy Requests</h2>
|
|
141
|
+
<span class="text-xs text-gray-400">heap delta per request (last 50)</span>
|
|
142
|
+
</div>
|
|
143
|
+
<div id="requestsTable">
|
|
144
|
+
<p class="text-sm text-gray-400 px-5 py-6 text-center">No requests recorded yet.</p>
|
|
145
|
+
</div>
|
|
146
|
+
</div>
|
|
147
|
+
|
|
148
|
+
<!-- GC toast -->
|
|
149
|
+
<div id="toast" class="fixed bottom-6 right-6 z-50 hidden max-w-xs bg-gray-900 text-white text-sm rounded-xl px-4 py-3 shadow-2xl"></div>
|
|
150
|
+
|
|
151
|
+
</main>
|
|
152
|
+
|
|
153
|
+
<script>
|
|
154
|
+
(function () {
|
|
155
|
+
|
|
156
|
+
const MB = 1024 * 1024;
|
|
157
|
+
const fmt = b => (b / MB).toFixed(2) + ' MB';
|
|
158
|
+
const fmtDelta = b => (b >= 0 ? '+' : '') + (b / 1024).toFixed(1) + ' KB';
|
|
159
|
+
|
|
160
|
+
// ── Toast ────────────────────────────────────────────────────────────────────
|
|
161
|
+
function toast(msg, color) {
|
|
162
|
+
const el = document.getElementById('toast');
|
|
163
|
+
el.textContent = msg;
|
|
164
|
+
el.style.background = color || '#111827';
|
|
165
|
+
el.classList.remove('hidden');
|
|
166
|
+
setTimeout(() => el.classList.add('hidden'), 4000);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
// ── Alerts ───────────────────────────────────────────────────────────────────
|
|
170
|
+
function renderAlerts(alerts) {
|
|
171
|
+
const sec = document.getElementById('alertsSection');
|
|
172
|
+
if (!alerts || !alerts.length) { sec.innerHTML = ''; return; }
|
|
173
|
+
sec.innerHTML = alerts.map(a =>
|
|
174
|
+
'<div class="flex items-center gap-2 mb-3 bg-red-50 border border-red-200 text-red-800 text-sm px-4 py-2.5 rounded-lg">' +
|
|
175
|
+
'<svg class="w-4 h-4 flex-shrink-0" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M12 9v2m0 4h.01M10.29 3.86L1.82 18a2 2 0 001.71 3h16.94a2 2 0 001.71-3L13.71 3.86a2 2 0 00-3.42 0z"/></svg>' +
|
|
176
|
+
a + '</div>'
|
|
177
|
+
).join('');
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
// ── Trend badge ──────────────────────────────────────────────────────────────
|
|
181
|
+
function trendBadge(trend) {
|
|
182
|
+
const el = document.getElementById('trendBadge');
|
|
183
|
+
if (trend === 'likely_leak') {
|
|
184
|
+
el.textContent = '⚠ Likely Leak'; el.className = 'text-xs px-2.5 py-1 rounded-full font-medium bg-red-100 text-red-700 pulse-red';
|
|
185
|
+
} else if (trend === 'growing') {
|
|
186
|
+
el.textContent = '↑ Growing'; el.className = 'text-xs px-2.5 py-1 rounded-full font-medium bg-amber-100 text-amber-700';
|
|
187
|
+
} else {
|
|
188
|
+
el.textContent = '✓ Stable'; el.className = 'text-xs px-2.5 py-1 rounded-full font-medium bg-green-100 text-green-700';
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
// ── Score ring ───────────────────────────────────────────────────────────────
|
|
193
|
+
function renderScore(score, breakdown) {
|
|
194
|
+
const arc = document.getElementById('scoreArc');
|
|
195
|
+
arc.setAttribute('stroke-dasharray', score + ' ' + (100 - score));
|
|
196
|
+
arc.setAttribute('stroke', score >= 60 ? '#ef4444' : score >= 30 ? '#f59e0b' : '#10b981');
|
|
197
|
+
document.getElementById('scoreNumber').textContent = score;
|
|
198
|
+
document.getElementById('scoreNumber').style.color = score >= 60 ? '#ef4444' : score >= 30 ? '#d97706' : '#111827';
|
|
199
|
+
document.getElementById('scoreGrowth').textContent = (breakdown.growthRate ?? 0) + ' pts';
|
|
200
|
+
document.getElementById('scoreDetached').textContent = (breakdown.detachedContexts ?? 0) + ' pts';
|
|
201
|
+
document.getElementById('scoreSustained').textContent = (breakdown.sustained ?? 0) + ' pts';
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
// ── Stat cards ───────────────────────────────────────────────────────────────
|
|
205
|
+
function renderStats(report) {
|
|
206
|
+
const c = report.current;
|
|
207
|
+
const heapPct = c.heapTotal > 0 ? ((c.heapUsed / c.heapTotal) * 100).toFixed(1) : 0;
|
|
208
|
+
const limitPct = c.heapSizeLimit > 0 ? ((c.heapUsed / c.heapSizeLimit) * 100).toFixed(1) : 0;
|
|
209
|
+
|
|
210
|
+
document.getElementById('statHeapUsed').textContent = fmt(c.heapUsed);
|
|
211
|
+
document.getElementById('statHeapUsedPct').textContent = heapPct + '% of heap total';
|
|
212
|
+
document.getElementById('statHeapTotal').textContent = fmt(c.heapTotal);
|
|
213
|
+
document.getElementById('statRss').textContent = fmt(c.rss) + ' RSS';
|
|
214
|
+
|
|
215
|
+
const detEl = document.getElementById('statDetached');
|
|
216
|
+
detEl.textContent = c.detachedContexts;
|
|
217
|
+
detEl.className = 'text-2xl font-bold ' + (c.detachedContexts > 5 ? 'text-red-600' : c.detachedContexts > 0 ? 'text-amber-600' : 'text-gray-900');
|
|
218
|
+
|
|
219
|
+
document.getElementById('statHeapLimit').textContent = fmt(c.heapSizeLimit);
|
|
220
|
+
document.getElementById('statLimitPct').textContent = limitPct + '% used';
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
// ── Heap chart ───────────────────────────────────────────────────────────────
|
|
224
|
+
function renderChart(samples) {
|
|
225
|
+
const svg = document.getElementById('heapChart');
|
|
226
|
+
document.getElementById('chartSamples').textContent = samples.length;
|
|
227
|
+
if (samples.length < 2) { return; }
|
|
228
|
+
|
|
229
|
+
const W = 600, H = 160, PAD = 10;
|
|
230
|
+
const values = samples.map(s => s.heapUsed);
|
|
231
|
+
const minV = Math.min(...values);
|
|
232
|
+
const maxV = Math.max(...values);
|
|
233
|
+
const range = maxV - minV || 1;
|
|
234
|
+
|
|
235
|
+
const x = i => PAD + (i / (samples.length - 1)) * (W - PAD * 2);
|
|
236
|
+
const y = v => H - PAD - ((v - minV) / range) * (H - PAD * 2 - 20);
|
|
237
|
+
|
|
238
|
+
const pts = samples.map((s, i) => x(i) + ',' + y(s.heapUsed)).join(' ');
|
|
239
|
+
const areaBottom = 'L' + x(samples.length - 1) + ',' + (H - PAD) + ' L' + x(0) + ',' + (H - PAD) + ' Z';
|
|
240
|
+
|
|
241
|
+
// Axis labels
|
|
242
|
+
const labelMin = (minV / MB).toFixed(1) + ' MB';
|
|
243
|
+
const labelMax = (maxV / MB).toFixed(1) + ' MB';
|
|
244
|
+
|
|
245
|
+
svg.innerHTML =
|
|
246
|
+
'<defs>' +
|
|
247
|
+
'<linearGradient id="heapGrad" x1="0" y1="0" x2="0" y2="1">' +
|
|
248
|
+
'<stop offset="0%" stop-color="#6366f1" stop-opacity="0.3"/>' +
|
|
249
|
+
'<stop offset="100%" stop-color="#6366f1" stop-opacity="0.02"/>' +
|
|
250
|
+
'</linearGradient>' +
|
|
251
|
+
'</defs>' +
|
|
252
|
+
// Grid lines
|
|
253
|
+
[0.25, 0.5, 0.75].map(f => {
|
|
254
|
+
const gy = PAD + f * (H - PAD * 2 - 20);
|
|
255
|
+
return '<line x1="' + PAD + '" y1="' + gy + '" x2="' + (W - PAD) + '" y2="' + gy + '" stroke="#f3f4f6" stroke-width="1"/>';
|
|
256
|
+
}).join('') +
|
|
257
|
+
// Area fill
|
|
258
|
+
'<path d="M' + pts.split(' ').map((p, i) => (i === 0 ? '' : 'L') + p).join(' ') + areaBottom + '" fill="url(#heapGrad)"/>' +
|
|
259
|
+
// Line
|
|
260
|
+
'<polyline points="' + pts + '" fill="none" stroke="#6366f1" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/>' +
|
|
261
|
+
// Current dot
|
|
262
|
+
'<circle cx="' + x(samples.length - 1) + '" cy="' + y(values[values.length - 1]) + '" r="4" fill="#6366f1" stroke="white" stroke-width="2"/>' +
|
|
263
|
+
// Y-axis labels
|
|
264
|
+
'<text x="' + (PAD + 2) + '" y="' + (PAD + 12) + '" font-size="9" fill="#9ca3af">' + labelMax + '</text>' +
|
|
265
|
+
'<text x="' + (PAD + 2) + '" y="' + (H - PAD - 4) + '" font-size="9" fill="#9ca3af">' + labelMin + '</text>';
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
// ── Requests table ───────────────────────────────────────────────────────────
|
|
269
|
+
function renderRequests(reqs) {
|
|
270
|
+
const el = document.getElementById('requestsTable');
|
|
271
|
+
if (!reqs || !reqs.length) {
|
|
272
|
+
el.innerHTML = '<p class="text-sm text-gray-400 px-5 py-6 text-center">No requests recorded yet.</p>';
|
|
273
|
+
return;
|
|
274
|
+
}
|
|
275
|
+
const rows = reqs.slice(0, 15).map(r => {
|
|
276
|
+
const deltaColor = r.heapDeltaBytes > 1 * 1024 * 1024 ? 'text-red-600 font-semibold'
|
|
277
|
+
: r.heapDeltaBytes > 100 * 1024 ? 'text-amber-600 font-medium'
|
|
278
|
+
: r.heapDeltaBytes < 0 ? 'text-green-600'
|
|
279
|
+
: 'text-gray-700';
|
|
280
|
+
const methodBg = { GET: 'bg-blue-100 text-blue-700', POST: 'bg-green-100 text-green-700',
|
|
281
|
+
PUT: 'bg-yellow-100 text-yellow-700', DELETE: 'bg-red-100 text-red-700',
|
|
282
|
+
PATCH: 'bg-purple-100 text-purple-700' }[r.method] || 'bg-gray-100 text-gray-600';
|
|
283
|
+
return '<tr class="hover:bg-gray-50">' +
|
|
284
|
+
'<td class="px-5 py-3 whitespace-nowrap"><span class="text-xs px-2 py-0.5 rounded font-mono font-medium ' + methodBg + '">' + r.method + '</span></td>' +
|
|
285
|
+
'<td class="px-4 py-3 font-mono text-xs text-gray-700 max-w-xs truncate">' + r.url + '</td>' +
|
|
286
|
+
'<td class="px-4 py-3 text-xs ' + deltaColor + ' tabular-nums">' + fmtDelta(r.heapDeltaBytes) + '</td>' +
|
|
287
|
+
'<td class="px-4 py-3 text-xs text-gray-500 tabular-nums">' + r.durationMs + ' ms</td>' +
|
|
288
|
+
'<td class="px-4 py-3 text-xs text-gray-400 tabular-nums">' + new Date(r.timestamp).toLocaleTimeString() + '</td>' +
|
|
289
|
+
'</tr>';
|
|
290
|
+
}).join('');
|
|
291
|
+
el.innerHTML =
|
|
292
|
+
'<table class="min-w-full divide-y divide-gray-100">' +
|
|
293
|
+
'<thead class="bg-gray-50"><tr>' +
|
|
294
|
+
'<th class="px-5 py-3 text-left text-xs font-semibold text-gray-500">Method</th>' +
|
|
295
|
+
'<th class="px-4 py-3 text-left text-xs font-semibold text-gray-500">URL</th>' +
|
|
296
|
+
'<th class="px-4 py-3 text-left text-xs font-semibold text-gray-500">Heap Delta</th>' +
|
|
297
|
+
'<th class="px-4 py-3 text-left text-xs font-semibold text-gray-500">Duration</th>' +
|
|
298
|
+
'<th class="px-4 py-3 text-left text-xs font-semibold text-gray-500">Time</th>' +
|
|
299
|
+
'</tr></thead>' +
|
|
300
|
+
'<tbody class="divide-y divide-gray-50">' + rows + '</tbody>' +
|
|
301
|
+
'</table>';
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
// ── Render from data ─────────────────────────────────────────────────────────
|
|
305
|
+
function render(data) {
|
|
306
|
+
renderAlerts(data.alerts);
|
|
307
|
+
renderStats(data);
|
|
308
|
+
trendBadge(data.trend);
|
|
309
|
+
renderScore(data.leakScore, data.leakScoreBreakdown);
|
|
310
|
+
renderChart(data.samples);
|
|
311
|
+
renderRequests(data.topMemoryRequests);
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
// ── Initial render ───────────────────────────────────────────────────────────
|
|
315
|
+
render(MEMORY_DATA);
|
|
316
|
+
|
|
317
|
+
// ── Auto-refresh every 15 s ──────────────────────────────────────────────────
|
|
318
|
+
let countdown = 15;
|
|
319
|
+
const badge = document.getElementById('refreshBadge');
|
|
320
|
+
const tick = setInterval(() => {
|
|
321
|
+
countdown--;
|
|
322
|
+
badge.textContent = 'refresh in ' + countdown + ' s';
|
|
323
|
+
if (countdown <= 0) {
|
|
324
|
+
countdown = 15;
|
|
325
|
+
fetch('/__profiler/api/memory')
|
|
326
|
+
.then(r => r.json())
|
|
327
|
+
.then(data => render(data))
|
|
328
|
+
.catch(() => {});
|
|
329
|
+
}
|
|
330
|
+
}, 1000);
|
|
331
|
+
|
|
332
|
+
// ── GC button ────────────────────────────────────────────────────────────────
|
|
333
|
+
document.getElementById('btnGc').addEventListener('click', () => {
|
|
334
|
+
fetch('/__profiler/api/memory/gc', { method: 'POST' })
|
|
335
|
+
.then(r => r.json())
|
|
336
|
+
.then(d => {
|
|
337
|
+
toast(d.message, d.success ? '#059669' : '#dc2626');
|
|
338
|
+
if (d.success) {
|
|
339
|
+
setTimeout(() => {
|
|
340
|
+
fetch('/__profiler/api/memory').then(r => r.json()).then(render);
|
|
341
|
+
}, 500);
|
|
342
|
+
}
|
|
343
|
+
})
|
|
344
|
+
.catch(() => toast('GC request failed', '#dc2626'));
|
|
345
|
+
});
|
|
346
|
+
|
|
347
|
+
// ── Snapshot button — streams file back as browser download ─────────────────
|
|
348
|
+
document.getElementById('btnSnapshot').addEventListener('click', () => {
|
|
349
|
+
const btn = document.getElementById('btnSnapshot');
|
|
350
|
+
btn.disabled = true;
|
|
351
|
+
btn.textContent = 'Generating…';
|
|
352
|
+
|
|
353
|
+
fetch('/__profiler/api/memory/snapshot', { method: 'POST' })
|
|
354
|
+
.then(res => {
|
|
355
|
+
if (!res.ok) return res.json().then(d => Promise.reject(d.message || 'Snapshot failed'));
|
|
356
|
+
const cd = res.headers.get('Content-Disposition') || '';
|
|
357
|
+
const match = cd.match(/filename="?([^"]+)"?/);
|
|
358
|
+
const fileName = match ? match[1] : `Heap-${Date.now()}.heapsnapshot`;
|
|
359
|
+
return res.blob().then(blob => ({ blob, fileName }));
|
|
360
|
+
})
|
|
361
|
+
.then(({ blob, fileName }) => {
|
|
362
|
+
const url = URL.createObjectURL(blob);
|
|
363
|
+
const a = document.createElement('a');
|
|
364
|
+
a.href = url;
|
|
365
|
+
a.download = fileName;
|
|
366
|
+
document.body.appendChild(a);
|
|
367
|
+
a.click();
|
|
368
|
+
document.body.removeChild(a);
|
|
369
|
+
URL.revokeObjectURL(url);
|
|
370
|
+
toast('Snapshot downloaded — load it in Chrome DevTools → Memory → Load', '#4f46e5');
|
|
371
|
+
})
|
|
372
|
+
.catch(msg => toast(typeof msg === 'string' ? msg : 'Snapshot failed', '#dc2626'))
|
|
373
|
+
.finally(() => {
|
|
374
|
+
btn.disabled = false;
|
|
375
|
+
btn.innerHTML = '<svg class="w-4 h-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4"/></svg> Heap Snapshot';
|
|
376
|
+
});
|
|
377
|
+
});
|
|
378
|
+
|
|
379
|
+
})();
|
|
380
|
+
</script>
|