@dxos/observability 0.8.4-main.f9ba587 → 0.8.4-main.fcfe5033a5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -11
- package/dist/lib/browser/chunk-J5LGTIGS.mjs +10 -0
- package/dist/lib/browser/chunk-K4VFBKST.mjs +13 -0
- package/dist/lib/browser/chunk-K4VFBKST.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +1087 -34
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/log-processor-FDLTDQEM.mjs +45 -0
- package/dist/lib/browser/log-processor-FDLTDQEM.mjs.map +7 -0
- package/dist/lib/browser/logs-ATTRIUTL.mjs +113 -0
- package/dist/lib/browser/logs-ATTRIUTL.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/metrics-PKTV6IGF.mjs +130 -0
- package/dist/lib/browser/metrics-PKTV6IGF.mjs.map +7 -0
- package/dist/lib/browser/traces-browser-Y4FFWRIR.mjs +166 -0
- package/dist/lib/browser/traces-browser-Y4FFWRIR.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-FEVP3MK4.mjs +15 -0
- package/dist/lib/node-esm/chunk-FEVP3MK4.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
- package/dist/lib/node-esm/index.mjs +1084 -34
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/log-processor-TKJVJJSJ.mjs +46 -0
- package/dist/lib/node-esm/log-processor-TKJVJJSJ.mjs.map +7 -0
- package/dist/lib/node-esm/logs-7J45KLM7.mjs +114 -0
- package/dist/lib/node-esm/logs-7J45KLM7.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/metrics-H7DDLYSG.mjs +131 -0
- package/dist/lib/node-esm/metrics-H7DDLYSG.mjs.map +7 -0
- package/dist/lib/node-esm/traces-NPNTEOS6.mjs +137 -0
- package/dist/lib/node-esm/traces-NPNTEOS6.mjs.map +7 -0
- package/dist/types/src/cli-observability-secrets.json +3 -4
- package/dist/types/src/extensions/index.d.ts +3 -0
- package/dist/types/src/extensions/index.d.ts.map +1 -0
- package/dist/types/src/extensions/index.js +6 -0
- package/dist/types/src/extensions/index.js.map +1 -0
- package/dist/types/src/extensions/otel/extension.d.ts +23 -0
- package/dist/types/src/extensions/otel/extension.d.ts.map +1 -0
- package/dist/types/src/extensions/otel/extension.js +201 -0
- package/dist/types/src/extensions/otel/extension.js.map +1 -0
- package/dist/types/src/extensions/otel/index.d.ts +2 -0
- package/dist/types/src/extensions/otel/index.d.ts.map +1 -0
- package/dist/types/src/extensions/otel/index.js +5 -0
- package/dist/types/src/extensions/otel/index.js.map +1 -0
- package/dist/types/src/{otel → extensions/otel}/logs.d.ts +4 -3
- package/dist/types/src/extensions/otel/logs.d.ts.map +1 -0
- package/dist/types/src/extensions/otel/logs.js +104 -0
- package/dist/types/src/extensions/otel/logs.js.map +1 -0
- package/dist/types/src/{otel → extensions/otel}/metrics.d.ts +0 -1
- package/dist/types/src/extensions/otel/metrics.d.ts.map +1 -0
- package/dist/types/src/{otel → extensions/otel}/metrics.js +6 -12
- package/dist/types/src/extensions/otel/metrics.js.map +1 -0
- package/dist/types/src/{otel → extensions/otel}/otel.d.ts +3 -3
- package/dist/types/src/extensions/otel/otel.d.ts.map +1 -0
- package/dist/types/src/{otel → extensions/otel}/otel.js +1 -1
- package/dist/types/src/extensions/otel/otel.js.map +1 -0
- package/dist/types/src/extensions/otel/span-processors.d.ts +25 -0
- package/dist/types/src/extensions/otel/span-processors.d.ts.map +1 -0
- package/dist/types/src/extensions/otel/span-processors.js +41 -0
- package/dist/types/src/extensions/otel/span-processors.js.map +1 -0
- package/dist/types/src/extensions/otel/traces-browser.d.ts +25 -0
- package/dist/types/src/extensions/otel/traces-browser.d.ts.map +1 -0
- package/dist/types/src/extensions/otel/traces-browser.js +104 -0
- package/dist/types/src/extensions/otel/traces-browser.js.map +1 -0
- package/dist/types/src/extensions/otel/traces.d.ts +25 -0
- package/dist/types/src/extensions/otel/traces.d.ts.map +1 -0
- package/dist/types/src/extensions/otel/traces.js +87 -0
- package/dist/types/src/extensions/otel/traces.js.map +1 -0
- package/dist/types/src/extensions/posthog/extension.d.ts +18 -0
- package/dist/types/src/extensions/posthog/extension.d.ts.map +1 -0
- package/dist/types/src/extensions/posthog/extension.js +144 -0
- package/dist/types/src/extensions/posthog/extension.js.map +1 -0
- package/dist/types/src/extensions/posthog/index.d.ts +2 -0
- package/dist/types/src/extensions/posthog/index.d.ts.map +1 -0
- package/dist/types/src/extensions/posthog/index.js +5 -0
- package/dist/types/src/extensions/posthog/index.js.map +1 -0
- package/dist/types/src/extensions/posthog/log-processor.d.ts +3 -0
- package/dist/types/src/extensions/posthog/log-processor.d.ts.map +1 -0
- package/dist/types/src/extensions/posthog/log-processor.js +45 -0
- package/dist/types/src/extensions/posthog/log-processor.js.map +1 -0
- package/dist/types/src/extensions/posthog/log-processor.test.d.ts +2 -0
- package/dist/types/src/extensions/posthog/log-processor.test.d.ts.map +1 -0
- package/dist/types/src/extensions/posthog/log-processor.test.js +146 -0
- package/dist/types/src/extensions/posthog/log-processor.test.js.map +1 -0
- package/dist/types/src/extensions/stub.d.ts +3 -0
- package/dist/types/src/extensions/stub.d.ts.map +1 -0
- package/dist/types/src/extensions/stub.js +16 -0
- package/dist/types/src/extensions/stub.js.map +1 -0
- package/dist/types/src/index.d.ts +3 -2
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/index.js +4 -3
- package/dist/types/src/index.js.map +1 -1
- package/dist/types/src/observability-extension.d.ts +74 -0
- package/dist/types/src/observability-extension.d.ts.map +1 -0
- package/dist/types/src/observability-extension.js +5 -0
- package/dist/types/src/observability-extension.js.map +1 -0
- package/dist/types/src/observability.d.ts +32 -110
- package/dist/types/src/observability.d.ts.map +1 -1
- package/dist/types/src/observability.js +176 -455
- package/dist/types/src/observability.js.map +1 -1
- package/dist/types/src/observability.test.d.ts +2 -0
- package/dist/types/src/observability.test.d.ts.map +1 -0
- package/dist/types/src/observability.test.js +312 -0
- package/dist/types/src/observability.test.js.map +1 -0
- package/dist/types/src/providers/client-observability.d.ts +11 -0
- package/dist/types/src/providers/client-observability.d.ts.map +1 -0
- package/dist/types/src/providers/client-observability.js +200 -0
- package/dist/types/src/providers/client-observability.js.map +1 -0
- package/dist/types/src/providers/index.d.ts +4 -0
- package/dist/types/src/providers/index.d.ts.map +1 -0
- package/dist/types/src/providers/index.js +7 -0
- package/dist/types/src/providers/index.js.map +1 -0
- package/dist/types/src/providers/ip-data.d.ts +5 -0
- package/dist/types/src/providers/ip-data.d.ts.map +1 -0
- package/dist/types/src/providers/ip-data.js +57 -0
- package/dist/types/src/providers/ip-data.js.map +1 -0
- package/dist/types/src/providers/storage.d.ts +3 -0
- package/dist/types/src/providers/storage.d.ts.map +1 -0
- package/dist/types/src/providers/storage.js +19 -0
- package/dist/types/src/providers/storage.js.map +1 -0
- package/dist/types/src/storage/browser.d.ts +19 -0
- package/dist/types/src/storage/browser.d.ts.map +1 -0
- package/dist/types/src/storage/browser.js +69 -0
- package/dist/types/src/storage/browser.js.map +1 -0
- package/dist/types/src/storage/index.d.ts +2 -0
- package/dist/types/src/storage/index.d.ts.map +1 -0
- package/{src/segment/index.ts → dist/types/src/storage/index.js} +1 -2
- package/dist/types/src/storage/index.js.map +1 -0
- package/dist/types/src/storage/node.d.ts +26 -0
- package/dist/types/src/storage/node.d.ts.map +1 -0
- package/dist/types/src/storage/node.js +92 -0
- package/dist/types/src/storage/node.js.map +1 -0
- package/dist/types/src/storage/node.test.d.ts +2 -0
- package/dist/types/src/storage/node.test.d.ts.map +1 -0
- package/dist/types/src/storage/node.test.js +103 -0
- package/dist/types/src/storage/node.test.js.map +1 -0
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +45 -63
- package/src/cli-observability-secrets.json +3 -4
- package/src/extensions/index.ts +6 -0
- package/src/extensions/otel/extension.ts +258 -0
- package/src/extensions/otel/index.ts +5 -0
- package/src/extensions/otel/logs.ts +134 -0
- package/src/{otel → extensions/otel}/metrics.ts +4 -21
- package/src/{otel → extensions/otel}/otel.ts +4 -4
- package/src/extensions/otel/span-processors.ts +45 -0
- package/src/extensions/otel/traces-browser.ts +139 -0
- package/src/extensions/otel/traces.ts +113 -0
- package/src/extensions/posthog/extension.ts +176 -0
- package/src/extensions/posthog/index.ts +5 -0
- package/src/extensions/posthog/log-processor.test.ts +185 -0
- package/src/extensions/posthog/log-processor.ts +54 -0
- package/src/extensions/stub.ts +19 -0
- package/src/index.ts +4 -3
- package/src/observability-extension.ts +94 -0
- package/src/observability.test.ts +531 -0
- package/src/observability.ts +236 -577
- package/src/providers/client-observability.ts +253 -0
- package/src/providers/index.ts +7 -0
- package/src/providers/ip-data.ts +91 -0
- package/src/providers/storage.ts +23 -0
- package/src/storage/browser.ts +71 -0
- package/src/{sentry → storage}/index.ts +0 -1
- package/src/storage/node.test.ts +129 -0
- package/src/{helpers/node-observability.ts → storage/node.ts} +41 -70
- package/src/vite-import-meta.d.ts +14 -0
- package/dist/lib/browser/chunk-33TCMAUB.mjs +0 -996
- package/dist/lib/browser/chunk-33TCMAUB.mjs.map +0 -7
- package/dist/lib/browser/chunk-5OQYI27L.mjs +0 -1
- package/dist/lib/browser/chunk-MWTIKIBZ.mjs +0 -147
- package/dist/lib/browser/chunk-MWTIKIBZ.mjs.map +0 -7
- package/dist/lib/browser/chunk-YEPQFAES.mjs +0 -164
- package/dist/lib/browser/chunk-YEPQFAES.mjs.map +0 -7
- package/dist/lib/browser/observability-EEM6BEY6.mjs +0 -10
- package/dist/lib/browser/otel-IRDZ7PES.mjs +0 -277
- package/dist/lib/browser/otel-IRDZ7PES.mjs.map +0 -7
- package/dist/lib/browser/segment/index.mjs +0 -11
- package/dist/lib/browser/segment/index.mjs.map +0 -7
- package/dist/lib/browser/sentry/index.mjs +0 -24
- package/dist/lib/browser/sentry/index.mjs.map +0 -7
- package/dist/lib/browser/sentry-log-processor-3F3SBJXM.mjs +0 -146
- package/dist/lib/browser/sentry-log-processor-3F3SBJXM.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-552KLA6Z.mjs +0 -202
- package/dist/lib/node-esm/chunk-552KLA6Z.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-EYW4X3O6.mjs +0 -997
- package/dist/lib/node-esm/chunk-EYW4X3O6.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-MRAK2H7O.mjs +0 -2
- package/dist/lib/node-esm/chunk-MRAK2H7O.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-TEH6VIKV.mjs +0 -135
- package/dist/lib/node-esm/chunk-TEH6VIKV.mjs.map +0 -7
- package/dist/lib/node-esm/observability-DAXZGOBS.mjs +0 -11
- package/dist/lib/node-esm/observability-DAXZGOBS.mjs.map +0 -7
- package/dist/lib/node-esm/otel-62HYJETM.mjs +0 -260
- package/dist/lib/node-esm/otel-62HYJETM.mjs.map +0 -7
- package/dist/lib/node-esm/segment/index.mjs +0 -12
- package/dist/lib/node-esm/segment/index.mjs.map +0 -7
- package/dist/lib/node-esm/sentry/index.mjs +0 -25
- package/dist/lib/node-esm/sentry/index.mjs.map +0 -7
- package/dist/lib/node-esm/sentry-log-processor-JAYRA23C.mjs +0 -147
- package/dist/lib/node-esm/sentry-log-processor-JAYRA23C.mjs.map +0 -7
- package/dist/types/src/helpers/browser-observability.d.ts +0 -17
- package/dist/types/src/helpers/browser-observability.d.ts.map +0 -1
- package/dist/types/src/helpers/browser-observability.js +0 -140
- package/dist/types/src/helpers/browser-observability.js.map +0 -1
- package/dist/types/src/helpers/common.d.ts +0 -12
- package/dist/types/src/helpers/common.d.ts.map +0 -1
- package/dist/types/src/helpers/common.js +0 -23
- package/dist/types/src/helpers/common.js.map +0 -1
- package/dist/types/src/helpers/index.d.ts +0 -6
- package/dist/types/src/helpers/index.d.ts.map +0 -1
- package/dist/types/src/helpers/index.js +0 -9
- package/dist/types/src/helpers/index.js.map +0 -1
- package/dist/types/src/helpers/map-spaces.d.ts +0 -18
- package/dist/types/src/helpers/map-spaces.d.ts.map +0 -1
- package/dist/types/src/helpers/map-spaces.js +0 -37
- package/dist/types/src/helpers/map-spaces.js.map +0 -1
- package/dist/types/src/helpers/node-observability.d.ts +0 -24
- package/dist/types/src/helpers/node-observability.d.ts.map +0 -1
- package/dist/types/src/helpers/node-observability.js +0 -101
- package/dist/types/src/helpers/node-observability.js.map +0 -1
- package/dist/types/src/helpers/setup-telemetry-listeners.d.ts +0 -4
- package/dist/types/src/helpers/setup-telemetry-listeners.d.ts.map +0 -1
- package/dist/types/src/helpers/setup-telemetry-listeners.js +0 -97
- package/dist/types/src/helpers/setup-telemetry-listeners.js.map +0 -1
- package/dist/types/src/otel/index.d.ts +0 -5
- package/dist/types/src/otel/index.d.ts.map +0 -1
- package/dist/types/src/otel/index.js +0 -8
- package/dist/types/src/otel/index.js.map +0 -1
- package/dist/types/src/otel/logs.d.ts.map +0 -1
- package/dist/types/src/otel/logs.js +0 -71
- package/dist/types/src/otel/logs.js.map +0 -1
- package/dist/types/src/otel/metrics.d.ts.map +0 -1
- package/dist/types/src/otel/metrics.js.map +0 -1
- package/dist/types/src/otel/otel.d.ts.map +0 -1
- package/dist/types/src/otel/otel.js.map +0 -1
- package/dist/types/src/otel/traces-browser.d.ts +0 -8
- package/dist/types/src/otel/traces-browser.d.ts.map +0 -1
- package/dist/types/src/otel/traces-browser.js +0 -47
- package/dist/types/src/otel/traces-browser.js.map +0 -1
- package/dist/types/src/otel/traces.d.ts +0 -8
- package/dist/types/src/otel/traces.d.ts.map +0 -1
- package/dist/types/src/otel/traces.js +0 -40
- package/dist/types/src/otel/traces.js.map +0 -1
- package/dist/types/src/segment/base.d.ts +0 -15
- package/dist/types/src/segment/base.d.ts.map +0 -1
- package/dist/types/src/segment/base.js +0 -50
- package/dist/types/src/segment/base.js.map +0 -1
- package/dist/types/src/segment/browser.d.ts +0 -15
- package/dist/types/src/segment/browser.d.ts.map +0 -1
- package/dist/types/src/segment/browser.js +0 -67
- package/dist/types/src/segment/browser.js.map +0 -1
- package/dist/types/src/segment/index.d.ts +0 -3
- package/dist/types/src/segment/index.d.ts.map +0 -1
- package/dist/types/src/segment/index.js +0 -6
- package/dist/types/src/segment/index.js.map +0 -1
- package/dist/types/src/segment/node.d.ts +0 -16
- package/dist/types/src/segment/node.d.ts.map +0 -1
- package/dist/types/src/segment/node.js +0 -83
- package/dist/types/src/segment/node.js.map +0 -1
- package/dist/types/src/segment/types.d.ts +0 -52
- package/dist/types/src/segment/types.d.ts.map +0 -1
- package/dist/types/src/segment/types.js +0 -18
- package/dist/types/src/segment/types.js.map +0 -1
- package/dist/types/src/sentry/browser.d.ts +0 -32
- package/dist/types/src/sentry/browser.d.ts.map +0 -1
- package/dist/types/src/sentry/browser.js +0 -112
- package/dist/types/src/sentry/browser.js.map +0 -1
- package/dist/types/src/sentry/index.d.ts +0 -3
- package/dist/types/src/sentry/index.d.ts.map +0 -1
- package/dist/types/src/sentry/index.js +0 -6
- package/dist/types/src/sentry/index.js.map +0 -1
- package/dist/types/src/sentry/node.d.ts +0 -32
- package/dist/types/src/sentry/node.d.ts.map +0 -1
- package/dist/types/src/sentry/node.js +0 -111
- package/dist/types/src/sentry/node.js.map +0 -1
- package/dist/types/src/sentry/node.node.test.d.ts +0 -2
- package/dist/types/src/sentry/node.node.test.d.ts.map +0 -1
- package/dist/types/src/sentry/node.node.test.js +0 -34
- package/dist/types/src/sentry/node.node.test.js.map +0 -1
- package/dist/types/src/sentry/sentry-log-processor.d.ts +0 -9
- package/dist/types/src/sentry/sentry-log-processor.d.ts.map +0 -1
- package/dist/types/src/sentry/sentry-log-processor.js +0 -149
- package/dist/types/src/sentry/sentry-log-processor.js.map +0 -1
- package/dist/types/src/sentry/sentry.node.test.d.ts +0 -2
- package/dist/types/src/sentry/sentry.node.test.d.ts.map +0 -1
- package/dist/types/src/sentry/sentry.node.test.js +0 -28
- package/dist/types/src/sentry/sentry.node.test.js.map +0 -1
- package/dist/types/src/sentry/types.d.ts +0 -18
- package/dist/types/src/sentry/types.d.ts.map +0 -1
- package/dist/types/src/sentry/types.js +0 -4
- package/dist/types/src/sentry/types.js.map +0 -1
- package/dist/types/src/testing/index.d.ts +0 -2
- package/dist/types/src/testing/index.d.ts.map +0 -1
- package/dist/types/src/testing/index.js +0 -5
- package/dist/types/src/testing/index.js.map +0 -1
- package/dist/types/src/testing/testkit/browser.d.ts +0 -2
- package/dist/types/src/testing/testkit/browser.d.ts.map +0 -1
- package/dist/types/src/testing/testkit/browser.js +0 -7
- package/dist/types/src/testing/testkit/browser.js.map +0 -1
- package/dist/types/src/testing/testkit/index.d.ts +0 -2
- package/dist/types/src/testing/testkit/index.d.ts.map +0 -1
- package/dist/types/src/testing/testkit/index.js +0 -6
- package/dist/types/src/testing/testkit/index.js.map +0 -1
- package/src/helpers/browser-observability.ts +0 -177
- package/src/helpers/common.ts +0 -38
- package/src/helpers/index.ts +0 -9
- package/src/helpers/map-spaces.ts +0 -48
- package/src/helpers/setup-telemetry-listeners.ts +0 -108
- package/src/otel/index.ts +0 -8
- package/src/otel/logs.ts +0 -100
- package/src/otel/traces-browser.ts +0 -59
- package/src/otel/traces.ts +0 -57
- package/src/segment/base.ts +0 -69
- package/src/segment/browser.ts +0 -68
- package/src/segment/node.ts +0 -94
- package/src/segment/types.ts +0 -57
- package/src/sentry/browser.ts +0 -133
- package/src/sentry/node.node.test.ts +0 -39
- package/src/sentry/node.ts +0 -126
- package/src/sentry/sentry-log-processor.ts +0 -166
- package/src/sentry/sentry.node.test.ts +0 -34
- package/src/sentry/types.ts +0 -22
- package/src/testing/index.ts +0 -5
- package/src/testing/testkit/browser.ts +0 -8
- package/src/testing/testkit/index.ts +0 -7
- package/src/testing/testkit/shims.d.ts +0 -5
- /package/dist/lib/browser/{chunk-5OQYI27L.mjs.map → chunk-J5LGTIGS.mjs.map} +0 -0
- /package/dist/lib/{browser/observability-EEM6BEY6.mjs.map → node-esm/chunk-HSLMI22Q.mjs.map} +0 -0
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import {
|
|
2
|
+
setDiagLogger
|
|
3
|
+
} from "./chunk-K4VFBKST.mjs";
|
|
4
|
+
import "./chunk-J5LGTIGS.mjs";
|
|
5
|
+
|
|
6
|
+
// src/extensions/otel/metrics.ts
|
|
7
|
+
import { OTLPMetricExporter } from "@opentelemetry/exporter-metrics-otlp-http";
|
|
8
|
+
import { MeterProvider, PeriodicExportingMetricReader } from "@opentelemetry/sdk-metrics";
|
|
9
|
+
import { log } from "@dxos/log";
|
|
10
|
+
import { TRACE_PROCESSOR } from "@dxos/tracing";
|
|
11
|
+
var __dxlog_file = "/__w/dxos/dxos/packages/sdk/observability/src/extensions/otel/metrics.ts";
|
|
12
|
+
var EXPORT_INTERVAL = 60 * 1e3;
|
|
13
|
+
var OtelMetrics = class {
|
|
14
|
+
options;
|
|
15
|
+
_meterProvider;
|
|
16
|
+
_meter;
|
|
17
|
+
constructor(options) {
|
|
18
|
+
this.options = options;
|
|
19
|
+
setDiagLogger(options.consoleDiagLogLevel);
|
|
20
|
+
const grafanaMetricReader = new PeriodicExportingMetricReader({
|
|
21
|
+
exporter: new OTLPMetricExporter({
|
|
22
|
+
url: this.options.endpoint + "/v1/metrics",
|
|
23
|
+
headers: this.options.headers
|
|
24
|
+
}),
|
|
25
|
+
exportIntervalMillis: EXPORT_INTERVAL
|
|
26
|
+
});
|
|
27
|
+
this._meterProvider = new MeterProvider({
|
|
28
|
+
resource: this.options.resource,
|
|
29
|
+
readers: [
|
|
30
|
+
grafanaMetricReader
|
|
31
|
+
]
|
|
32
|
+
});
|
|
33
|
+
this._meter = this._meterProvider.getMeter("dxos-observability");
|
|
34
|
+
const metrics = {
|
|
35
|
+
// TODO: update metrics names and remove prefix?
|
|
36
|
+
increment: (name, value, data) => {
|
|
37
|
+
this.increment(name, value, convertTags(data));
|
|
38
|
+
},
|
|
39
|
+
distribution: (name, value, data) => {
|
|
40
|
+
this.distribution(name, value, convertTags(data));
|
|
41
|
+
},
|
|
42
|
+
set: (name, value, data) => {
|
|
43
|
+
},
|
|
44
|
+
gauge: (name, value, data) => {
|
|
45
|
+
this.gauge(name, value, convertTags(data));
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
TRACE_PROCESSOR.remoteMetrics.registerProcessor(metrics);
|
|
49
|
+
}
|
|
50
|
+
gauge(name, value, tags) {
|
|
51
|
+
const gauge = this._meter.createGauge(name);
|
|
52
|
+
log("otel gauge", {
|
|
53
|
+
name,
|
|
54
|
+
value,
|
|
55
|
+
tags: {
|
|
56
|
+
...this.options.getTags(),
|
|
57
|
+
...tags
|
|
58
|
+
}
|
|
59
|
+
}, {
|
|
60
|
+
F: __dxlog_file,
|
|
61
|
+
L: 60,
|
|
62
|
+
S: this,
|
|
63
|
+
C: (f, a) => f(...a)
|
|
64
|
+
});
|
|
65
|
+
gauge.record(value, {
|
|
66
|
+
...this.options.getTags(),
|
|
67
|
+
...tags
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
increment(name, value, tags) {
|
|
71
|
+
const counter = this._meter.createCounter(name);
|
|
72
|
+
log("otel counter", {
|
|
73
|
+
name,
|
|
74
|
+
value,
|
|
75
|
+
tags: {
|
|
76
|
+
...this.options.getTags(),
|
|
77
|
+
...tags
|
|
78
|
+
}
|
|
79
|
+
}, {
|
|
80
|
+
F: __dxlog_file,
|
|
81
|
+
L: 66,
|
|
82
|
+
S: this,
|
|
83
|
+
C: (f, a) => f(...a)
|
|
84
|
+
});
|
|
85
|
+
counter.add(value ?? 1, {
|
|
86
|
+
...this.options.getTags(),
|
|
87
|
+
...tags
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
distribution(name, value, tags) {
|
|
91
|
+
const distribution = this._meter.createHistogram(name);
|
|
92
|
+
log("otel distribution", {
|
|
93
|
+
name,
|
|
94
|
+
value,
|
|
95
|
+
tags: {
|
|
96
|
+
...this.options.getTags(),
|
|
97
|
+
...tags
|
|
98
|
+
}
|
|
99
|
+
}, {
|
|
100
|
+
F: __dxlog_file,
|
|
101
|
+
L: 72,
|
|
102
|
+
S: this,
|
|
103
|
+
C: (f, a) => f(...a)
|
|
104
|
+
});
|
|
105
|
+
distribution.record(value, {
|
|
106
|
+
...this.options.getTags(),
|
|
107
|
+
...tags
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
flush() {
|
|
111
|
+
return this._meterProvider.forceFlush();
|
|
112
|
+
}
|
|
113
|
+
close() {
|
|
114
|
+
return this._meterProvider.shutdown();
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
var convertTags = (data) => {
|
|
118
|
+
if (data && data.tags) {
|
|
119
|
+
return Object.entries(data.tags).reduce((obj, [key, value]) => {
|
|
120
|
+
obj[key] = value;
|
|
121
|
+
return obj;
|
|
122
|
+
}, {});
|
|
123
|
+
} else {
|
|
124
|
+
return {};
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
export {
|
|
128
|
+
OtelMetrics
|
|
129
|
+
};
|
|
130
|
+
//# sourceMappingURL=metrics-PKTV6IGF.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/extensions/otel/metrics.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { type Meter } from '@opentelemetry/api';\nimport { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-http';\nimport { MeterProvider, PeriodicExportingMetricReader } from '@opentelemetry/sdk-metrics';\n\nimport { log } from '@dxos/log';\nimport { type MetricData, TRACE_PROCESSOR } from '@dxos/tracing';\n\nimport { type OtelOptions, setDiagLogger } from './otel';\n\nconst EXPORT_INTERVAL = 60 * 1000;\n\nexport class OtelMetrics {\n private _meterProvider: MeterProvider;\n private _meter: Meter;\n\n constructor(private readonly options: OtelOptions) {\n // TODO: improve error handling/logging\n // https://github.com/open-telemetry/opentelemetry-js/issues/4823\n setDiagLogger(options.consoleDiagLogLevel);\n\n const grafanaMetricReader = new PeriodicExportingMetricReader({\n exporter: new OTLPMetricExporter({\n url: this.options.endpoint + '/v1/metrics',\n headers: this.options.headers,\n }),\n exportIntervalMillis: EXPORT_INTERVAL,\n });\n\n this._meterProvider = new MeterProvider({\n resource: this.options.resource,\n readers: [grafanaMetricReader],\n });\n this._meter = this._meterProvider.getMeter('dxos-observability');\n\n const metrics = {\n // TODO: update metrics names and remove prefix?\n increment: (name: string, value?: number, data?: MetricData) => {\n this.increment(name, value, convertTags(data));\n },\n distribution: (name: string, value: number, data?: MetricData) => {\n this.distribution(name, value, convertTags(data));\n },\n set: (name: string, value: number | string, data?: MetricData) => {\n // Not implemented, not part of Otel spec.\n },\n gauge: (name: string, value: number, data?: MetricData) => {\n this.gauge(name, value, convertTags(data));\n },\n };\n\n TRACE_PROCESSOR.remoteMetrics.registerProcessor(metrics);\n }\n\n gauge(name: string, value: number, tags?: any): void {\n const gauge = this._meter.createGauge(name);\n log('otel gauge', { name, value, tags: { ...this.options.getTags(), ...tags } });\n gauge.record(value, { ...this.options.getTags(), ...tags });\n }\n\n increment(name: string, value?: number, tags?: any): void {\n const counter = this._meter.createCounter(name);\n log('otel counter', { name, value, tags: { ...this.options.getTags(), ...tags } });\n counter.add(value ?? 1, { ...this.options.getTags(), ...tags });\n }\n\n distribution(name: string, value: number, tags?: any): void {\n const distribution = this._meter.createHistogram(name);\n log('otel distribution', { name, value, tags: { ...this.options.getTags(), ...tags } });\n distribution.record(value, { ...this.options.getTags(), ...tags });\n }\n\n flush(): Promise<void> {\n return this._meterProvider.forceFlush();\n }\n\n close(): Promise<void> {\n return this._meterProvider.shutdown();\n }\n}\n\nconst convertTags = (data?: MetricData) => {\n if (data && data.tags) {\n return Object.entries(data.tags).reduce<{ [key: string]: any }>((obj, [key, value]) => {\n obj[key] = value;\n return obj;\n }, {});\n } else {\n return {};\n }\n};\n"],
|
|
5
|
+
"mappings": ";;;;;;AAKA,SAASA,0BAA0B;AACnC,SAASC,eAAeC,qCAAqC;AAE7D,SAASC,WAAW;AACpB,SAA0BC,uBAAuB;;AAIjD,IAAMC,kBAAkB,KAAK;AAEtB,IAAMC,cAAN,MAAMA;;EACHC;EACAC;EAER,YAA6BC,SAAsB;SAAtBA,UAAAA;AAG3BC,kBAAcD,QAAQE,mBAAmB;AAEzC,UAAMC,sBAAsB,IAAIC,8BAA8B;MAC5DC,UAAU,IAAIC,mBAAmB;QAC/BC,KAAK,KAAKP,QAAQQ,WAAW;QAC7BC,SAAS,KAAKT,QAAQS;MACxB,CAAA;MACAC,sBAAsBd;IACxB,CAAA;AAEA,SAAKE,iBAAiB,IAAIa,cAAc;MACtCC,UAAU,KAAKZ,QAAQY;MACvBC,SAAS;QAACV;;IACZ,CAAA;AACA,SAAKJ,SAAS,KAAKD,eAAegB,SAAS,oBAAA;AAE3C,UAAMC,UAAU;;MAEdC,WAAW,CAACC,MAAcC,OAAgBC,SAAAA;AACxC,aAAKH,UAAUC,MAAMC,OAAOE,YAAYD,IAAAA,CAAAA;MAC1C;MACAE,cAAc,CAACJ,MAAcC,OAAeC,SAAAA;AAC1C,aAAKE,aAAaJ,MAAMC,OAAOE,YAAYD,IAAAA,CAAAA;MAC7C;MACAG,KAAK,CAACL,MAAcC,OAAwBC,SAAAA;MAE5C;MACAI,OAAO,CAACN,MAAcC,OAAeC,SAAAA;AACnC,aAAKI,MAAMN,MAAMC,OAAOE,YAAYD,IAAAA,CAAAA;MACtC;IACF;AAEAK,oBAAgBC,cAAcC,kBAAkBX,OAAAA;EAClD;EAEAQ,MAAMN,MAAcC,OAAeS,MAAkB;AACnD,UAAMJ,QAAQ,KAAKxB,OAAO6B,YAAYX,IAAAA;AACtCY,QAAI,cAAc;MAAEZ;MAAMC;MAAOS,MAAM;QAAE,GAAG,KAAK3B,QAAQ8B,QAAO;QAAI,GAAGH;MAAK;IAAE,GAAA;;;;;;AAC9EJ,UAAMQ,OAAOb,OAAO;MAAE,GAAG,KAAKlB,QAAQ8B,QAAO;MAAI,GAAGH;IAAK,CAAA;EAC3D;EAEAX,UAAUC,MAAcC,OAAgBS,MAAkB;AACxD,UAAMK,UAAU,KAAKjC,OAAOkC,cAAchB,IAAAA;AAC1CY,QAAI,gBAAgB;MAAEZ;MAAMC;MAAOS,MAAM;QAAE,GAAG,KAAK3B,QAAQ8B,QAAO;QAAI,GAAGH;MAAK;IAAE,GAAA;;;;;;AAChFK,YAAQE,IAAIhB,SAAS,GAAG;MAAE,GAAG,KAAKlB,QAAQ8B,QAAO;MAAI,GAAGH;IAAK,CAAA;EAC/D;EAEAN,aAAaJ,MAAcC,OAAeS,MAAkB;AAC1D,UAAMN,eAAe,KAAKtB,OAAOoC,gBAAgBlB,IAAAA;AACjDY,QAAI,qBAAqB;MAAEZ;MAAMC;MAAOS,MAAM;QAAE,GAAG,KAAK3B,QAAQ8B,QAAO;QAAI,GAAGH;MAAK;IAAE,GAAA;;;;;;AACrFN,iBAAaU,OAAOb,OAAO;MAAE,GAAG,KAAKlB,QAAQ8B,QAAO;MAAI,GAAGH;IAAK,CAAA;EAClE;EAEAS,QAAuB;AACrB,WAAO,KAAKtC,eAAeuC,WAAU;EACvC;EAEAC,QAAuB;AACrB,WAAO,KAAKxC,eAAeyC,SAAQ;EACrC;AACF;AAEA,IAAMnB,cAAc,CAACD,SAAAA;AACnB,MAAIA,QAAQA,KAAKQ,MAAM;AACrB,WAAOa,OAAOC,QAAQtB,KAAKQ,IAAI,EAAEe,OAA+B,CAACC,KAAK,CAACC,KAAK1B,KAAAA,MAAM;AAChFyB,UAAIC,GAAAA,IAAO1B;AACX,aAAOyB;IACT,GAAG,CAAC,CAAA;EACN,OAAO;AACL,WAAO,CAAC;EACV;AACF;",
|
|
6
|
+
"names": ["OTLPMetricExporter", "MeterProvider", "PeriodicExportingMetricReader", "log", "TRACE_PROCESSOR", "EXPORT_INTERVAL", "OtelMetrics", "_meterProvider", "_meter", "options", "setDiagLogger", "consoleDiagLogLevel", "grafanaMetricReader", "PeriodicExportingMetricReader", "exporter", "OTLPMetricExporter", "url", "endpoint", "headers", "exportIntervalMillis", "MeterProvider", "resource", "readers", "getMeter", "metrics", "increment", "name", "value", "data", "convertTags", "distribution", "set", "gauge", "TRACE_PROCESSOR", "remoteMetrics", "registerProcessor", "tags", "createGauge", "log", "getTags", "record", "counter", "createCounter", "add", "createHistogram", "flush", "forceFlush", "close", "shutdown", "Object", "entries", "reduce", "obj", "key"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import "./chunk-J5LGTIGS.mjs";
|
|
2
|
+
|
|
3
|
+
// src/extensions/otel/traces-browser.ts
|
|
4
|
+
import { ROOT_CONTEXT, SpanStatusCode, context as otelContext, propagation, trace } from "@opentelemetry/api";
|
|
5
|
+
import { getWebAutoInstrumentations } from "@opentelemetry/auto-instrumentations-web";
|
|
6
|
+
import { W3CTraceContextPropagator } from "@opentelemetry/core";
|
|
7
|
+
import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http";
|
|
8
|
+
import { registerInstrumentations } from "@opentelemetry/instrumentation";
|
|
9
|
+
import { AlwaysOnSampler, BatchSpanProcessor, ParentBasedSampler, TraceIdRatioBasedSampler } from "@opentelemetry/sdk-trace-base";
|
|
10
|
+
import { WebTracerProvider } from "@opentelemetry/sdk-trace-web";
|
|
11
|
+
import { ATTR_SERVICE_VERSION } from "@opentelemetry/semantic-conventions";
|
|
12
|
+
import { log as log2 } from "@dxos/log";
|
|
13
|
+
import { TRACE_ALL_KEY, TRACE_PROCESSOR } from "@dxos/tracing";
|
|
14
|
+
|
|
15
|
+
// src/extensions/otel/span-processors.ts
|
|
16
|
+
import { log } from "@dxos/log";
|
|
17
|
+
var __dxlog_file = "/__w/dxos/dxos/packages/sdk/observability/src/extensions/otel/span-processors.ts";
|
|
18
|
+
var TagInjectorSpanProcessor = class {
|
|
19
|
+
_getTags;
|
|
20
|
+
constructor(_getTags) {
|
|
21
|
+
this._getTags = _getTags;
|
|
22
|
+
}
|
|
23
|
+
onStart(span, _parentContext) {
|
|
24
|
+
let tags;
|
|
25
|
+
try {
|
|
26
|
+
tags = this._getTags();
|
|
27
|
+
} catch (err) {
|
|
28
|
+
log.catch(err, void 0, {
|
|
29
|
+
F: __dxlog_file,
|
|
30
|
+
L: 32,
|
|
31
|
+
S: this,
|
|
32
|
+
C: (f, a) => f(...a)
|
|
33
|
+
});
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
for (const [key, value] of Object.entries(tags)) {
|
|
37
|
+
span.setAttribute(key, value);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
onEnd(_span) {
|
|
41
|
+
}
|
|
42
|
+
async shutdown() {
|
|
43
|
+
}
|
|
44
|
+
async forceFlush() {
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
// src/extensions/otel/traces-browser.ts
|
|
49
|
+
var __dxlog_file2 = "/__w/dxos/dxos/packages/sdk/observability/src/extensions/otel/traces-browser.ts";
|
|
50
|
+
var OtelTraces = class {
|
|
51
|
+
options;
|
|
52
|
+
_tracer;
|
|
53
|
+
_tracerProvider;
|
|
54
|
+
constructor(options) {
|
|
55
|
+
this.options = options;
|
|
56
|
+
propagation.setGlobalPropagator(new W3CTraceContextPropagator());
|
|
57
|
+
const forceTraceAll = typeof localStorage !== "undefined" && localStorage.getItem(TRACE_ALL_KEY) === "true";
|
|
58
|
+
this._tracerProvider = new WebTracerProvider({
|
|
59
|
+
resource: this.options.resource,
|
|
60
|
+
sampler: new ParentBasedSampler({
|
|
61
|
+
root: forceTraceAll ? new AlwaysOnSampler() : new TraceIdRatioBasedSampler(0.3)
|
|
62
|
+
}),
|
|
63
|
+
spanProcessors: [
|
|
64
|
+
new TagInjectorSpanProcessor(this.options.getTags),
|
|
65
|
+
new BatchSpanProcessor(new OTLPTraceExporter({
|
|
66
|
+
url: this.options.endpoint + "/v1/traces",
|
|
67
|
+
headers: this.options.headers,
|
|
68
|
+
concurrencyLimit: 10
|
|
69
|
+
}), {
|
|
70
|
+
scheduledDelayMillis: 5e3
|
|
71
|
+
})
|
|
72
|
+
]
|
|
73
|
+
});
|
|
74
|
+
trace.setGlobalTracerProvider(this._tracerProvider);
|
|
75
|
+
this._tracer = trace.getTracer("dxos-observability", this.options.resource.attributes[ATTR_SERVICE_VERSION]?.toString());
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Forcibly flush the BatchSpanProcessor. Call before process exit / page unload
|
|
79
|
+
* to avoid losing queued spans (which manifests as "Missing Span" in SigNoz —
|
|
80
|
+
* their already-exported children reference a parent that never made it to OTLP).
|
|
81
|
+
*/
|
|
82
|
+
async flush() {
|
|
83
|
+
await this._tracerProvider.forceFlush();
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Flush + shut down the tracer provider via `WebTracerProvider.shutdown()`,
|
|
87
|
+
* which forces a final export then terminates all span processors.
|
|
88
|
+
*
|
|
89
|
+
* Terminal and effectively one-shot: safe to call after `flush()`, but
|
|
90
|
+
* `flush()` MUST NOT be called after `close()` — shutdown stops further
|
|
91
|
+
* exporting, so subsequent `close()`/`flush()` calls resolve without
|
|
92
|
+
* emitting new spans.
|
|
93
|
+
*/
|
|
94
|
+
async close() {
|
|
95
|
+
await this._tracerProvider.shutdown();
|
|
96
|
+
}
|
|
97
|
+
start() {
|
|
98
|
+
log2("trace processor registered", void 0, {
|
|
99
|
+
F: __dxlog_file2,
|
|
100
|
+
L: 90,
|
|
101
|
+
S: this,
|
|
102
|
+
C: (f, a) => f(...a)
|
|
103
|
+
});
|
|
104
|
+
registerInstrumentations({
|
|
105
|
+
instrumentations: [
|
|
106
|
+
getWebAutoInstrumentations({
|
|
107
|
+
"@opentelemetry/instrumentation-fetch": {
|
|
108
|
+
enabled: false,
|
|
109
|
+
ignoreUrls: [
|
|
110
|
+
/api\.ipdata\.co/
|
|
111
|
+
]
|
|
112
|
+
},
|
|
113
|
+
"@opentelemetry/instrumentation-document-load": {
|
|
114
|
+
enabled: false
|
|
115
|
+
},
|
|
116
|
+
"@opentelemetry/instrumentation-xml-http-request": {
|
|
117
|
+
enabled: false
|
|
118
|
+
},
|
|
119
|
+
"@opentelemetry/instrumentation-user-interaction": {
|
|
120
|
+
enabled: false
|
|
121
|
+
}
|
|
122
|
+
})
|
|
123
|
+
]
|
|
124
|
+
});
|
|
125
|
+
const tracer = this._tracer;
|
|
126
|
+
TRACE_PROCESSOR.tracingBackend = {
|
|
127
|
+
startSpan: (options) => {
|
|
128
|
+
log2("begin otel trace", {
|
|
129
|
+
options
|
|
130
|
+
}, {
|
|
131
|
+
F: __dxlog_file2,
|
|
132
|
+
L: 107,
|
|
133
|
+
S: this,
|
|
134
|
+
C: (f, a) => f(...a)
|
|
135
|
+
});
|
|
136
|
+
const parentCtx = options.parentContext ? propagation.extract(ROOT_CONTEXT, {
|
|
137
|
+
traceparent: options.parentContext.traceparent,
|
|
138
|
+
tracestate: options.parentContext.tracestate ?? ""
|
|
139
|
+
}) : otelContext.active();
|
|
140
|
+
const span = tracer.startSpan(options.name, options, parentCtx);
|
|
141
|
+
const sc = span.spanContext();
|
|
142
|
+
const spanContext = sc && sc.traceId && sc.spanId ? {
|
|
143
|
+
traceparent: `00-${sc.traceId}-${sc.spanId}-${(sc.traceFlags ?? 0).toString(16).padStart(2, "0")}`,
|
|
144
|
+
tracestate: sc.traceState?.serialize()
|
|
145
|
+
} : void 0;
|
|
146
|
+
return {
|
|
147
|
+
end: (endTime) => span.end(endTime),
|
|
148
|
+
setError: (err) => {
|
|
149
|
+
if (err instanceof Error) {
|
|
150
|
+
span.recordException(err);
|
|
151
|
+
}
|
|
152
|
+
span.setStatus({
|
|
153
|
+
code: SpanStatusCode.ERROR,
|
|
154
|
+
message: err instanceof Error ? err.message : String(err)
|
|
155
|
+
});
|
|
156
|
+
},
|
|
157
|
+
spanContext
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
};
|
|
163
|
+
export {
|
|
164
|
+
OtelTraces
|
|
165
|
+
};
|
|
166
|
+
//# sourceMappingURL=traces-browser-Y4FFWRIR.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/extensions/otel/traces-browser.ts", "../../../src/extensions/otel/span-processors.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport {\n ROOT_CONTEXT,\n SpanStatusCode,\n type Tracer,\n context as otelContext,\n propagation,\n trace,\n} from '@opentelemetry/api';\nimport { getWebAutoInstrumentations } from '@opentelemetry/auto-instrumentations-web';\nimport { W3CTraceContextPropagator } from '@opentelemetry/core';\nimport { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';\nimport { registerInstrumentations } from '@opentelemetry/instrumentation';\nimport {\n AlwaysOnSampler,\n BatchSpanProcessor,\n ParentBasedSampler,\n TraceIdRatioBasedSampler,\n} from '@opentelemetry/sdk-trace-base';\nimport { WebTracerProvider } from '@opentelemetry/sdk-trace-web';\nimport { ATTR_SERVICE_VERSION } from '@opentelemetry/semantic-conventions';\n\nimport { log } from '@dxos/log';\nimport { TRACE_ALL_KEY, type RemoteSpan, type StartSpanOptions, TRACE_PROCESSOR } from '@dxos/tracing';\n\nimport { type OtelOptions } from './otel';\nimport { TagInjectorSpanProcessor } from './span-processors';\n\nexport class OtelTraces {\n private _tracer: Tracer;\n private readonly _tracerProvider: WebTracerProvider;\n\n constructor(private readonly options: OtelOptions) {\n propagation.setGlobalPropagator(new W3CTraceContextPropagator());\n\n const forceTraceAll = typeof localStorage !== 'undefined' && localStorage.getItem(TRACE_ALL_KEY) === 'true';\n\n this._tracerProvider = new WebTracerProvider({\n resource: this.options.resource,\n sampler: new ParentBasedSampler({\n root: forceTraceAll ? new AlwaysOnSampler() : new TraceIdRatioBasedSampler(0.3),\n }),\n spanProcessors: [\n new TagInjectorSpanProcessor(this.options.getTags),\n new BatchSpanProcessor(\n new OTLPTraceExporter({\n url: this.options.endpoint + '/v1/traces',\n headers: this.options.headers,\n concurrencyLimit: 10,\n }),\n { scheduledDelayMillis: 5_000 },\n ),\n ],\n });\n\n trace.setGlobalTracerProvider(this._tracerProvider);\n\n this._tracer = trace.getTracer(\n 'dxos-observability',\n this.options.resource.attributes[ATTR_SERVICE_VERSION]?.toString(),\n );\n }\n\n /**\n * Forcibly flush the BatchSpanProcessor. Call before process exit / page unload\n * to avoid losing queued spans (which manifests as \"Missing Span\" in SigNoz —\n * their already-exported children reference a parent that never made it to OTLP).\n */\n public async flush(): Promise<void> {\n await this._tracerProvider.forceFlush();\n }\n\n /**\n * Flush + shut down the tracer provider via `WebTracerProvider.shutdown()`,\n * which forces a final export then terminates all span processors.\n *\n * Terminal and effectively one-shot: safe to call after `flush()`, but\n * `flush()` MUST NOT be called after `close()` — shutdown stops further\n * exporting, so subsequent `close()`/`flush()` calls resolve without\n * emitting new spans.\n */\n public async close(): Promise<void> {\n await this._tracerProvider.shutdown();\n }\n\n public start(): void {\n log('trace processor registered');\n\n registerInstrumentations({\n instrumentations: [\n getWebAutoInstrumentations({\n '@opentelemetry/instrumentation-fetch': { enabled: false, ignoreUrls: [/api\\.ipdata\\.co/] },\n '@opentelemetry/instrumentation-document-load': { enabled: false },\n '@opentelemetry/instrumentation-xml-http-request': { enabled: false },\n '@opentelemetry/instrumentation-user-interaction': { enabled: false },\n }),\n ],\n });\n\n const tracer = this._tracer;\n\n TRACE_PROCESSOR.tracingBackend = {\n startSpan: (options: StartSpanOptions): RemoteSpan => {\n log('begin otel trace', { options });\n const parentCtx = options.parentContext\n ? propagation.extract(ROOT_CONTEXT, {\n traceparent: options.parentContext.traceparent,\n tracestate: options.parentContext.tracestate ?? '',\n })\n : otelContext.active();\n\n const span = tracer.startSpan(options.name, options, parentCtx);\n\n const sc = span.spanContext();\n const spanContext =\n sc && sc.traceId && sc.spanId\n ? {\n traceparent: `00-${sc.traceId}-${sc.spanId}-${(sc.traceFlags ?? 0).toString(16).padStart(2, '0')}`,\n tracestate: sc.traceState?.serialize(),\n }\n : undefined;\n\n return {\n end: (endTime?: number) => span.end(endTime),\n setError: (err: unknown) => {\n if (err instanceof Error) {\n span.recordException(err);\n }\n span.setStatus({ code: SpanStatusCode.ERROR, message: err instanceof Error ? err.message : String(err) });\n },\n spanContext,\n };\n },\n };\n }\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Context } from '@opentelemetry/api';\nimport { type ReadableSpan, type Span, type SpanProcessor } from '@opentelemetry/sdk-trace-base';\n\nimport { log } from '@dxos/log';\n\n/**\n * Injects dynamic tags as attributes on every span.\n *\n * This is an `onStart`-only processor; `onEnd`/`shutdown`/`forceFlush` are no-ops\n * because this processor never holds pending work (delegates export to downstream\n * processors like BatchSpanProcessor).\n *\n * Use for tags that are not known at provider construction (e.g. identity\n * resolved asynchronously after login). For values known at startup, prefer\n * putting them on the `Resource` — see `extension.ts`.\n *\n * Failures in the tag provider are swallowed so they can never break span\n * recording (the processor is best-effort and runs on the startSpan hot path).\n */\nexport class TagInjectorSpanProcessor implements SpanProcessor {\n constructor(private readonly _getTags: () => Record<string, string>) {}\n\n onStart(span: Span, _parentContext: Context): void {\n let tags: Record<string, string>;\n try {\n tags = this._getTags();\n } catch (err) {\n log.catch(err);\n return;\n }\n for (const [key, value] of Object.entries(tags)) {\n span.setAttribute(key, value);\n }\n }\n\n onEnd(_span: ReadableSpan): void {}\n\n async shutdown(): Promise<void> {}\n\n async forceFlush(): Promise<void> {}\n}\n"],
|
|
5
|
+
"mappings": ";;;AAIA,SACEA,cACAC,gBAEAC,WAAWC,aACXC,aACAC,aACK;AACP,SAASC,kCAAkC;AAC3C,SAASC,iCAAiC;AAC1C,SAASC,yBAAyB;AAClC,SAASC,gCAAgC;AACzC,SACEC,iBACAC,oBACAC,oBACAC,gCACK;AACP,SAASC,yBAAyB;AAClC,SAASC,4BAA4B;AAErC,SAASC,OAAAA,YAAW;AACpB,SAASC,eAAuDC,uBAAuB;;;ACnBvF,SAASC,WAAW;;AAgBb,IAAMC,2BAAN,MAAMA;;EACX,YAA6BC,UAAwC;SAAxCA,WAAAA;EAAyC;EAEtEC,QAAQC,MAAYC,gBAA+B;AACjD,QAAIC;AACJ,QAAI;AACFA,aAAO,KAAKJ,SAAQ;IACtB,SAASK,KAAK;AACZP,UAAIQ,MAAMD,KAAAA,QAAAA;;;;;;AACV;IACF;AACA,eAAW,CAACE,KAAKC,KAAAA,KAAUC,OAAOC,QAAQN,IAAAA,GAAO;AAC/CF,WAAKS,aAAaJ,KAAKC,KAAAA;IACzB;EACF;EAEAI,MAAMC,OAA2B;EAAC;EAElC,MAAMC,WAA0B;EAAC;EAEjC,MAAMC,aAA4B;EAAC;AACrC;;;;ADbO,IAAMC,aAAN,MAAMA;;EACHC;EACSC;EAEjB,YAA6BC,SAAsB;SAAtBA,UAAAA;AAC3BC,gBAAYC,oBAAoB,IAAIC,0BAAAA,CAAAA;AAEpC,UAAMC,gBAAgB,OAAOC,iBAAiB,eAAeA,aAAaC,QAAQC,aAAAA,MAAmB;AAErG,SAAKR,kBAAkB,IAAIS,kBAAkB;MAC3CC,UAAU,KAAKT,QAAQS;MACvBC,SAAS,IAAIC,mBAAmB;QAC9BC,MAAMR,gBAAgB,IAAIS,gBAAAA,IAAoB,IAAIC,yBAAyB,GAAA;MAC7E,CAAA;MACAC,gBAAgB;QACd,IAAIC,yBAAyB,KAAKhB,QAAQiB,OAAO;QACjD,IAAIC,mBACF,IAAIC,kBAAkB;UACpBC,KAAK,KAAKpB,QAAQqB,WAAW;UAC7BC,SAAS,KAAKtB,QAAQsB;UACtBC,kBAAkB;QACpB,CAAA,GACA;UAAEC,sBAAsB;QAAM,CAAA;;IAGpC,CAAA;AAEAC,UAAMC,wBAAwB,KAAK3B,eAAe;AAElD,SAAKD,UAAU2B,MAAME,UACnB,sBACA,KAAK3B,QAAQS,SAASmB,WAAWC,oBAAAA,GAAuBC,SAAAA,CAAAA;EAE5D;;;;;;EAOA,MAAaC,QAAuB;AAClC,UAAM,KAAKhC,gBAAgBiC,WAAU;EACvC;;;;;;;;;;EAWA,MAAaC,QAAuB;AAClC,UAAM,KAAKlC,gBAAgBmC,SAAQ;EACrC;EAEOC,QAAc;AACnBC,IAAAA,KAAI,8BAAA,QAAA;;;;;;AAEJC,6BAAyB;MACvBC,kBAAkB;QAChBC,2BAA2B;UACzB,wCAAwC;YAAEC,SAAS;YAAOC,YAAY;cAAC;;UAAmB;UAC1F,gDAAgD;YAAED,SAAS;UAAM;UACjE,mDAAmD;YAAEA,SAAS;UAAM;UACpE,mDAAmD;YAAEA,SAAS;UAAM;QACtE,CAAA;;IAEJ,CAAA;AAEA,UAAME,SAAS,KAAK5C;AAEpB6C,oBAAgBC,iBAAiB;MAC/BC,WAAW,CAAC7C,YAAAA;AACVoC,QAAAA,KAAI,oBAAoB;UAAEpC;QAAQ,GAAA;;;;;;AAClC,cAAM8C,YAAY9C,QAAQ+C,gBACtB9C,YAAY+C,QAAQC,cAAc;UAChCC,aAAalD,QAAQ+C,cAAcG;UACnCC,YAAYnD,QAAQ+C,cAAcI,cAAc;QAClD,CAAA,IACAC,YAAYC,OAAM;AAEtB,cAAMC,OAAOZ,OAAOG,UAAU7C,QAAQuD,MAAMvD,SAAS8C,SAAAA;AAErD,cAAMU,KAAKF,KAAKG,YAAW;AAC3B,cAAMA,cACJD,MAAMA,GAAGE,WAAWF,GAAGG,SACnB;UACET,aAAa,MAAMM,GAAGE,OAAO,IAAIF,GAAGG,MAAM,KAAKH,GAAGI,cAAc,GAAG9B,SAAS,EAAA,EAAI+B,SAAS,GAAG,GAAA,CAAA;UAC5FV,YAAYK,GAAGM,YAAYC,UAAAA;QAC7B,IACAC;AAEN,eAAO;UACLC,KAAK,CAACC,YAAqBZ,KAAKW,IAAIC,OAAAA;UACpCC,UAAU,CAACC,QAAAA;AACT,gBAAIA,eAAeC,OAAO;AACxBf,mBAAKgB,gBAAgBF,GAAAA;YACvB;AACAd,iBAAKiB,UAAU;cAAEC,MAAMC,eAAeC;cAAOC,SAASP,eAAeC,QAAQD,IAAIO,UAAUC,OAAOR,GAAAA;YAAK,CAAA;UACzG;UACAX;QACF;MACF;IACF;EACF;AACF;",
|
|
6
|
+
"names": ["ROOT_CONTEXT", "SpanStatusCode", "context", "otelContext", "propagation", "trace", "getWebAutoInstrumentations", "W3CTraceContextPropagator", "OTLPTraceExporter", "registerInstrumentations", "AlwaysOnSampler", "BatchSpanProcessor", "ParentBasedSampler", "TraceIdRatioBasedSampler", "WebTracerProvider", "ATTR_SERVICE_VERSION", "log", "TRACE_ALL_KEY", "TRACE_PROCESSOR", "log", "TagInjectorSpanProcessor", "_getTags", "onStart", "span", "_parentContext", "tags", "err", "catch", "key", "value", "Object", "entries", "setAttribute", "onEnd", "_span", "shutdown", "forceFlush", "OtelTraces", "_tracer", "_tracerProvider", "options", "propagation", "setGlobalPropagator", "W3CTraceContextPropagator", "forceTraceAll", "localStorage", "getItem", "TRACE_ALL_KEY", "WebTracerProvider", "resource", "sampler", "ParentBasedSampler", "root", "AlwaysOnSampler", "TraceIdRatioBasedSampler", "spanProcessors", "TagInjectorSpanProcessor", "getTags", "BatchSpanProcessor", "OTLPTraceExporter", "url", "endpoint", "headers", "concurrencyLimit", "scheduledDelayMillis", "trace", "setGlobalTracerProvider", "getTracer", "attributes", "ATTR_SERVICE_VERSION", "toString", "flush", "forceFlush", "close", "shutdown", "start", "log", "registerInstrumentations", "instrumentations", "getWebAutoInstrumentations", "enabled", "ignoreUrls", "tracer", "TRACE_PROCESSOR", "tracingBackend", "startSpan", "parentCtx", "parentContext", "extract", "ROOT_CONTEXT", "traceparent", "tracestate", "otelContext", "active", "span", "name", "sc", "spanContext", "traceId", "spanId", "traceFlags", "padStart", "traceState", "serialize", "undefined", "end", "endTime", "setError", "err", "Error", "recordException", "setStatus", "code", "SpanStatusCode", "ERROR", "message", "String"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
|
+
|
|
3
|
+
// src/extensions/otel/otel.ts
|
|
4
|
+
import { DiagConsoleLogger, DiagLogLevel, diag } from "@opentelemetry/api";
|
|
5
|
+
var setDiagLogger = (level) => {
|
|
6
|
+
const logLevel = DiagLogLevel[level];
|
|
7
|
+
if (logLevel) {
|
|
8
|
+
diag.setLogger(new DiagConsoleLogger(), logLevel);
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export {
|
|
13
|
+
setDiagLogger
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=chunk-FEVP3MK4.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/extensions/otel/otel.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { DiagConsoleLogger, DiagLogLevel, diag } from '@opentelemetry/api';\nimport { type Resource } from '@opentelemetry/resources';\n\nexport type OtelOptions = {\n endpoint: string;\n headers: Record<string, string>;\n resource: Resource;\n getTags: () => { [key: string]: string };\n consoleDiagLogLevel?: string;\n};\n\nexport const setDiagLogger = (level?: string) => {\n const logLevel = DiagLogLevel[level as keyof typeof DiagLogLevel];\n if (logLevel) {\n diag.setLogger(new DiagConsoleLogger(), logLevel);\n }\n};\n"],
|
|
5
|
+
"mappings": ";;;AAIA,SAASA,mBAAmBC,cAAcC,YAAY;AAW/C,IAAMC,gBAAgB,CAACC,UAAAA;AAC5B,QAAMC,WAAWC,aAAaF,KAAAA;AAC9B,MAAIC,UAAU;AACZE,SAAKC,UAAU,IAAIC,kBAAAA,GAAqBJ,QAAAA;EAC1C;AACF;",
|
|
6
|
+
"names": ["DiagConsoleLogger", "DiagLogLevel", "diag", "setDiagLogger", "level", "logLevel", "DiagLogLevel", "diag", "setLogger", "DiagConsoleLogger"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __export = (target, all) => {
|
|
4
|
+
for (var name in all)
|
|
5
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
export {
|
|
9
|
+
__export
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=chunk-HSLMI22Q.mjs.map
|