@wizeworks/lens-node 0.3.0-alpha.3 → 0.3.0-alpha.4
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/dist/adapters/elasticsearch.d.ts +21 -0
- package/dist/adapters/elasticsearch.d.ts.map +1 -0
- package/dist/adapters/elasticsearch.js +93 -0
- package/dist/adapters/elasticsearch.js.map +1 -0
- package/dist/adapters/ioredis.d.ts +4 -0
- package/dist/adapters/ioredis.d.ts.map +1 -0
- package/dist/adapters/ioredis.js +60 -0
- package/dist/adapters/ioredis.js.map +1 -0
- package/dist/adapters/mongodb-shape.d.ts +16 -0
- package/dist/adapters/mongodb-shape.d.ts.map +1 -0
- package/dist/adapters/mongodb-shape.js +81 -0
- package/dist/adapters/mongodb-shape.js.map +1 -0
- package/dist/adapters/mongodb.d.ts +4 -0
- package/dist/adapters/mongodb.d.ts.map +1 -0
- package/dist/adapters/mongodb.js +95 -0
- package/dist/adapters/mongodb.js.map +1 -0
- package/dist/adapters/nosql.d.ts +14 -0
- package/dist/adapters/nosql.d.ts.map +1 -0
- package/dist/adapters/nosql.js +61 -0
- package/dist/adapters/nosql.js.map +1 -0
- package/dist/adapters/redis-shape.d.ts +31 -0
- package/dist/adapters/redis-shape.d.ts.map +1 -0
- package/dist/adapters/redis-shape.js +80 -0
- package/dist/adapters/redis-shape.js.map +1 -0
- package/dist/adapters/redis.d.ts +4 -0
- package/dist/adapters/redis.d.ts.map +1 -0
- package/dist/adapters/redis.js +93 -0
- package/dist/adapters/redis.js.map +1 -0
- package/dist/adapters/registry.d.ts +2 -0
- package/dist/adapters/registry.d.ts.map +1 -1
- package/dist/adapters/registry.js +2 -0
- package/dist/adapters/registry.js.map +1 -1
- package/dist/api.d.ts +5 -1
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +19 -7
- package/dist/api.js.map +1 -1
- package/dist/auto/config.d.ts +14 -0
- package/dist/auto/config.d.ts.map +1 -0
- package/dist/auto/config.js +51 -0
- package/dist/auto/config.js.map +1 -0
- package/dist/auto/esm-loader.d.ts +10 -0
- package/dist/auto/esm-loader.d.ts.map +1 -0
- package/dist/auto/esm-loader.js +10 -0
- package/dist/auto/esm-loader.js.map +1 -0
- package/dist/auto/esm-source.d.ts +15 -0
- package/dist/auto/esm-source.d.ts.map +1 -0
- package/dist/auto/esm-source.js +23 -0
- package/dist/auto/esm-source.js.map +1 -0
- package/dist/auto/frameworks.d.ts +3 -0
- package/dist/auto/frameworks.d.ts.map +1 -0
- package/dist/auto/frameworks.js +112 -0
- package/dist/auto/frameworks.js.map +1 -0
- package/dist/auto/handle.d.ts +7 -0
- package/dist/auto/handle.d.ts.map +1 -0
- package/dist/auto/handle.js +47 -0
- package/dist/auto/handle.js.map +1 -0
- package/dist/auto/hono.d.ts +3 -0
- package/dist/auto/hono.d.ts.map +1 -0
- package/dist/auto/hono.js +43 -0
- package/dist/auto/hono.js.map +1 -0
- package/dist/auto/http.d.ts +18 -0
- package/dist/auto/http.d.ts.map +1 -0
- package/dist/auto/http.js +77 -0
- package/dist/auto/http.js.map +1 -0
- package/dist/auto/install.d.ts +5 -0
- package/dist/auto/install.d.ts.map +1 -0
- package/dist/auto/install.js +26 -0
- package/dist/auto/install.js.map +1 -0
- package/dist/auto/libraries.d.ts +3 -0
- package/dist/auto/libraries.d.ts.map +1 -0
- package/dist/auto/libraries.js +108 -0
- package/dist/auto/libraries.js.map +1 -0
- package/dist/auto/module-hooks.d.ts +14 -0
- package/dist/auto/module-hooks.d.ts.map +1 -0
- package/dist/auto/module-hooks.js +90 -0
- package/dist/auto/module-hooks.js.map +1 -0
- package/dist/auto/nest.d.ts +7 -0
- package/dist/auto/nest.d.ts.map +1 -0
- package/dist/auto/nest.js +26 -0
- package/dist/auto/nest.js.map +1 -0
- package/dist/auto/owner.d.ts +19 -0
- package/dist/auto/owner.d.ts.map +1 -0
- package/dist/auto/owner.js +52 -0
- package/dist/auto/owner.js.map +1 -0
- package/dist/auto/prisma.d.ts +3 -0
- package/dist/auto/prisma.d.ts.map +1 -0
- package/dist/auto/prisma.js +55 -0
- package/dist/auto/prisma.js.map +1 -0
- package/dist/auto/sqlite.d.ts +3 -0
- package/dist/auto/sqlite.d.ts.map +1 -0
- package/dist/auto/sqlite.js +31 -0
- package/dist/auto/sqlite.js.map +1 -0
- package/dist/auto/state.d.ts +14 -0
- package/dist/auto/state.d.ts.map +1 -0
- package/dist/auto/state.js +16 -0
- package/dist/auto/state.js.map +1 -0
- package/dist/auto.d.ts +2 -0
- package/dist/auto.d.ts.map +1 -0
- package/dist/auto.js +4 -0
- package/dist/auto.js.map +1 -0
- package/dist/capture.d.ts +3 -1
- package/dist/capture.d.ts.map +1 -1
- package/dist/capture.js +1 -1
- package/dist/capture.js.map +1 -1
- package/dist/client-attributes.d.ts +19 -0
- package/dist/client-attributes.d.ts.map +1 -0
- package/dist/client-attributes.js +56 -0
- package/dist/client-attributes.js.map +1 -0
- package/dist/db.js +1 -1
- package/dist/db.js.map +1 -1
- package/dist/frameworks/hono.d.ts +16 -0
- package/dist/frameworks/hono.d.ts.map +1 -1
- package/dist/frameworks/hono.js +1 -1
- package/dist/frameworks/hono.js.map +1 -1
- package/dist/frameworks/koa.d.ts +2 -0
- package/dist/frameworks/koa.d.ts.map +1 -1
- package/dist/frameworks/koa.js +1 -1
- package/dist/frameworks/koa.js.map +1 -1
- package/dist/frameworks/nest-errors.d.ts +10 -0
- package/dist/frameworks/nest-errors.d.ts.map +1 -0
- package/dist/frameworks/nest-errors.js +75 -0
- package/dist/frameworks/nest-errors.js.map +1 -0
- package/dist/frameworks/nest-route.d.ts +31 -0
- package/dist/frameworks/nest-route.d.ts.map +1 -0
- package/dist/frameworks/nest-route.js +58 -0
- package/dist/frameworks/nest-route.js.map +1 -0
- package/dist/frameworks/nest.d.ts +16 -0
- package/dist/frameworks/nest.d.ts.map +1 -0
- package/dist/frameworks/nest.js +73 -0
- package/dist/frameworks/nest.js.map +1 -0
- package/dist/frameworks/node-server.d.ts +3 -0
- package/dist/frameworks/node-server.d.ts.map +1 -1
- package/dist/frameworks/node-server.js +1 -1
- package/dist/frameworks/node-server.js.map +1 -1
- package/dist/graphql/document.d.ts +13 -0
- package/dist/graphql/document.d.ts.map +1 -0
- package/dist/graphql/document.js +62 -0
- package/dist/graphql/document.js.map +1 -0
- package/dist/graphql/index.d.ts +11 -0
- package/dist/graphql/index.d.ts.map +1 -0
- package/dist/graphql/index.js +83 -0
- package/dist/graphql/index.js.map +1 -0
- package/dist/graphql/operation.d.ts +37 -0
- package/dist/graphql/operation.d.ts.map +1 -0
- package/dist/graphql/operation.js +58 -0
- package/dist/graphql/operation.js.map +1 -0
- package/dist/graphql/resolvers.d.ts +5 -0
- package/dist/graphql/resolvers.d.ts.map +1 -0
- package/dist/graphql/resolvers.js +79 -0
- package/dist/graphql/resolvers.js.map +1 -0
- package/dist/graphql/shared.d.ts +14 -0
- package/dist/graphql/shared.d.ts.map +1 -0
- package/dist/graphql/shared.js +21 -0
- package/dist/graphql/shared.js.map +1 -0
- package/dist/http-client.d.ts +8 -0
- package/dist/http-client.d.ts.map +1 -0
- package/dist/http-client.js +132 -0
- package/dist/http-client.js.map +1 -0
- package/dist/hub-connect.d.ts +2 -0
- package/dist/hub-connect.d.ts.map +1 -1
- package/dist/hub-connect.js +3 -1
- package/dist/hub-connect.js.map +1 -1
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -1
- package/dist/info.d.ts +2 -0
- package/dist/info.d.ts.map +1 -1
- package/dist/info.js +1 -1
- package/dist/info.js.map +1 -1
- package/dist/kit.d.ts +3 -1
- package/dist/kit.d.ts.map +1 -1
- package/dist/kit.js +1 -0
- package/dist/kit.js.map +1 -1
- package/dist/logger.d.ts +4 -4
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +11 -7
- package/dist/logger.js.map +1 -1
- package/dist/logs/bunyan.d.ts +1 -1
- package/dist/logs/bunyan.d.ts.map +1 -1
- package/dist/logs/bunyan.js +2 -3
- package/dist/logs/bunyan.js.map +1 -1
- package/dist/logs/consola.d.ts +1 -1
- package/dist/logs/consola.d.ts.map +1 -1
- package/dist/logs/consola.js +1 -1
- package/dist/logs/consola.js.map +1 -1
- package/dist/logs/console.d.ts +1 -1
- package/dist/logs/console.d.ts.map +1 -1
- package/dist/logs/console.js +5 -3
- package/dist/logs/console.js.map +1 -1
- package/dist/logs/otel.d.ts.map +1 -1
- package/dist/logs/otel.js +1 -3
- package/dist/logs/otel.js.map +1 -1
- package/dist/logs/pino.d.ts +1 -1
- package/dist/logs/pino.d.ts.map +1 -1
- package/dist/logs/pino.js +2 -3
- package/dist/logs/pino.js.map +1 -1
- package/dist/logs/winston.d.ts +1 -1
- package/dist/logs/winston.d.ts.map +1 -1
- package/dist/logs/winston.js +2 -3
- package/dist/logs/winston.js.map +1 -1
- package/dist/loose-logs.d.ts +13 -0
- package/dist/loose-logs.d.ts.map +1 -0
- package/dist/loose-logs.js +21 -0
- package/dist/loose-logs.js.map +1 -0
- package/dist/mcp-find.d.ts.map +1 -1
- package/dist/mcp-find.js +40 -8
- package/dist/mcp-find.js.map +1 -1
- package/dist/mcp-memory.d.ts +7 -0
- package/dist/mcp-memory.d.ts.map +1 -0
- package/dist/mcp-memory.js +10 -0
- package/dist/mcp-memory.js.map +1 -0
- package/dist/mcp-overview.d.ts +5 -0
- package/dist/mcp-overview.d.ts.map +1 -0
- package/dist/mcp-overview.js +71 -0
- package/dist/mcp-overview.js.map +1 -0
- package/dist/mcp-page.d.ts +28 -0
- package/dist/mcp-page.d.ts.map +1 -0
- package/dist/mcp-page.js +77 -0
- package/dist/mcp-page.js.map +1 -0
- package/dist/mcp-problems.d.ts +5 -0
- package/dist/mcp-problems.d.ts.map +1 -0
- package/dist/mcp-problems.js +56 -0
- package/dist/mcp-problems.js.map +1 -0
- package/dist/mcp-projects.d.ts.map +1 -1
- package/dist/mcp-projects.js +7 -2
- package/dist/mcp-projects.js.map +1 -1
- package/dist/mcp-search.d.ts.map +1 -1
- package/dist/mcp-search.js +9 -5
- package/dist/mcp-search.js.map +1 -1
- package/dist/mcp-shared.d.ts +37 -1
- package/dist/mcp-shared.d.ts.map +1 -1
- package/dist/mcp-shared.js +3 -0
- package/dist/mcp-shared.js.map +1 -1
- package/dist/mcp-store.d.ts +2 -2
- package/dist/mcp-store.d.ts.map +1 -1
- package/dist/mcp-store.js +6 -5
- package/dist/mcp-store.js.map +1 -1
- package/dist/mcp-tags.d.ts +8 -0
- package/dist/mcp-tags.d.ts.map +1 -0
- package/dist/mcp-tags.js +22 -0
- package/dist/mcp-tags.js.map +1 -0
- package/dist/mcp-traffic.d.ts +5 -0
- package/dist/mcp-traffic.d.ts.map +1 -0
- package/dist/mcp-traffic.js +87 -0
- package/dist/mcp-traffic.js.map +1 -0
- package/dist/mcp.d.ts +4 -1
- package/dist/mcp.d.ts.map +1 -1
- package/dist/mcp.js +14 -3
- package/dist/mcp.js.map +1 -1
- package/dist/messaging/bullmq.d.ts +4 -0
- package/dist/messaging/bullmq.d.ts.map +1 -0
- package/dist/messaging/bullmq.js +137 -0
- package/dist/messaging/bullmq.js.map +1 -0
- package/dist/messaging/shared.d.ts +10 -4
- package/dist/messaging/shared.d.ts.map +1 -1
- package/dist/messaging/shared.js +13 -4
- package/dist/messaging/shared.js.map +1 -1
- package/dist/messaging/sqs-message.d.ts +35 -0
- package/dist/messaging/sqs-message.d.ts.map +1 -0
- package/dist/messaging/sqs-message.js +66 -0
- package/dist/messaging/sqs-message.js.map +1 -0
- package/dist/messaging/sqs.d.ts +4 -0
- package/dist/messaging/sqs.d.ts.map +1 -0
- package/dist/messaging/sqs.js +104 -0
- package/dist/messaging/sqs.js.map +1 -0
- package/dist/processor.d.ts +2 -1
- package/dist/processor.d.ts.map +1 -1
- package/dist/processor.js +8 -3
- package/dist/processor.js.map +1 -1
- package/dist/request-capture.d.ts.map +1 -1
- package/dist/request-capture.js +2 -1
- package/dist/request-capture.js.map +1 -1
- package/dist/request-naming.d.ts +8 -0
- package/dist/request-naming.d.ts.map +1 -0
- package/dist/request-naming.js +29 -0
- package/dist/request-naming.js.map +1 -0
- package/dist/sampling.d.ts.map +1 -1
- package/dist/sampling.js +2 -2
- package/dist/sampling.js.map +1 -1
- package/dist/search-api.d.ts +4 -3
- package/dist/search-api.d.ts.map +1 -1
- package/dist/search-api.js +8 -7
- package/dist/search-api.js.map +1 -1
- package/dist/sourcemaps.d.ts +15 -0
- package/dist/sourcemaps.d.ts.map +1 -0
- package/dist/sourcemaps.js +68 -0
- package/dist/sourcemaps.js.map +1 -0
- package/dist/spans.d.ts +3 -0
- package/dist/spans.d.ts.map +1 -1
- package/dist/spans.js +9 -1
- package/dist/spans.js.map +1 -1
- package/dist/store-entries.d.ts +34 -0
- package/dist/store-entries.d.ts.map +1 -0
- package/dist/store-entries.js +70 -0
- package/dist/store-entries.js.map +1 -0
- package/dist/store.d.ts +4 -1
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +19 -22
- package/dist/store.js.map +1 -1
- package/dist/tags-api.d.ts +9 -0
- package/dist/tags-api.d.ts.map +1 -0
- package/dist/tags-api.js +16 -0
- package/dist/tags-api.js.map +1 -0
- package/dist/tracing.d.ts +6 -0
- package/dist/tracing.d.ts.map +1 -1
- package/dist/tracing.js +11 -7
- package/dist/tracing.js.map +1 -1
- package/dist/types.d.ts +16 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/ui.d.ts.map +1 -1
- package/dist/ui.js +3 -2
- package/dist/ui.js.map +1 -1
- package/dist/wizelens.d.ts +3 -1
- package/dist/wizelens.d.ts.map +1 -1
- package/dist/wizelens.js +28 -12
- package/dist/wizelens.js.map +1 -1
- package/package.json +14 -4
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { isLooseTraceId, newLooseTraceId, LOOSE_WINDOW_MS } from "@wizeworks/lens-core";
|
|
2
|
+
const newEntry = (traceId, startMs) => ({ traceId, spans: new Map(), logs: [], remotes: new Set(), sessions: new Set(), startMs });
|
|
3
|
+
/** Traces and loose batches (lines outside a request), each with its own cap, so neither pushes the other out. Oldest first. */
|
|
4
|
+
export class EntryMap {
|
|
5
|
+
maxTraces;
|
|
6
|
+
maxLoose;
|
|
7
|
+
#traces = new Map();
|
|
8
|
+
#loose = new Map();
|
|
9
|
+
constructor(maxTraces, maxLoose) {
|
|
10
|
+
this.maxTraces = maxTraces;
|
|
11
|
+
this.maxLoose = maxLoose;
|
|
12
|
+
}
|
|
13
|
+
/** Request traces only, as the dashboard counts them. */
|
|
14
|
+
get size() {
|
|
15
|
+
return this.#traces.size;
|
|
16
|
+
}
|
|
17
|
+
#mapOf(traceId) {
|
|
18
|
+
return isLooseTraceId(traceId) ? this.#loose : this.#traces;
|
|
19
|
+
}
|
|
20
|
+
get(traceId) {
|
|
21
|
+
return this.#mapOf(traceId).get(traceId);
|
|
22
|
+
}
|
|
23
|
+
/** The entry, made when missing; the oldest of its kind goes when its kind is over its cap. */
|
|
24
|
+
touch(traceId, startMs) {
|
|
25
|
+
const map = this.#mapOf(traceId);
|
|
26
|
+
let entry = map.get(traceId);
|
|
27
|
+
if (!entry) {
|
|
28
|
+
map.set(traceId, (entry = newEntry(traceId, startMs)));
|
|
29
|
+
const cap = map === this.#loose ? this.maxLoose : this.maxTraces;
|
|
30
|
+
while (map.size > cap)
|
|
31
|
+
map.delete(map.keys().next().value);
|
|
32
|
+
}
|
|
33
|
+
else if (startMs < entry.startMs)
|
|
34
|
+
entry.startMs = startMs;
|
|
35
|
+
return entry;
|
|
36
|
+
}
|
|
37
|
+
delete(traceId) {
|
|
38
|
+
this.#mapOf(traceId).delete(traceId);
|
|
39
|
+
}
|
|
40
|
+
/** Every entry: traces, then loose batches. */
|
|
41
|
+
*values() {
|
|
42
|
+
yield* this.#traces.values();
|
|
43
|
+
yield* this.#loose.values();
|
|
44
|
+
}
|
|
45
|
+
clear() {
|
|
46
|
+
this.#traces.clear();
|
|
47
|
+
this.#loose.clear();
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/** Picks the loose trace id for the next line outside a request: a new batch per 5-minute window, or when the batch is full. */
|
|
51
|
+
export class LooseBatcher {
|
|
52
|
+
maxLines;
|
|
53
|
+
#id = "";
|
|
54
|
+
#window = -1;
|
|
55
|
+
#count = 0;
|
|
56
|
+
constructor(maxLines) {
|
|
57
|
+
this.maxLines = maxLines;
|
|
58
|
+
}
|
|
59
|
+
idFor(timeMs) {
|
|
60
|
+
const window = Math.floor(timeMs / LOOSE_WINDOW_MS);
|
|
61
|
+
if (!this.#id || window !== this.#window || this.#count >= this.maxLines) {
|
|
62
|
+
this.#id = newLooseTraceId();
|
|
63
|
+
this.#window = window;
|
|
64
|
+
this.#count = 0;
|
|
65
|
+
}
|
|
66
|
+
this.#count++;
|
|
67
|
+
return this.#id;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=store-entries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store-entries.js","sourceRoot":"","sources":["../src/store-entries.ts"],"names":[],"mappings":"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"}
|
package/dist/store.d.ts
CHANGED
|
@@ -43,6 +43,8 @@ export declare class TraceStore {
|
|
|
43
43
|
/** `root`: the span starts this service's part of the trace. Sampling decides when a root ends. */
|
|
44
44
|
addSpan(span: Span, root?: boolean): void;
|
|
45
45
|
addLog(traceId: string, log: LogRecord): void;
|
|
46
|
+
/** A line written outside a request: into the current loose batch, never sampled with traces. Returns its trace id. */
|
|
47
|
+
addLooseLog(log: LogRecord): string;
|
|
46
48
|
addRemote(traceId: string, endpoint: string): void;
|
|
47
49
|
/** Load traces from disk, oldest first. Does not mark them dirty. */
|
|
48
50
|
load(traces: Iterable<StoredTrace>): void;
|
|
@@ -51,8 +53,9 @@ export declare class TraceStore {
|
|
|
51
53
|
/** Drop traces older than maxAgeMs. Returns how many were dropped. */
|
|
52
54
|
pruneByAge(): number;
|
|
53
55
|
get(traceId: string): Trace | undefined;
|
|
54
|
-
/** All traces, newest first. With `session`, only traces that have a browser span from that tab. */
|
|
56
|
+
/** All traces and loose batches (lines outside a request), newest first. With `session`, only traces that have a browser span from that tab. */
|
|
55
57
|
all(session?: string): Trace[];
|
|
58
|
+
/** Trace summaries, newest first; loose batches are not traces, so they are left out. */
|
|
56
59
|
list(limit?: number, session?: string): TraceSummary[];
|
|
57
60
|
clear(): void;
|
|
58
61
|
}
|
package/dist/store.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoD,KAAK,SAAS,EAAE,KAAK,YAAY,EAAE,KAAK,IAAI,EAAE,KAAK,KAAK,EAAE,KAAK,YAAY,EAAa,MAAM,sBAAsB,CAAC;AAChL,OAAO,KAAK,EAAQ,YAAY,EAAW,MAAM,eAAe,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAIlE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAElE,MAAM,WAAW,iBAAiB;IAChC,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8CAA8C;IAC9C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,6CAA6C;IAC7C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,wBAAwB;IACxB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,kDAAkD;IAClD,OAAO,CAAC,EAAE,YAAY,CAAC;CACxB;AAED,+CAA+C;AAC/C,MAAM,MAAM,UAAU,GAClB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,IAAI,CAAA;CAAE,GAC5B;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,SAAS,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAQ1D,wFAAwF;AACxF,qBAAa,UAAU;;IAYrB,YAAY,OAAO,GAAE,iBAAsB,EAS1C;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,qCAAqC;IACrC,IAAI,QAAQ,IAAI,YAAY,GAAG,IAAI,CAElC;IAED,IAAI,QAAQ,IAAI,MAAM,CAErB;IAMD,8EAA8E;IAC9E,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,GAAG,MAAM,IAAI,CAGvD;IAgBD,mGAAmG;IACnG,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,UAA6B,GAAG,IAAI,CAE3D;IAED,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,GAAG,IAAI,CAE5C;IAED,uHAAuH;IACvH,WAAW,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,CAIlC;IAED,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAEjD;IAyCD,qEAAqE;IACrE,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,IAAI,CAWxC;IAED,4CAA4C;IAC5C,YAAY,IAAI,YAAY,EAAE,CAe7B;IAED,sEAAsE;IACtE,UAAU,IAAI,MAAM,CAWnB;IAED,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAGtC;IAED,gJAAgJ;IAChJ,GAAG,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,KAAK,EAAE,CAS7B;IAED,yFAAyF;IACzF,IAAI,CAAC,KAAK,SAAK,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,YAAY,EAAE,CAEjD;IAED,KAAK,IAAI,IAAI,CAGZ;CACF"}
|
package/dist/store.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import { ATTR_BROWSER_SESSION, buildTrace, toSummary } from "@wizeworks/lens-core";
|
|
1
|
+
import { ATTR_BROWSER_SESSION, buildTrace, isLooseTraceId, toSummary } from "@wizeworks/lens-core";
|
|
2
|
+
import { EntryMap, LooseBatcher } from "./store-entries.js";
|
|
2
3
|
/** In-memory ring buffer of traces, keyed by trace id. This is always the read path. */
|
|
3
4
|
export class TraceStore {
|
|
4
|
-
#entries
|
|
5
|
+
#entries;
|
|
6
|
+
#loose;
|
|
5
7
|
#dirty = new Map();
|
|
6
8
|
#maxTraces;
|
|
7
9
|
#maxAgeMs;
|
|
@@ -17,6 +19,8 @@ export class TraceStore {
|
|
|
17
19
|
this.#maxLogs = options.maxLogsPerTrace ?? 1000;
|
|
18
20
|
this.#now = options.now ?? Date.now;
|
|
19
21
|
this.#sampler = options.sampler;
|
|
22
|
+
this.#entries = new EntryMap(this.#maxTraces, Math.max(10, Math.floor(this.#maxTraces / 4)));
|
|
23
|
+
this.#loose = new LooseBatcher(this.#maxLogs);
|
|
20
24
|
}
|
|
21
25
|
get size() {
|
|
22
26
|
return this.#entries.size;
|
|
@@ -32,21 +36,7 @@ export class TraceStore {
|
|
|
32
36
|
return this.#maxAgeMs;
|
|
33
37
|
}
|
|
34
38
|
#entry(traceId, startMs) {
|
|
35
|
-
|
|
36
|
-
if (!entry) {
|
|
37
|
-
entry = { traceId, spans: new Map(), logs: [], remotes: new Set(), sessions: new Set(), startMs };
|
|
38
|
-
this.#entries.set(traceId, entry);
|
|
39
|
-
while (this.#entries.size > this.#maxTraces) {
|
|
40
|
-
const oldest = this.#entries.keys().next().value;
|
|
41
|
-
if (oldest === undefined)
|
|
42
|
-
break;
|
|
43
|
-
this.#entries.delete(oldest);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
else if (startMs < entry.startMs) {
|
|
47
|
-
entry.startMs = startMs;
|
|
48
|
-
}
|
|
49
|
-
return entry;
|
|
39
|
+
return this.#entries.touch(traceId, startMs);
|
|
50
40
|
}
|
|
51
41
|
/** Hear every new span, log, and remote. Returns the unsubscribe function. */
|
|
52
42
|
subscribe(listener) {
|
|
@@ -73,6 +63,12 @@ export class TraceStore {
|
|
|
73
63
|
addLog(traceId, log) {
|
|
74
64
|
this.#gate(traceId, this.#sampler?.log(traceId, log), () => this.#putLog(traceId, log));
|
|
75
65
|
}
|
|
66
|
+
/** A line written outside a request: into the current loose batch, never sampled with traces. Returns its trace id. */
|
|
67
|
+
addLooseLog(log) {
|
|
68
|
+
const traceId = this.#loose.idFor(log.timeMs);
|
|
69
|
+
this.#putLog(traceId, log);
|
|
70
|
+
return traceId;
|
|
71
|
+
}
|
|
76
72
|
addRemote(traceId, endpoint) {
|
|
77
73
|
this.#gate(traceId, this.#sampler?.remote(traceId, endpoint), () => this.#putRemote(traceId, endpoint));
|
|
78
74
|
}
|
|
@@ -157,10 +153,10 @@ export class TraceStore {
|
|
|
157
153
|
pruneByAge() {
|
|
158
154
|
const cutoff = this.#now() - this.#maxAgeMs;
|
|
159
155
|
let dropped = 0;
|
|
160
|
-
for (const
|
|
156
|
+
for (const entry of [...this.#entries.values()]) {
|
|
161
157
|
if (entry.startMs < cutoff) {
|
|
162
|
-
this.#entries.delete(
|
|
163
|
-
this.#dirty.delete(
|
|
158
|
+
this.#entries.delete(entry.traceId);
|
|
159
|
+
this.#dirty.delete(entry.traceId);
|
|
164
160
|
dropped++;
|
|
165
161
|
}
|
|
166
162
|
}
|
|
@@ -170,7 +166,7 @@ export class TraceStore {
|
|
|
170
166
|
const entry = this.#entries.get(traceId);
|
|
171
167
|
return entry ? buildTrace(entry.traceId, [...entry.spans.values()], entry.logs, entry.remotes) : undefined;
|
|
172
168
|
}
|
|
173
|
-
/** All traces, newest first. With `session`, only traces that have a browser span from that tab. */
|
|
169
|
+
/** All traces and loose batches (lines outside a request), newest first. With `session`, only traces that have a browser span from that tab. */
|
|
174
170
|
all(session) {
|
|
175
171
|
this.pruneByAge();
|
|
176
172
|
const traces = [];
|
|
@@ -183,8 +179,9 @@ export class TraceStore {
|
|
|
183
179
|
}
|
|
184
180
|
return traces.sort((a, b) => b.startMs - a.startMs);
|
|
185
181
|
}
|
|
182
|
+
/** Trace summaries, newest first; loose batches are not traces, so they are left out. */
|
|
186
183
|
list(limit = 50, session) {
|
|
187
|
-
return this.all(session).slice(0, Math.max(0, limit)).map(toSummary);
|
|
184
|
+
return this.all(session).filter((t) => !isLooseTraceId(t.traceId)).slice(0, Math.max(0, limit)).map(toSummary);
|
|
188
185
|
}
|
|
189
186
|
clear() {
|
|
190
187
|
this.#entries.clear();
|
package/dist/store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,UAAU,EAA+E,SAAS,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,UAAU,EAAE,cAAc,EAA+E,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAIhL,OAAO,EAAc,QAAQ,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AA+BxE,wFAAwF;AACxF,MAAM,OAAO,UAAU;IACZ,QAAQ,CAAW;IACnB,MAAM,CAAe;IACrB,MAAM,GAAG,IAAI,GAAG,EAAiB,CAAC;IAClC,UAAU,CAAS;IACnB,SAAS,CAAS;IAClB,SAAS,CAAS;IAClB,QAAQ,CAAS;IACjB,IAAI,CAAe;IACnB,UAAU,GAAG,IAAI,GAAG,EAA2B,CAAC;IAChD,QAAQ,CAA2B;IAE5C,YAAY,OAAO,GAAsB,EAAE;QACzC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC;QACzD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,QAAQ,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QACtE,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,gBAAgB,IAAI,IAAI,CAAC;QAClD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,eAAe,IAAI,IAAI,CAAC;QAChD,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;QACpC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;QAChC,IAAI,CAAC,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7F,IAAI,CAAC,MAAM,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChD,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC5B,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,qCAAqC;IACrC,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,IAAI,CAAC;IACrC,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,MAAM,CAAC,OAAe,EAAE,OAAe;QACrC,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED,8EAA8E;IAC9E,SAAS,CAAC,QAAiC;QACzC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9B,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,CAAa;QACjB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU;YAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC;IAED,UAAU,CAAC,OAAe;QACxB,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACjC,IAAI,CAAC,CAAC,EAAE,CAAC;YACP,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACzC,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;YAC5E,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC9B,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IAED,mGAAmG;IACnG,OAAO,CAAC,IAAU,EAAE,IAAI,GAAG,IAAI,CAAC,YAAY,KAAK,IAAI;QACnD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IACvF,CAAC;IAED,MAAM,CAAC,OAAe,EAAE,GAAc;QACpC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;IAC1F,CAAC;IAED,uHAAuH;IACvH,WAAW,CAAC,GAAc;QACxB,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC9C,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC3B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,SAAS,CAAC,OAAe,EAAE,QAAgB;QACzC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC1G,CAAC;IAED,iFAAiF;IACjF,KAAK,CAAC,OAAe,EAAE,OAA4B,EAAE,GAAe;QAClE,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM;YAAE,OAAO;QACjD,IAAI,OAAO,EAAE,IAAI;YAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QACxD,GAAG,EAAE,CAAC;IACR,CAAC;IAED,QAAQ,CAAC,OAAe,EAAE,IAAU;QAClC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK;YAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC7C,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI;YAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACpD,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO;YAAE,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,QAAQ,CAAC,IAAU;QACjB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACtD,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;YAAE,OAAO;QAChF,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACnC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;QACtD,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO;YAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACxE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrD,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACrC,CAAC;IAED,OAAO,CAAC,OAAe,EAAE,GAAc;QACrC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QAC/C,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC/C,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrB,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,UAAU,CAAC,OAAe,EAAE,QAAgB;QAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAChD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;YAAE,OAAO;QACxC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC5B,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC;QACxC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,qEAAqE;IACrE,IAAI,CAAC,MAA6B;QAChC,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;YACvB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;YAChD,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;gBACxB,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;gBAC7B,MAAM,OAAO,GAAG,CAAC,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;gBACnD,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO;oBAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC1E,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;YAC3B,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO;gBAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAED,4CAA4C;IAC5C,YAAY;QACV,MAAM,GAAG,GAAmB,EAAE,CAAC;QAC/B,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACvC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACzC,IAAI,CAAC,KAAK;gBAAE,SAAS,CAAC,iDAAiD;YACvE,MAAM,KAAK,GAAW,EAAE,CAAC;YACzB,KAAK,MAAM,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;gBACzB,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAC9B,IAAI,CAAC;oBAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACvB,CAAC;YACD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,QAAQ,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;YAC1F,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1F,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACpB,OAAO,GAAG,CAAC;IACb,CAAC;IAED,sEAAsE;IACtE,UAAU;QACR,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;QAC5C,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,KAAK,MAAM,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;YAChD,IAAI,KAAK,CAAC,OAAO,GAAG,MAAM,EAAE,CAAC;gBAC3B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBACpC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAClC,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,GAAG,CAAC,OAAe;QACjB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACzC,OAAO,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7G,CAAC;IAED,gJAAgJ;IAChJ,GAAG,CAAC,OAAgB;QAClB,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,MAAM,MAAM,GAAY,EAAE,CAAC;QAC3B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YAC3C,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YAChE,IAAI,OAAO,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC;gBAAE,SAAS;YACpE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAC/F,CAAC;QACD,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;IACtD,CAAC;IAED,yFAAyF;IACzF,IAAI,CAAC,KAAK,GAAG,EAAE,EAAE,OAAgB;QAC/B,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACjH,CAAC;IAED,KAAK;QACH,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;CACF"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ServerResponse } from "node:http";
|
|
2
|
+
import { type TagRule } from "@wizeworks/lens-core";
|
|
3
|
+
import type { TraceStore } from "./store.js";
|
|
4
|
+
import type { Req } from "./types.js";
|
|
5
|
+
/** `GET api/tags`. Rules live in code here, so the dashboard shows them without edit controls. */
|
|
6
|
+
export declare function sendTags(tags: readonly TagRule[], res: ServerResponse): void;
|
|
7
|
+
/** `POST api/tags/match` with `{ kind, items }`: each enabled rule runs as a search over these traces in memory. */
|
|
8
|
+
export declare function sendTagMatch(store: TraceStore, tags: readonly TagRule[], req: Req, res: ServerResponse, env?: string): Promise<void>;
|
|
9
|
+
//# sourceMappingURL=tags-api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tags-api.d.ts","sourceRoot":"","sources":["../src/tags-api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAsE,KAAK,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAExH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAItC,kGAAkG;AAClG,wBAAgB,QAAQ,CAAC,IAAI,EAAE,SAAS,OAAO,EAAE,EAAE,GAAG,EAAE,cAAc,GAAG,IAAI,CAE5E;AAED,oHAAoH;AACpH,wBAAsB,YAAY,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,OAAO,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAK1I"}
|
package/dist/tags-api.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { activeTags, matchTags, searchMemory, TAG_LIMITS, tagMatchRequestOf } from "@wizeworks/lens-core";
|
|
2
|
+
import { readJson, sendJson } from "./http-util.js";
|
|
3
|
+
// The in-app tags API (docs/TAGS-PLAN.md): the rules from the `tags` option, read-only, and which of them match a page of rows.
|
|
4
|
+
/** `GET api/tags`. Rules live in code here, so the dashboard shows them without edit controls. */
|
|
5
|
+
export function sendTags(tags, res) {
|
|
6
|
+
sendJson(res, 200, { tags, editable: false, max: TAG_LIMITS.rules });
|
|
7
|
+
}
|
|
8
|
+
/** `POST api/tags/match` with `{ kind, items }`: each enabled rule runs as a search over these traces in memory. */
|
|
9
|
+
export async function sendTagMatch(store, tags, req, res, env) {
|
|
10
|
+
const r = tagMatchRequestOf(await readJson(req).catch(() => null));
|
|
11
|
+
if (!r.ok)
|
|
12
|
+
return sendJson(res, 400, r);
|
|
13
|
+
const traces = store.all();
|
|
14
|
+
sendJson(res, 200, { matches: await matchTags((q) => searchMemory(traces, q), r.kind, r.items, activeTags(tags), env) });
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=tags-api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tags-api.js","sourceRoot":"","sources":["../src/tags-api.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAgB,MAAM,sBAAsB,CAAC;AACxH,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAIpD,gIAAgI;AAEhI,kGAAkG;AAClG,MAAM,UAAU,QAAQ,CAAC,IAAwB,EAAE,GAAmB;IACpE,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;AACvE,CAAC;AAED,oHAAoH;AACpH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,KAAiB,EAAE,IAAwB,EAAE,GAAQ,EAAE,GAAmB,EAAE,GAAY;IACzH,MAAM,CAAC,GAAG,iBAAiB,CAAC,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IACnE,IAAI,CAAC,CAAC,CAAC,EAAE;QAAE,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;IAC3B,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;AAC3H,CAAC"}
|
package/dist/tracing.d.ts
CHANGED
|
@@ -6,14 +6,20 @@ export interface Tracing {
|
|
|
6
6
|
provider: BasicTracerProvider;
|
|
7
7
|
tracer: Tracer;
|
|
8
8
|
undici: UndiciInstrumentation | undefined;
|
|
9
|
+
/** Stops the node:http client tracing, when it is on. */
|
|
10
|
+
stopHttp: (() => void) | undefined;
|
|
9
11
|
}
|
|
10
12
|
/** Install one ALS context manager and the W3C propagator. Apps that set their own keep them. */
|
|
11
13
|
export declare function installGlobals(): void;
|
|
12
14
|
export interface TracingOptions {
|
|
13
15
|
service: string;
|
|
14
16
|
version: string;
|
|
17
|
+
/** The app's version (`service.version`). */
|
|
18
|
+
release?: string;
|
|
15
19
|
redactKeys: readonly string[];
|
|
16
20
|
fetch: boolean;
|
|
21
|
+
/** Trace node:http and node:https client calls (axios, got, and the rest). */
|
|
22
|
+
http: boolean;
|
|
17
23
|
}
|
|
18
24
|
/** One tracer provider per WizeLens instance. Every finished span goes into the store. */
|
|
19
25
|
export declare function createTracing(store: TraceStore, o: TracingOptions, selfEndpoints: ReadonlySet<string>): Tracing;
|
package/dist/tracing.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracing.d.ts","sourceRoot":"","sources":["../src/tracing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAGvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAE9E,OAAO,EAAmB,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"tracing.d.ts","sourceRoot":"","sources":["../src/tracing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAGvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAE9E,OAAO,EAAmB,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAOrF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,WAAW,OAAO;IACtB,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,qBAAqB,GAAG,SAAS,CAAC;IAC1C,yDAAyD;IACzD,QAAQ,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;CACpC;AAID,iGAAiG;AACjG,wBAAgB,cAAc,IAAI,IAAI,CAKrC;AAgBD,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,6CAA6C;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,KAAK,EAAE,OAAO,CAAC;IACf,8EAA8E;IAC9E,IAAI,EAAE,OAAO,CAAC;CACf;AAED,0FAA0F;AAC1F,wBAAgB,aAAa,CAAC,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,OAAO,CAW/G"}
|
package/dist/tracing.js
CHANGED
|
@@ -5,6 +5,8 @@ import { UndiciInstrumentation } from "@opentelemetry/instrumentation-undici";
|
|
|
5
5
|
import { resourceFromAttributes } from "@opentelemetry/resources";
|
|
6
6
|
import { AlwaysOnSampler, BasicTracerProvider } from "@opentelemetry/sdk-trace-base";
|
|
7
7
|
import { HEADER_ENDPOINT, HEADER_HOP } from "@wizeworks/lens-core";
|
|
8
|
+
import { remoteNoter } from "./client-attributes.js";
|
|
9
|
+
import { instrumentHttp } from "./http-client.js";
|
|
8
10
|
import { hasRequestHeader, responseHeader } from "./http-util.js";
|
|
9
11
|
import { preciseProvider, preciseTracer } from "./precise.js";
|
|
10
12
|
import { StoreSpanProcessor } from "./processor.js";
|
|
@@ -17,15 +19,15 @@ export function installGlobals() {
|
|
|
17
19
|
context.setGlobalContextManager(new AsyncLocalStorageContextManager().enable());
|
|
18
20
|
propagation.setGlobalPropagator(new W3CTraceContextPropagator());
|
|
19
21
|
}
|
|
20
|
-
function instrumentFetch(provider,
|
|
22
|
+
function instrumentFetch(provider, onRemote) {
|
|
21
23
|
const undici = new UndiciInstrumentation({
|
|
22
24
|
requireParentforSpans: true,
|
|
23
25
|
// Federation calls carry X-WizeLens-Hop. Do not trace WizeLens talking to itself.
|
|
24
26
|
ignoreRequestHook: (request) => hasRequestHeader(request.headers, HEADER_HOP),
|
|
25
27
|
responseHook: (span, { response }) => {
|
|
26
28
|
const endpoint = responseHeader(response.headers, HEADER_ENDPOINT);
|
|
27
|
-
if (endpoint
|
|
28
|
-
|
|
29
|
+
if (endpoint)
|
|
30
|
+
onRemote(span.spanContext().traceId, endpoint);
|
|
29
31
|
},
|
|
30
32
|
});
|
|
31
33
|
undici.setTracerProvider(preciseProvider(provider));
|
|
@@ -34,12 +36,14 @@ function instrumentFetch(provider, store, selfEndpoints) {
|
|
|
34
36
|
/** One tracer provider per WizeLens instance. Every finished span goes into the store. */
|
|
35
37
|
export function createTracing(store, o, selfEndpoints) {
|
|
36
38
|
const provider = new BasicTracerProvider({
|
|
37
|
-
resource: resourceFromAttributes({ "service.name": o.service }),
|
|
39
|
+
resource: resourceFromAttributes({ "service.name": o.service, ...(o.release ? { "service.version": o.release } : {}) }),
|
|
38
40
|
sampler: new AlwaysOnSampler(),
|
|
39
|
-
spanProcessors: [new StoreSpanProcessor(store, o.service, o.redactKeys)],
|
|
41
|
+
spanProcessors: [new StoreSpanProcessor(store, o.service, o.redactKeys, o.release)],
|
|
40
42
|
});
|
|
41
43
|
const tracer = preciseTracer(provider.getTracer("@wizeworks/lens-node", o.version));
|
|
42
|
-
const
|
|
43
|
-
|
|
44
|
+
const onRemote = remoteNoter(store, selfEndpoints);
|
|
45
|
+
const undici = o.fetch ? instrumentFetch(provider, onRemote) : undefined;
|
|
46
|
+
const stopHttp = o.http ? instrumentHttp(tracer, onRemote) : undefined;
|
|
47
|
+
return { provider, tracer, undici, stopHttp };
|
|
44
48
|
}
|
|
45
49
|
//# sourceMappingURL=tracing.js.map
|
package/dist/tracing.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracing.js","sourceRoot":"","sources":["../src/tracing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAe,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAAE,+BAA+B,EAAE,MAAM,oCAAoC,CAAC;AACrF,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAC9E,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACrF,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"tracing.js","sourceRoot":"","sources":["../src/tracing.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import type { IncomingMessage, ServerResponse } from "node:http";
|
|
2
2
|
import type { Tracer } from "@opentelemetry/api";
|
|
3
|
-
import type { Trace } from "@wizeworks/lens-core";
|
|
3
|
+
import type { TagOptions, Trace } from "@wizeworks/lens-core";
|
|
4
|
+
import type { LogOptions } from "./loose-logs.js";
|
|
4
5
|
import type { SamplingOptions } from "./sampling.js";
|
|
6
|
+
import type { SourceMapOptions } from "./sourcemaps.js";
|
|
5
7
|
import type { TraceStore } from "./store.js";
|
|
6
8
|
export interface WizeLensOptions {
|
|
7
9
|
/** Service name shown in the dashboard, e.g. "orders-api". */
|
|
@@ -30,9 +32,11 @@ export interface WizeLensOptions {
|
|
|
30
32
|
uiDir?: string;
|
|
31
33
|
/** Capture outgoing fetch / undici calls. Default true. */
|
|
32
34
|
instrumentFetch?: boolean;
|
|
35
|
+
/** Capture outgoing `node:http` / `node:https` calls, so axios, got, node-fetch v2, and the AWS SDK are traced too. Default true. */
|
|
36
|
+
instrumentHttp?: boolean;
|
|
33
37
|
/** Database adapters also trace queries that run outside a request (startup, jobs). Default false. */
|
|
34
38
|
traceQueriesOutsideRequests?: boolean;
|
|
35
|
-
/** Copy `console.log`, `warn`, `error`, `info`, `debug`, and `trace` calls
|
|
39
|
+
/** Copy `console.log`, `warn`, `error`, `info`, `debug`, and `trace` calls into WizeLens (into their request trace, or outside one as loose lines). Default true. */
|
|
36
40
|
captureConsole?: boolean;
|
|
37
41
|
/** Keep runtime metrics (CPU, memory, heap, event loop, GC) and app metrics from `wizelensMetricExporter`. Default true. */
|
|
38
42
|
captureMetrics?: boolean;
|
|
@@ -52,12 +56,20 @@ export interface WizeLensOptions {
|
|
|
52
56
|
nPlusOneThreshold?: number;
|
|
53
57
|
/** The project this service belongs to, so a shared hub can group it. Default: the WIZELENS_PROJECT variable. */
|
|
54
58
|
project?: string;
|
|
59
|
+
/** The app's version, kept on every span as `service.version` for release markers, version compares, and Problems. Default: WIZELENS_RELEASE, else OTEL_SERVICE_VERSION, else npm_package_version. */
|
|
60
|
+
release?: string;
|
|
55
61
|
/** Also send everything to this local hub, for example "http://localhost:5960". Default: the WIZELENS_HUB variable. */
|
|
56
62
|
hub?: string;
|
|
57
63
|
/** Access token for the hub. Default: the WIZELENS_HUB_TOKEN variable. */
|
|
58
64
|
hubToken?: string;
|
|
59
65
|
/** Keep only part of the traces, for busy services. Default: all, or the WIZELENS_SAMPLE_RATE variable. */
|
|
60
66
|
sampling?: SamplingOptions;
|
|
67
|
+
/** Where browser stacks find their source maps: build folders and dev servers on this machine (default). False turns it off. */
|
|
68
|
+
sourceMaps?: SourceMapOptions | false;
|
|
69
|
+
/** Lines written outside a request (startup, jobs, timers): on or off, the lowest level, and a sample rate. Default: on, "info" and up, all. */
|
|
70
|
+
logs?: LogOptions;
|
|
71
|
+
/** Tag rules: `{ rules: [{ name: "checkout", query: "route:/checkout*", color: "green" }], disableBuiltIns: ["bot"] }`. A bad rule throws at startup. */
|
|
72
|
+
tags?: TagOptions;
|
|
61
73
|
}
|
|
62
74
|
export interface DbCallInfo {
|
|
63
75
|
/** OTel `db.system.name`, e.g. "sqlite", "postgresql", "mysql". */
|
|
@@ -76,6 +88,8 @@ export interface DbCallInfo {
|
|
|
76
88
|
outermost?: boolean;
|
|
77
89
|
/** Skip the span when no request (or other span) is active. Set by the database adapters. */
|
|
78
90
|
requireParent?: boolean;
|
|
91
|
+
/** More span attributes, for example `server.address`, `db.operation.batch.size`, or `wizelens.db.fingerprint`. */
|
|
92
|
+
attributes?: Record<string, string | number>;
|
|
79
93
|
}
|
|
80
94
|
export type LogFn = (message: string, attributes?: Record<string, unknown>) => void;
|
|
81
95
|
export interface WizeLensLogger {
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,WAAW,eAAe;IAC9B,8DAA8D;IAC9D,WAAW,EAAE,MAAM,CAAC;IACpB,iEAAiE;IACjE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yGAAyG;IACzG,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,iJAAiJ;IACjJ,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,uHAAuH;IACvH,OAAO,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC9B,gFAAgF;IAChF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uDAAuD;IACvD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4EAA4E;IAC5E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,2DAA2D;IAC3D,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,wEAAwE;IACxE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gDAAgD;IAChD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2DAA2D;IAC3D,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,sGAAsG;IACtG,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/ui.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAqBhD,+FAA+F;AAC/F,wBAAgB,YAAY,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAU7D;AAED,6FAA6F;AAC7F,wBAAsB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAqBhD,+FAA+F;AAC/F,wBAAgB,YAAY,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAU7D;AAED,6FAA6F;AAC7F,wBAAsB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBvG"}
|
package/dist/ui.js
CHANGED
|
@@ -48,10 +48,11 @@ export async function serveUi(uiDir, relPath, res) {
|
|
|
48
48
|
file = join(uiDir, "index.html");
|
|
49
49
|
try {
|
|
50
50
|
const body = await readFile(file);
|
|
51
|
-
|
|
51
|
+
// The page and its build id must always be fresh; the hashed files never change.
|
|
52
|
+
const fresh = file.endsWith("index.html") || file.endsWith("version.json");
|
|
52
53
|
res.writeHead(200, {
|
|
53
54
|
"Content-Type": TYPES[extname(file)] ?? "application/octet-stream",
|
|
54
|
-
"Cache-Control":
|
|
55
|
+
"Cache-Control": fresh ? "no-cache" : "public, max-age=31536000, immutable",
|
|
55
56
|
});
|
|
56
57
|
res.end(body);
|
|
57
58
|
}
|
package/dist/ui.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAEnE,MAAM,KAAK,GAA2B;IACpC,OAAO,EAAE,0BAA0B;IACnC,KAAK,EAAE,gCAAgC;IACvC,MAAM,EAAE,yBAAyB;IACjC,OAAO,EAAE,iCAAiC;IAC1C,MAAM,EAAE,eAAe;IACvB,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,cAAc;IACtB,QAAQ,EAAE,YAAY;IACtB,MAAM,EAAE,iCAAiC;CAC1C,CAAC;AAEF,MAAM,QAAQ,GAAG;;;4FAG2E,CAAC;AAE7F,+FAA+F;AAC/F,MAAM,UAAU,YAAY,CAAC,QAAiB;IAC5C,IAAI,QAAQ;QAAE,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5D,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC;QAC/D,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;QACxC,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,6FAA6F;AAC7F,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,KAAoB,EAAE,OAAe,EAAE,GAAmB;IACtF,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,KAAK,CAAC,OAAO,CAAE,EAAE,CAAC,CAAC;QACxD,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAClB,OAAO;IACT,CAAC;IACD,MAAM,KAAK,GAAG,SAAS,CAAC,kBAAkB,CAAC,OAAO,IAAI,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAC9F,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC9B,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,GAAG,CAAC,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;QACpD,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;QACzB,OAAO;IACT,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE;QAAE,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IAChF,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,
|
|
1
|
+
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"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"}
|
package/dist/wizelens.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { WizeLens, WizeLensOptions } from "./types.js";
|
|
2
2
|
export type { DbCallInfo, LogFn, WizeLens, WizeLensLogger, WizeLensOptions } from "./types.js";
|
|
3
|
-
/** Create the WizeLens add-on for one Node service. */
|
|
3
|
+
/** Create the WizeLens add-on for one Node service. When the auto install also runs, this instance wins. */
|
|
4
4
|
export declare function createWizeLens(options: WizeLensOptions): WizeLens;
|
|
5
|
+
/** Build an instance without telling the auto install. The auto install builds its own with this. */
|
|
6
|
+
export declare function buildWizeLens(options: WizeLensOptions): WizeLens;
|
|
5
7
|
//# sourceMappingURL=wizelens.d.ts.map
|
package/dist/wizelens.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wizelens.d.ts","sourceRoot":"","sources":["../src/wizelens.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wizelens.d.ts","sourceRoot":"","sources":["../src/wizelens.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAG5D,YAAY,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAwE/F,4GAA4G;AAC5G,wBAAgB,cAAc,CAAC,OAAO,EAAE,eAAe,GAAG,QAAQ,CAIjE;AAED,qGAAqG;AACrG,wBAAgB,aAAa,CAAC,OAAO,EAAE,eAAe,GAAG,QAAQ,CAuChE"}
|
package/dist/wizelens.js
CHANGED
|
@@ -1,22 +1,26 @@
|
|
|
1
1
|
import { join } from "node:path";
|
|
2
2
|
import { W3CTraceContextPropagator } from "@opentelemetry/core";
|
|
3
|
-
import { DEFAULT_BASE_PATH, DEFAULT_REDACT_KEYS } from "@wizeworks/lens-core";
|
|
3
|
+
import { DEFAULT_BASE_PATH, DEFAULT_REDACT_KEYS, tagsFromOptions } from "@wizeworks/lens-core";
|
|
4
4
|
import { createHandler } from "./api.js";
|
|
5
5
|
import { createMiddleware } from "./capture.js";
|
|
6
|
-
import { addCleanup, registerParts, runCleanups } from "./adapters/registry.js";
|
|
6
|
+
import { addCleanup, partsOf, registerParts, runCleanups } from "./adapters/registry.js";
|
|
7
|
+
import { noteCodeInstall } from "./auto/state.js";
|
|
7
8
|
import { createDbSpans, createTraceDb } from "./db.js";
|
|
8
9
|
import { disabledWizeLens } from "./disabled.js";
|
|
9
10
|
import { createGetTrace } from "./federation.js";
|
|
10
|
-
import { connectHub } from "./hub-connect.js";
|
|
11
|
+
import { connectHub, releaseOf } from "./hub-connect.js";
|
|
11
12
|
import { samplingInfo, TraceSampler } from "./sampling.js";
|
|
12
13
|
import { buildInfo, DEFAULT_N_PLUS_ONE, DEFAULT_SLOW_QUERY_MS, VERSION } from "./info.js";
|
|
13
14
|
import { createLogSink, createLogWriter, makeLogger } from "./logger.js";
|
|
15
|
+
import { looseLogsOf } from "./loose-logs.js";
|
|
14
16
|
import { captureConsole } from "./logs/console.js";
|
|
17
|
+
import { memoryPages } from "./mcp-memory.js";
|
|
15
18
|
import { createMetricParts, mcpMetrics } from "./metrics/setup.js";
|
|
16
19
|
import { SqlitePersister } from "./persist.js";
|
|
17
20
|
import { createErrorMiddleware, recordException, setUser, tag } from "./request-api.js";
|
|
18
21
|
import { TraceStore } from "./store.js";
|
|
19
22
|
import { isEnabled, servesDashboard } from "./mode.js";
|
|
23
|
+
import { localMapLoader } from "./sourcemaps.js";
|
|
20
24
|
import { createTracing, installGlobals } from "./tracing.js";
|
|
21
25
|
import { resolveUiDir } from "./ui.js";
|
|
22
26
|
function normalizeBasePath(basePath) {
|
|
@@ -34,22 +38,25 @@ function openPersister(store, options, dashboard) {
|
|
|
34
38
|
persister.start();
|
|
35
39
|
return persister;
|
|
36
40
|
}
|
|
37
|
-
function mcpSource(options, store, getTrace, metrics) {
|
|
41
|
+
function mcpSource(options, store, getTrace, metrics, tags) {
|
|
42
|
+
const thresholds = { slowQueryMs: options.slowQueryMs ?? DEFAULT_SLOW_QUERY_MS, nPlusOneThreshold: options.nPlusOneThreshold ?? DEFAULT_N_PLUS_ONE };
|
|
38
43
|
return {
|
|
39
44
|
service: options.serviceName,
|
|
40
45
|
version: VERSION,
|
|
41
|
-
|
|
42
|
-
nPlusOneThreshold: options.nPlusOneThreshold ?? DEFAULT_N_PLUS_ONE,
|
|
46
|
+
...thresholds,
|
|
43
47
|
all: () => store.all(),
|
|
48
|
+
page: memoryPages(() => store.all(), thresholds),
|
|
44
49
|
get: getTrace,
|
|
45
50
|
audit: options.audit ?? ((line) => console.info(line)),
|
|
46
51
|
env: process.env.NODE_ENV || "development",
|
|
52
|
+
tags: () => tags,
|
|
47
53
|
...mcpMetrics(metrics),
|
|
48
54
|
};
|
|
49
55
|
}
|
|
50
56
|
function buildParts(options, basePath) {
|
|
51
57
|
installGlobals();
|
|
52
58
|
const service = options.serviceName;
|
|
59
|
+
const tags = tagsFromOptions(options.tags);
|
|
53
60
|
const redactKeys = options.redactKeys ?? DEFAULT_REDACT_KEYS;
|
|
54
61
|
const sampling = samplingInfo(options.sampling);
|
|
55
62
|
const sampler = sampling ? new TraceSampler(sampling) : undefined;
|
|
@@ -58,19 +65,21 @@ function buildParts(options, basePath) {
|
|
|
58
65
|
const persister = openPersister(store, options, dashboard);
|
|
59
66
|
const selfEndpoints = new Set(options.publicEndpoint ? [options.publicEndpoint] : []);
|
|
60
67
|
const fetch = options.instrumentFetch ?? true;
|
|
61
|
-
const
|
|
62
|
-
const
|
|
68
|
+
const http = options.instrumentHttp ?? true;
|
|
69
|
+
const tracing = createTracing(store, { service, version: VERSION, release: releaseOf(options), redactKeys, fetch, http }, selfEndpoints);
|
|
70
|
+
const logs = createLogSink(store, service, redactKeys, looseLogsOf(options.logs));
|
|
63
71
|
const write = createLogWriter(logs, !!options.logToConsole);
|
|
64
72
|
const getTrace = createGetTrace(store, selfEndpoints);
|
|
65
73
|
const startedMs = Date.now();
|
|
66
74
|
const sqlite = () => !!persister?.active;
|
|
67
75
|
const metrics = createMetricParts(options, redactKeys);
|
|
68
|
-
const
|
|
69
|
-
const
|
|
76
|
+
const sourceMaps = localMapLoader(options.sourceMaps);
|
|
77
|
+
const info = () => buildInfo({ options, store, redactKeys, startedMs, sqlite, metrics: !!metrics, sourceMaps: !!sourceMaps });
|
|
78
|
+
const mcp = mcpSource(options, store, getTrace, metrics?.store ?? null, tags);
|
|
70
79
|
const uiDir = resolveUiDir(options.uiDir);
|
|
71
80
|
const hub = connectHub(options, store, info, dashboard ? selfEndpoints : null, metrics?.store ?? null);
|
|
72
81
|
const enableMcp = dashboard && !!options.enableMcp;
|
|
73
|
-
const handler = createHandler({ basePath, store, redactKeys, uiDir, enableMcp, mcp, info, getTrace, metrics: metrics?.store ?? null, selfEndpoints, dashboard });
|
|
82
|
+
const handler = createHandler({ basePath, store, redactKeys, uiDir, enableMcp, mcp, info, getTrace, metrics: metrics?.store ?? null, selfEndpoints, dashboard, sourceMaps, tags });
|
|
74
83
|
const capture = {
|
|
75
84
|
tracer: tracing.tracer,
|
|
76
85
|
basePath,
|
|
@@ -82,8 +91,14 @@ function buildParts(options, basePath) {
|
|
|
82
91
|
};
|
|
83
92
|
return { hub, service, redactKeys, store, persister, tracing, logs, write, getTrace, handler, capture, metrics, middleware: createMiddleware(capture) };
|
|
84
93
|
}
|
|
85
|
-
/** Create the WizeLens add-on for one Node service. */
|
|
94
|
+
/** Create the WizeLens add-on for one Node service. When the auto install also runs, this instance wins. */
|
|
86
95
|
export function createWizeLens(options) {
|
|
96
|
+
const wizelens = buildWizeLens(options);
|
|
97
|
+
noteCodeInstall(wizelens, partsOf(wizelens));
|
|
98
|
+
return wizelens;
|
|
99
|
+
}
|
|
100
|
+
/** Build an instance without telling the auto install. The auto install builds its own with this. */
|
|
101
|
+
export function buildWizeLens(options) {
|
|
87
102
|
const basePath = normalizeBasePath(options.basePath);
|
|
88
103
|
if (!isEnabled(options))
|
|
89
104
|
return disabledWizeLens(options, basePath);
|
|
@@ -111,6 +126,7 @@ export function createWizeLens(options) {
|
|
|
111
126
|
runCleanups(wizelens);
|
|
112
127
|
await p.hub?.stop();
|
|
113
128
|
p.tracing.undici?.disable();
|
|
129
|
+
p.tracing.stopHttp?.();
|
|
114
130
|
await p.tracing.provider.shutdown();
|
|
115
131
|
p.persister?.close();
|
|
116
132
|
},
|