@adonis-agora/telescope 0.5.2 → 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 +26 -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_alerts_provider.d.ts.map +1 -1
- package/dist/providers/telescope_alerts_provider.js +1 -1
- package/dist/providers/telescope_alerts_provider.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_mcp_provider.d.ts.map +1 -1
- package/dist/providers/telescope_mcp_provider.js +1 -1
- package/dist/providers/telescope_mcp_provider.js.map +1 -1
- package/dist/providers/telescope_provider.d.ts.map +1 -1
- package/dist/providers/telescope_provider.js +9 -3
- package/dist/providers/telescope_provider.js.map +1 -1
- 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/alert_rule.d.ts +84 -3
- package/dist/src/alerts/alert_rule.d.ts.map +1 -1
- package/dist/src/alerts/alerter.d.ts +24 -2
- package/dist/src/alerts/alerter.d.ts.map +1 -1
- package/dist/src/alerts/alerter.js +122 -11
- package/dist/src/alerts/alerter.js.map +1 -1
- package/dist/src/alerts/define_config.d.ts +9 -1
- package/dist/src/alerts/define_config.d.ts.map +1 -1
- package/dist/src/alerts/define_config.js +8 -0
- package/dist/src/alerts/define_config.js.map +1 -1
- package/dist/src/alerts/exception_source.d.ts +16 -7
- package/dist/src/alerts/exception_source.d.ts.map +1 -1
- package/dist/src/alerts/exception_source.js +29 -17
- package/dist/src/alerts/exception_source.js.map +1 -1
- package/dist/src/alerts/index.d.ts +2 -2
- package/dist/src/alerts/index.d.ts.map +1 -1
- package/dist/src/alerts/index.js +1 -1
- package/dist/src/alerts/index.js.map +1 -1
- package/dist/src/alerts/slack_format.d.ts +8 -0
- package/dist/src/alerts/slack_format.d.ts.map +1 -1
- package/dist/src/alerts/slack_format.js +128 -3
- package/dist/src/alerts/slack_format.js.map +1 -1
- package/dist/src/client_errors/ingestor.d.ts.map +1 -1
- package/dist/src/client_errors/ingestor.js +20 -1
- package/dist/src/client_errors/ingestor.js.map +1 -1
- package/dist/src/client_errors/validation.d.ts.map +1 -1
- package/dist/src/client_errors/validation.js +7 -2
- package/dist/src/client_errors/validation.js.map +1 -1
- package/dist/src/define_config.d.ts +51 -0
- package/dist/src/define_config.d.ts.map +1 -1
- package/dist/src/define_config.js +6 -0
- package/dist/src/define_config.js.map +1 -1
- package/dist/src/diagnostics_registry.d.ts +15 -0
- package/dist/src/diagnostics_registry.d.ts.map +1 -1
- package/dist/src/diagnostics_registry.js +19 -0
- package/dist/src/diagnostics_registry.js.map +1 -1
- package/dist/src/diagnostics_watcher.d.ts +28 -1
- package/dist/src/diagnostics_watcher.d.ts.map +1 -1
- package/dist/src/diagnostics_watcher.js +17 -2
- package/dist/src/diagnostics_watcher.js.map +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/extension/types.d.ts +35 -2
- package/dist/src/extension/types.d.ts.map +1 -1
- package/dist/src/extension/types.js.map +1 -1
- package/dist/src/index.d.ts +7 -7
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +3 -3
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp/index.d.ts +1 -1
- package/dist/src/mcp/index.js +1 -1
- package/dist/src/mcp/server.d.ts.map +1 -1
- package/dist/src/mcp/server.js +7 -2
- package/dist/src/mcp/server.js.map +1 -1
- package/dist/src/metrics/waterfall.d.ts.map +1 -1
- package/dist/src/metrics/waterfall.js +6 -0
- package/dist/src/metrics/waterfall.js.map +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/redaction/redact.d.ts +21 -0
- package/dist/src/redaction/redact.d.ts.map +1 -1
- package/dist/src/redaction/redact.js +18 -0
- package/dist/src/redaction/redact.js.map +1 -1
- package/dist/src/redaction/redacting_store.d.ts.map +1 -1
- package/dist/src/redaction/redacting_store.js +10 -1
- package/dist/src/redaction/redacting_store.js.map +1 -1
- package/dist/src/registry.d.ts +36 -1
- package/dist/src/registry.d.ts.map +1 -1
- package/dist/src/registry.js +24 -1
- package/dist/src/registry.js.map +1 -1
- package/dist/src/request_watcher.d.ts +68 -0
- package/dist/src/request_watcher.d.ts.map +1 -1
- package/dist/src/request_watcher.js +101 -0
- package/dist/src/request_watcher.js.map +1 -1
- package/dist/src/service.d.ts.map +1 -1
- package/dist/src/service.js.map +1 -1
- package/dist/src/telescope_middleware.d.ts.map +1 -1
- package/dist/src/telescope_middleware.js +30 -1
- 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/dashboard.html +58 -10
- 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/ext_table.d.ts +50 -0
- package/dist/src/ui/ext_table.d.ts.map +1 -0
- package/dist/src/ui/ext_table.js +42 -0
- package/dist/src/ui/ext_table.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 +10 -2
- package/dist/src/ui/index.d.ts.map +1 -1
- package/dist/src/ui/index.js +9 -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 +89 -2
- 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
package/dist/src/mcp/server.js
CHANGED
|
@@ -27,7 +27,10 @@ export const MCP_TOOLS = [
|
|
|
27
27
|
type: 'string',
|
|
28
28
|
description: 'Entry type: request, query, exception, client_exception, log, event, mail, job, cache, http-client, redis, diagnostic…',
|
|
29
29
|
},
|
|
30
|
-
search: {
|
|
30
|
+
search: {
|
|
31
|
+
type: 'string',
|
|
32
|
+
description: 'Case-insensitive substring over entry content + tags',
|
|
33
|
+
},
|
|
31
34
|
tag: { type: 'string', description: 'Exact tag match, e.g. "status:500" or "lib:billing"' },
|
|
32
35
|
sinceMinutes: { type: 'number', description: 'Only entries from the last N minutes' },
|
|
33
36
|
limit: { type: 'number', description: 'Max entries (default 20, max 100)' },
|
|
@@ -153,7 +156,9 @@ export class TelescopeMcpServer {
|
|
|
153
156
|
return id === undefined || id === null ? null : { jsonrpc: '2.0', id, result };
|
|
154
157
|
}
|
|
155
158
|
fail(id, code, message) {
|
|
156
|
-
return id === undefined || id === null
|
|
159
|
+
return id === undefined || id === null
|
|
160
|
+
? null
|
|
161
|
+
: { jsonrpc: '2.0', id, error: { code, message } };
|
|
157
162
|
}
|
|
158
163
|
async callTool(name, args) {
|
|
159
164
|
if (name !== undefined && !this.tools.has(name)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/mcp/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"waterfall.d.ts","sourceRoot":"","sources":["../../../src/metrics/waterfall.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,KAAK,EAAa,MAAM,aAAa,CAAC;AAEpD;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,iFAAiF;IACjF,KAAK,EAAE,MAAM,CAAC;IACd,8CAA8C;IAC9C,QAAQ,EAAE,MAAM,CAAC;IACjB,iFAAiF;IACjF,UAAU,EAAE,MAAM,CAAC;IACnB,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,SAAS;IACxB,kEAAkE;IAClE,YAAY,EAAE,MAAM,CAAC;IACrB,8EAA8E;IAC9E,eAAe,EAAE,MAAM,CAAC;IACxB,qFAAqF;IACrF,KAAK,EAAE,aAAa,EAAE,CAAC;CACxB;
|
|
1
|
+
{"version":3,"file":"waterfall.d.ts","sourceRoot":"","sources":["../../../src/metrics/waterfall.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,KAAK,EAAa,MAAM,aAAa,CAAC;AAEpD;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,iFAAiF;IACjF,KAAK,EAAE,MAAM,CAAC;IACd,8CAA8C;IAC9C,QAAQ,EAAE,MAAM,CAAC;IACjB,iFAAiF;IACjF,UAAU,EAAE,MAAM,CAAC;IACnB,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,SAAS;IACxB,kEAAkE;IAClE,YAAY,EAAE,MAAM,CAAC;IACrB,8EAA8E;IAC9E,eAAe,EAAE,MAAM,CAAC;IACxB,qFAAqF;IACrF,KAAK,EAAE,aAAa,EAAE,CAAC;CACxB;AAwCD;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,SAAS,GAAG,IAAI,CAwDjE"}
|
|
@@ -20,6 +20,12 @@ function labelFor(entry) {
|
|
|
20
20
|
if (entry.type === EntryType.HttpClient && typeof record.url === 'string') {
|
|
21
21
|
return typeof record.method === 'string' ? `${record.method} ${record.url}` : record.url;
|
|
22
22
|
}
|
|
23
|
+
// Diagnostics span entries (the generic `diagnostics` watcher) carry the
|
|
24
|
+
// emitting lib + event name, e.g. `agent` + `llm.turn` → "agent:llm.turn",
|
|
25
|
+
// instead of falling back to the bare entry type ("diagnostic").
|
|
26
|
+
if (typeof record.lib === 'string' && typeof record.event === 'string') {
|
|
27
|
+
return `${record.lib}:${record.event}`;
|
|
28
|
+
}
|
|
23
29
|
if (typeof record.name === 'string')
|
|
24
30
|
return record.name;
|
|
25
31
|
return entry.type;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"waterfall.js","sourceRoot":"","sources":["../../../src/metrics/waterfall.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"waterfall.js","sourceRoot":"","sources":["../../../src/metrics/waterfall.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { FlameNode, HotFrame, V8CpuProfile } from './types.js';
|
|
2
|
+
interface Aggregated {
|
|
3
|
+
tree: FlameNode;
|
|
4
|
+
durationMs: number;
|
|
5
|
+
sampleCount: number;
|
|
6
|
+
hot: HotFrame[];
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Aggregates a raw V8 CPU profile into a flamegraph frame tree with self/total
|
|
10
|
+
* time in milliseconds. Pure and deterministic — no inspector dependency, so it
|
|
11
|
+
* is trivially unit-testable and runs OUTSIDE any hot path (only when a capture
|
|
12
|
+
* actually completes).
|
|
13
|
+
*
|
|
14
|
+
* Method: each sample's `timeDelta` (microseconds) is charged to the SELF time
|
|
15
|
+
* of the node it landed on. Total time is then the sum of a node's self time and
|
|
16
|
+
* its descendants', computed by a single post-order walk. The flame tree mirrors
|
|
17
|
+
* V8's `children` call-graph so callers nest exactly as they did at runtime.
|
|
18
|
+
*/
|
|
19
|
+
export declare function aggregateCpuProfile(profile: V8CpuProfile): Aggregated;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=aggregate-profile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aggregate-profile.d.ts","sourceRoot":"","sources":["../../../src/profiling/aggregate-profile.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAiB,MAAM,YAAY,CAAC;AAQnF,UAAU,UAAU;IAClB,IAAI,EAAE,SAAS,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,QAAQ,EAAE,CAAC;CACjB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,YAAY,GAAG,UAAU,CA2FrE"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/** How many hottest-by-self frames to precompute for the dashboard. */
|
|
2
|
+
const HOT_FRAME_LIMIT = 12;
|
|
3
|
+
/** The synthetic root name V8 uses; we keep/normalize to it. */
|
|
4
|
+
const ROOT_NAME = '(root)';
|
|
5
|
+
/**
|
|
6
|
+
* Aggregates a raw V8 CPU profile into a flamegraph frame tree with self/total
|
|
7
|
+
* time in milliseconds. Pure and deterministic — no inspector dependency, so it
|
|
8
|
+
* is trivially unit-testable and runs OUTSIDE any hot path (only when a capture
|
|
9
|
+
* actually completes).
|
|
10
|
+
*
|
|
11
|
+
* Method: each sample's `timeDelta` (microseconds) is charged to the SELF time
|
|
12
|
+
* of the node it landed on. Total time is then the sum of a node's self time and
|
|
13
|
+
* its descendants', computed by a single post-order walk. The flame tree mirrors
|
|
14
|
+
* V8's `children` call-graph so callers nest exactly as they did at runtime.
|
|
15
|
+
*/
|
|
16
|
+
export function aggregateCpuProfile(profile) {
|
|
17
|
+
const byId = new Map();
|
|
18
|
+
for (const node of profile.nodes)
|
|
19
|
+
byId.set(node.id, node);
|
|
20
|
+
// 1. Charge each sample's time delta to its node's self time (microseconds).
|
|
21
|
+
const selfMicros = new Map();
|
|
22
|
+
const selfSamples = new Map();
|
|
23
|
+
const samples = profile.samples ?? [];
|
|
24
|
+
const deltas = profile.timeDeltas ?? [];
|
|
25
|
+
let totalMicros = 0;
|
|
26
|
+
for (let i = 0; i < samples.length; i++) {
|
|
27
|
+
const id = samples[i];
|
|
28
|
+
if (id === undefined)
|
|
29
|
+
continue;
|
|
30
|
+
// V8 emits one delta per sample (the time elapsed before that sample). Fall
|
|
31
|
+
// back to 0 if the arrays are mismatched rather than guessing.
|
|
32
|
+
const delta = deltas[i] ?? 0;
|
|
33
|
+
totalMicros += delta;
|
|
34
|
+
selfMicros.set(id, (selfMicros.get(id) ?? 0) + delta);
|
|
35
|
+
selfSamples.set(id, (selfSamples.get(id) ?? 0) + 1);
|
|
36
|
+
}
|
|
37
|
+
// 2. Find (or synthesize) the root. V8 puts the (root) node first; tolerate
|
|
38
|
+
// its absence by stitching all top-level nodes under a synthetic root.
|
|
39
|
+
const rootNode = profile.nodes.find((n) => n.callFrame.functionName === ROOT_NAME);
|
|
40
|
+
const build = (node) => {
|
|
41
|
+
const childIds = node.children ?? [];
|
|
42
|
+
const children = [];
|
|
43
|
+
for (const childId of childIds) {
|
|
44
|
+
const child = byId.get(childId);
|
|
45
|
+
if (child)
|
|
46
|
+
children.push(build(child));
|
|
47
|
+
}
|
|
48
|
+
const self = (selfMicros.get(node.id) ?? 0) / 1000;
|
|
49
|
+
const selfCount = selfSamples.get(node.id) ?? 0;
|
|
50
|
+
const childTotal = children.reduce((sum, c) => sum + c.totalMs, 0);
|
|
51
|
+
const childSamples = children.reduce((sum, c) => sum + c.totalSamples, 0);
|
|
52
|
+
return {
|
|
53
|
+
name: normalizeName(node.callFrame.functionName),
|
|
54
|
+
file: frameFile(node),
|
|
55
|
+
selfMs: self,
|
|
56
|
+
totalMs: self + childTotal,
|
|
57
|
+
totalSamples: selfCount + childSamples,
|
|
58
|
+
children,
|
|
59
|
+
};
|
|
60
|
+
};
|
|
61
|
+
let tree;
|
|
62
|
+
if (rootNode) {
|
|
63
|
+
tree = build(rootNode);
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
// No explicit root: every node referenced as a child belongs to a parent;
|
|
67
|
+
// top-level nodes are those never referenced. Stitch them under a synthetic root.
|
|
68
|
+
const referenced = new Set();
|
|
69
|
+
for (const node of profile.nodes) {
|
|
70
|
+
for (const childId of node.children ?? [])
|
|
71
|
+
referenced.add(childId);
|
|
72
|
+
}
|
|
73
|
+
const tops = profile.nodes.filter((n) => !referenced.has(n.id)).map(build);
|
|
74
|
+
const childTotal = tops.reduce((sum, c) => sum + c.totalMs, 0);
|
|
75
|
+
tree = {
|
|
76
|
+
name: ROOT_NAME,
|
|
77
|
+
file: '',
|
|
78
|
+
selfMs: 0,
|
|
79
|
+
totalMs: childTotal,
|
|
80
|
+
totalSamples: tops.reduce((sum, c) => sum + c.totalSamples, 0),
|
|
81
|
+
children: tops,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
// 3. Hot frames by self time (flatten, sort desc, take N).
|
|
85
|
+
const totalMs = totalMicros / 1000;
|
|
86
|
+
const flat = [];
|
|
87
|
+
const visit = (node) => {
|
|
88
|
+
if (node.selfMs > 0) {
|
|
89
|
+
flat.push({
|
|
90
|
+
name: node.name,
|
|
91
|
+
file: node.file,
|
|
92
|
+
selfMs: node.selfMs,
|
|
93
|
+
selfPct: totalMs > 0 ? (node.selfMs / totalMs) * 100 : 0,
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
for (const child of node.children)
|
|
97
|
+
visit(child);
|
|
98
|
+
};
|
|
99
|
+
visit(tree);
|
|
100
|
+
flat.sort((a, b) => b.selfMs - a.selfMs);
|
|
101
|
+
return {
|
|
102
|
+
tree,
|
|
103
|
+
durationMs: durationFor(profile, totalMicros),
|
|
104
|
+
sampleCount: samples.length,
|
|
105
|
+
hot: flat.slice(0, HOT_FRAME_LIMIT),
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
/** Prefer the summed sample deltas; fall back to start/end when samples absent. */
|
|
109
|
+
function durationFor(profile, totalMicros) {
|
|
110
|
+
if (totalMicros > 0)
|
|
111
|
+
return totalMicros / 1000;
|
|
112
|
+
const wall = profile.endTime - profile.startTime;
|
|
113
|
+
return wall > 0 ? wall / 1000 : 0;
|
|
114
|
+
}
|
|
115
|
+
function normalizeName(name) {
|
|
116
|
+
return name === '' ? '(anonymous)' : name;
|
|
117
|
+
}
|
|
118
|
+
function frameFile(node) {
|
|
119
|
+
const { url, lineNumber } = node.callFrame;
|
|
120
|
+
if (url === '')
|
|
121
|
+
return '';
|
|
122
|
+
return lineNumber >= 0 ? `${url}:${lineNumber + 1}` : url;
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=aggregate-profile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aggregate-profile.js","sourceRoot":"","sources":["../../../src/profiling/aggregate-profile.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { FlameNode, HotFrame } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* The slice of `inspector.Session` we depend on. Declared structurally so the
|
|
4
|
+
* profiler can be unit-tested with a fake and — crucially — so the real
|
|
5
|
+
* `node:inspector` module is NEVER imported at module load. It is required
|
|
6
|
+
* lazily by {@link defaultSessionFactory} ONLY when a capture actually starts.
|
|
7
|
+
*/
|
|
8
|
+
export interface InspectorSessionLike {
|
|
9
|
+
connect(): void;
|
|
10
|
+
disconnect(): void;
|
|
11
|
+
post(method: string, paramsOrCallback?: unknown | ((err: Error | null, result?: unknown) => void), callback?: (err: Error | null, result?: unknown) => void): void;
|
|
12
|
+
}
|
|
13
|
+
export type SessionFactory = () => InspectorSessionLike;
|
|
14
|
+
export interface CpuProfilerOptions {
|
|
15
|
+
/**
|
|
16
|
+
* V8 sampling interval in microseconds. Lower = finer-grained but more
|
|
17
|
+
* overhead. V8's default is 1000µs (1ms); we keep that default.
|
|
18
|
+
*/
|
|
19
|
+
samplingIntervalMicros?: number;
|
|
20
|
+
}
|
|
21
|
+
export interface CpuProfilerResult {
|
|
22
|
+
tree: FlameNode;
|
|
23
|
+
durationMs: number;
|
|
24
|
+
sampleCount: number;
|
|
25
|
+
hot: HotFrame[];
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Wraps a V8 CPU profiling session over the inspector protocol. A single
|
|
29
|
+
* profiler instance captures ONE profile at a time (`start` then `stop`).
|
|
30
|
+
*
|
|
31
|
+
* OVERHEAD GUARANTEE: constructing a profiler does no work and creates no
|
|
32
|
+
* session. The inspector session is created (and `node:inspector` is required)
|
|
33
|
+
* only inside `start()`. When profiling is disabled the controller never
|
|
34
|
+
* constructs one, so there is provably zero inspector activity.
|
|
35
|
+
*/
|
|
36
|
+
export declare class CpuProfiler {
|
|
37
|
+
private readonly sessionFactory;
|
|
38
|
+
private session;
|
|
39
|
+
private running;
|
|
40
|
+
private readonly intervalMicros;
|
|
41
|
+
constructor(sessionFactory?: SessionFactory, options?: CpuProfilerOptions);
|
|
42
|
+
get isRunning(): boolean;
|
|
43
|
+
/** Begin a CPU profile. No-op if one is already running. */
|
|
44
|
+
start(): Promise<void>;
|
|
45
|
+
/**
|
|
46
|
+
* Stop the profile and aggregate it into a flame tree. Returns `null` when no
|
|
47
|
+
* profile is running. Always disconnects the session, even on error.
|
|
48
|
+
*/
|
|
49
|
+
stop(): Promise<CpuProfilerResult | null>;
|
|
50
|
+
private postAsync;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Lazily require `node:inspector` and return a fresh Session. Kept out of the
|
|
54
|
+
* module's import graph so that importing this file (or the whole package) does
|
|
55
|
+
* NOT load the inspector binding — that only happens the first time a capture
|
|
56
|
+
* starts, i.e. only when profiling is enabled AND a request is sampled.
|
|
57
|
+
*/
|
|
58
|
+
export declare function defaultSessionFactory(): InspectorSessionLike;
|
|
59
|
+
//# sourceMappingURL=cpu-profiler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cpu-profiler.d.ts","sourceRoot":"","sources":["../../../src/profiling/cpu-profiler.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAgB,MAAM,YAAY,CAAC;AAEpE;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,OAAO,IAAI,IAAI,CAAC;IAChB,UAAU,IAAI,IAAI,CAAC;IACnB,IAAI,CACF,MAAM,EAAE,MAAM,EACd,gBAAgB,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI,EAAE,MAAM,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC,EAC5E,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI,EAAE,MAAM,CAAC,EAAE,OAAO,KAAK,IAAI,GACvD,IAAI,CAAC;CACT;AAED,MAAM,MAAM,cAAc,GAAG,MAAM,oBAAoB,CAAC;AAExD,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,SAAS,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,QAAQ,EAAE,CAAC;CACjB;AAID;;;;;;;;GAQG;AACH,qBAAa,WAAW;IAMpB,OAAO,CAAC,QAAQ,CAAC,cAAc;IALjC,OAAO,CAAC,OAAO,CAAqC;IACpD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;gBAGrB,cAAc,GAAE,cAAsC,EACvE,OAAO,GAAE,kBAAuB;IAKlC,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,4DAA4D;IACtD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAa5B;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAmB/C,OAAO,CAAC,SAAS;CAclB;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,IAAI,oBAAoB,CAS5D"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
// Ported near-verbatim (only the import path changed) from `nestjs-telescope`'s
|
|
2
|
+
// `packages/core/src/profiling/cpu-profiler.ts`. `node:inspector`'s Session API is a Node.js
|
|
3
|
+
// built-in, identical under NestJS or AdonisJS — this file has NO framework glue at all.
|
|
4
|
+
import { createRequire } from 'node:module';
|
|
5
|
+
import { aggregateCpuProfile } from './aggregate-profile.js';
|
|
6
|
+
const DEFAULT_SAMPLING_INTERVAL_MICROS = 1000;
|
|
7
|
+
/**
|
|
8
|
+
* Wraps a V8 CPU profiling session over the inspector protocol. A single
|
|
9
|
+
* profiler instance captures ONE profile at a time (`start` then `stop`).
|
|
10
|
+
*
|
|
11
|
+
* OVERHEAD GUARANTEE: constructing a profiler does no work and creates no
|
|
12
|
+
* session. The inspector session is created (and `node:inspector` is required)
|
|
13
|
+
* only inside `start()`. When profiling is disabled the controller never
|
|
14
|
+
* constructs one, so there is provably zero inspector activity.
|
|
15
|
+
*/
|
|
16
|
+
export class CpuProfiler {
|
|
17
|
+
sessionFactory;
|
|
18
|
+
session = null;
|
|
19
|
+
running = false;
|
|
20
|
+
intervalMicros;
|
|
21
|
+
constructor(sessionFactory = defaultSessionFactory, options = {}) {
|
|
22
|
+
this.sessionFactory = sessionFactory;
|
|
23
|
+
this.intervalMicros = options.samplingIntervalMicros ?? DEFAULT_SAMPLING_INTERVAL_MICROS;
|
|
24
|
+
}
|
|
25
|
+
get isRunning() {
|
|
26
|
+
return this.running;
|
|
27
|
+
}
|
|
28
|
+
/** Begin a CPU profile. No-op if one is already running. */
|
|
29
|
+
async start() {
|
|
30
|
+
if (this.running)
|
|
31
|
+
return;
|
|
32
|
+
const session = this.sessionFactory();
|
|
33
|
+
session.connect();
|
|
34
|
+
this.session = session;
|
|
35
|
+
await this.postAsync(session, 'Profiler.enable');
|
|
36
|
+
await this.postAsync(session, 'Profiler.setSamplingInterval', {
|
|
37
|
+
interval: this.intervalMicros,
|
|
38
|
+
});
|
|
39
|
+
await this.postAsync(session, 'Profiler.start');
|
|
40
|
+
this.running = true;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Stop the profile and aggregate it into a flame tree. Returns `null` when no
|
|
44
|
+
* profile is running. Always disconnects the session, even on error.
|
|
45
|
+
*/
|
|
46
|
+
async stop() {
|
|
47
|
+
const session = this.session;
|
|
48
|
+
if (!this.running || session === null)
|
|
49
|
+
return null;
|
|
50
|
+
try {
|
|
51
|
+
const result = (await this.postAsync(session, 'Profiler.stop'));
|
|
52
|
+
return aggregateCpuProfile(result.profile);
|
|
53
|
+
}
|
|
54
|
+
finally {
|
|
55
|
+
this.running = false;
|
|
56
|
+
this.session = null;
|
|
57
|
+
try {
|
|
58
|
+
session.disconnect();
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
// A disconnect failure must never mask the captured profile or throw.
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
postAsync(session, method, params) {
|
|
66
|
+
return new Promise((resolve, reject) => {
|
|
67
|
+
const cb = (err, result) => {
|
|
68
|
+
if (err)
|
|
69
|
+
reject(err);
|
|
70
|
+
else
|
|
71
|
+
resolve(result);
|
|
72
|
+
};
|
|
73
|
+
if (params === undefined)
|
|
74
|
+
session.post(method, cb);
|
|
75
|
+
else
|
|
76
|
+
session.post(method, params, cb);
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Lazily require `node:inspector` and return a fresh Session. Kept out of the
|
|
82
|
+
* module's import graph so that importing this file (or the whole package) does
|
|
83
|
+
* NOT load the inspector binding — that only happens the first time a capture
|
|
84
|
+
* starts, i.e. only when profiling is enabled AND a request is sampled.
|
|
85
|
+
*/
|
|
86
|
+
export function defaultSessionFactory() {
|
|
87
|
+
// `createRequire` performs a SYNCHRONOUS require of the built-in without it
|
|
88
|
+
// appearing in this module's static import graph, so loading the package never
|
|
89
|
+
// pulls in the inspector binding. Built only on first capture.
|
|
90
|
+
const requireFn = createRequire(import.meta.url);
|
|
91
|
+
const inspector = requireFn('node:inspector');
|
|
92
|
+
return new inspector.Session();
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=cpu-profiler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cpu-profiler.js","sourceRoot":"","sources":["../../../src/profiling/cpu-profiler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The shape of `config/telescope_cpu_profiling.ts`. Mirrors `nestjs-telescope`'s
|
|
3
|
+
* `profiling-config.ts` (`ResolvedProfilingConfig`) — the knobs are framework-agnostic (they gate a
|
|
4
|
+
* `node:inspector` capture, not anything NestJS/AdonisJS-specific).
|
|
5
|
+
*/
|
|
6
|
+
export interface TelescopeCpuProfilingConfig {
|
|
7
|
+
/**
|
|
8
|
+
* Master switch. CPU profiling carries real overhead (a running V8 sampling
|
|
9
|
+
* profiler slows the process it profiles), so it is OFF by default — opt in
|
|
10
|
+
* explicitly. When `false` the middleware hook is a single boolean check and
|
|
11
|
+
* `node:inspector` is never required. Default `false`.
|
|
12
|
+
*/
|
|
13
|
+
enabled?: boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Fraction (0–1) of requests to automatically capture. `0` (the default) means
|
|
16
|
+
* captures only happen when armed via `POST <path>/api/profiles/arm`.
|
|
17
|
+
*/
|
|
18
|
+
sampleRate?: number;
|
|
19
|
+
/** Maximum concurrent captures. Keeps overhead bounded under load. Default 2. */
|
|
20
|
+
maxConcurrent?: number;
|
|
21
|
+
/** Captures shorter than this are discarded (not worth an entry). Default 5. */
|
|
22
|
+
minDurationMs?: number;
|
|
23
|
+
/** V8 sampling interval in microseconds (lower = finer-grained, more overhead). Default 1000. */
|
|
24
|
+
samplingIntervalMicros?: number;
|
|
25
|
+
}
|
|
26
|
+
/** The fully-resolved config the provider + `ProfilerService` act on (no optionals). */
|
|
27
|
+
export interface ResolvedTelescopeCpuProfilingConfig {
|
|
28
|
+
enabled: boolean;
|
|
29
|
+
sampleRate: number;
|
|
30
|
+
maxConcurrent: number;
|
|
31
|
+
minDurationMs: number;
|
|
32
|
+
samplingIntervalMicros: number;
|
|
33
|
+
}
|
|
34
|
+
/** Identity helper giving `config/telescope_cpu_profiling.ts` full type-checking. */
|
|
35
|
+
export declare function defineConfig(config: TelescopeCpuProfilingConfig): TelescopeCpuProfilingConfig;
|
|
36
|
+
/** Apply defaults to a (possibly partial) config. */
|
|
37
|
+
export declare function resolveConfig(config?: TelescopeCpuProfilingConfig): ResolvedTelescopeCpuProfilingConfig;
|
|
38
|
+
//# sourceMappingURL=define_config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"define_config.d.ts","sourceRoot":"","sources":["../../../src/profiling/define_config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,WAAW,2BAA2B;IAC1C;;;;;OAKG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iFAAiF;IACjF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gFAAgF;IAChF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iGAAiG;IACjG,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,wFAAwF;AACxF,MAAM,WAAW,mCAAmC;IAClD,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,sBAAsB,EAAE,MAAM,CAAC;CAChC;AAMD,qFAAqF;AACrF,wBAAgB,YAAY,CAAC,MAAM,EAAE,2BAA2B,GAAG,2BAA2B,CAE7F;AAED,qDAAqD;AACrD,wBAAgB,aAAa,CAC3B,MAAM,GAAE,2BAAgC,GACvC,mCAAmC,CAWrC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
const DEFAULT_MAX_CONCURRENT = 2;
|
|
2
|
+
const DEFAULT_MIN_DURATION_MS = 5;
|
|
3
|
+
const DEFAULT_SAMPLING_INTERVAL_MICROS = 1000;
|
|
4
|
+
/** Identity helper giving `config/telescope_cpu_profiling.ts` full type-checking. */
|
|
5
|
+
export function defineConfig(config) {
|
|
6
|
+
return config;
|
|
7
|
+
}
|
|
8
|
+
/** Apply defaults to a (possibly partial) config. */
|
|
9
|
+
export function resolveConfig(config = {}) {
|
|
10
|
+
return {
|
|
11
|
+
enabled: config.enabled ?? false,
|
|
12
|
+
sampleRate: clamp01(config.sampleRate ?? 0),
|
|
13
|
+
maxConcurrent: Math.max(1, Math.floor(config.maxConcurrent ?? DEFAULT_MAX_CONCURRENT)),
|
|
14
|
+
minDurationMs: Math.max(0, config.minDurationMs ?? DEFAULT_MIN_DURATION_MS),
|
|
15
|
+
samplingIntervalMicros: Math.max(100, Math.floor(config.samplingIntervalMicros ?? DEFAULT_SAMPLING_INTERVAL_MICROS)),
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
function clamp01(value) {
|
|
19
|
+
if (!Number.isFinite(value))
|
|
20
|
+
return 0;
|
|
21
|
+
return Math.min(1, Math.max(0, value));
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=define_config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"define_config.js","sourceRoot":"","sources":["../../../src/profiling/define_config.ts"],"names":[],"mappings":"AAmCA,MAAM,sBAAsB,GAAG,CAAC,CAAC;AACjC,MAAM,uBAAuB,GAAG,CAAC,CAAC;AAClC,MAAM,gCAAgC,GAAG,IAAI,CAAC;AAE9C,qFAAqF;AACrF,MAAM,UAAU,YAAY,CAAC,MAAmC;IAC9D,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,qDAAqD;AACrD,MAAM,UAAU,aAAa,CAC3B,SAAsC,EAAE;IAExC,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,KAAK;QAChC,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;QAC3C,aAAa,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,IAAI,sBAAsB,CAAC,CAAC;QACtF,aAAa,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,aAAa,IAAI,uBAAuB,CAAC;QAC3E,sBAAsB,EAAE,IAAI,CAAC,GAAG,CAC9B,GAAG,EACH,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,sBAAsB,IAAI,gCAAgC,CAAC,CAC9E;KACF,CAAC;AACJ,CAAC;AAED,SAAS,OAAO,CAAC,KAAa;IAC5B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACtC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;AACzC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** Keep in sync with this package's `version` in package.json. */
|
|
2
|
+
export declare const VERSION = "0.7.0";
|
|
3
|
+
export { defineConfig, resolveConfig } from './define_config.js';
|
|
4
|
+
export type { ResolvedTelescopeCpuProfilingConfig, TelescopeCpuProfilingConfig, } from './define_config.js';
|
|
5
|
+
export { CPU_PROFILE_ENTRY_TYPE, ProfilerService, } from './profiler_service.js';
|
|
6
|
+
export type { ProfileHandle, ProfilerLike, ProfilerServiceDeps, ProfilerStatus, } from './profiler_service.js';
|
|
7
|
+
export { CpuProfiler, defaultSessionFactory } from './cpu-profiler.js';
|
|
8
|
+
export type { CpuProfilerOptions, CpuProfilerResult, InspectorSessionLike, SessionFactory, } from './cpu-profiler.js';
|
|
9
|
+
export { aggregateCpuProfile } from './aggregate-profile.js';
|
|
10
|
+
export type { CpuProfileContent, FlameNode, HotFrame, V8CpuProfile, V8ProfileNode, } from './types.js';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/profiling/index.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,eAAO,MAAM,OAAO,UAAU,CAAC;AAE/B,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACjE,YAAY,EACV,mCAAmC,EACnC,2BAA2B,GAC5B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,sBAAsB,EACtB,eAAe,GAChB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,aAAa,EACb,YAAY,EACZ,mBAAmB,EACnB,cAAc,GACf,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AACvE,YAAY,EACV,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,cAAc,GACf,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,YAAY,EACV,iBAAiB,EACjB,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,aAAa,GACd,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** Keep in sync with this package's `version` in package.json. */
|
|
2
|
+
export const VERSION = '0.7.0';
|
|
3
|
+
export { defineConfig, resolveConfig } from './define_config.js';
|
|
4
|
+
export { CPU_PROFILE_ENTRY_TYPE, ProfilerService, } from './profiler_service.js';
|
|
5
|
+
export { CpuProfiler, defaultSessionFactory } from './cpu-profiler.js';
|
|
6
|
+
export { aggregateCpuProfile } from './aggregate-profile.js';
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/profiling/index.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC;AAE/B,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAMjE,OAAO,EACL,sBAAsB,EACtB,eAAe,GAChB,MAAM,uBAAuB,CAAC;AAQ/B,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAQvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC"}
|