@wizeworks/lens-node 0.0.0-stage → 0.3.0-alpha.1
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/LICENSE +21 -0
- package/README.md +65 -2
- package/dist/adapters/drizzle.d.ts +7 -0
- package/dist/adapters/drizzle.d.ts.map +1 -0
- package/dist/adapters/drizzle.js +41 -0
- package/dist/adapters/drizzle.js.map +1 -0
- package/dist/adapters/mysql2.d.ts +6 -0
- package/dist/adapters/mysql2.d.ts.map +1 -0
- package/dist/adapters/mysql2.js +60 -0
- package/dist/adapters/mysql2.js.map +1 -0
- package/dist/adapters/pg.d.ts +6 -0
- package/dist/adapters/pg.d.ts.map +1 -0
- package/dist/adapters/pg.js +50 -0
- package/dist/adapters/pg.js.map +1 -0
- package/dist/adapters/prisma.d.ts +22 -0
- package/dist/adapters/prisma.d.ts.map +1 -0
- package/dist/adapters/prisma.js +48 -0
- package/dist/adapters/prisma.js.map +1 -0
- package/dist/adapters/registry.d.ts +37 -0
- package/dist/adapters/registry.d.ts.map +1 -0
- package/dist/adapters/registry.js +41 -0
- package/dist/adapters/registry.js.map +1 -0
- package/dist/adapters/sqlite.d.ts +10 -0
- package/dist/adapters/sqlite.d.ts.map +1 -0
- package/dist/adapters/sqlite.js +59 -0
- package/dist/adapters/sqlite.js.map +1 -0
- package/dist/adapters/typeorm.d.ts +4 -0
- package/dist/adapters/typeorm.d.ts.map +1 -0
- package/dist/adapters/typeorm.js +43 -0
- package/dist/adapters/typeorm.js.map +1 -0
- package/dist/api.d.ts +24 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +106 -0
- package/dist/api.js.map +1 -0
- package/dist/body-capture.d.ts +13 -0
- package/dist/body-capture.d.ts.map +1 -0
- package/dist/body-capture.js +54 -0
- package/dist/body-capture.js.map +1 -0
- package/dist/capture.d.ts +8 -0
- package/dist/capture.d.ts.map +1 -0
- package/dist/capture.js +33 -0
- package/dist/capture.js.map +1 -0
- package/dist/client-spans.d.ts +11 -0
- package/dist/client-spans.d.ts.map +1 -0
- package/dist/client-spans.js +83 -0
- package/dist/client-spans.js.map +1 -0
- package/dist/db.d.ts +25 -0
- package/dist/db.d.ts.map +1 -0
- package/dist/db.js +107 -0
- package/dist/db.js.map +1 -0
- package/dist/disabled.d.ts +4 -0
- package/dist/disabled.d.ts.map +1 -0
- package/dist/disabled.js +25 -0
- package/dist/disabled.js.map +1 -0
- package/dist/expose-headers.d.ts +6 -0
- package/dist/expose-headers.d.ts.map +1 -0
- package/dist/expose-headers.js +43 -0
- package/dist/expose-headers.js.map +1 -0
- package/dist/federation.d.ts +7 -0
- package/dist/federation.d.ts.map +1 -0
- package/dist/federation.js +33 -0
- package/dist/federation.js.map +1 -0
- package/dist/frameworks/fastify.d.ts +6 -0
- package/dist/frameworks/fastify.d.ts.map +1 -0
- package/dist/frameworks/fastify.js +60 -0
- package/dist/frameworks/fastify.js.map +1 -0
- package/dist/frameworks/hono.d.ts +6 -0
- package/dist/frameworks/hono.d.ts.map +1 -0
- package/dist/frameworks/hono.js +34 -0
- package/dist/frameworks/hono.js.map +1 -0
- package/dist/frameworks/koa.d.ts +13 -0
- package/dist/frameworks/koa.d.ts.map +1 -0
- package/dist/frameworks/koa.js +42 -0
- package/dist/frameworks/koa.js.map +1 -0
- package/dist/frameworks/next.d.ts +25 -0
- package/dist/frameworks/next.d.ts.map +1 -0
- package/dist/frameworks/next.js +49 -0
- package/dist/frameworks/next.js.map +1 -0
- package/dist/frameworks/node-server.d.ts +6 -0
- package/dist/frameworks/node-server.d.ts.map +1 -0
- package/dist/frameworks/node-server.js +35 -0
- package/dist/frameworks/node-server.js.map +1 -0
- package/dist/grpc/client.d.ts +6 -0
- package/dist/grpc/client.d.ts.map +1 -0
- package/dist/grpc/client.js +52 -0
- package/dist/grpc/client.js.map +1 -0
- package/dist/grpc/index.d.ts +4 -0
- package/dist/grpc/index.d.ts.map +1 -0
- package/dist/grpc/index.js +16 -0
- package/dist/grpc/index.js.map +1 -0
- package/dist/grpc/server.d.ts +10 -0
- package/dist/grpc/server.d.ts.map +1 -0
- package/dist/grpc/server.js +98 -0
- package/dist/grpc/server.js.map +1 -0
- package/dist/grpc/shared.d.ts +40 -0
- package/dist/grpc/shared.d.ts.map +1 -0
- package/dist/grpc/shared.js +45 -0
- package/dist/grpc/shared.js.map +1 -0
- package/dist/http-util.d.ts +10 -0
- package/dist/http-util.d.ts.map +1 -0
- package/dist/http-util.js +47 -0
- package/dist/http-util.js.map +1 -0
- package/dist/hub-connect.d.ts +10 -0
- package/dist/hub-connect.d.ts.map +1 -0
- package/dist/hub-connect.js +22 -0
- package/dist/hub-connect.js.map +1 -0
- package/dist/hub-export.d.ts +34 -0
- package/dist/hub-export.d.ts.map +1 -0
- package/dist/hub-export.js +135 -0
- package/dist/hub-export.js.map +1 -0
- package/dist/index.d.ts +35 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -0
- package/dist/info.d.ts +18 -0
- package/dist/info.d.ts.map +1 -0
- package/dist/info.js +31 -0
- package/dist/info.js.map +1 -0
- package/dist/kit.d.ts +14 -0
- package/dist/kit.d.ts.map +1 -0
- package/dist/kit.js +12 -0
- package/dist/kit.js.map +1 -0
- package/dist/logger.d.ts +29 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +82 -0
- package/dist/logger.js.map +1 -0
- package/dist/logs/bunyan.d.ts +4 -0
- package/dist/logs/bunyan.d.ts.map +1 -0
- package/dist/logs/bunyan.js +42 -0
- package/dist/logs/bunyan.js.map +1 -0
- package/dist/logs/captured.d.ts +4 -0
- package/dist/logs/captured.d.ts.map +1 -0
- package/dist/logs/captured.js +9 -0
- package/dist/logs/captured.js.map +1 -0
- package/dist/logs/consola.d.ts +4 -0
- package/dist/logs/consola.d.ts.map +1 -0
- package/dist/logs/consola.js +25 -0
- package/dist/logs/consola.js.map +1 -0
- package/dist/logs/console.d.ts +4 -0
- package/dist/logs/console.d.ts.map +1 -0
- package/dist/logs/console.js +49 -0
- package/dist/logs/console.js.map +1 -0
- package/dist/logs/levels.d.ts +14 -0
- package/dist/logs/levels.d.ts.map +1 -0
- package/dist/logs/levels.js +58 -0
- package/dist/logs/levels.js.map +1 -0
- package/dist/logs/log4js.d.ts +16 -0
- package/dist/logs/log4js.d.ts.map +1 -0
- package/dist/logs/log4js.js +21 -0
- package/dist/logs/log4js.js.map +1 -0
- package/dist/logs/nest.d.ts +6 -0
- package/dist/logs/nest.d.ts.map +1 -0
- package/dist/logs/nest.js +34 -0
- package/dist/logs/nest.js.map +1 -0
- package/dist/logs/otel.d.ts +24 -0
- package/dist/logs/otel.d.ts.map +1 -0
- package/dist/logs/otel.js +31 -0
- package/dist/logs/otel.js.map +1 -0
- package/dist/logs/pino.d.ts +4 -0
- package/dist/logs/pino.d.ts.map +1 -0
- package/dist/logs/pino.js +86 -0
- package/dist/logs/pino.js.map +1 -0
- package/dist/logs/winston.d.ts +4 -0
- package/dist/logs/winston.d.ts.map +1 -0
- package/dist/logs/winston.js +65 -0
- package/dist/logs/winston.js.map +1 -0
- package/dist/mcp-find.d.ts +5 -0
- package/dist/mcp-find.d.ts.map +1 -0
- package/dist/mcp-find.js +42 -0
- package/dist/mcp-find.js.map +1 -0
- package/dist/mcp-metrics.d.ts +5 -0
- package/dist/mcp-metrics.d.ts.map +1 -0
- package/dist/mcp-metrics.js +77 -0
- package/dist/mcp-metrics.js.map +1 -0
- package/dist/mcp-shared.d.ts +30 -0
- package/dist/mcp-shared.d.ts.map +1 -0
- package/dist/mcp-shared.js +5 -0
- package/dist/mcp-shared.js.map +1 -0
- package/dist/mcp-traces.d.ts +5 -0
- package/dist/mcp-traces.d.ts.map +1 -0
- package/dist/mcp-traces.js +51 -0
- package/dist/mcp-traces.js.map +1 -0
- package/dist/mcp.d.ts +6 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +26 -0
- package/dist/mcp.js.map +1 -0
- package/dist/messaging/amqplib.d.ts +4 -0
- package/dist/messaging/amqplib.d.ts.map +1 -0
- package/dist/messaging/amqplib.js +89 -0
- package/dist/messaging/amqplib.js.map +1 -0
- package/dist/messaging/kafkajs.d.ts +4 -0
- package/dist/messaging/kafkajs.d.ts.map +1 -0
- package/dist/messaging/kafkajs.js +78 -0
- package/dist/messaging/kafkajs.js.map +1 -0
- package/dist/messaging/servicebus.d.ts +4 -0
- package/dist/messaging/servicebus.d.ts.map +1 -0
- package/dist/messaging/servicebus.js +85 -0
- package/dist/messaging/servicebus.js.map +1 -0
- package/dist/messaging/shared.d.ts +30 -0
- package/dist/messaging/shared.d.ts.map +1 -0
- package/dist/messaging/shared.js +74 -0
- package/dist/messaging/shared.js.map +1 -0
- package/dist/metrics/exponential.d.ts +17 -0
- package/dist/metrics/exponential.d.ts.map +1 -0
- package/dist/metrics/exponential.js +12 -0
- package/dist/metrics/exponential.js.map +1 -0
- package/dist/metrics/gc.d.ts +15 -0
- package/dist/metrics/gc.d.ts.map +1 -0
- package/dist/metrics/gc.js +44 -0
- package/dist/metrics/gc.js.map +1 -0
- package/dist/metrics/otel.d.ts +39 -0
- package/dist/metrics/otel.d.ts.map +1 -0
- package/dist/metrics/otel.js +62 -0
- package/dist/metrics/otel.js.map +1 -0
- package/dist/metrics/runtime.d.ts +17 -0
- package/dist/metrics/runtime.d.ts.map +1 -0
- package/dist/metrics/runtime.js +100 -0
- package/dist/metrics/runtime.js.map +1 -0
- package/dist/metrics/setup.d.ts +13 -0
- package/dist/metrics/setup.d.ts.map +1 -0
- package/dist/metrics/setup.js +20 -0
- package/dist/metrics/setup.js.map +1 -0
- package/dist/metrics/store.d.ts +34 -0
- package/dist/metrics/store.d.ts.map +1 -0
- package/dist/metrics/store.js +94 -0
- package/dist/metrics/store.js.map +1 -0
- package/dist/next.d.ts +5 -0
- package/dist/next.d.ts.map +1 -0
- package/dist/next.js +2 -0
- package/dist/next.js.map +1 -0
- package/dist/persist-schema.d.ts +14 -0
- package/dist/persist-schema.d.ts.map +1 -0
- package/dist/persist-schema.js +41 -0
- package/dist/persist-schema.js.map +1 -0
- package/dist/persist-util.d.ts +4 -0
- package/dist/persist-util.d.ts.map +1 -0
- package/dist/persist-util.js +30 -0
- package/dist/persist-util.js.map +1 -0
- package/dist/persist.d.ts +27 -0
- package/dist/persist.d.ts.map +1 -0
- package/dist/persist.js +159 -0
- package/dist/persist.js.map +1 -0
- package/dist/precise.d.ts +8 -0
- package/dist/precise.d.ts.map +1 -0
- package/dist/precise.js +28 -0
- package/dist/precise.js.map +1 -0
- package/dist/processor.d.ts +20 -0
- package/dist/processor.d.ts.map +1 -0
- package/dist/processor.js +102 -0
- package/dist/processor.js.map +1 -0
- package/dist/request-api.d.ts +12 -0
- package/dist/request-api.d.ts.map +1 -0
- package/dist/request-api.js +31 -0
- package/dist/request-api.js.map +1 -0
- package/dist/request-attributes.d.ts +9 -0
- package/dist/request-attributes.d.ts.map +1 -0
- package/dist/request-attributes.js +48 -0
- package/dist/request-attributes.js.map +1 -0
- package/dist/request-capture.d.ts +32 -0
- package/dist/request-capture.d.ts.map +1 -0
- package/dist/request-capture.js +94 -0
- package/dist/request-capture.js.map +1 -0
- package/dist/route-timing.d.ts +6 -0
- package/dist/route-timing.d.ts.map +1 -0
- package/dist/route-timing.js +25 -0
- package/dist/route-timing.js.map +1 -0
- package/dist/sampling.d.ts +37 -0
- package/dist/sampling.d.ts.map +1 -0
- package/dist/sampling.js +120 -0
- package/dist/sampling.js.map +1 -0
- package/dist/spans.d.ts +9 -0
- package/dist/spans.d.ts.map +1 -0
- package/dist/spans.js +17 -0
- package/dist/spans.js.map +1 -0
- package/dist/store-types.d.ts +22 -0
- package/dist/store-types.d.ts.map +1 -0
- package/dist/store-types.js +2 -0
- package/dist/store-types.js.map +1 -0
- package/dist/store.d.ts +59 -0
- package/dist/store.d.ts.map +1 -0
- package/dist/store.js +194 -0
- package/dist/store.js.map +1 -0
- package/dist/tracing.d.ts +20 -0
- package/dist/tracing.d.ts.map +1 -0
- package/dist/tracing.js +45 -0
- package/dist/tracing.js.map +1 -0
- package/dist/types.d.ts +125 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/ui.d.ts +6 -0
- package/dist/ui.d.ts.map +1 -0
- package/dist/ui.js +62 -0
- package/dist/ui.js.map +1 -0
- package/dist/wizelens.d.ts +5 -0
- package/dist/wizelens.d.ts.map +1 -0
- package/dist/wizelens.js +124 -0
- package/dist/wizelens.js.map +1 -0
- package/package.json +109 -3
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { captureOf, patchMethod } from "../adapters/registry.js";
|
|
2
|
+
import { injectInto, nowMs, recordReceive, runInSpan, sizeOf, startConsumer, startProducer } from "./shared.js";
|
|
3
|
+
function patchPublish(proto, tracer) {
|
|
4
|
+
patchMethod(proto, "publish", (original) => function (...args) {
|
|
5
|
+
const [exchange, routingKey, content, options] = args;
|
|
6
|
+
const destination = exchange || routingKey;
|
|
7
|
+
const open = startProducer(tracer, { system: "rabbitmq", destination, bodySize: sizeOf(content), messageId: options?.messageId });
|
|
8
|
+
if (!open)
|
|
9
|
+
return original.apply(this, args);
|
|
10
|
+
const headers = { ...options?.headers };
|
|
11
|
+
injectInto(open.ctx, headers);
|
|
12
|
+
const next = [exchange, routingKey, content, { ...options, headers }, ...args.slice(4)];
|
|
13
|
+
return runInSpan(open.span, open.ctx, () => original.apply(this, next));
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
function patchConsume(proto, tracer) {
|
|
17
|
+
patchMethod(proto, "consume", (original) => function (...args) {
|
|
18
|
+
const [queue, onMessage] = args;
|
|
19
|
+
if (typeof onMessage !== "function")
|
|
20
|
+
return original.apply(this, args);
|
|
21
|
+
const traced = (msg) => {
|
|
22
|
+
if (!msg)
|
|
23
|
+
return onMessage(msg);
|
|
24
|
+
const facts = { system: "rabbitmq", destination: queue, messageId: msg.properties?.messageId, bodySize: sizeOf(msg.content) };
|
|
25
|
+
const { span, ctx } = startConsumer(tracer, facts, msg.properties?.headers);
|
|
26
|
+
return runInSpan(span, ctx, () => onMessage(msg));
|
|
27
|
+
};
|
|
28
|
+
return original.apply(this, [queue, traced, ...args.slice(2)]);
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
/** `channel.get(queue)` pulls one message (or false): a receive span joined to its producer. */
|
|
32
|
+
function patchGet(proto, tracer) {
|
|
33
|
+
patchMethod(proto, "get", (original) => function (...args) {
|
|
34
|
+
const started = nowMs();
|
|
35
|
+
const out = original.apply(this, args);
|
|
36
|
+
const record = (msg) => {
|
|
37
|
+
if (!msg || typeof msg !== "object")
|
|
38
|
+
return;
|
|
39
|
+
const m = msg;
|
|
40
|
+
const facts = { system: "rabbitmq", destination: String(args[0]), messageId: m.properties?.messageId, bodySize: sizeOf(m.content) };
|
|
41
|
+
recordReceive(tracer, facts, m.properties?.headers, started);
|
|
42
|
+
};
|
|
43
|
+
void Promise.resolve(out).then(record, () => undefined);
|
|
44
|
+
return out;
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
const patchChannel = (channel, tracer) => {
|
|
48
|
+
const proto = Object.getPrototypeOf(channel);
|
|
49
|
+
patchPublish(proto, tracer);
|
|
50
|
+
patchConsume(proto, tracer);
|
|
51
|
+
patchGet(proto, tracer);
|
|
52
|
+
};
|
|
53
|
+
/** Patch channels as they are created from a connection. */
|
|
54
|
+
function patchConnection(connection, tracer) {
|
|
55
|
+
const proto = Object.getPrototypeOf(connection);
|
|
56
|
+
for (const name of ["createChannel", "createConfirmChannel"]) {
|
|
57
|
+
patchMethod(proto, name, (original) => function (...args) {
|
|
58
|
+
const out = original.apply(this, args);
|
|
59
|
+
void Promise.resolve(out).then((ch) => ch && typeof ch === "object" && patchChannel(ch, tracer), () => undefined);
|
|
60
|
+
return out;
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/** Patch connections as `amqplib.connect` returns them. False when the module object cannot be changed. */
|
|
65
|
+
function patchModule(mod, tracer) {
|
|
66
|
+
try {
|
|
67
|
+
return patchMethod(mod, "connect", (original) => function (...args) {
|
|
68
|
+
const out = original.apply(this, args);
|
|
69
|
+
void Promise.resolve(out).then((conn) => conn && typeof conn === "object" && patchConnection(conn, tracer), () => undefined);
|
|
70
|
+
return out;
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/** Trace RabbitMQ through amqplib. Pass the module, a connection, or a channel. Returns false when nothing was patched. */
|
|
78
|
+
export function instrumentAmqplib(wizelens, target) {
|
|
79
|
+
const t = target;
|
|
80
|
+
if (!captureOf(wizelens) || !t || typeof t !== "object")
|
|
81
|
+
return false;
|
|
82
|
+
const tracer = wizelens.tracer;
|
|
83
|
+
if (typeof t.publish === "function" && typeof t.consume === "function")
|
|
84
|
+
return (patchChannel(t, tracer), true);
|
|
85
|
+
if (typeof t.createChannel === "function")
|
|
86
|
+
return (patchConnection(t, tracer), true);
|
|
87
|
+
return typeof t.connect === "function" ? patchModule(t, tracer) : false;
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=amqplib.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"amqplib.js","sourceRoot":"","sources":["../../src/messaging/amqplib.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { WizeLens } from "../types.js";
|
|
2
|
+
/** Trace Kafka through kafkajs. Pass the module, a Kafka instance, a producer, or a consumer. Returns false when nothing was patched. */
|
|
3
|
+
export declare function instrumentKafkaJs(wizelens: WizeLens, target: unknown): boolean;
|
|
4
|
+
//# sourceMappingURL=kafkajs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kafkajs.d.ts","sourceRoot":"","sources":["../../src/messaging/kafkajs.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AA8F5C,yIAAyI;AACzI,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAU9E"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { captureOf, patchMethod } from "../adapters/registry.js";
|
|
2
|
+
import { injectInto, runInSpan, startConsumer, startProducer } from "./shared.js";
|
|
3
|
+
const withHeaders = (messages, inject) => messages.map((m) => {
|
|
4
|
+
const headers = { ...m.headers };
|
|
5
|
+
inject(headers);
|
|
6
|
+
return { ...m, headers };
|
|
7
|
+
});
|
|
8
|
+
/** One send span for the whole call; every message carries its traceparent. */
|
|
9
|
+
function traceSend(tracer, topics, send) {
|
|
10
|
+
const batchSize = topics.reduce((t, x) => t + x.messages.length, 0);
|
|
11
|
+
const open = startProducer(tracer, { system: "kafka", destination: [...new Set(topics.map((t) => t.topic))].join(", "), batchSize });
|
|
12
|
+
if (!open)
|
|
13
|
+
return send(topics);
|
|
14
|
+
const next = topics.map((t) => ({ ...t, messages: withHeaders(t.messages, (h) => injectInto(open.ctx, h)) }));
|
|
15
|
+
return runInSpan(open.span, open.ctx, () => send(next));
|
|
16
|
+
}
|
|
17
|
+
function patchProducer(producer, tracer) {
|
|
18
|
+
patchMethod(producer, "send", (original) => function (record) {
|
|
19
|
+
const r = record;
|
|
20
|
+
return traceSend(tracer, [r], ([next]) => original.call(this, { ...r, ...next }));
|
|
21
|
+
});
|
|
22
|
+
patchMethod(producer, "sendBatch", (original) => function (batch) {
|
|
23
|
+
const b = batch;
|
|
24
|
+
return traceSend(tracer, b.topicMessages ?? [], (next) => original.call(this, { ...b, topicMessages: next }));
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
function traceHandlers(config, tracer) {
|
|
28
|
+
const out = { ...config };
|
|
29
|
+
const { eachMessage, eachBatch } = config;
|
|
30
|
+
if (eachMessage) {
|
|
31
|
+
out.eachMessage = (p) => {
|
|
32
|
+
const { span, ctx } = startConsumer(tracer, { system: "kafka", destination: p.topic, messageId: p.message.offset }, p.message.headers);
|
|
33
|
+
return runInSpan(span, ctx, () => eachMessage(p));
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
if (eachBatch) {
|
|
37
|
+
out.eachBatch = (p) => {
|
|
38
|
+
const facts = { system: "kafka", destination: p.batch.topic, batchSize: p.batch.messages.length };
|
|
39
|
+
const { span, ctx } = startConsumer(tracer, facts, p.batch.messages[0]?.headers);
|
|
40
|
+
return runInSpan(span, ctx, () => eachBatch(p));
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
return out;
|
|
44
|
+
}
|
|
45
|
+
function patchConsumer(consumer, tracer) {
|
|
46
|
+
patchMethod(consumer, "run", (original) => function (config) {
|
|
47
|
+
return original.call(this, config && typeof config === "object" ? traceHandlers(config, tracer) : config);
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
/** Patch the producers and consumers a Kafka instance (or the Kafka class) makes. */
|
|
51
|
+
function patchFactory(target, tracer) {
|
|
52
|
+
for (const [name, patch] of [["producer", patchProducer], ["consumer", patchConsumer]]) {
|
|
53
|
+
patchMethod(target, name, (original) => function (...args) {
|
|
54
|
+
const made = original.apply(this, args);
|
|
55
|
+
if (made && typeof made === "object")
|
|
56
|
+
patch(made, tracer);
|
|
57
|
+
return made;
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/** Trace Kafka through kafkajs. Pass the module, a Kafka instance, a producer, or a consumer. Returns false when nothing was patched. */
|
|
62
|
+
export function instrumentKafkaJs(wizelens, target) {
|
|
63
|
+
const t = target;
|
|
64
|
+
if (!captureOf(wizelens) || !t || typeof t !== "object")
|
|
65
|
+
return false;
|
|
66
|
+
const tracer = wizelens.tracer;
|
|
67
|
+
const Kafka = t.Kafka;
|
|
68
|
+
if (Kafka?.prototype)
|
|
69
|
+
return (patchFactory(Kafka.prototype, tracer), true);
|
|
70
|
+
if (typeof t.producer === "function" && typeof t.consumer === "function")
|
|
71
|
+
return (patchFactory(t, tracer), true);
|
|
72
|
+
if (typeof t.sendBatch === "function")
|
|
73
|
+
return (patchProducer(t, tracer), true);
|
|
74
|
+
if (typeof t.run === "function" && typeof t.subscribe === "function")
|
|
75
|
+
return (patchConsumer(t, tracer), true);
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=kafkajs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kafkajs.js","sourceRoot":"","sources":["../../src/messaging/kafkajs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { WizeLens } from "../types.js";
|
|
2
|
+
/** Trace Azure Service Bus through @azure/service-bus. Pass a ServiceBusClient, or the module. Returns false when nothing was patched. */
|
|
3
|
+
export declare function instrumentServiceBus(wizelens: WizeLens, target: unknown): boolean;
|
|
4
|
+
//# sourceMappingURL=servicebus.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"servicebus.d.ts","sourceRoot":"","sources":["../../src/messaging/servicebus.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAgG5C,0IAA0I;AAC1I,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAOjF"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { context, trace } from "@opentelemetry/api";
|
|
2
|
+
import { captureOf, patchMethod } from "../adapters/registry.js";
|
|
3
|
+
import { injectInto, nowMs, recordReceive, runInSpan, sizeOf, startConsumer, startProducer } from "./shared.js";
|
|
4
|
+
const isBatch = (x) => typeof x?.tryAddMessage === "function";
|
|
5
|
+
/** A copy of the message whose application properties carry the current trace. */
|
|
6
|
+
function stamped(message) {
|
|
7
|
+
const applicationProperties = { ...message.applicationProperties };
|
|
8
|
+
injectInto(context.active(), applicationProperties);
|
|
9
|
+
return { ...message, applicationProperties };
|
|
10
|
+
}
|
|
11
|
+
function patchSender(sender, tracer) {
|
|
12
|
+
patchMethod(sender, "sendMessages", (original) => function (messages, ...rest) {
|
|
13
|
+
const list = isBatch(messages) ? null : Array.isArray(messages) ? messages : [messages];
|
|
14
|
+
const batchSize = list ? list.length : messages.count;
|
|
15
|
+
const open = startProducer(tracer, { system: "servicebus", destination: sender.entityPath ?? "unknown", batchSize });
|
|
16
|
+
const send = (payload) => original.call(this, payload, ...rest);
|
|
17
|
+
if (!open)
|
|
18
|
+
return send(messages);
|
|
19
|
+
if (!list)
|
|
20
|
+
return runInSpan(open.span, open.ctx, () => send(messages));
|
|
21
|
+
const next = context.with(open.ctx, () => list.map(stamped));
|
|
22
|
+
return runInSpan(open.span, open.ctx, () => send(Array.isArray(messages) ? next : next[0]));
|
|
23
|
+
});
|
|
24
|
+
patchMethod(sender, "createMessageBatch", (original) => function (...args) {
|
|
25
|
+
return Promise.resolve(original.apply(this, args)).then((batch) => {
|
|
26
|
+
if (isBatch(batch))
|
|
27
|
+
patchMethod(batch, "tryAddMessage", (add) => function (m, ...r) {
|
|
28
|
+
return trace.getSpan(context.active()) ? add.call(this, stamped(m), ...r) : add.call(this, m, ...r);
|
|
29
|
+
});
|
|
30
|
+
return batch;
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
/** `receiveMessages` pulls a batch: one receive span, joined to the producer when exactly one message came back. */
|
|
35
|
+
function patchReceive(receiver, tracer) {
|
|
36
|
+
patchMethod(receiver, "receiveMessages", (original) => function (...args) {
|
|
37
|
+
const started = nowMs();
|
|
38
|
+
const out = original.apply(this, args);
|
|
39
|
+
const record = (list) => {
|
|
40
|
+
if (!Array.isArray(list) || list.length === 0)
|
|
41
|
+
return;
|
|
42
|
+
const one = list.length === 1 ? list[0] : undefined;
|
|
43
|
+
const facts = { system: "servicebus", destination: receiver.entityPath ?? "unknown", batchSize: list.length, messageId: one?.messageId === undefined ? undefined : String(one.messageId) };
|
|
44
|
+
recordReceive(tracer, facts, one?.applicationProperties, started);
|
|
45
|
+
};
|
|
46
|
+
void Promise.resolve(out).then(record, () => undefined);
|
|
47
|
+
return out;
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
function patchReceiver(receiver, tracer) {
|
|
51
|
+
patchReceive(receiver, tracer);
|
|
52
|
+
patchMethod(receiver, "subscribe", (original) => function (handlers, ...rest) {
|
|
53
|
+
const h = handlers;
|
|
54
|
+
const processMessage = (message) => {
|
|
55
|
+
const facts = { system: "servicebus", destination: receiver.entityPath ?? "unknown", messageId: message.messageId === undefined ? undefined : String(message.messageId), bodySize: sizeOf(message.body) };
|
|
56
|
+
const { span, ctx } = startConsumer(tracer, facts, message.applicationProperties);
|
|
57
|
+
return runInSpan(span, ctx, () => h.processMessage(message));
|
|
58
|
+
};
|
|
59
|
+
return original.call(this, { ...h, processMessage }, ...rest);
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
/** Patch the senders and receivers a client (or the ServiceBusClient class) creates. */
|
|
63
|
+
function patchClient(target, tracer) {
|
|
64
|
+
for (const [name, patch] of [["createSender", patchSender], ["createReceiver", patchReceiver]]) {
|
|
65
|
+
patchMethod(target, name, (original) => function (...args) {
|
|
66
|
+
const made = original.apply(this, args);
|
|
67
|
+
if (made && typeof made === "object")
|
|
68
|
+
patch(made, tracer);
|
|
69
|
+
return made;
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/** Trace Azure Service Bus through @azure/service-bus. Pass a ServiceBusClient, or the module. Returns false when nothing was patched. */
|
|
74
|
+
export function instrumentServiceBus(wizelens, target) {
|
|
75
|
+
const t = target;
|
|
76
|
+
if (!captureOf(wizelens) || !t || typeof t !== "object")
|
|
77
|
+
return false;
|
|
78
|
+
const Client = t.ServiceBusClient;
|
|
79
|
+
if (Client?.prototype)
|
|
80
|
+
return (patchClient(Client.prototype, wizelens.tracer), true);
|
|
81
|
+
if (typeof t.createSender === "function" && typeof t.createReceiver === "function")
|
|
82
|
+
return (patchClient(t, wizelens.tracer), true);
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=servicebus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"servicebus.js","sourceRoot":"","sources":["../../src/messaging/servicebus.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { type Context, type Span as OtelSpan, type Tracer } from "@opentelemetry/api";
|
|
2
|
+
export type MessagingSystem = "rabbitmq" | "kafka" | "servicebus";
|
|
3
|
+
export interface MessageFacts {
|
|
4
|
+
system: MessagingSystem;
|
|
5
|
+
destination: string;
|
|
6
|
+
messageId?: string;
|
|
7
|
+
batchSize?: number;
|
|
8
|
+
bodySize?: number;
|
|
9
|
+
}
|
|
10
|
+
/** Start a send span inside the current request, or null when there is no request or a send is already open. */
|
|
11
|
+
export declare function startProducer(tracer: Tracer, m: MessageFacts): {
|
|
12
|
+
span: OtelSpan;
|
|
13
|
+
ctx: Context;
|
|
14
|
+
} | null;
|
|
15
|
+
/** Write traceparent (and tracestate) into a message's header object. */
|
|
16
|
+
export declare function injectInto(ctx: Context, headers: Record<string, unknown>): void;
|
|
17
|
+
/** Start a process span for one message, joined to the producer's trace when the headers carry it. */
|
|
18
|
+
export declare function startConsumer(tracer: Tracer, m: MessageFacts, headers: Record<string, unknown> | undefined): {
|
|
19
|
+
span: OtelSpan;
|
|
20
|
+
ctx: Context;
|
|
21
|
+
};
|
|
22
|
+
/** Now, on the same clock OTel uses, for a span start recorded before the span exists. */
|
|
23
|
+
export { preciseNow as nowMs } from "../precise.js";
|
|
24
|
+
/** Record a finished pull (`get`, `receiveMessages`): one receive span from `startedMs`, joined to the producer when one message came back. */
|
|
25
|
+
export declare function recordReceive(tracer: Tracer, m: MessageFacts, headers: Record<string, unknown> | undefined, startedMs: number): void;
|
|
26
|
+
/** Run `fn` in the span's context and end the span when it settles (sync or promise). Returns what `fn` returns. */
|
|
27
|
+
export declare function runInSpan<T>(span: OtelSpan, ctx: Context, fn: () => T): T;
|
|
28
|
+
/** Byte length of a message body, when it is a string or bytes. */
|
|
29
|
+
export declare const sizeOf: (body: unknown) => number | undefined;
|
|
30
|
+
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/messaging/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,OAAO,EAA2C,KAAK,IAAI,IAAI,QAAQ,EAAmB,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAOjK,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,OAAO,GAAG,YAAY,CAAC;AAElE,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,eAAe,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAmBD,gHAAgH;AAChH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,YAAY,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,GAAG,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAKtG;AAED,yEAAyE;AACzE,wBAAgB,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAE/E;AAOD,sGAAsG;AACtG,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,GAAG,EAAE,OAAO,CAAA;CAAE,CAI7I;AAED,0FAA0F;AAC1F,OAAO,EAAE,UAAU,IAAI,KAAK,EAAE,MAAM,eAAe,CAAC;AAEpD,+IAA+I;AAC/I,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAGpI;AAED,oHAAoH;AACpH,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAczE;AAED,mEAAmE;AACnE,eAAO,MAAM,MAAM,SAAU,OAAO,KAAG,MAAM,GAAG,SAC+D,CAAC"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { context, createContextKey, ROOT_CONTEXT, SpanKind, trace } from "@opentelemetry/api";
|
|
2
|
+
import { W3CTraceContextPropagator } from "@opentelemetry/core";
|
|
3
|
+
import { ATTR_MESSAGING } from "@wizeworks/lens-core";
|
|
4
|
+
import { isThenable } from "../db.js";
|
|
5
|
+
import { CATEGORY_ATTR } from "../processor.js";
|
|
6
|
+
import { recordOn, SERVER_SPAN } from "../spans.js";
|
|
7
|
+
const w3c = new W3CTraceContextPropagator();
|
|
8
|
+
/** Set inside a producer span: a library calling its own send method again is part of it. */
|
|
9
|
+
const INSIDE_SEND = createContextKey("wizelens.messaging.inside-send");
|
|
10
|
+
function attributesOf(op, m) {
|
|
11
|
+
const a = {
|
|
12
|
+
[CATEGORY_ATTR]: "messaging",
|
|
13
|
+
[ATTR_MESSAGING.system]: m.system,
|
|
14
|
+
[ATTR_MESSAGING.operation]: op,
|
|
15
|
+
[ATTR_MESSAGING.destination]: m.destination,
|
|
16
|
+
};
|
|
17
|
+
if (m.messageId !== undefined)
|
|
18
|
+
a[ATTR_MESSAGING.messageId] = m.messageId;
|
|
19
|
+
if (m.batchSize !== undefined)
|
|
20
|
+
a[ATTR_MESSAGING.batchSize] = m.batchSize;
|
|
21
|
+
if (m.bodySize !== undefined)
|
|
22
|
+
a[ATTR_MESSAGING.bodySize] = m.bodySize;
|
|
23
|
+
return a;
|
|
24
|
+
}
|
|
25
|
+
/** Start a send span inside the current request, or null when there is no request or a send is already open. */
|
|
26
|
+
export function startProducer(tracer, m) {
|
|
27
|
+
const active = context.active();
|
|
28
|
+
if (!trace.getSpan(active) || active.getValue(INSIDE_SEND))
|
|
29
|
+
return null;
|
|
30
|
+
const span = tracer.startSpan(`send ${m.destination}`, { kind: SpanKind.PRODUCER, attributes: attributesOf("send", m) });
|
|
31
|
+
return { span, ctx: trace.setSpan(active, span).setValue(INSIDE_SEND, true) };
|
|
32
|
+
}
|
|
33
|
+
/** Write traceparent (and tracestate) into a message's header object. */
|
|
34
|
+
export function injectInto(ctx, headers) {
|
|
35
|
+
w3c.inject(ctx, headers, { set: (carrier, key, value) => void (carrier[key] = value) });
|
|
36
|
+
}
|
|
37
|
+
/** Header values may be strings or Buffers (Kafka). */
|
|
38
|
+
const headerText = (v) => (typeof v === "string" ? v : v instanceof Uint8Array ? Buffer.from(v).toString("utf8") : undefined);
|
|
39
|
+
const getter = { get: (c, k) => headerText(c[k]), keys: (c) => Object.keys(c) };
|
|
40
|
+
/** Start a process span for one message, joined to the producer's trace when the headers carry it. */
|
|
41
|
+
export function startConsumer(tracer, m, headers) {
|
|
42
|
+
const parent = headers ? w3c.extract(ROOT_CONTEXT, headers, getter) : ROOT_CONTEXT;
|
|
43
|
+
const span = tracer.startSpan(`process ${m.destination}`, { kind: SpanKind.CONSUMER, attributes: attributesOf("process", m) }, parent);
|
|
44
|
+
return { span, ctx: trace.setSpan(parent, span).setValue(SERVER_SPAN, span) };
|
|
45
|
+
}
|
|
46
|
+
/** Now, on the same clock OTel uses, for a span start recorded before the span exists. */
|
|
47
|
+
export { preciseNow as nowMs } from "../precise.js";
|
|
48
|
+
/** Record a finished pull (`get`, `receiveMessages`): one receive span from `startedMs`, joined to the producer when one message came back. */
|
|
49
|
+
export function recordReceive(tracer, m, headers, startedMs) {
|
|
50
|
+
const parent = headers ? w3c.extract(ROOT_CONTEXT, headers, getter) : ROOT_CONTEXT;
|
|
51
|
+
tracer.startSpan(`receive ${m.destination}`, { kind: SpanKind.CONSUMER, attributes: attributesOf("receive", m), startTime: startedMs }, parent).end();
|
|
52
|
+
}
|
|
53
|
+
/** Run `fn` in the span's context and end the span when it settles (sync or promise). Returns what `fn` returns. */
|
|
54
|
+
export function runInSpan(span, ctx, fn) {
|
|
55
|
+
const fail = (err) => {
|
|
56
|
+
recordOn(span, err);
|
|
57
|
+
span.end();
|
|
58
|
+
};
|
|
59
|
+
try {
|
|
60
|
+
const out = context.with(ctx, fn);
|
|
61
|
+
if (isThenable(out))
|
|
62
|
+
out.then(() => span.end(), fail);
|
|
63
|
+
else
|
|
64
|
+
span.end();
|
|
65
|
+
return out;
|
|
66
|
+
}
|
|
67
|
+
catch (err) {
|
|
68
|
+
fail(err);
|
|
69
|
+
throw err;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/** Byte length of a message body, when it is a string or bytes. */
|
|
73
|
+
export const sizeOf = (body) => typeof body === "string" ? Buffer.byteLength(body) : body instanceof Uint8Array ? body.byteLength : undefined;
|
|
74
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/messaging/shared.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/** The positive or negative buckets of an exponential histogram. */
|
|
2
|
+
export interface ExponentialBuckets {
|
|
3
|
+
offset?: number;
|
|
4
|
+
bucketCounts?: readonly number[];
|
|
5
|
+
}
|
|
6
|
+
export interface ExponentialHistogram {
|
|
7
|
+
scale: number;
|
|
8
|
+
zeroCount?: number;
|
|
9
|
+
positive?: ExponentialBuckets;
|
|
10
|
+
negative?: ExponentialBuckets;
|
|
11
|
+
}
|
|
12
|
+
/** Exponential buckets as explicit ones: positive bucket i ends at base^(offset+i+1); zero and negative counts go first. */
|
|
13
|
+
export declare function exponentialToExplicit(h: ExponentialHistogram): {
|
|
14
|
+
bounds: number[];
|
|
15
|
+
counts: number[];
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=exponential.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exponential.d.ts","sourceRoot":"","sources":["../../src/metrics/exponential.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B,QAAQ,CAAC,EAAE,kBAAkB,CAAC;CAC/B;AAED,4HAA4H;AAC5H,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,oBAAoB,GAAG;IAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAQrG"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** Exponential buckets as explicit ones: positive bucket i ends at base^(offset+i+1); zero and negative counts go first. */
|
|
2
|
+
export function exponentialToExplicit(h) {
|
|
3
|
+
const base = 2 ** (2 ** -h.scale);
|
|
4
|
+
const offset = h.positive?.offset ?? 0;
|
|
5
|
+
const positive = (h.positive?.bucketCounts ?? []).map(Number);
|
|
6
|
+
const low = (h.zeroCount ?? 0) + (h.negative?.bucketCounts ?? []).reduce((t, c) => t + Number(c), 0);
|
|
7
|
+
if (positive.length === 0)
|
|
8
|
+
return { bounds: [], counts: [low] };
|
|
9
|
+
const bounds = Array.from({ length: positive.length + 1 }, (_, i) => base ** (offset + i));
|
|
10
|
+
return { bounds, counts: [low, ...positive, 0] };
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=exponential.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exponential.js","sourceRoot":"","sources":["../../src/metrics/exponential.ts"],"names":[],"mappings":"AAaA,4HAA4H;AAC5H,MAAM,UAAU,qBAAqB,CAAC,CAAuB;IAC3D,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,CAAC,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,YAAY,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9D,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,YAAY,IAAI,EAAE,CAAC,CAAC,MAAM,CAAS,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7G,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;IAChE,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IAC3F,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC;AACnD,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type PerformanceEntry } from "node:perf_hooks";
|
|
2
|
+
import type { MetricPoint } from "@wizeworks/lens-core";
|
|
3
|
+
/** OTel advice for `v8js.gc.duration`, in seconds. */
|
|
4
|
+
export declare const GC_BOUNDS: number[];
|
|
5
|
+
/** Collects GC pauses between samples and turns them into delta histogram points. */
|
|
6
|
+
export declare class GcHistogram {
|
|
7
|
+
#private;
|
|
8
|
+
/** Add one `gc` performance entry. Its duration is in ms. */
|
|
9
|
+
record(entry: Pick<PerformanceEntry, "duration"> & {
|
|
10
|
+
detail?: unknown;
|
|
11
|
+
}): void;
|
|
12
|
+
/** The pauses since the last call, one point per GC type, then start over. */
|
|
13
|
+
drain(startMs: number, timeMs: number): MetricPoint[];
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=gc.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gc.d.ts","sourceRoot":"","sources":["../../src/metrics/gc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,sDAAsD;AACtD,eAAO,MAAM,SAAS,UAAqB,CAAC;AAiB5C,qFAAqF;AACrF,qBAAa,WAAW;;IAGtB,6DAA6D;IAC7D,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC,GAAG;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAW7E;IAED,8EAA8E;IAC9E,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW,EAAE,CAepD;CACF"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { constants } from "node:perf_hooks";
|
|
2
|
+
/** OTel advice for `v8js.gc.duration`, in seconds. */
|
|
3
|
+
export const GC_BOUNDS = [0.01, 0.1, 1, 10];
|
|
4
|
+
const KINDS = {
|
|
5
|
+
[constants.NODE_PERFORMANCE_GC_MAJOR]: "major",
|
|
6
|
+
[constants.NODE_PERFORMANCE_GC_MINOR]: "minor",
|
|
7
|
+
[constants.NODE_PERFORMANCE_GC_INCREMENTAL]: "incremental",
|
|
8
|
+
[constants.NODE_PERFORMANCE_GC_WEAKCB]: "weakcb",
|
|
9
|
+
};
|
|
10
|
+
/** Collects GC pauses between samples and turns them into delta histogram points. */
|
|
11
|
+
export class GcHistogram {
|
|
12
|
+
#bins = new Map();
|
|
13
|
+
/** Add one `gc` performance entry. Its duration is in ms. */
|
|
14
|
+
record(entry) {
|
|
15
|
+
const kind = KINDS[entry.detail?.kind ?? -1] ?? "major";
|
|
16
|
+
const seconds = entry.duration / 1000;
|
|
17
|
+
const b = this.#bins.get(kind) ?? { count: 0, sum: 0, min: seconds, max: seconds, counts: new Array(GC_BOUNDS.length + 1).fill(0) };
|
|
18
|
+
const i = GC_BOUNDS.findIndex((bound) => seconds <= bound);
|
|
19
|
+
b.counts[i < 0 ? GC_BOUNDS.length : i]++;
|
|
20
|
+
b.count++;
|
|
21
|
+
b.sum += seconds;
|
|
22
|
+
b.min = Math.min(b.min, seconds);
|
|
23
|
+
b.max = Math.max(b.max, seconds);
|
|
24
|
+
this.#bins.set(kind, b);
|
|
25
|
+
}
|
|
26
|
+
/** The pauses since the last call, one point per GC type, then start over. */
|
|
27
|
+
drain(startMs, timeMs) {
|
|
28
|
+
const out = [...this.#bins].map(([kind, b]) => ({
|
|
29
|
+
name: "v8js.gc.duration",
|
|
30
|
+
kind: "histogram",
|
|
31
|
+
unit: "s",
|
|
32
|
+
description: "Garbage collection duration.",
|
|
33
|
+
service: "",
|
|
34
|
+
temporality: "delta",
|
|
35
|
+
attributes: { "v8js.gc.type": kind },
|
|
36
|
+
timeMs,
|
|
37
|
+
startMs,
|
|
38
|
+
histogram: { count: b.count, sum: b.sum, min: b.min, max: b.max, bounds: [...GC_BOUNDS], counts: b.counts },
|
|
39
|
+
}));
|
|
40
|
+
this.#bins.clear();
|
|
41
|
+
return out;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=gc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gc.js","sourceRoot":"","sources":["../../src/metrics/gc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAyB,MAAM,iBAAiB,CAAC;AAGnE,sDAAsD;AACtD,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;AAE5C,MAAM,KAAK,GAA2B;IACpC,CAAC,SAAS,CAAC,yBAAyB,CAAC,EAAE,OAAO;IAC9C,CAAC,SAAS,CAAC,yBAAyB,CAAC,EAAE,OAAO;IAC9C,CAAC,SAAS,CAAC,+BAA+B,CAAC,EAAE,aAAa;IAC1D,CAAC,SAAS,CAAC,0BAA0B,CAAC,EAAE,QAAQ;CACjD,CAAC;AAUF,qFAAqF;AACrF,MAAM,OAAO,WAAW;IACtB,KAAK,GAAG,IAAI,GAAG,EAAgB,CAAC;IAEhC,6DAA6D;IAC7D,MAAM,CAAC,KAAgE;QACrE,MAAM,IAAI,GAAG,KAAK,CAAE,KAAK,CAAC,MAAwC,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC;QAC3F,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;QACtC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACpI,MAAM,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,CAAC,CAAC;QAC3D,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,CAAC,CAAC,KAAK,EAAE,CAAC;QACV,CAAC,CAAC,GAAG,IAAI,OAAO,CAAC;QACjB,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACjC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACjC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC1B,CAAC;IAED,8EAA8E;IAC9E,KAAK,CAAC,OAAe,EAAE,MAAc;QACnC,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9C,IAAI,EAAE,kBAAkB;YACxB,IAAI,EAAE,WAAoB;YAC1B,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,8BAA8B;YAC3C,OAAO,EAAE,EAAE;YACX,WAAW,EAAE,OAAgB;YAC7B,UAAU,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE;YACpC,MAAM;YACN,OAAO;YACP,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,GAAG,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;SAC5G,CAAC,CAAC,CAAC;QACJ,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnB,OAAO,GAAG,CAAC;IACb,CAAC;CACF"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { type MetricPoint } from "@wizeworks/lens-core";
|
|
2
|
+
import type { WizeLens } from "../types.js";
|
|
3
|
+
type HrTime = [number, number];
|
|
4
|
+
interface SdkPoint {
|
|
5
|
+
startTime?: HrTime;
|
|
6
|
+
endTime?: HrTime;
|
|
7
|
+
attributes?: Record<string, unknown>;
|
|
8
|
+
value?: unknown;
|
|
9
|
+
}
|
|
10
|
+
interface SdkMetric {
|
|
11
|
+
descriptor?: {
|
|
12
|
+
name?: string;
|
|
13
|
+
unit?: string;
|
|
14
|
+
description?: string;
|
|
15
|
+
};
|
|
16
|
+
dataPointType?: number;
|
|
17
|
+
isMonotonic?: boolean;
|
|
18
|
+
aggregationTemporality?: number;
|
|
19
|
+
dataPoints?: SdkPoint[];
|
|
20
|
+
}
|
|
21
|
+
/** The `ResourceMetrics` shape of `@opentelemetry/sdk-metrics`. */
|
|
22
|
+
export interface SdkResourceMetrics {
|
|
23
|
+
scopeMetrics?: {
|
|
24
|
+
metrics?: SdkMetric[];
|
|
25
|
+
}[];
|
|
26
|
+
}
|
|
27
|
+
/** OpenTelemetry SDK metrics as WizeLens points. */
|
|
28
|
+
export declare function pointsFromSdk(rm: SdkResourceMetrics): MetricPoint[];
|
|
29
|
+
/** An OpenTelemetry exporter for app metrics: `new PeriodicExportingMetricReader({ exporter: wizelensMetricExporter(wizelens) })`. */
|
|
30
|
+
export declare function wizelensMetricExporter(wizelens: WizeLens): {
|
|
31
|
+
export(metrics: SdkResourceMetrics, resultCallback: (result: {
|
|
32
|
+
code: number;
|
|
33
|
+
error?: Error;
|
|
34
|
+
}) => void): void;
|
|
35
|
+
forceFlush: () => Promise<void>;
|
|
36
|
+
shutdown: () => Promise<void>;
|
|
37
|
+
};
|
|
38
|
+
export {};
|
|
39
|
+
//# sourceMappingURL=otel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"otel.d.ts","sourceRoot":"","sources":["../../src/metrics/otel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,WAAW,EAAoB,MAAM,sBAAsB,CAAC;AAE3F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAG5C,KAAK,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAC/B,UAAU,QAAQ;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AACD,UAAU,SAAS;IACjB,UAAU,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACpE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC;CACzB;AACD,mEAAmE;AACnE,MAAM,WAAW,kBAAkB;IACjC,YAAY,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,SAAS,EAAE,CAAA;KAAE,EAAE,CAAC;CAC5C;AA4CD,oDAAoD;AACpD,wBAAgB,aAAa,CAAC,EAAE,EAAE,kBAAkB,GAAG,WAAW,EAAE,CAEnE;AAED,sIAAsI;AACtI,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,QAAQ;IAErD,MAAM,UAAU,kBAAkB,kBAAkB,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,KAAK,CAAA;KAAE,KAAK,IAAI,GAAG,IAAI;IAQ5G,UAAU,QAAY,OAAO,CAAC,IAAI,CAAC;IACnC,QAAQ,QAAY,OAAO,CAAC,IAAI,CAAC;EAEpC"}
|