@adonis-agora/telescope 0.6.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +20 -0
- package/dist/configure.d.ts.map +1 -1
- package/dist/configure.js +6 -0
- package/dist/configure.js.map +1 -1
- package/dist/providers/telescope_cpu_profiling_provider.d.ts +28 -0
- package/dist/providers/telescope_cpu_profiling_provider.d.ts.map +1 -0
- package/dist/providers/telescope_cpu_profiling_provider.js +45 -0
- package/dist/providers/telescope_cpu_profiling_provider.js.map +1 -0
- package/dist/providers/telescope_ui_provider.d.ts.map +1 -1
- package/dist/providers/telescope_ui_provider.js +163 -12
- package/dist/providers/telescope_ui_provider.js.map +1 -1
- package/dist/providers/telescope_watchers_provider.d.ts +10 -0
- package/dist/providers/telescope_watchers_provider.d.ts.map +1 -1
- package/dist/providers/telescope_watchers_provider.js +32 -0
- package/dist/providers/telescope_watchers_provider.js.map +1 -1
- package/dist/src/ai/index.d.ts +1 -1
- package/dist/src/ai/index.js +1 -1
- package/dist/src/alerts/index.d.ts +1 -1
- package/dist/src/alerts/index.js +1 -1
- package/dist/src/entry.d.ts +8 -0
- package/dist/src/entry.d.ts.map +1 -1
- package/dist/src/entry.js +8 -0
- package/dist/src/entry.js.map +1 -1
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/mcp/index.d.ts +1 -1
- package/dist/src/mcp/index.js +1 -1
- package/dist/src/profiling/aggregate-profile.d.ts +21 -0
- package/dist/src/profiling/aggregate-profile.d.ts.map +1 -0
- package/dist/src/profiling/aggregate-profile.js +124 -0
- package/dist/src/profiling/aggregate-profile.js.map +1 -0
- package/dist/src/profiling/cpu-profiler.d.ts +59 -0
- package/dist/src/profiling/cpu-profiler.d.ts.map +1 -0
- package/dist/src/profiling/cpu-profiler.js +94 -0
- package/dist/src/profiling/cpu-profiler.js.map +1 -0
- package/dist/src/profiling/define_config.d.ts +38 -0
- package/dist/src/profiling/define_config.d.ts.map +1 -0
- package/dist/src/profiling/define_config.js +23 -0
- package/dist/src/profiling/define_config.js.map +1 -0
- package/dist/src/profiling/index.d.ts +11 -0
- package/dist/src/profiling/index.d.ts.map +1 -0
- package/dist/src/profiling/index.js +7 -0
- package/dist/src/profiling/index.js.map +1 -0
- package/dist/src/profiling/profiler_service.d.ts +100 -0
- package/dist/src/profiling/profiler_service.d.ts.map +1 -0
- package/dist/src/profiling/profiler_service.js +162 -0
- package/dist/src/profiling/profiler_service.js.map +1 -0
- package/dist/src/profiling/types.d.ts +86 -0
- package/dist/src/profiling/types.d.ts.map +1 -0
- package/dist/src/profiling/types.js +5 -0
- package/dist/src/profiling/types.js.map +1 -0
- package/dist/src/registry.d.ts +28 -0
- package/dist/src/registry.d.ts.map +1 -1
- package/dist/src/registry.js +20 -0
- package/dist/src/registry.js.map +1 -1
- package/dist/src/telescope_middleware.d.ts.map +1 -1
- package/dist/src/telescope_middleware.js +25 -0
- package/dist/src/telescope_middleware.js.map +1 -1
- package/dist/src/ui/api.d.ts +41 -1
- package/dist/src/ui/api.d.ts.map +1 -1
- package/dist/src/ui/api.js +27 -1
- package/dist/src/ui/api.js.map +1 -1
- package/dist/src/ui/define_config.d.ts +26 -0
- package/dist/src/ui/define_config.d.ts.map +1 -1
- package/dist/src/ui/define_config.js +8 -0
- package/dist/src/ui/define_config.js.map +1 -1
- package/dist/src/ui/diagnosis_api.d.ts +33 -0
- package/dist/src/ui/diagnosis_api.d.ts.map +1 -0
- package/dist/src/ui/diagnosis_api.js +60 -0
- package/dist/src/ui/diagnosis_api.js.map +1 -0
- package/dist/src/ui/extension_api.d.ts +6 -2
- package/dist/src/ui/extension_api.d.ts.map +1 -1
- package/dist/src/ui/extension_api.js +7 -2
- package/dist/src/ui/extension_api.js.map +1 -1
- package/dist/src/ui/index.d.ts +8 -2
- package/dist/src/ui/index.d.ts.map +1 -1
- package/dist/src/ui/index.js +7 -1
- package/dist/src/ui/index.js.map +1 -1
- package/dist/src/ui/profiles_api.d.ts +48 -0
- package/dist/src/ui/profiles_api.d.ts.map +1 -0
- package/dist/src/ui/profiles_api.js +94 -0
- package/dist/src/ui/profiles_api.js.map +1 -0
- package/dist/src/ui/queue_manager_api.d.ts +46 -0
- package/dist/src/ui/queue_manager_api.d.ts.map +1 -0
- package/dist/src/ui/queue_manager_api.js +118 -0
- package/dist/src/ui/queue_manager_api.js.map +1 -0
- package/dist/src/ui/schedules_api.d.ts +43 -0
- package/dist/src/ui/schedules_api.d.ts.map +1 -0
- package/dist/src/ui/schedules_api.js +46 -0
- package/dist/src/ui/schedules_api.js.map +1 -0
- package/dist/src/watchers/cron_next_run.d.ts +8 -0
- package/dist/src/watchers/cron_next_run.d.ts.map +1 -0
- package/dist/src/watchers/cron_next_run.js +67 -0
- package/dist/src/watchers/cron_next_run.js.map +1 -0
- package/dist/src/watchers/define_config.d.ts +28 -1
- package/dist/src/watchers/define_config.d.ts.map +1 -1
- package/dist/src/watchers/define_config.js +5 -0
- package/dist/src/watchers/define_config.js.map +1 -1
- package/dist/src/watchers/index.d.ts +7 -4
- package/dist/src/watchers/index.d.ts.map +1 -1
- package/dist/src/watchers/index.js +5 -2
- package/dist/src/watchers/index.js.map +1 -1
- package/dist/src/watchers/queue_manager.d.ts +229 -0
- package/dist/src/watchers/queue_manager.d.ts.map +1 -0
- package/dist/src/watchers/queue_manager.js +223 -0
- package/dist/src/watchers/queue_manager.js.map +1 -0
- package/dist/src/watchers/schedule_watcher.d.ts +94 -1
- package/dist/src/watchers/schedule_watcher.d.ts.map +1 -1
- package/dist/src/watchers/schedule_watcher.js +83 -1
- package/dist/src/watchers/schedule_watcher.js.map +1 -1
- package/dist/stubs/config/telescope_cpu_profiling.stub +0 -0
- package/package.json +29 -14
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import { currentTraceId } from '../context_accessor.js';
|
|
2
|
+
import { EntryType } from '../entry.js';
|
|
3
|
+
import { safeRecord } from '../watchers/record.js';
|
|
4
|
+
import { CpuProfiler } from './cpu-profiler.js';
|
|
5
|
+
/** The `type` of the entries this service records. */
|
|
6
|
+
export const CPU_PROFILE_ENTRY_TYPE = EntryType.CpuProfile;
|
|
7
|
+
/**
|
|
8
|
+
* Decides whether to profile a request and drives the capture lifecycle around
|
|
9
|
+
* it. {@link TelescopeMiddleware} calls {@link shouldProfile} (cheap gate), then
|
|
10
|
+
* {@link begin}/{@link end} around the request body — ported near-verbatim from
|
|
11
|
+
* `nestjs-telescope`'s `ProfilerService`; only the recording seam changed (fire-and-forget
|
|
12
|
+
* `safeRecord` through the runtime store slot, matching every other Adonis watcher, instead of a
|
|
13
|
+
* NestJS-injected recorder).
|
|
14
|
+
*
|
|
15
|
+
* OVERHEAD: while disabled, {@link shouldProfile} returns false and {@link begin}
|
|
16
|
+
* returns null after a single boolean check — no profiler is ever constructed
|
|
17
|
+
* and `node:inspector` is never required. While enabled but a request isn't
|
|
18
|
+
* selected, the only added cost is the gate and (if sampling) one RNG call.
|
|
19
|
+
*/
|
|
20
|
+
export class ProfilerService {
|
|
21
|
+
config;
|
|
22
|
+
active = 0;
|
|
23
|
+
manual = [];
|
|
24
|
+
random;
|
|
25
|
+
profilerFactory;
|
|
26
|
+
recordFn;
|
|
27
|
+
constructor(config, deps = {}) {
|
|
28
|
+
this.config = config;
|
|
29
|
+
this.random = deps.random ?? Math.random;
|
|
30
|
+
this.profilerFactory =
|
|
31
|
+
deps.profilerFactory ??
|
|
32
|
+
(() => new CpuProfiler(undefined, { samplingIntervalMicros: config.samplingIntervalMicros }));
|
|
33
|
+
this.recordFn = deps.record ?? ((input) => safeRecord(input, 'ProfilerService'));
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Arm a manual capture for the next `count` requests (optionally only those
|
|
37
|
+
* matching `label`). Returns the pending budget. No-op when disabled.
|
|
38
|
+
*/
|
|
39
|
+
arm(arm) {
|
|
40
|
+
if (!this.config.enabled)
|
|
41
|
+
return { pendingManual: 0 };
|
|
42
|
+
const count = Math.max(1, Math.floor(arm.count));
|
|
43
|
+
this.manual.push({ count, ...(arm.label ? { label: arm.label } : {}) });
|
|
44
|
+
return { pendingManual: this.pendingManual() };
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Whether this request should be profiled. Consults the manual arm budget
|
|
48
|
+
* first (targeted captures win), then sampling. Cheap and side-effect-free
|
|
49
|
+
* EXCEPT it does not yet consume the manual budget — that happens in
|
|
50
|
+
* {@link begin} so a request rejected by the concurrency cap doesn't waste it.
|
|
51
|
+
*/
|
|
52
|
+
shouldProfile(label) {
|
|
53
|
+
if (!this.config.enabled)
|
|
54
|
+
return false;
|
|
55
|
+
if (this.matchingArm(label) !== null)
|
|
56
|
+
return true;
|
|
57
|
+
if (this.config.sampleRate <= 0)
|
|
58
|
+
return false;
|
|
59
|
+
return this.random() < this.config.sampleRate;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Begin a capture for a request that {@link shouldProfile} accepted. Returns a
|
|
63
|
+
* handle to pass to {@link end}, or `null` if the request should not be
|
|
64
|
+
* profiled (disabled, concurrency cap reached, or not selected). The caller
|
|
65
|
+
* MUST treat a null handle as "no profiling" and proceed untouched.
|
|
66
|
+
*/
|
|
67
|
+
begin(label) {
|
|
68
|
+
if (!this.config.enabled)
|
|
69
|
+
return null;
|
|
70
|
+
const arm = this.matchingArm(label);
|
|
71
|
+
const reason = arm !== null ? 'manual' : 'sampled';
|
|
72
|
+
if (reason === 'sampled') {
|
|
73
|
+
if (this.config.sampleRate <= 0 || this.random() >= this.config.sampleRate)
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
// Respect the concurrency cap BEFORE consuming the manual budget so a capped
|
|
77
|
+
// request can be retried by a later arm.
|
|
78
|
+
if (this.active >= this.config.maxConcurrent)
|
|
79
|
+
return null;
|
|
80
|
+
if (arm !== null) {
|
|
81
|
+
arm.count -= 1;
|
|
82
|
+
if (arm.count <= 0)
|
|
83
|
+
this.manual.splice(this.manual.indexOf(arm), 1);
|
|
84
|
+
}
|
|
85
|
+
const profiler = this.profilerFactory();
|
|
86
|
+
this.active += 1;
|
|
87
|
+
// Start asynchronously; the handle is valid immediately. A start failure
|
|
88
|
+
// simply yields an empty/partial profile at stop — never throws into the host.
|
|
89
|
+
// The promise is retained on the handle so `end` can await it before stopping.
|
|
90
|
+
const started = profiler.start().catch(() => { });
|
|
91
|
+
return { profiler, startedAt: now(), reason, started };
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Stop a capture and record it as a `cpu_profile` entry. Safe to call with a
|
|
95
|
+
* null handle (no-op). Never throws into the host request path. Captures below
|
|
96
|
+
* the `minDurationMs` floor are discarded.
|
|
97
|
+
*/
|
|
98
|
+
async end(handle, label) {
|
|
99
|
+
if (handle === null)
|
|
100
|
+
return;
|
|
101
|
+
try {
|
|
102
|
+
// Ensure `start()` settled so `stop()` sees a running profiler. (Real
|
|
103
|
+
// requests run long enough that start is done; this guards the fast path.)
|
|
104
|
+
await handle.started;
|
|
105
|
+
const result = await handle.profiler.stop();
|
|
106
|
+
if (result === null)
|
|
107
|
+
return;
|
|
108
|
+
if (result.durationMs < this.config.minDurationMs)
|
|
109
|
+
return;
|
|
110
|
+
const content = {
|
|
111
|
+
durationMs: result.durationMs,
|
|
112
|
+
sampleCount: result.sampleCount,
|
|
113
|
+
reason: handle.reason,
|
|
114
|
+
label: label ?? null,
|
|
115
|
+
tree: result.tree,
|
|
116
|
+
hot: result.hot,
|
|
117
|
+
};
|
|
118
|
+
this.recordFn({
|
|
119
|
+
type: CPU_PROFILE_ENTRY_TYPE,
|
|
120
|
+
content,
|
|
121
|
+
familyHash: label ?? null,
|
|
122
|
+
tags: ['profile', handle.reason],
|
|
123
|
+
durationMs: result.durationMs,
|
|
124
|
+
traceId: currentTraceId(),
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
// A failed capture must never affect the request it wrapped.
|
|
129
|
+
}
|
|
130
|
+
finally {
|
|
131
|
+
this.active = Math.max(0, this.active - 1);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
status() {
|
|
135
|
+
return {
|
|
136
|
+
enabled: this.config.enabled,
|
|
137
|
+
sampleRate: this.config.sampleRate,
|
|
138
|
+
active: this.active,
|
|
139
|
+
maxConcurrent: this.config.maxConcurrent,
|
|
140
|
+
pendingManual: this.pendingManual(),
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
pendingManual() {
|
|
144
|
+
return this.manual.reduce((sum, a) => sum + a.count, 0);
|
|
145
|
+
}
|
|
146
|
+
/** First arm matching this label (labelled arms require an exact match). */
|
|
147
|
+
matchingArm(label) {
|
|
148
|
+
for (const arm of this.manual) {
|
|
149
|
+
if (arm.count <= 0)
|
|
150
|
+
continue;
|
|
151
|
+
if (arm.label === undefined)
|
|
152
|
+
return arm;
|
|
153
|
+
if (label !== null && arm.label === label)
|
|
154
|
+
return arm;
|
|
155
|
+
}
|
|
156
|
+
return null;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
function now() {
|
|
160
|
+
return Date.now();
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=profiler_service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profiler_service.js","sourceRoot":"","sources":["../../../src/profiling/profiler_service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The raw V8 CPU profile shape produced by `Profiler.stop` over the inspector
|
|
3
|
+
* protocol. We model only the fields we consume so we never depend on the
|
|
4
|
+
* inspector typings at our public surface (the `inspector` module is required
|
|
5
|
+
* lazily and ONLY when profiling is enabled — see {@link CpuProfiler} in
|
|
6
|
+
* `cpu-profiler.ts`).
|
|
7
|
+
*
|
|
8
|
+
* @see https://chromedevtools.github.io/devtools-protocol/tot/Profiler/#type-Profile
|
|
9
|
+
*/
|
|
10
|
+
export interface V8CpuProfile {
|
|
11
|
+
/** Flat list of unique call-frame nodes. */
|
|
12
|
+
nodes: V8ProfileNode[];
|
|
13
|
+
/** Profile start time in microseconds. */
|
|
14
|
+
startTime: number;
|
|
15
|
+
/** Profile end time in microseconds. */
|
|
16
|
+
endTime: number;
|
|
17
|
+
/** Node ids sampled, one per sample, in time order. */
|
|
18
|
+
samples?: number[];
|
|
19
|
+
/** Time deltas (microseconds) between consecutive samples. */
|
|
20
|
+
timeDeltas?: number[];
|
|
21
|
+
}
|
|
22
|
+
export interface V8ProfileNode {
|
|
23
|
+
id: number;
|
|
24
|
+
callFrame: V8CallFrame;
|
|
25
|
+
/** Number of samples where this exact node was on top of the stack. */
|
|
26
|
+
hitCount?: number;
|
|
27
|
+
/** Child node ids (callees). */
|
|
28
|
+
children?: number[];
|
|
29
|
+
}
|
|
30
|
+
export interface V8CallFrame {
|
|
31
|
+
functionName: string;
|
|
32
|
+
scriptId: string;
|
|
33
|
+
url: string;
|
|
34
|
+
lineNumber: number;
|
|
35
|
+
columnNumber: number;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* An aggregated flamegraph node. Time is in MILLISECONDS. `selfMs` is time spent
|
|
39
|
+
* in this frame with nothing above it; `totalMs` includes all descendants. The
|
|
40
|
+
* tree is rooted at a synthetic `(root)` frame so the dashboard can render a
|
|
41
|
+
* single top bar spanning the whole capture.
|
|
42
|
+
*/
|
|
43
|
+
export interface FlameNode {
|
|
44
|
+
/** Human-readable function name (`(anonymous)` / `(idle)` etc. preserved). */
|
|
45
|
+
name: string;
|
|
46
|
+
/** Source location `url:line`, or empty when V8 reported none (native/builtin). */
|
|
47
|
+
file: string;
|
|
48
|
+
/** Inclusive time across this frame and all descendants, in ms. */
|
|
49
|
+
totalMs: number;
|
|
50
|
+
/** Exclusive time in this frame only (samples landing directly here), in ms. */
|
|
51
|
+
selfMs: number;
|
|
52
|
+
/** Sample count attributed inclusively to this subtree. */
|
|
53
|
+
totalSamples: number;
|
|
54
|
+
children: FlameNode[];
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* The persisted content of a `cpu_profile` entry. Deliberately stores the
|
|
58
|
+
* AGGREGATED frame tree (bounded by the call-graph size) rather than the raw
|
|
59
|
+
* per-sample `.cpuprofile` (which is unbounded and would blow the entry content
|
|
60
|
+
* budget). The frame tree is everything the flamegraph renderer needs.
|
|
61
|
+
*/
|
|
62
|
+
export interface CpuProfileContent {
|
|
63
|
+
/** Wall-clock capture duration in ms (endTime - startTime). */
|
|
64
|
+
durationMs: number;
|
|
65
|
+
/** Number of samples collected. */
|
|
66
|
+
sampleCount: number;
|
|
67
|
+
/** What triggered the capture. */
|
|
68
|
+
reason: 'manual' | 'sampled';
|
|
69
|
+
/** Route / label the profile is associated with, when known (e.g. "GET /users/:id"). */
|
|
70
|
+
label: string | null;
|
|
71
|
+
/** The aggregated flamegraph tree (single synthetic root). */
|
|
72
|
+
tree: FlameNode;
|
|
73
|
+
/**
|
|
74
|
+
* Hottest frames by SELF time, precomputed for the dashboard's "hot functions"
|
|
75
|
+
* list so the UI doesn't have to walk the tree. Capped to a small number.
|
|
76
|
+
*/
|
|
77
|
+
hot: HotFrame[];
|
|
78
|
+
}
|
|
79
|
+
export interface HotFrame {
|
|
80
|
+
name: string;
|
|
81
|
+
file: string;
|
|
82
|
+
selfMs: number;
|
|
83
|
+
/** Percentage of total captured time spent self in this frame (0–100). */
|
|
84
|
+
selfPct: number;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/profiling/types.ts"],"names":[],"mappings":"AAIA;;;;;;;;GAQG;AACH,MAAM,WAAW,YAAY;IAC3B,4CAA4C;IAC5C,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,0CAA0C;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,wCAAwC;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,8DAA8D;IAC9D,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,WAAW,CAAC;IACvB,uEAAuE;IACvE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gCAAgC;IAChC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;;GAKG;AACH,MAAM,WAAW,SAAS;IACxB,8EAA8E;IAC9E,IAAI,EAAE,MAAM,CAAC;IACb,mFAAmF;IACnF,IAAI,EAAE,MAAM,CAAC;IACb,mEAAmE;IACnE,OAAO,EAAE,MAAM,CAAC;IAChB,gFAAgF;IAChF,MAAM,EAAE,MAAM,CAAC;IACf,2DAA2D;IAC3D,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,SAAS,EAAE,CAAC;CACvB;AAED;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,+DAA+D;IAC/D,UAAU,EAAE,MAAM,CAAC;IACnB,mCAAmC;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,kCAAkC;IAClC,MAAM,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC7B,wFAAwF;IACxF,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,8DAA8D;IAC9D,IAAI,EAAE,SAAS,CAAC;IAChB;;;OAGG;IACH,GAAG,EAAE,QAAQ,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,0EAA0E;IAC1E,OAAO,EAAE,MAAM,CAAC;CACjB"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
// Ported near-verbatim from `nestjs-telescope`'s `packages/core/src/profiling/types.ts` — the V8
|
|
2
|
+
// inspector Profiler protocol shapes and the aggregated flame tree are framework-agnostic (pure
|
|
3
|
+
// `node:inspector` + arithmetic, no NestJS/AdonisJS dependency at all).
|
|
4
|
+
export {};
|
|
5
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/profiling/types.ts"],"names":[],"mappings":"AAAA,iGAAiG;AACjG,gGAAgG;AAChG,wEAAwE"}
|
package/dist/src/registry.d.ts
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import type { DiagnosisCoordinator } from './ai/diagnosis_coordinator.js';
|
|
2
2
|
import type { ExtensionRegistry } from './extension/registry.js';
|
|
3
|
+
import type { ProfilerService } from './profiling/profiler_service.js';
|
|
3
4
|
import type { RequestCaptureOptions } from './request_watcher.js';
|
|
4
5
|
import type { TelescopeStore } from './store.js';
|
|
5
6
|
import type { EntryEvents } from './stream/entry_events.js';
|
|
7
|
+
import type { QueueManager } from './watchers/queue_manager.js';
|
|
6
8
|
/**
|
|
7
9
|
* The live runtime telescope handles, published on a cross-copy-stable global slot
|
|
8
10
|
* so the request middleware can reach the active store WITHOUT constructor wiring
|
|
@@ -43,6 +45,20 @@ export interface TelescopeRuntime {
|
|
|
43
45
|
* when its `isConfigured()` is `false` — both degrade to their non-AI behaviour.
|
|
44
46
|
*/
|
|
45
47
|
diagnosisCoordinator: DiagnosisCoordinator | null;
|
|
48
|
+
/**
|
|
49
|
+
* The CPU profiler service published by `@adonis-agora/telescope/cpu_profiling_provider`, or
|
|
50
|
+
* `null` when that OPTIONAL feature is not installed/enabled. `TelescopeMiddleware` reads it (no
|
|
51
|
+
* DI) to gate/begin/end a `node:inspector` capture around each request; the UI routes read it to
|
|
52
|
+
* serve `/api/profiles/*`. `null` degrades every touchpoint to inert (no overhead, 404 routes).
|
|
53
|
+
*/
|
|
54
|
+
cpuProfiler: ProfilerService | null;
|
|
55
|
+
/**
|
|
56
|
+
* The Live Queue Manager driver the `queue-manager` watcher publishes, or `null` when that OPTIONAL
|
|
57
|
+
* capability is not enabled/configured (`@adonisjs/queue` absent, or `queue-manager` not in
|
|
58
|
+
* `config/telescope_watchers.ts`'s `watchers` list). The UI's `/api/queues/live*` routes read it
|
|
59
|
+
* (no DI) to serve the queue console; `null` degrades those routes to a clear "not configured" 404.
|
|
60
|
+
*/
|
|
61
|
+
queueManager: QueueManager | null;
|
|
46
62
|
}
|
|
47
63
|
/** The shared runtime handle. */
|
|
48
64
|
export declare function getTelescopeRuntime(): TelescopeRuntime;
|
|
@@ -58,6 +74,18 @@ export declare function setTelescopeEntryEvents(entryEvents: EntryEvents | null)
|
|
|
58
74
|
* clear it (AI disabled / provider shutdown).
|
|
59
75
|
*/
|
|
60
76
|
export declare function setTelescopeDiagnosisCoordinator(coordinator: DiagnosisCoordinator | null): void;
|
|
77
|
+
/**
|
|
78
|
+
* Publish the CPU profiler service (called by `telescope_cpu_profiling_provider` at register) so
|
|
79
|
+
* the request middleware and the UI's `/api/profiles/*` routes can reach it without DI. Pass `null`
|
|
80
|
+
* to clear it (feature disabled / provider shutdown).
|
|
81
|
+
*/
|
|
82
|
+
export declare function setTelescopeCpuProfiler(profiler: ProfilerService | null): void;
|
|
83
|
+
/**
|
|
84
|
+
* Publish the Live Queue Manager driver (called by `TelescopeWatchersProvider` when the
|
|
85
|
+
* `queue-manager` watcher is enabled) so the UI's `/api/queues/live*` routes can reach it without DI.
|
|
86
|
+
* Pass `null` to clear it (capability disabled / provider shutdown).
|
|
87
|
+
*/
|
|
88
|
+
export declare function setTelescopeQueueManager(manager: QueueManager | null): void;
|
|
61
89
|
/**
|
|
62
90
|
* Toggle the overload-shed flag (called by the overload guard). While paused,
|
|
63
91
|
* every ingestion entry point drops new entries. Idempotent.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAEhE;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC/B,2EAA2E;IAC3E,KAAK,EAAE,cAAc,GAAG,IAAI,CAAC;IAC7B,iDAAiD;IACjD,qBAAqB,EAAE,OAAO,CAAC;IAC/B;;;;OAIG;IACH,cAAc,EAAE,qBAAqB,GAAG,IAAI,CAAC;IAC7C,4FAA4F;IAC5F,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACnC;;;;OAIG;IACH,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;IAChC;;;;;OAKG;IACH,MAAM,EAAE,OAAO,CAAC;IAChB;;;;;OAKG;IACH,oBAAoB,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAClD;;;;;OAKG;IACH,WAAW,EAAE,eAAe,GAAG,IAAI,CAAC;IACpC;;;;;OAKG;IACH,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;CACnC;AAkBD,iCAAiC;AACjC,wBAAgB,mBAAmB,IAAI,gBAAgB,CAEtD;AAED,yEAAyE;AACzE,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,cAAc,EACrB,qBAAqB,EAAE,OAAO,EAC9B,cAAc,GAAE,qBAAqB,GAAG,IAAW,GAClD,IAAI,CAIN;AAED,4FAA4F;AAC5F,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,GAAG,IAAI,CAEtF;AAED,mFAAmF;AACnF,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI,GAAG,IAAI,CAE7E;AAED;;;;GAIG;AACH,wBAAgB,gCAAgC,CAAC,WAAW,EAAE,oBAAoB,GAAG,IAAI,GAAG,IAAI,CAE/F;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,GAAG,IAAI,CAE9E;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,GAAG,IAAI,CAE3E;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAExD;AAED,kEAAkE;AAClE,wBAAgB,qBAAqB,IAAI,IAAI,CAU5C"}
|
package/dist/src/registry.js
CHANGED
|
@@ -8,6 +8,8 @@ const runtime = globalStore[RUNTIME_KEY] ?? {
|
|
|
8
8
|
entryEvents: null,
|
|
9
9
|
paused: false,
|
|
10
10
|
diagnosisCoordinator: null,
|
|
11
|
+
cpuProfiler: null,
|
|
12
|
+
queueManager: null,
|
|
11
13
|
};
|
|
12
14
|
globalStore[RUNTIME_KEY] = runtime;
|
|
13
15
|
/** The shared runtime handle. */
|
|
@@ -36,6 +38,22 @@ export function setTelescopeEntryEvents(entryEvents) {
|
|
|
36
38
|
export function setTelescopeDiagnosisCoordinator(coordinator) {
|
|
37
39
|
runtime.diagnosisCoordinator = coordinator;
|
|
38
40
|
}
|
|
41
|
+
/**
|
|
42
|
+
* Publish the CPU profiler service (called by `telescope_cpu_profiling_provider` at register) so
|
|
43
|
+
* the request middleware and the UI's `/api/profiles/*` routes can reach it without DI. Pass `null`
|
|
44
|
+
* to clear it (feature disabled / provider shutdown).
|
|
45
|
+
*/
|
|
46
|
+
export function setTelescopeCpuProfiler(profiler) {
|
|
47
|
+
runtime.cpuProfiler = profiler;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Publish the Live Queue Manager driver (called by `TelescopeWatchersProvider` when the
|
|
51
|
+
* `queue-manager` watcher is enabled) so the UI's `/api/queues/live*` routes can reach it without DI.
|
|
52
|
+
* Pass `null` to clear it (capability disabled / provider shutdown).
|
|
53
|
+
*/
|
|
54
|
+
export function setTelescopeQueueManager(manager) {
|
|
55
|
+
runtime.queueManager = manager;
|
|
56
|
+
}
|
|
39
57
|
/**
|
|
40
58
|
* Toggle the overload-shed flag (called by the overload guard). While paused,
|
|
41
59
|
* every ingestion entry point drops new entries. Idempotent.
|
|
@@ -52,5 +70,7 @@ export function resetTelescopeRuntime() {
|
|
|
52
70
|
runtime.entryEvents = null;
|
|
53
71
|
runtime.paused = false;
|
|
54
72
|
runtime.diagnosisCoordinator = null;
|
|
73
|
+
runtime.cpuProfiler = null;
|
|
74
|
+
runtime.queueManager = null;
|
|
55
75
|
}
|
|
56
76
|
//# sourceMappingURL=registry.js.map
|
package/dist/src/registry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/registry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/registry.ts"],"names":[],"mappings":"AAgEA,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;AAC3D,MAAM,WAAW,GAAG,UAAsE,CAAC;AAE3F,MAAM,OAAO,GAAqB,WAAW,CAAC,WAAW,CAAC,IAAI;IAC5D,KAAK,EAAE,IAAI;IACX,qBAAqB,EAAE,KAAK;IAC5B,cAAc,EAAE,IAAI;IACpB,QAAQ,EAAE,IAAI;IACd,WAAW,EAAE,IAAI;IACjB,MAAM,EAAE,KAAK;IACb,oBAAoB,EAAE,IAAI;IAC1B,WAAW,EAAE,IAAI;IACjB,YAAY,EAAE,IAAI;CACnB,CAAC;AACF,WAAW,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC;AAEnC,iCAAiC;AACjC,MAAM,UAAU,mBAAmB;IACjC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,mBAAmB,CACjC,KAAqB,EACrB,qBAA8B,EAC9B,iBAA+C,IAAI;IAEnD,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;IACtB,OAAO,CAAC,qBAAqB,GAAG,qBAAqB,CAAC;IACtD,OAAO,CAAC,cAAc,GAAG,cAAc,CAAC;AAC1C,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,6BAA6B,CAAC,QAAkC;IAC9E,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;AAC9B,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,uBAAuB,CAAC,WAA+B;IACrE,OAAO,CAAC,WAAW,GAAG,WAAW,CAAC;AACpC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gCAAgC,CAAC,WAAwC;IACvF,OAAO,CAAC,oBAAoB,GAAG,WAAW,CAAC;AAC7C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,QAAgC;IACtE,OAAO,CAAC,WAAW,GAAG,QAAQ,CAAC;AACjC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CAAC,OAA4B;IACnE,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC;AACjC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAe;IAChD,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;AAC1B,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,qBAAqB;IACnC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IACrB,OAAO,CAAC,qBAAqB,GAAG,KAAK,CAAC;IACtC,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAC9B,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IACxB,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAC3B,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC;IACvB,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;IACpC,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAC3B,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;AAC9B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telescope_middleware.d.ts","sourceRoot":"","sources":["../../src/telescope_middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"telescope_middleware.d.ts","sourceRoot":"","sources":["../../src/telescope_middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAwBxD;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,OAAO,OAAO,mBAAmB;IAChC,MAAM,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM;CA2D5C"}
|
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
import { recordExceptionInStore } from './exception_watcher.js';
|
|
2
2
|
import { getTelescopeRuntime } from './registry.js';
|
|
3
3
|
import { recordRequest } from './request_watcher.js';
|
|
4
|
+
/** `"GET /users/:id"` when the router matched a route, else `"GET <raw url>"`. Mirrors the NestJS
|
|
5
|
+
* sibling's `normalizeRoute` label closely enough for `ProfilerService`'s manual-arm `label` match
|
|
6
|
+
* and the `cpu_profile` entry's `familyHash` to be genuinely useful for grouping repeated captures
|
|
7
|
+
* of the same endpoint — without adding a whole route-normalization module for one label. */
|
|
8
|
+
function profileLabel(ctx) {
|
|
9
|
+
const method = ctx.request.method();
|
|
10
|
+
const pattern = ctx.route?.pattern;
|
|
11
|
+
return `${method} ${pattern ?? ctx.request.url()}`;
|
|
12
|
+
}
|
|
4
13
|
/**
|
|
5
14
|
* Records each inbound HTTP request as a `request` telescope entry (method, url,
|
|
6
15
|
* status, duration, traceId), and auto-captures any exception thrown by the
|
|
@@ -24,6 +33,16 @@ export default class TelescopeMiddleware {
|
|
|
24
33
|
}
|
|
25
34
|
const startedAt = Date.now();
|
|
26
35
|
const store = runtime.store;
|
|
36
|
+
// Opt-in CPU profiling (`@adonis-agora/telescope/cpu_profiling`): a single cheap boolean gate
|
|
37
|
+
// when the feature isn't installed/enabled (`runtime.cpuProfiler` is `null`, or its
|
|
38
|
+
// `shouldProfile` returns `false`). When a request IS selected, `begin` starts a real
|
|
39
|
+
// `node:inspector` capture now and `end` stops+records it in the `finally` below, so the
|
|
40
|
+
// captured `cpu_profile` entry shares this request's trace context.
|
|
41
|
+
const httpCtx = ctx;
|
|
42
|
+
const label = runtime.cpuProfiler ? profileLabel(httpCtx) : null;
|
|
43
|
+
const profile = label !== null && runtime.cpuProfiler?.shouldProfile(label)
|
|
44
|
+
? runtime.cpuProfiler.begin(label)
|
|
45
|
+
: null;
|
|
27
46
|
try {
|
|
28
47
|
return await next();
|
|
29
48
|
}
|
|
@@ -56,6 +75,12 @@ export default class TelescopeMiddleware {
|
|
|
56
75
|
catch {
|
|
57
76
|
// Observability must never break the request it observes.
|
|
58
77
|
}
|
|
78
|
+
// Stop + record the profile (if one was armed/sampled) within the same
|
|
79
|
+
// `finally` so its `cpu_profile` entry shares this request's trace context.
|
|
80
|
+
// Fire-and-forget: `end` never throws and never blocks the response.
|
|
81
|
+
if (profile !== null) {
|
|
82
|
+
void runtime.cpuProfiler?.end(profile, label);
|
|
83
|
+
}
|
|
59
84
|
}
|
|
60
85
|
}
|
|
61
86
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telescope_middleware.js","sourceRoot":"","sources":["../../src/telescope_middleware.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"telescope_middleware.js","sourceRoot":"","sources":["../../src/telescope_middleware.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAwB,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAU3E;;;8FAG8F;AAC9F,SAAS,YAAY,CAAC,GAAoB;IACxC,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;IACpC,MAAM,OAAO,GAAI,GAAsC,CAAC,KAAK,EAAE,OAAO,CAAC;IACvE,OAAO,GAAG,MAAM,IAAI,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;AACrD,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,OAAO,OAAO,mBAAmB;IACtC,KAAK,CAAC,MAAM,CAAC,GAAgB,EAAE,IAAY;QACzC,MAAM,OAAO,GAAG,mBAAmB,EAAE,CAAC;QACtC,gFAAgF;QAChF,gFAAgF;QAChF,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,qBAAqB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACvE,OAAO,IAAI,EAAE,CAAC;QAChB,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAE5B,8FAA8F;QAC9F,oFAAoF;QACpF,sFAAsF;QACtF,yFAAyF;QACzF,oEAAoE;QACpE,MAAM,OAAO,GAAG,GAAiC,CAAC;QAClD,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACjE,MAAM,OAAO,GACX,KAAK,KAAK,IAAI,IAAI,OAAO,CAAC,WAAW,EAAE,aAAa,CAAC,KAAK,CAAC;YACzD,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC;YAClC,CAAC,CAAC,IAAI,CAAC;QAEX,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,EAAE,CAAC;QACtB,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,0EAA0E;YAC1E,mEAAmE;YACnE,IAAI,CAAC;gBACH,MAAM,OAAO,GAAI,GAAkC,CAAC,OAAO,CAAC;gBAC5D,MAAM,sBAAsB,CAAC,KAAK,EAAE,KAAK,EAAE;oBACzC,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE;oBACxB,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;iBACnB,CAAC,CAAC;YACL,CAAC;YAAC,MAAM,CAAC;gBACP,0DAA0D;YAC5D,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;gBAAS,CAAC;YACT,0EAA0E;YAC1E,qEAAqE;YACrE,uEAAuE;YACvE,IAAI,CAAC;gBACH,MAAM,aAAa,CAAC,KAAK,EAAE,GAAiC,EAAE,SAAS,EAAE;oBACvE,sEAAsE;oBACtE,6DAA6D;oBAC7D,GAAG,CAAC,OAAO,CAAC,cAAc,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAChF,CAAC,CAAC;YACL,CAAC;YAAC,MAAM,CAAC;gBACP,0DAA0D;YAC5D,CAAC;YACD,uEAAuE;YACvE,4EAA4E;YAC5E,qEAAqE;YACrE,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBACrB,KAAK,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
|
package/dist/src/ui/api.d.ts
CHANGED
|
@@ -1,10 +1,39 @@
|
|
|
1
1
|
import type { Entry } from '../entry.js';
|
|
2
2
|
import { type MetricsServiceOptions } from '../metrics/metrics_service.js';
|
|
3
3
|
import { type PulseServiceOptions } from '../metrics/pulse.js';
|
|
4
|
+
import type { SamplingConfig } from '../sampling/sampling.js';
|
|
4
5
|
import type { TelescopeService } from '../service.js';
|
|
5
6
|
import type { EntryQuery } from '../store.js';
|
|
6
7
|
import type { UiHttpContext, UiRequest } from './http.js';
|
|
7
8
|
import { type ReplayOptions } from './request_replay.js';
|
|
9
|
+
/** The resolved pruner slice the retention endpoint echoes (mirrors `ResolvedTelescopeConfig['prune']`). */
|
|
10
|
+
export interface RetentionPruneOptions {
|
|
11
|
+
enabled: boolean;
|
|
12
|
+
afterMs: number;
|
|
13
|
+
keepLast?: number;
|
|
14
|
+
intervalMs: number;
|
|
15
|
+
}
|
|
16
|
+
/** Constructor options for the additive `GET <path>/api/retention` endpoint. */
|
|
17
|
+
export interface RetentionOptions {
|
|
18
|
+
/** The resolved pruner config, or `undefined` when no `prune` block was configured. */
|
|
19
|
+
prune?: RetentionPruneOptions;
|
|
20
|
+
/** The resolved per-type sampling config (empty ⇒ nothing is sampled). */
|
|
21
|
+
sampling?: SamplingConfig;
|
|
22
|
+
}
|
|
23
|
+
/** One entry type recording below 100%, for the dashboard's "some data is sampled" note. */
|
|
24
|
+
export interface RetentionSamplingRate {
|
|
25
|
+
type: string;
|
|
26
|
+
rate: number;
|
|
27
|
+
}
|
|
28
|
+
/** `GET <path>/api/retention` payload — static retention/sampling posture, no live pruner state. */
|
|
29
|
+
export interface RetentionInfo {
|
|
30
|
+
enabled: boolean;
|
|
31
|
+
afterMs: number;
|
|
32
|
+
keepLast: number | null;
|
|
33
|
+
intervalMs: number;
|
|
34
|
+
/** Only types sampled below 100% (rate < 1) are listed. */
|
|
35
|
+
sampling: RetentionSamplingRate[];
|
|
36
|
+
}
|
|
8
37
|
/**
|
|
9
38
|
* The JSON-API handler functions over a {@link TelescopeService}. Each takes the
|
|
10
39
|
* framework-light {@link UiHttpContext} (an Adonis `HttpContext` satisfies it) plus
|
|
@@ -17,9 +46,11 @@ export declare class TelescopeApi {
|
|
|
17
46
|
private readonly pulse;
|
|
18
47
|
/** Request-replay settings (additive). Replay is disabled unless `enabled`. */
|
|
19
48
|
private readonly replay;
|
|
49
|
+
/** Retention/sampling posture (additive). Empty when the host configured neither. */
|
|
50
|
+
private readonly retentionOptions;
|
|
20
51
|
constructor(service: TelescopeService, metricsOptions?: MetricsServiceOptions, replayOptions?: ({
|
|
21
52
|
enabled?: boolean;
|
|
22
|
-
} & ReplayOptions) | undefined, pulseOptions?: PulseServiceOptions);
|
|
53
|
+
} & ReplayOptions) | undefined, pulseOptions?: PulseServiceOptions, retentionOptions?: RetentionOptions);
|
|
23
54
|
/**
|
|
24
55
|
* `GET <path>/api/entries` — list entries newest-first, with optional filters:
|
|
25
56
|
* `?type=`, `?traceId=`, `?search=`, `?limit=` (capped), `?before=` (ISO date).
|
|
@@ -59,6 +90,15 @@ export declare class TelescopeApi {
|
|
|
59
90
|
* ratio, slow route/outgoing/job hotspots, N+1, load-by-user) over a window.
|
|
60
91
|
*/
|
|
61
92
|
metricsPulse(ctx: UiHttpContext): Promise<unknown>;
|
|
93
|
+
/**
|
|
94
|
+
* `GET <path>/api/retention` — the STATIC retention/sampling posture: the
|
|
95
|
+
* configured pruner cutoff (age + optional keep-last floor + cycle interval)
|
|
96
|
+
* and which entry types are being tail-sampled below 100%. No live pruner
|
|
97
|
+
* state (last/next run) — the `TelescopePruner` instance is a per-process
|
|
98
|
+
* runtime handle, not something this framework-light API layer reaches into;
|
|
99
|
+
* a host wanting run history can read `TelescopePruner.getRuns()` directly.
|
|
100
|
+
*/
|
|
101
|
+
retention(ctx: UiHttpContext): Promise<unknown>;
|
|
62
102
|
/**
|
|
63
103
|
* `POST <path>/api/requests/:id/replay` — re-issue a captured `request` entry
|
|
64
104
|
* against the LOCAL server and report the outcome.
|
package/dist/src/ui/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/ui/api.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAkB,KAAK,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAC3F,OAAO,EAAgB,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE7E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC1D,OAAO,EAAE,KAAK,aAAa,EAAoC,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/ui/api.ts"],"names":[],"mappings":"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"}
|
package/dist/src/ui/api.js
CHANGED
|
@@ -18,11 +18,14 @@ export class TelescopeApi {
|
|
|
18
18
|
pulse;
|
|
19
19
|
/** Request-replay settings (additive). Replay is disabled unless `enabled`. */
|
|
20
20
|
replay;
|
|
21
|
-
|
|
21
|
+
/** Retention/sampling posture (additive). Empty when the host configured neither. */
|
|
22
|
+
retentionOptions;
|
|
23
|
+
constructor(service, metricsOptions = {}, replayOptions = undefined, pulseOptions = {}, retentionOptions = {}) {
|
|
22
24
|
this.service = service;
|
|
23
25
|
this.metrics = new MetricsService(service.telescopeStore, metricsOptions);
|
|
24
26
|
this.pulse = new PulseService(service.telescopeStore, pulseOptions);
|
|
25
27
|
this.replay = { enabled: false, ...replayOptions };
|
|
28
|
+
this.retentionOptions = retentionOptions;
|
|
26
29
|
}
|
|
27
30
|
/**
|
|
28
31
|
* `GET <path>/api/entries` — list entries newest-first, with optional filters:
|
|
@@ -169,6 +172,29 @@ export class TelescopeApi {
|
|
|
169
172
|
return ctx.response.status(400).send({ error: asMessage(err) });
|
|
170
173
|
}
|
|
171
174
|
}
|
|
175
|
+
/**
|
|
176
|
+
* `GET <path>/api/retention` — the STATIC retention/sampling posture: the
|
|
177
|
+
* configured pruner cutoff (age + optional keep-last floor + cycle interval)
|
|
178
|
+
* and which entry types are being tail-sampled below 100%. No live pruner
|
|
179
|
+
* state (last/next run) — the `TelescopePruner` instance is a per-process
|
|
180
|
+
* runtime handle, not something this framework-light API layer reaches into;
|
|
181
|
+
* a host wanting run history can read `TelescopePruner.getRuns()` directly.
|
|
182
|
+
*/
|
|
183
|
+
async retention(ctx) {
|
|
184
|
+
const prune = this.retentionOptions.prune;
|
|
185
|
+
const sampling = this.retentionOptions.sampling ?? {};
|
|
186
|
+
const rates = Object.entries(sampling)
|
|
187
|
+
.map(([type, rule]) => ({ type, rate: typeof rule === 'number' ? rule : rule.rate }))
|
|
188
|
+
.filter((entry) => entry.rate < 1);
|
|
189
|
+
const data = {
|
|
190
|
+
enabled: prune?.enabled ?? false,
|
|
191
|
+
afterMs: prune?.afterMs ?? 0,
|
|
192
|
+
keepLast: prune?.keepLast ?? null,
|
|
193
|
+
intervalMs: prune?.intervalMs ?? 0,
|
|
194
|
+
sampling: rates,
|
|
195
|
+
};
|
|
196
|
+
return ctx.response.status(200).header('content-type', 'application/json').send({ data });
|
|
197
|
+
}
|
|
172
198
|
// — request replay (additive: kept in its own region for trivial merges) —
|
|
173
199
|
/**
|
|
174
200
|
* `POST <path>/api/requests/:id/replay` — re-issue a captured `request` entry
|
package/dist/src/ui/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/ui/api.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/ui/api.ts"],"names":[],"mappings":"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"}
|