@dxos/observability 0.8.4-main.9be5663bfe → 0.8.4-main.abd8ff62ef
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/browser/{chunk-K4VFBKST.mjs → chunk-3534PNWM.mjs} +1 -1
- package/dist/lib/browser/{chunk-K4VFBKST.mjs.map → chunk-3534PNWM.mjs.map} +2 -2
- package/dist/lib/browser/index.mjs +111 -184
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/{log-processor-FDLTDQEM.mjs → log-processor-HPHWNBOK.mjs} +11 -18
- package/dist/lib/browser/log-processor-HPHWNBOK.mjs.map +7 -0
- package/dist/lib/browser/{logs-ATTRIUTL.mjs → logs-A2VDAHHD.mjs} +5 -3
- package/dist/lib/browser/{logs-ATTRIUTL.mjs.map → logs-A2VDAHHD.mjs.map} +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{metrics-PKTV6IGF.mjs → metrics-6OSN54ZV.mjs} +5 -20
- package/dist/lib/browser/{metrics-PKTV6IGF.mjs.map → metrics-6OSN54ZV.mjs.map} +2 -2
- package/dist/lib/browser/traces-browser-6MRGAKFC.mjs +151 -0
- package/dist/lib/browser/traces-browser-6MRGAKFC.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-FEVP3MK4.mjs → chunk-SYPJQI4L.mjs} +1 -1
- package/dist/lib/node-esm/{chunk-FEVP3MK4.mjs.map → chunk-SYPJQI4L.mjs.map} +2 -2
- package/dist/lib/node-esm/index.mjs +100 -154
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/{log-processor-TKJVJJSJ.mjs → log-processor-ZODHERST.mjs} +11 -18
- package/dist/lib/node-esm/log-processor-ZODHERST.mjs.map +7 -0
- package/dist/lib/node-esm/{logs-7J45KLM7.mjs → logs-TA32MBMW.mjs} +5 -3
- package/dist/lib/node-esm/{logs-7J45KLM7.mjs.map → logs-TA32MBMW.mjs.map} +3 -3
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{metrics-H7DDLYSG.mjs → metrics-C5IKPAWD.mjs} +5 -20
- package/dist/lib/node-esm/{metrics-H7DDLYSG.mjs.map → metrics-C5IKPAWD.mjs.map} +2 -2
- package/dist/lib/node-esm/traces-5LKHMVVG.mjs +122 -0
- package/dist/lib/node-esm/traces-5LKHMVVG.mjs.map +7 -0
- package/dist/types/src/cli-observability-secrets.json +2 -2
- package/dist/types/src/extensions/otel/extension.d.ts.map +1 -1
- package/dist/types/src/extensions/otel/extension.js +83 -6
- package/dist/types/src/extensions/otel/extension.js.map +1 -1
- package/dist/types/src/extensions/otel/logs.d.ts.map +1 -1
- package/dist/types/src/extensions/otel/logs.js +4 -1
- package/dist/types/src/extensions/otel/logs.js.map +1 -1
- package/dist/types/src/extensions/otel/metrics.d.ts.map +1 -1
- package/dist/types/src/extensions/otel/metrics.js.map +1 -1
- package/dist/types/src/extensions/otel/otel.d.ts.map +1 -1
- 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 +17 -0
- package/dist/types/src/extensions/otel/traces-browser.d.ts.map +1 -1
- package/dist/types/src/extensions/otel/traces-browser.js +53 -34
- package/dist/types/src/extensions/otel/traces-browser.js.map +1 -1
- package/dist/types/src/extensions/otel/traces.d.ts +17 -0
- package/dist/types/src/extensions/otel/traces.d.ts.map +1 -1
- package/dist/types/src/extensions/otel/traces.js +57 -8
- package/dist/types/src/extensions/otel/traces.js.map +1 -1
- package/dist/types/src/extensions/posthog/extension.d.ts +7 -3
- package/dist/types/src/extensions/posthog/extension.d.ts.map +1 -1
- package/dist/types/src/extensions/posthog/extension.js +7 -7
- package/dist/types/src/extensions/posthog/extension.js.map +1 -1
- package/dist/types/src/extensions/posthog/log-processor.d.ts.map +1 -1
- package/dist/types/src/extensions/posthog/log-processor.js +10 -19
- package/dist/types/src/extensions/posthog/log-processor.js.map +1 -1
- package/dist/types/src/extensions/posthog/log-processor.test.js +2 -2
- package/dist/types/src/extensions/posthog/log-processor.test.js.map +1 -1
- package/dist/types/src/observability.d.ts.map +1 -1
- package/dist/types/src/providers/client-observability.d.ts.map +1 -1
- package/dist/types/src/providers/client-observability.js +2 -0
- package/dist/types/src/providers/client-observability.js.map +1 -1
- package/dist/types/src/providers/ip-data.d.ts.map +1 -1
- package/dist/types/src/storage/browser.d.ts.map +1 -1
- package/dist/types/src/storage/browser.js +10 -0
- package/dist/types/src/storage/browser.js.map +1 -1
- package/dist/types/src/storage/node.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +19 -16
- package/src/cli-observability-secrets.json +2 -2
- package/src/extensions/otel/extension.ts +87 -7
- package/src/extensions/otel/logs.ts +4 -1
- package/src/extensions/otel/span-processors.ts +45 -0
- package/src/extensions/otel/traces-browser.ts +68 -39
- package/src/extensions/otel/traces.ts +74 -10
- package/src/extensions/posthog/extension.ts +14 -9
- package/src/extensions/posthog/log-processor.test.ts +7 -6
- package/src/extensions/posthog/log-processor.ts +10 -21
- package/src/providers/client-observability.ts +2 -0
- package/src/storage/browser.ts +9 -0
- package/dist/lib/browser/log-processor-FDLTDQEM.mjs.map +0 -7
- package/dist/lib/browser/traces-browser-PUNCJ5KV.mjs +0 -112
- package/dist/lib/browser/traces-browser-PUNCJ5KV.mjs.map +0 -7
- package/dist/lib/node-esm/log-processor-TKJVJJSJ.mjs.map +0 -7
- package/dist/lib/node-esm/traces-KMTHMYFX.mjs +0 -44
- package/dist/lib/node-esm/traces-KMTHMYFX.mjs.map +0 -7
|
@@ -23,15 +23,16 @@ export const logProcessor: LogProcessor = (config: LogConfig, entry: LogEntry) =
|
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
const additionalProperties: Record<string, string | boolean | number> = {};
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
26
|
+
const { filename, line } = entry.computedMeta;
|
|
27
|
+
if (filename !== undefined && line !== undefined) {
|
|
28
|
+
additionalProperties.transaction = `${filename}:${line}`;
|
|
29
|
+
}
|
|
30
|
+
if (entry.meta?.S?.hostSessionId) {
|
|
31
|
+
additionalProperties.service_host_issue = true;
|
|
32
|
+
additionalProperties.service_host_session = entry.meta.S.hostSessionId;
|
|
33
|
+
}
|
|
34
|
+
if (entry.meta?.S?.uptimeSeconds != null) {
|
|
35
|
+
additionalProperties.uptime_seconds = entry.meta.S.uptimeSeconds;
|
|
35
36
|
}
|
|
36
37
|
|
|
37
38
|
if (capturedError instanceof InvariantViolation) {
|
|
@@ -40,15 +41,3 @@ export const logProcessor: LogProcessor = (config: LogConfig, entry: LogEntry) =
|
|
|
40
41
|
|
|
41
42
|
posthog.captureException(capturedError, additionalProperties);
|
|
42
43
|
};
|
|
43
|
-
|
|
44
|
-
const getRelativeFilename = (filename: string) => {
|
|
45
|
-
// TODO(burdon): Hack uses "packages" as an anchor (pre-parse NX?)
|
|
46
|
-
// Including `packages/` part of the path so that excluded paths (e.g. from dist) are clickable in vscode.
|
|
47
|
-
const match = filename.match(/.+\/(packages\/.+\/.+)/);
|
|
48
|
-
if (match) {
|
|
49
|
-
const [, filePath] = match;
|
|
50
|
-
return filePath;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
return filename;
|
|
54
|
-
};
|
|
@@ -119,7 +119,9 @@ export const networkMetricsProvider = (clientServices: Partial<ClientServices>):
|
|
|
119
119
|
export const runtimeMetricsProvider = (clientServices: Partial<ClientServices>): DataProvider =>
|
|
120
120
|
Effect.fn(function* (observability) {
|
|
121
121
|
const ctx = new Context();
|
|
122
|
+
log('runtimeMetricsProvider: requesting platform from SystemService');
|
|
122
123
|
const platform = yield* Effect.promise(() => clientServices.SystemService!.getPlatform());
|
|
124
|
+
log('runtimeMetricsProvider: platform received');
|
|
123
125
|
invariant(platform, 'platform is required');
|
|
124
126
|
|
|
125
127
|
observability.setTags({
|
package/src/storage/browser.ts
CHANGED
|
@@ -37,6 +37,15 @@ export const storeObservabilityDisabled = async (namespace: string, value: boole
|
|
|
37
37
|
} catch (err) {
|
|
38
38
|
log.catch('Failed to store observability disabled', err);
|
|
39
39
|
}
|
|
40
|
+
// Mirror to localStorage so the synchronous opt-out check in the OTEL extension picks it up
|
|
41
|
+
// without waiting for an async IndexedDB read.
|
|
42
|
+
try {
|
|
43
|
+
if (typeof localStorage !== 'undefined') {
|
|
44
|
+
localStorage.setItem(`${namespace}/${OBSERVABILITY_DISABLED_KEY}`, String(value));
|
|
45
|
+
}
|
|
46
|
+
} catch {
|
|
47
|
+
// localStorage not available (e.g., in workers).
|
|
48
|
+
}
|
|
40
49
|
};
|
|
41
50
|
|
|
42
51
|
/**
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/extensions/posthog/log-processor.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport posthog from 'posthog-js';\n\nimport { InvariantViolation } from '@dxos/invariant';\nimport { type LogConfig, type LogEntry, LogLevel, type LogProcessor, shouldLog } from '@dxos/log';\n\nexport const logProcessor: LogProcessor = (config: LogConfig, entry: LogEntry) => {\n // Don't forward logs from remote sessions.\n if (!shouldLog(entry, config.captureFilters) || entry.meta?.S?.remoteSessionId) {\n return;\n }\n\n let capturedError = entry.error;\n if (capturedError == null && entry.level === LogLevel.ERROR) {\n capturedError = Object.values(entry.context ?? {}).find((v): v is Error => v instanceof Error);\n }\n\n if (!capturedError) {\n return;\n }\n\n const additionalProperties: Record<string, string | boolean | number> = {};\n if (entry.meta) {\n additionalProperties.transaction = `${getRelativeFilename(entry.meta.F)}:${entry.meta.L}`;\n if (entry.meta.S?.hostSessionId) {\n additionalProperties.service_host_issue = true;\n additionalProperties.service_host_session = entry.meta.S?.hostSessionId;\n }\n if (entry.meta.S?.uptimeSeconds != null) {\n additionalProperties.uptime_seconds = entry.meta.S.uptimeSeconds;\n }\n }\n\n if (capturedError instanceof InvariantViolation) {\n additionalProperties.invariant_violation = true;\n }\n\n posthog.captureException(capturedError, additionalProperties);\n};\n\nconst getRelativeFilename = (filename: string) => {\n // TODO(burdon): Hack uses \"packages\" as an anchor (pre-parse NX?)\n // Including `packages/` part of the path so that excluded paths (e.g. from dist) are clickable in vscode.\n const match = filename.match(/.+\\/(packages\\/.+\\/.+)/);\n if (match) {\n const [, filePath] = match;\n return filePath;\n }\n\n return filename;\n};\n"],
|
|
5
|
-
"mappings": ";;;AAIA,OAAOA,aAAa;AAEpB,SAASC,0BAA0B;AACnC,SAAwCC,UAA6BC,iBAAiB;AAE/E,IAAMC,eAA6B,CAACC,QAAmBC,UAAAA;AAE5D,MAAI,CAACC,UAAUD,OAAOD,OAAOG,cAAc,KAAKF,MAAMG,MAAMC,GAAGC,iBAAiB;AAC9E;EACF;AAEA,MAAIC,gBAAgBN,MAAMO;AAC1B,MAAID,iBAAiB,QAAQN,MAAMQ,UAAUC,SAASC,OAAO;AAC3DJ,oBAAgBK,OAAOC,OAAOZ,MAAMa,WAAW,CAAC,CAAA,EAAGC,KAAK,CAACC,MAAkBA,aAAaC,KAAAA;EAC1F;AAEA,MAAI,CAACV,eAAe;AAClB;EACF;AAEA,QAAMW,uBAAkE,CAAC;AACzE,MAAIjB,MAAMG,MAAM;AACdc,yBAAqBC,cAAc,GAAGC,oBAAoBnB,MAAMG,KAAKiB,CAAC,CAAA,IAAKpB,MAAMG,KAAKkB,CAAC;AACvF,QAAIrB,MAAMG,KAAKC,GAAGkB,eAAe;AAC/BL,2BAAqBM,qBAAqB;AAC1CN,2BAAqBO,uBAAuBxB,MAAMG,KAAKC,GAAGkB;IAC5D;AACA,QAAItB,MAAMG,KAAKC,GAAGqB,iBAAiB,MAAM;AACvCR,2BAAqBS,iBAAiB1B,MAAMG,KAAKC,EAAEqB;IACrD;EACF;AAEA,MAAInB,yBAAyBqB,oBAAoB;AAC/CV,yBAAqBW,sBAAsB;EAC7C;AAEAC,UAAQC,iBAAiBxB,eAAeW,oBAAAA;AAC1C;AAEA,IAAME,sBAAsB,CAACY,aAAAA;AAG3B,QAAMC,QAAQD,SAASC,MAAM,wBAAA;AAC7B,MAAIA,OAAO;AACT,UAAM,CAAA,EAAGC,QAAAA,IAAYD;AACrB,WAAOC;EACT;AAEA,SAAOF;AACT;",
|
|
6
|
-
"names": ["posthog", "InvariantViolation", "LogLevel", "shouldLog", "logProcessor", "config", "entry", "shouldLog", "captureFilters", "meta", "S", "remoteSessionId", "capturedError", "error", "level", "LogLevel", "ERROR", "Object", "values", "context", "find", "v", "Error", "additionalProperties", "transaction", "getRelativeFilename", "F", "L", "hostSessionId", "service_host_issue", "service_host_session", "uptimeSeconds", "uptime_seconds", "InvariantViolation", "invariant_violation", "posthog", "captureException", "filename", "match", "filePath"]
|
|
7
|
-
}
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
import "./chunk-J5LGTIGS.mjs";
|
|
2
|
-
|
|
3
|
-
// src/extensions/otel/traces-browser.ts
|
|
4
|
-
import { 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 } from "@dxos/log";
|
|
13
|
-
import { TRACE_PROCESSOR } from "@dxos/tracing";
|
|
14
|
-
var __dxlog_file = "/__w/dxos/dxos/packages/sdk/observability/src/extensions/otel/traces-browser.ts";
|
|
15
|
-
var TagInjectorSpanProcessor = class {
|
|
16
|
-
_getTags;
|
|
17
|
-
constructor(_getTags) {
|
|
18
|
-
this._getTags = _getTags;
|
|
19
|
-
}
|
|
20
|
-
onStart(span) {
|
|
21
|
-
const tags = this._getTags();
|
|
22
|
-
for (const [key, value] of Object.entries(tags)) {
|
|
23
|
-
span.setAttribute(key, value);
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
onEnd(_span) {
|
|
27
|
-
}
|
|
28
|
-
async shutdown() {
|
|
29
|
-
}
|
|
30
|
-
async forceFlush() {
|
|
31
|
-
}
|
|
32
|
-
};
|
|
33
|
-
var OtelTraces = class {
|
|
34
|
-
options;
|
|
35
|
-
_tracer;
|
|
36
|
-
constructor(options) {
|
|
37
|
-
this.options = options;
|
|
38
|
-
propagation.setGlobalPropagator(new W3CTraceContextPropagator());
|
|
39
|
-
const forceTraceAll = typeof localStorage !== "undefined" && localStorage.getItem("dxos.debug.traceAll") === "true";
|
|
40
|
-
const tracerProvider = new WebTracerProvider({
|
|
41
|
-
resource: this.options.resource,
|
|
42
|
-
sampler: new ParentBasedSampler({
|
|
43
|
-
root: forceTraceAll ? new AlwaysOnSampler() : new TraceIdRatioBasedSampler(0.3)
|
|
44
|
-
}),
|
|
45
|
-
spanProcessors: [
|
|
46
|
-
new TagInjectorSpanProcessor(this.options.getTags),
|
|
47
|
-
new BatchSpanProcessor(new OTLPTraceExporter({
|
|
48
|
-
url: this.options.endpoint + "/v1/traces",
|
|
49
|
-
headers: this.options.headers,
|
|
50
|
-
concurrencyLimit: 10
|
|
51
|
-
}), {
|
|
52
|
-
scheduledDelayMillis: 5e3
|
|
53
|
-
})
|
|
54
|
-
]
|
|
55
|
-
});
|
|
56
|
-
trace.setGlobalTracerProvider(tracerProvider);
|
|
57
|
-
this._tracer = trace.getTracer("dxos-observability", this.options.resource.attributes[ATTR_SERVICE_VERSION]?.toString());
|
|
58
|
-
}
|
|
59
|
-
start() {
|
|
60
|
-
log("trace processor registered", void 0, {
|
|
61
|
-
F: __dxlog_file,
|
|
62
|
-
L: 81,
|
|
63
|
-
S: this,
|
|
64
|
-
C: (f, a) => f(...a)
|
|
65
|
-
});
|
|
66
|
-
registerInstrumentations({
|
|
67
|
-
instrumentations: [
|
|
68
|
-
getWebAutoInstrumentations({
|
|
69
|
-
// Fetch is disabled in favor of explicit ctx on our call sites; if re-enabled, keep noisy
|
|
70
|
-
// third-party URLs out of traces (matches prior browser tracing setup).
|
|
71
|
-
"@opentelemetry/instrumentation-fetch": {
|
|
72
|
-
enabled: false,
|
|
73
|
-
ignoreUrls: [
|
|
74
|
-
/api\.ipdata\.co/
|
|
75
|
-
]
|
|
76
|
-
},
|
|
77
|
-
"@opentelemetry/instrumentation-document-load": {
|
|
78
|
-
enabled: false
|
|
79
|
-
},
|
|
80
|
-
"@opentelemetry/instrumentation-xml-http-request": {
|
|
81
|
-
enabled: false
|
|
82
|
-
}
|
|
83
|
-
})
|
|
84
|
-
]
|
|
85
|
-
});
|
|
86
|
-
TRACE_PROCESSOR.remoteTracing.registerProcessor({
|
|
87
|
-
startSpan: (options) => {
|
|
88
|
-
log("begin otel trace", {
|
|
89
|
-
options
|
|
90
|
-
}, {
|
|
91
|
-
F: __dxlog_file,
|
|
92
|
-
L: 97,
|
|
93
|
-
S: this,
|
|
94
|
-
C: (f, a) => f(...a)
|
|
95
|
-
});
|
|
96
|
-
const explicitParent = options.parentContext;
|
|
97
|
-
const parentCtx = explicitParent ?? otelContext.active();
|
|
98
|
-
const span = this._tracer.startSpan(options.name, options, parentCtx);
|
|
99
|
-
const spanCtx = trace.setSpan(parentCtx, span);
|
|
100
|
-
return {
|
|
101
|
-
end: () => span.end(),
|
|
102
|
-
wrapExecution: (fn) => otelContext.with(spanCtx, fn),
|
|
103
|
-
spanContext: spanCtx
|
|
104
|
-
};
|
|
105
|
-
}
|
|
106
|
-
});
|
|
107
|
-
}
|
|
108
|
-
};
|
|
109
|
-
export {
|
|
110
|
-
OtelTraces
|
|
111
|
-
};
|
|
112
|
-
//# sourceMappingURL=traces-browser-PUNCJ5KV.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/extensions/otel/traces-browser.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { type Context, type Tracer, context as otelContext, propagation, trace } 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 type ReadableSpan,\n type SpanProcessor,\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 { type StartSpanOptions, TRACE_PROCESSOR } from '@dxos/tracing';\n\nimport { type OtelOptions } from './otel';\n\n/**\n * Injects dynamic tags (e.g. userId) as attributes on every span.\n */\nclass TagInjectorSpanProcessor implements SpanProcessor {\n constructor(private readonly _getTags: () => Record<string, string>) {}\n\n onStart(span: { setAttribute: (key: string, value: string) => void }): void {\n const tags = this._getTags();\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\nexport class OtelTraces {\n private _tracer: Tracer;\n\n constructor(private readonly options: OtelOptions) {\n propagation.setGlobalPropagator(new W3CTraceContextPropagator());\n\n const forceTraceAll = typeof localStorage !== 'undefined' && localStorage.getItem('dxos.debug.traceAll') === 'true';\n\n const 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(tracerProvider);\n\n this._tracer = trace.getTracer(\n 'dxos-observability',\n this.options.resource.attributes[ATTR_SERVICE_VERSION]?.toString(),\n );\n }\n\n public start(): void {\n log('trace processor registered');\n\n registerInstrumentations({\n instrumentations: [\n getWebAutoInstrumentations({\n // Fetch is disabled in favor of explicit ctx on our call sites; if re-enabled, keep noisy\n // third-party URLs out of traces (matches prior browser tracing setup).\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 }),\n ],\n });\n\n TRACE_PROCESSOR.remoteTracing.registerProcessor({\n startSpan: (options: StartSpanOptions) => {\n log('begin otel trace', { options });\n const explicitParent = options.parentContext as Context | undefined;\n const parentCtx = explicitParent ?? otelContext.active();\n const span = this._tracer.startSpan(options.name, options, parentCtx);\n const spanCtx = trace.setSpan(parentCtx, span);\n return {\n end: () => span.end(),\n wrapExecution: <T>(fn: () => T): T => otelContext.with(spanCtx, fn),\n spanContext: spanCtx,\n };\n },\n });\n }\n}\n"],
|
|
5
|
-
"mappings": ";;;AAIA,SAAoCA,WAAWC,aAAaC,aAAaC,aAAa;AACtF,SAASC,kCAAkC;AAC3C,SAASC,iCAAiC;AAC1C,SAASC,yBAAyB;AAClC,SAASC,gCAAgC;AACzC,SACEC,iBACAC,oBACAC,oBAGAC,gCACK;AACP,SAASC,yBAAyB;AAClC,SAASC,4BAA4B;AAErC,SAASC,WAAW;AACpB,SAAgCC,uBAAuB;;AAOvD,IAAMC,2BAAN,MAAMA;;EACJ,YAA6BC,UAAwC;SAAxCA,WAAAA;EAAyC;EAEtEC,QAAQC,MAAoE;AAC1E,UAAMC,OAAO,KAAKH,SAAQ;AAC1B,eAAW,CAACI,KAAKC,KAAAA,KAAUC,OAAOC,QAAQJ,IAAAA,GAAO;AAC/CD,WAAKM,aAAaJ,KAAKC,KAAAA;IACzB;EACF;EAEAI,MAAMC,OAA2B;EAAC;EAElC,MAAMC,WAA0B;EAAC;EAEjC,MAAMC,aAA4B;EAAC;AACrC;AAEO,IAAMC,aAAN,MAAMA;;EACHC;EAER,YAA6BC,SAAsB;SAAtBA,UAAAA;AAC3B9B,gBAAY+B,oBAAoB,IAAI5B,0BAAAA,CAAAA;AAEpC,UAAM6B,gBAAgB,OAAOC,iBAAiB,eAAeA,aAAaC,QAAQ,qBAAA,MAA2B;AAE7G,UAAMC,iBAAiB,IAAIzB,kBAAkB;MAC3C0B,UAAU,KAAKN,QAAQM;MACvBC,SAAS,IAAI7B,mBAAmB;QAC9B8B,MAAMN,gBAAgB,IAAI1B,gBAAAA,IAAoB,IAAIG,yBAAyB,GAAA;MAC7E,CAAA;MACA8B,gBAAgB;QACd,IAAIzB,yBAAyB,KAAKgB,QAAQU,OAAO;QACjD,IAAIjC,mBACF,IAAIH,kBAAkB;UACpBqC,KAAK,KAAKX,QAAQY,WAAW;UAC7BC,SAAS,KAAKb,QAAQa;UACtBC,kBAAkB;QACpB,CAAA,GACA;UAAEC,sBAAsB;QAAM,CAAA;;IAGpC,CAAA;AAEA5C,UAAM6C,wBAAwBX,cAAAA;AAE9B,SAAKN,UAAU5B,MAAM8C,UACnB,sBACA,KAAKjB,QAAQM,SAASY,WAAWrC,oBAAAA,GAAuBsC,SAAAA,CAAAA;EAE5D;EAEOC,QAAc;AACnBtC,QAAI,8BAAA,QAAA;;;;;;AAEJP,6BAAyB;MACvB8C,kBAAkB;QAChBjD,2BAA2B;;;UAGzB,wCAAwC;YAAEkD,SAAS;YAAOC,YAAY;cAAC;;UAAmB;UAC1F,gDAAgD;YAAED,SAAS;UAAM;UACjE,mDAAmD;YAAEA,SAAS;UAAM;QACtE,CAAA;;IAEJ,CAAA;AAEAvC,oBAAgByC,cAAcC,kBAAkB;MAC9CC,WAAW,CAAC1B,YAAAA;AACVlB,YAAI,oBAAoB;UAAEkB;QAAQ,GAAA;;;;;;AAClC,cAAM2B,iBAAiB3B,QAAQ4B;AAC/B,cAAMC,YAAYF,kBAAkB1D,YAAY6D,OAAM;AACtD,cAAM3C,OAAO,KAAKY,QAAQ2B,UAAU1B,QAAQ+B,MAAM/B,SAAS6B,SAAAA;AAC3D,cAAMG,UAAU7D,MAAM8D,QAAQJ,WAAW1C,IAAAA;AACzC,eAAO;UACL+C,KAAK,MAAM/C,KAAK+C,IAAG;UACnBC,eAAe,CAAIC,OAAmBnE,YAAYoE,KAAKL,SAASI,EAAAA;UAChEE,aAAaN;QACf;MACF;IACF,CAAA;EACF;AACF;",
|
|
6
|
-
"names": ["context", "otelContext", "propagation", "trace", "getWebAutoInstrumentations", "W3CTraceContextPropagator", "OTLPTraceExporter", "registerInstrumentations", "AlwaysOnSampler", "BatchSpanProcessor", "ParentBasedSampler", "TraceIdRatioBasedSampler", "WebTracerProvider", "ATTR_SERVICE_VERSION", "log", "TRACE_PROCESSOR", "TagInjectorSpanProcessor", "_getTags", "onStart", "span", "tags", "key", "value", "Object", "entries", "setAttribute", "onEnd", "_span", "shutdown", "forceFlush", "OtelTraces", "_tracer", "options", "setGlobalPropagator", "forceTraceAll", "localStorage", "getItem", "tracerProvider", "resource", "sampler", "root", "spanProcessors", "getTags", "url", "endpoint", "headers", "concurrencyLimit", "scheduledDelayMillis", "setGlobalTracerProvider", "getTracer", "attributes", "toString", "start", "instrumentations", "enabled", "ignoreUrls", "remoteTracing", "registerProcessor", "startSpan", "explicitParent", "parentContext", "parentCtx", "active", "name", "spanCtx", "setSpan", "end", "wrapExecution", "fn", "with", "spanContext"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/extensions/posthog/log-processor.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport posthog from 'posthog-js';\n\nimport { InvariantViolation } from '@dxos/invariant';\nimport { type LogConfig, type LogEntry, LogLevel, type LogProcessor, shouldLog } from '@dxos/log';\n\nexport const logProcessor: LogProcessor = (config: LogConfig, entry: LogEntry) => {\n // Don't forward logs from remote sessions.\n if (!shouldLog(entry, config.captureFilters) || entry.meta?.S?.remoteSessionId) {\n return;\n }\n\n let capturedError = entry.error;\n if (capturedError == null && entry.level === LogLevel.ERROR) {\n capturedError = Object.values(entry.context ?? {}).find((v): v is Error => v instanceof Error);\n }\n\n if (!capturedError) {\n return;\n }\n\n const additionalProperties: Record<string, string | boolean | number> = {};\n if (entry.meta) {\n additionalProperties.transaction = `${getRelativeFilename(entry.meta.F)}:${entry.meta.L}`;\n if (entry.meta.S?.hostSessionId) {\n additionalProperties.service_host_issue = true;\n additionalProperties.service_host_session = entry.meta.S?.hostSessionId;\n }\n if (entry.meta.S?.uptimeSeconds != null) {\n additionalProperties.uptime_seconds = entry.meta.S.uptimeSeconds;\n }\n }\n\n if (capturedError instanceof InvariantViolation) {\n additionalProperties.invariant_violation = true;\n }\n\n posthog.captureException(capturedError, additionalProperties);\n};\n\nconst getRelativeFilename = (filename: string) => {\n // TODO(burdon): Hack uses \"packages\" as an anchor (pre-parse NX?)\n // Including `packages/` part of the path so that excluded paths (e.g. from dist) are clickable in vscode.\n const match = filename.match(/.+\\/(packages\\/.+\\/.+)/);\n if (match) {\n const [, filePath] = match;\n return filePath;\n }\n\n return filename;\n};\n"],
|
|
5
|
-
"mappings": ";;;;AAIA,OAAOA,aAAa;AAEpB,SAASC,0BAA0B;AACnC,SAAwCC,UAA6BC,iBAAiB;AAE/E,IAAMC,eAA6B,CAACC,QAAmBC,UAAAA;AAE5D,MAAI,CAACC,UAAUD,OAAOD,OAAOG,cAAc,KAAKF,MAAMG,MAAMC,GAAGC,iBAAiB;AAC9E;EACF;AAEA,MAAIC,gBAAgBN,MAAMO;AAC1B,MAAID,iBAAiB,QAAQN,MAAMQ,UAAUC,SAASC,OAAO;AAC3DJ,oBAAgBK,OAAOC,OAAOZ,MAAMa,WAAW,CAAC,CAAA,EAAGC,KAAK,CAACC,MAAkBA,aAAaC,KAAAA;EAC1F;AAEA,MAAI,CAACV,eAAe;AAClB;EACF;AAEA,QAAMW,uBAAkE,CAAC;AACzE,MAAIjB,MAAMG,MAAM;AACdc,yBAAqBC,cAAc,GAAGC,oBAAoBnB,MAAMG,KAAKiB,CAAC,CAAA,IAAKpB,MAAMG,KAAKkB,CAAC;AACvF,QAAIrB,MAAMG,KAAKC,GAAGkB,eAAe;AAC/BL,2BAAqBM,qBAAqB;AAC1CN,2BAAqBO,uBAAuBxB,MAAMG,KAAKC,GAAGkB;IAC5D;AACA,QAAItB,MAAMG,KAAKC,GAAGqB,iBAAiB,MAAM;AACvCR,2BAAqBS,iBAAiB1B,MAAMG,KAAKC,EAAEqB;IACrD;EACF;AAEA,MAAInB,yBAAyBqB,oBAAoB;AAC/CV,yBAAqBW,sBAAsB;EAC7C;AAEAC,UAAQC,iBAAiBxB,eAAeW,oBAAAA;AAC1C;AAEA,IAAME,sBAAsB,CAACY,aAAAA;AAG3B,QAAMC,QAAQD,SAASC,MAAM,wBAAA;AAC7B,MAAIA,OAAO;AACT,UAAM,CAAA,EAAGC,QAAAA,IAAYD;AACrB,WAAOC;EACT;AAEA,SAAOF;AACT;",
|
|
6
|
-
"names": ["posthog", "InvariantViolation", "LogLevel", "shouldLog", "logProcessor", "config", "entry", "shouldLog", "captureFilters", "meta", "S", "remoteSessionId", "capturedError", "error", "level", "LogLevel", "ERROR", "Object", "values", "context", "find", "v", "Error", "additionalProperties", "transaction", "getRelativeFilename", "F", "L", "hostSessionId", "service_host_issue", "service_host_session", "uptimeSeconds", "uptime_seconds", "InvariantViolation", "invariant_violation", "posthog", "captureException", "filename", "match", "filePath"]
|
|
7
|
-
}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
|
-
import "./chunk-HSLMI22Q.mjs";
|
|
3
|
-
|
|
4
|
-
// src/extensions/otel/traces.ts
|
|
5
|
-
import { trace } from "@opentelemetry/api";
|
|
6
|
-
import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http";
|
|
7
|
-
import { BasicTracerProvider, BatchSpanProcessor } from "@opentelemetry/sdk-trace-base";
|
|
8
|
-
import { ATTR_SERVICE_VERSION } from "@opentelemetry/semantic-conventions";
|
|
9
|
-
import { log } from "debug";
|
|
10
|
-
import { TRACE_PROCESSOR } from "@dxos/tracing";
|
|
11
|
-
var OtelTraces = class {
|
|
12
|
-
options;
|
|
13
|
-
_tracer;
|
|
14
|
-
constructor(options) {
|
|
15
|
-
this.options = options;
|
|
16
|
-
const tracerProvider = new BasicTracerProvider({
|
|
17
|
-
resource: this.options.resource,
|
|
18
|
-
spanProcessors: [
|
|
19
|
-
new BatchSpanProcessor(new OTLPTraceExporter({
|
|
20
|
-
url: this.options.endpoint + "/v1/traces",
|
|
21
|
-
headers: this.options.headers,
|
|
22
|
-
concurrencyLimit: 10
|
|
23
|
-
}))
|
|
24
|
-
]
|
|
25
|
-
});
|
|
26
|
-
trace.setGlobalTracerProvider(tracerProvider);
|
|
27
|
-
this._tracer = trace.getTracer("dxos-observability", this.options.resource.attributes[ATTR_SERVICE_VERSION]?.toString());
|
|
28
|
-
}
|
|
29
|
-
start() {
|
|
30
|
-
log("trace processor registered");
|
|
31
|
-
TRACE_PROCESSOR.remoteTracing.registerProcessor({
|
|
32
|
-
startSpan: (options) => {
|
|
33
|
-
log("begin otel trace", {
|
|
34
|
-
options
|
|
35
|
-
});
|
|
36
|
-
return this._tracer.startSpan(options.name, options);
|
|
37
|
-
}
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
};
|
|
41
|
-
export {
|
|
42
|
-
OtelTraces
|
|
43
|
-
};
|
|
44
|
-
//# sourceMappingURL=traces-KMTHMYFX.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/extensions/otel/traces.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { type Tracer, trace } from '@opentelemetry/api';\nimport { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';\nimport { BasicTracerProvider, BatchSpanProcessor } from '@opentelemetry/sdk-trace-base';\nimport { ATTR_SERVICE_VERSION } from '@opentelemetry/semantic-conventions';\nimport { log } from 'debug';\n\nimport { type StartSpanOptions, TRACE_PROCESSOR } from '@dxos/tracing';\n\nimport { type OtelOptions } from './otel';\n\nexport class OtelTraces {\n private _tracer: Tracer;\n\n constructor(private readonly options: OtelOptions) {\n const tracerProvider = new BasicTracerProvider({\n resource: this.options.resource,\n spanProcessors: [\n new BatchSpanProcessor(\n new OTLPTraceExporter({\n url: this.options.endpoint + '/v1/traces',\n headers: this.options.headers,\n concurrencyLimit: 10, // an optional limit on pending requests\n }),\n ),\n ],\n });\n\n trace.setGlobalTracerProvider(tracerProvider);\n this._tracer = trace.getTracer(\n 'dxos-observability',\n this.options.resource.attributes[ATTR_SERVICE_VERSION]?.toString(),\n );\n }\n\n public start(): void {\n log('trace processor registered');\n\n TRACE_PROCESSOR.remoteTracing.registerProcessor({\n startSpan: (options: StartSpanOptions) => {\n log('begin otel trace', { options });\n return this._tracer.startSpan(options.name, options);\n },\n });\n }\n}\n"],
|
|
5
|
-
"mappings": ";;;;AAIA,SAAsBA,aAAa;AACnC,SAASC,yBAAyB;AAClC,SAASC,qBAAqBC,0BAA0B;AACxD,SAASC,4BAA4B;AACrC,SAASC,WAAW;AAEpB,SAAgCC,uBAAuB;AAIhD,IAAMC,aAAN,MAAMA;;EACHC;EAER,YAA6BC,SAAsB;SAAtBA,UAAAA;AAC3B,UAAMC,iBAAiB,IAAIC,oBAAoB;MAC7CC,UAAU,KAAKH,QAAQG;MACvBC,gBAAgB;QACd,IAAIC,mBACF,IAAIC,kBAAkB;UACpBC,KAAK,KAAKP,QAAQQ,WAAW;UAC7BC,SAAS,KAAKT,QAAQS;UACtBC,kBAAkB;QACpB,CAAA,CAAA;;IAGN,CAAA;AAEAC,UAAMC,wBAAwBX,cAAAA;AAC9B,SAAKF,UAAUY,MAAME,UACnB,sBACA,KAAKb,QAAQG,SAASW,WAAWC,oBAAAA,GAAuBC,SAAAA,CAAAA;EAE5D;EAEOC,QAAc;AACnBC,QAAI,4BAAA;AAEJC,oBAAgBC,cAAcC,kBAAkB;MAC9CC,WAAW,CAACtB,YAAAA;AACVkB,YAAI,oBAAoB;UAAElB;QAAQ,CAAA;AAClC,eAAO,KAAKD,QAAQuB,UAAUtB,QAAQuB,MAAMvB,OAAAA;MAC9C;IACF,CAAA;EACF;AACF;",
|
|
6
|
-
"names": ["trace", "OTLPTraceExporter", "BasicTracerProvider", "BatchSpanProcessor", "ATTR_SERVICE_VERSION", "log", "TRACE_PROCESSOR", "OtelTraces", "_tracer", "options", "tracerProvider", "BasicTracerProvider", "resource", "spanProcessors", "BatchSpanProcessor", "OTLPTraceExporter", "url", "endpoint", "headers", "concurrencyLimit", "trace", "setGlobalTracerProvider", "getTracer", "attributes", "ATTR_SERVICE_VERSION", "toString", "start", "log", "TRACE_PROCESSOR", "remoteTracing", "registerProcessor", "startSpan", "name"]
|
|
7
|
-
}
|