@dxos/observability 0.8.4-main.d05673bc65 → 0.8.4-main.dfabb4ec29
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 +125 -190
- 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 +110 -157
- 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 +67 -13
- 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 +17 -15
- 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 +15 -4
- package/dist/types/src/storage/browser.js.map +1 -1
- package/dist/types/src/storage/node.d.ts.map +1 -1
- package/dist/types/src/storage/node.js +1 -1
- package/dist/types/src/storage/node.js.map +1 -1
- package/dist/types/src/storage/node.test.js +1 -1
- package/dist/types/src/storage/node.test.js.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +21 -17
- 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 +89 -13
- package/src/extensions/otel/traces.ts +74 -10
- package/src/extensions/posthog/extension.ts +24 -17
- 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 +14 -4
- package/src/storage/node.test.ts +1 -2
- package/src/storage/node.ts +1 -2
- package/src/vite-import-meta.d.ts +14 -0
- package/dist/lib/browser/log-processor-FDLTDQEM.mjs.map +0 -7
- package/dist/lib/browser/traces-browser-5DQUYGQ7.mjs +0 -68
- package/dist/lib/browser/traces-browser-5DQUYGQ7.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
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/extensions/otel/otel.ts"],
|
|
4
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,
|
|
6
|
-
"names": ["DiagConsoleLogger", "DiagLogLevel", "diag", "setDiagLogger", "level", "logLevel", "
|
|
5
|
+
"mappings": ";AAIA,SAASA,mBAAmBC,cAAcC,YAAY;AAW/C,IAAMC,gBAAgB,CAACC,UAAAA;AAC5B,QAAMC,WAAWJ,aAAaG,KAAAA;AAC9B,MAAIC,UAAU;AACZH,SAAKI,UAAU,IAAIN,kBAAAA,GAAqBK,QAAAA;EAC1C;AACF;",
|
|
6
|
+
"names": ["DiagConsoleLogger", "DiagLogLevel", "diag", "setDiagLogger", "level", "logLevel", "setLogger"]
|
|
7
7
|
}
|
|
@@ -25,64 +25,46 @@ import { log as log2 } from "@dxos/log";
|
|
|
25
25
|
// src/storage/browser.ts
|
|
26
26
|
import * as localForage from "localforage";
|
|
27
27
|
import { log } from "@dxos/log";
|
|
28
|
+
import { compositeKey } from "@dxos/util";
|
|
28
29
|
var __dxlog_file = "/__w/dxos/dxos/packages/sdk/observability/src/storage/browser.ts";
|
|
29
30
|
var OBSERVABILITY_DISABLED_KEY = "observability-disabled";
|
|
30
31
|
var OBSERVABILITY_GROUP_KEY = "observability-group";
|
|
31
32
|
var showObservabilityBanner = () => {
|
|
32
|
-
log.warn("showObservabilityBanner is not supported in browser contexts.", void 0, {
|
|
33
|
-
F: __dxlog_file,
|
|
34
|
-
L: 15,
|
|
35
|
-
S: void 0,
|
|
36
|
-
C: (f, a) => f(...a)
|
|
37
|
-
});
|
|
33
|
+
log.warn("showObservabilityBanner is not supported in browser contexts.", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 11, S: void 0 });
|
|
38
34
|
};
|
|
39
35
|
var isObservabilityDisabled = async (namespace) => {
|
|
40
36
|
try {
|
|
41
|
-
return await localForage.getItem(
|
|
37
|
+
return await localForage.getItem(compositeKey(namespace, OBSERVABILITY_DISABLED_KEY)) === "true";
|
|
42
38
|
} catch (err) {
|
|
43
|
-
log.catch("Failed to check if observability is disabled, assuming it is", err, {
|
|
44
|
-
F: __dxlog_file,
|
|
45
|
-
L: 25,
|
|
46
|
-
S: void 0,
|
|
47
|
-
C: (f, a) => f(...a)
|
|
48
|
-
});
|
|
39
|
+
log.catch("Failed to check if observability is disabled, assuming it is", err, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 19, S: void 0 });
|
|
49
40
|
return true;
|
|
50
41
|
}
|
|
51
42
|
};
|
|
52
43
|
var storeObservabilityDisabled = async (namespace, value2) => {
|
|
53
44
|
try {
|
|
54
|
-
await localForage.setItem(
|
|
45
|
+
await localForage.setItem(compositeKey(namespace, OBSERVABILITY_DISABLED_KEY), String(value2));
|
|
55
46
|
} catch (err) {
|
|
56
|
-
log.catch("Failed to store observability disabled", err, {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
}
|
|
47
|
+
log.catch("Failed to store observability disabled", err, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 29, S: void 0 });
|
|
48
|
+
}
|
|
49
|
+
try {
|
|
50
|
+
if (typeof localStorage !== "undefined") {
|
|
51
|
+
localStorage.setItem(`${namespace}/${OBSERVABILITY_DISABLED_KEY}`, String(value2));
|
|
52
|
+
}
|
|
53
|
+
} catch {
|
|
62
54
|
}
|
|
63
55
|
};
|
|
64
56
|
var getObservabilityGroup = async (namespace) => {
|
|
65
57
|
try {
|
|
66
|
-
return await localForage.getItem(
|
|
58
|
+
return await localForage.getItem(compositeKey(namespace, OBSERVABILITY_GROUP_KEY)) ?? void 0;
|
|
67
59
|
} catch (err) {
|
|
68
|
-
log.catch("Failed to get observability group", err, {
|
|
69
|
-
F: __dxlog_file,
|
|
70
|
-
L: 48,
|
|
71
|
-
S: void 0,
|
|
72
|
-
C: (f, a) => f(...a)
|
|
73
|
-
});
|
|
60
|
+
log.catch("Failed to get observability group", err, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 47, S: void 0 });
|
|
74
61
|
}
|
|
75
62
|
};
|
|
76
63
|
var storeObservabilityGroup = async (namespace, value2) => {
|
|
77
64
|
try {
|
|
78
|
-
await localForage.setItem(
|
|
65
|
+
await localForage.setItem(compositeKey(namespace, OBSERVABILITY_GROUP_KEY), value2);
|
|
79
66
|
} catch (err) {
|
|
80
|
-
log.catch("Failed to store observability group", err, {
|
|
81
|
-
F: __dxlog_file,
|
|
82
|
-
L: 59,
|
|
83
|
-
S: void 0,
|
|
84
|
-
C: (f, a) => f(...a)
|
|
85
|
-
});
|
|
67
|
+
log.catch("Failed to store observability group", err, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 56, S: void 0 });
|
|
86
68
|
}
|
|
87
69
|
};
|
|
88
70
|
|
|
@@ -109,12 +91,7 @@ var ObservabilityImpl = class {
|
|
|
109
91
|
this._subscriptions.add(...cleanups.filter((cleanup) => cleanup !== void 0));
|
|
110
92
|
this._initialized = true;
|
|
111
93
|
}).pipe(Effect.catchAll((error) => Effect.gen(this, function* () {
|
|
112
|
-
log2.catch(error, void 0, {
|
|
113
|
-
F: __dxlog_file2,
|
|
114
|
-
L: 85,
|
|
115
|
-
S: this,
|
|
116
|
-
C: (f, a) => f(...a)
|
|
117
|
-
});
|
|
94
|
+
log2.catch(error, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 32, S: this });
|
|
118
95
|
for (const extension of initializedExtensions) {
|
|
119
96
|
if (extension.close) {
|
|
120
97
|
yield* extension.close().pipe(Effect.catchAll(() => Effect.succeed(void 0)));
|
|
@@ -163,27 +140,11 @@ var ObservabilityImpl = class {
|
|
|
163
140
|
});
|
|
164
141
|
}
|
|
165
142
|
_addExtension(extension) {
|
|
166
|
-
invariant(!this._initialized, "Observability is already initialized", {
|
|
167
|
-
F: __dxlog_file2,
|
|
168
|
-
L: 142,
|
|
169
|
-
S: this,
|
|
170
|
-
A: [
|
|
171
|
-
"!this._initialized",
|
|
172
|
-
"'Observability is already initialized'"
|
|
173
|
-
]
|
|
174
|
-
});
|
|
143
|
+
invariant(!this._initialized, "Observability is already initialized", { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 82, S: this, A: ["!this._initialized", "'Observability is already initialized'"] });
|
|
175
144
|
this._extensions.push(extension);
|
|
176
145
|
}
|
|
177
146
|
_addDataProvider(dataProvider) {
|
|
178
|
-
invariant(!this._initialized, "Observability is already initialized", {
|
|
179
|
-
F: __dxlog_file2,
|
|
180
|
-
L: 147,
|
|
181
|
-
S: this,
|
|
182
|
-
A: [
|
|
183
|
-
"!this._initialized",
|
|
184
|
-
"'Observability is already initialized'"
|
|
185
|
-
]
|
|
186
|
-
});
|
|
147
|
+
invariant(!this._initialized, "Observability is already initialized", { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 86, S: this, A: ["!this._initialized", "'Observability is already initialized'"] });
|
|
187
148
|
this._dataProviders.push(dataProvider);
|
|
188
149
|
}
|
|
189
150
|
/**
|
|
@@ -292,29 +253,13 @@ var make = () => Effect.succeed(new ObservabilityImpl());
|
|
|
292
253
|
var addExtension = (_extension) => Effect.fn(function* (_observability) {
|
|
293
254
|
const observability = yield* _observability;
|
|
294
255
|
const extension = yield* _extension;
|
|
295
|
-
invariant("_addExtension" in observability && typeof observability._addExtension === "function", void 0, {
|
|
296
|
-
F: __dxlog_file2,
|
|
297
|
-
L: 276,
|
|
298
|
-
S: this,
|
|
299
|
-
A: [
|
|
300
|
-
"'_addExtension' in observability && typeof observability._addExtension === 'function'",
|
|
301
|
-
""
|
|
302
|
-
]
|
|
303
|
-
});
|
|
256
|
+
invariant("_addExtension" in observability && typeof observability._addExtension === "function", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 194, S: this, A: ["'_addExtension' in observability && typeof observability._addExtension === 'function'", ""] });
|
|
304
257
|
observability._addExtension(extension);
|
|
305
258
|
return observability;
|
|
306
259
|
});
|
|
307
260
|
var addDataProvider = (dataProvider) => Effect.fn(function* (_observability) {
|
|
308
261
|
const observability = yield* _observability;
|
|
309
|
-
invariant("_addDataProvider" in observability && typeof observability._addDataProvider === "function", void 0, {
|
|
310
|
-
F: __dxlog_file2,
|
|
311
|
-
L: 284,
|
|
312
|
-
S: this,
|
|
313
|
-
A: [
|
|
314
|
-
"'_addDataProvider' in observability && typeof observability._addDataProvider === 'function'",
|
|
315
|
-
""
|
|
316
|
-
]
|
|
317
|
-
});
|
|
262
|
+
invariant("_addDataProvider" in observability && typeof observability._addDataProvider === "function", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 200, S: this, A: ["'_addDataProvider' in observability && typeof observability._addDataProvider === 'function'", ""] });
|
|
318
263
|
observability._addDataProvider(dataProvider);
|
|
319
264
|
return observability;
|
|
320
265
|
});
|
|
@@ -344,6 +289,7 @@ import * as Effect3 from "effect/Effect";
|
|
|
344
289
|
import * as Match from "effect/Match";
|
|
345
290
|
import * as Option from "effect/Option";
|
|
346
291
|
import * as Ref from "effect/Ref";
|
|
292
|
+
import { resolveTelemetryTag } from "@dxos/config";
|
|
347
293
|
import { LogLevel, log as log3 } from "@dxos/log";
|
|
348
294
|
import { isNode, isNonNullable } from "@dxos/util";
|
|
349
295
|
|
|
@@ -351,8 +297,8 @@ import { isNode, isNonNullable } from "@dxos/util";
|
|
|
351
297
|
var cli_observability_secrets_default = {
|
|
352
298
|
POSTHOG_API_KEY: null,
|
|
353
299
|
IPDATA_API_KEY: "73dfdecdf979c18f07d50cf841bbdd9e589f237256326ac8cca23786",
|
|
354
|
-
OTEL_ENDPOINT: "
|
|
355
|
-
OTEL_HEADERS:
|
|
300
|
+
OTEL_ENDPOINT: "/api/otel",
|
|
301
|
+
OTEL_HEADERS: null
|
|
356
302
|
};
|
|
357
303
|
|
|
358
304
|
// src/extensions/stub.ts
|
|
@@ -387,27 +333,32 @@ var extensions = Effect3.fn(function* ({
|
|
|
387
333
|
metrics: metricsEnabled = false,
|
|
388
334
|
traces: tracesEnabled = false
|
|
389
335
|
}) {
|
|
390
|
-
const { OtelLogs } = yield* Effect3.promise(() => import("./logs-
|
|
391
|
-
const { OtelMetrics } = yield* Effect3.promise(() => import("./metrics-
|
|
392
|
-
const { OtelTraces } = yield* Effect3.promise(() => import("./traces-browser-
|
|
336
|
+
const { OtelLogs } = yield* Effect3.promise(() => import("./logs-A2VDAHHD.mjs"));
|
|
337
|
+
const { OtelMetrics } = yield* Effect3.promise(() => import("./metrics-6OSN54ZV.mjs"));
|
|
338
|
+
const { OtelTraces } = yield* Effect3.promise(() => import("./traces-browser-6MRGAKFC.mjs"));
|
|
393
339
|
const cachedDisabled = yield* Effect3.promise(() => isObservabilityDisabled(serviceName));
|
|
394
|
-
const
|
|
340
|
+
const disabled = cachedDisabled || isObservabilityDisabledSync(serviceName);
|
|
341
|
+
const enabledRef = yield* Ref.make(!disabled);
|
|
395
342
|
const tags = /* @__PURE__ */ new Map();
|
|
396
343
|
const endpoint = isNode() ? process.env.DX_OTEL_ENDPOINT ?? _endpoint ?? cli_observability_secrets_default.OTEL_ENDPOINT : config.values.runtime?.app?.env?.DX_OTEL_ENDPOINT;
|
|
397
344
|
const headers = _headers ?? Match.value(isNode()).pipe(Match.when(true, () => Option.fromNullable(process.env.DX_OTEL_HEADERS ?? cli_observability_secrets_default.OTEL_HEADERS)), Match.when(false, () => Option.fromNullable(config.values.runtime?.app?.env?.DX_OTEL_HEADERS)), Match.exhaustive, Option.map((raw) => parseHeaders(raw)), Option.getOrElse(() => void 0));
|
|
398
345
|
if (!endpoint || !headers) {
|
|
399
|
-
log3.info("Missing OTEL_ENDPOINT or OTEL_HEADERS", void 0, {
|
|
400
|
-
F: __dxlog_file3,
|
|
401
|
-
L: 77,
|
|
402
|
-
S: this,
|
|
403
|
-
C: (f, a) => f(...a)
|
|
404
|
-
});
|
|
346
|
+
log3.info("Missing OTEL_ENDPOINT or OTEL_HEADERS", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 31, S: this });
|
|
405
347
|
return stubExtension;
|
|
406
348
|
}
|
|
349
|
+
const clientTag = resolveTelemetryTag(config);
|
|
350
|
+
if (clientTag) {
|
|
351
|
+
tags.set("ctx.tag", clientTag);
|
|
352
|
+
}
|
|
407
353
|
const resource = defaultResource().merge(resourceFromAttributes({
|
|
408
354
|
[ATTR_SERVICE_NAME]: serviceName,
|
|
409
355
|
[ATTR_SERVICE_VERSION]: serviceVersion,
|
|
410
|
-
"
|
|
356
|
+
"session.id": crypto.randomUUID(),
|
|
357
|
+
"deployment.environment": environment,
|
|
358
|
+
"dxos.process.type": detectProcessType(),
|
|
359
|
+
...clientTag ? {
|
|
360
|
+
"ctx.tag": clientTag
|
|
361
|
+
} : {}
|
|
411
362
|
}));
|
|
412
363
|
const logs = logsEnabled ? new OtelLogs({
|
|
413
364
|
endpoint,
|
|
@@ -428,8 +379,11 @@ var extensions = Effect3.fn(function* ({
|
|
|
428
379
|
resource,
|
|
429
380
|
getTags: () => Object.fromEntries(tags)
|
|
430
381
|
}) : void 0;
|
|
431
|
-
|
|
382
|
+
const extension = {
|
|
432
383
|
initialize: () => Effect3.sync(() => {
|
|
384
|
+
if (disabled) {
|
|
385
|
+
return;
|
|
386
|
+
}
|
|
433
387
|
if (logs) {
|
|
434
388
|
log3.runtimeConfig.processors.push(logs.logProcessor);
|
|
435
389
|
}
|
|
@@ -446,12 +400,28 @@ var extensions = Effect3.fn(function* ({
|
|
|
446
400
|
yield* Ref.update(enabledRef, () => false);
|
|
447
401
|
}),
|
|
448
402
|
close: () => Effect3.promise(async () => {
|
|
449
|
-
await
|
|
450
|
-
|
|
403
|
+
const results = await Promise.allSettled([
|
|
404
|
+
logs?.close(),
|
|
405
|
+
metrics?.close()
|
|
406
|
+
]);
|
|
407
|
+
for (const result of results) {
|
|
408
|
+
if (result.status === "rejected") {
|
|
409
|
+
log3.catch(result.reason, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 111, S: this });
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
await traces?.close();
|
|
451
413
|
}),
|
|
452
414
|
flush: () => Effect3.promise(async () => {
|
|
453
|
-
await
|
|
454
|
-
|
|
415
|
+
const results = await Promise.allSettled([
|
|
416
|
+
logs?.flush(),
|
|
417
|
+
metrics?.flush()
|
|
418
|
+
]);
|
|
419
|
+
for (const result of results) {
|
|
420
|
+
if (result.status === "rejected") {
|
|
421
|
+
log3.catch(result.reason, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 126, S: this });
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
await traces?.flush();
|
|
455
425
|
}),
|
|
456
426
|
setTags: (incomingTags) => {
|
|
457
427
|
for (const [key, value2] of Object.entries(incomingTags)) {
|
|
@@ -479,7 +449,35 @@ var extensions = Effect3.fn(function* ({
|
|
|
479
449
|
} : void 0
|
|
480
450
|
].filter(isNonNullable)
|
|
481
451
|
};
|
|
452
|
+
return extension;
|
|
482
453
|
});
|
|
454
|
+
var isObservabilityDisabledSync = (serviceName) => {
|
|
455
|
+
if (isNode()) {
|
|
456
|
+
return process.env.DX_DISABLE_OBSERVABILITY === "true";
|
|
457
|
+
}
|
|
458
|
+
try {
|
|
459
|
+
if (typeof localStorage !== "undefined") {
|
|
460
|
+
return localStorage.getItem(`${serviceName}/observability-disabled`) === "true";
|
|
461
|
+
}
|
|
462
|
+
} catch {
|
|
463
|
+
}
|
|
464
|
+
return false;
|
|
465
|
+
};
|
|
466
|
+
var detectProcessType = () => {
|
|
467
|
+
if (isNode()) {
|
|
468
|
+
return "node";
|
|
469
|
+
}
|
|
470
|
+
if (typeof window !== "undefined") {
|
|
471
|
+
return "browser";
|
|
472
|
+
}
|
|
473
|
+
if (typeof globalThis.ServiceWorkerGlobalScope !== "undefined") {
|
|
474
|
+
return "service-worker";
|
|
475
|
+
}
|
|
476
|
+
if (typeof globalThis.SharedWorkerGlobalScope !== "undefined") {
|
|
477
|
+
return "shared-worker";
|
|
478
|
+
}
|
|
479
|
+
return "dedicated-worker";
|
|
480
|
+
};
|
|
483
481
|
var parseHeaders = (unparsedHeaders) => {
|
|
484
482
|
return unparsedHeaders.split(";").reduce((acc, header) => {
|
|
485
483
|
const [key, ...rest] = header.split(":");
|
|
@@ -498,7 +496,7 @@ __export(posthog_exports, {
|
|
|
498
496
|
|
|
499
497
|
// src/extensions/posthog/extension.ts
|
|
500
498
|
import * as Effect4 from "effect/Effect";
|
|
501
|
-
import {
|
|
499
|
+
import { log as log4 } from "@dxos/log";
|
|
502
500
|
var __dxlog_file4 = "/__w/dxos/dxos/packages/sdk/observability/src/extensions/posthog/extension.ts";
|
|
503
501
|
var uploadLogs = async (body) => {
|
|
504
502
|
try {
|
|
@@ -512,12 +510,7 @@ var uploadLogs = async (body) => {
|
|
|
512
510
|
if (!response.ok) {
|
|
513
511
|
log4.warn("feedback log upload failed", {
|
|
514
512
|
status: response.status
|
|
515
|
-
}, {
|
|
516
|
-
F: __dxlog_file4,
|
|
517
|
-
L: 34,
|
|
518
|
-
S: void 0,
|
|
519
|
-
C: (f, a) => f(...a)
|
|
520
|
-
});
|
|
513
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 17, S: void 0 });
|
|
521
514
|
return void 0;
|
|
522
515
|
}
|
|
523
516
|
const { key } = await response.json();
|
|
@@ -525,41 +518,26 @@ var uploadLogs = async (body) => {
|
|
|
525
518
|
} catch (err) {
|
|
526
519
|
log4.warn("feedback log upload error", {
|
|
527
520
|
error: err
|
|
528
|
-
}, {
|
|
529
|
-
F: __dxlog_file4,
|
|
530
|
-
L: 40,
|
|
531
|
-
S: void 0,
|
|
532
|
-
C: (f, a) => f(...a)
|
|
533
|
-
});
|
|
521
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 25, S: void 0 });
|
|
534
522
|
return void 0;
|
|
535
523
|
}
|
|
536
524
|
};
|
|
537
|
-
var extensions2 = Effect4.fn(function* ({ config, release, environment, posthog: posthogConfig,
|
|
525
|
+
var extensions2 = Effect4.fn(function* ({ config, release, environment, posthog: posthogConfig, logStore }) {
|
|
538
526
|
if (typeof window === "undefined") {
|
|
539
|
-
log4("PostHog is being stubbed because it is running in a worker.", void 0, {
|
|
540
|
-
F: __dxlog_file4,
|
|
541
|
-
L: 54,
|
|
542
|
-
S: this,
|
|
543
|
-
C: (f, a) => f(...a)
|
|
544
|
-
});
|
|
527
|
+
log4("PostHog is being stubbed because it is running in a worker.", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 33, S: this });
|
|
545
528
|
return stubExtension;
|
|
546
529
|
}
|
|
547
530
|
const feedbackSurveyId = config.get("runtime.app.env.DX_POSTHOG_FEEDBACK_SURVEY_ID");
|
|
548
531
|
const apiKey = config.get("runtime.app.env.DX_POSTHOG_API_KEY");
|
|
549
532
|
const api_host = config.get("runtime.app.env.DX_POSTHOG_API_HOST");
|
|
550
533
|
if (!apiKey || !api_host) {
|
|
551
|
-
log4.info("Missing POSTHOG_API_KEY or POSTHOG_API_HOST", void 0, {
|
|
552
|
-
F: __dxlog_file4,
|
|
553
|
-
L: 62,
|
|
554
|
-
S: this,
|
|
555
|
-
C: (f, a) => f(...a)
|
|
556
|
-
});
|
|
534
|
+
log4.info("Missing POSTHOG_API_KEY or POSTHOG_API_HOST", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 40, S: this });
|
|
557
535
|
return stubExtension;
|
|
558
536
|
}
|
|
559
537
|
const { default: posthog } = yield* Effect4.promise(() => import("posthog-js"));
|
|
560
|
-
const { logProcessor } = yield* Effect4.promise(() => import("./log-processor-
|
|
561
|
-
const logBuffer = externalLogBuffer ?? new LogBuffer();
|
|
538
|
+
const { logProcessor } = yield* Effect4.promise(() => import("./log-processor-HPHWNBOK.mjs"));
|
|
562
539
|
let feedbackSurveyAvailable = null;
|
|
540
|
+
let unregisterPosthogProcessors;
|
|
563
541
|
const checkFeedbackSurveyAvailable = () => feedbackSurveyId ? Effect4.promise(() => {
|
|
564
542
|
if (feedbackSurveyAvailable !== null) {
|
|
565
543
|
return Promise.resolve(feedbackSurveyAvailable);
|
|
@@ -590,19 +568,15 @@ var extensions2 = Effect4.fn(function* ({ config, release, environment, posthog:
|
|
|
590
568
|
} : {}
|
|
591
569
|
});
|
|
592
570
|
}
|
|
593
|
-
|
|
594
|
-
log4.
|
|
571
|
+
unregisterPosthogProcessors?.();
|
|
572
|
+
const removePosthogLog = log4.addProcessor(logProcessor, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 79, S: this });
|
|
573
|
+
unregisterPosthogProcessors = () => {
|
|
574
|
+
removePosthogLog();
|
|
575
|
+
};
|
|
595
576
|
}),
|
|
596
577
|
close: () => Effect4.sync(() => {
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
logBuffer.logProcessor
|
|
600
|
-
]) {
|
|
601
|
-
const index = log4.runtimeConfig.processors.indexOf(processor);
|
|
602
|
-
if (index !== -1) {
|
|
603
|
-
log4.runtimeConfig.processors.splice(index, 1);
|
|
604
|
-
}
|
|
605
|
-
}
|
|
578
|
+
unregisterPosthogProcessors?.();
|
|
579
|
+
unregisterPosthogProcessors = void 0;
|
|
606
580
|
}),
|
|
607
581
|
enable: () => Effect4.sync(() => posthog.opt_in_capturing()),
|
|
608
582
|
disable: () => Effect4.sync(() => posthog.opt_out_capturing()),
|
|
@@ -642,17 +616,15 @@ var extensions2 = Effect4.fn(function* ({ config, release, environment, posthog:
|
|
|
642
616
|
if (!survey || survey.questions.length === 0) {
|
|
643
617
|
log4.error("Missing feedback survey or survey has no questions", {
|
|
644
618
|
feedbackSurveyId
|
|
645
|
-
}, {
|
|
646
|
-
F: __dxlog_file4,
|
|
647
|
-
L: 151,
|
|
648
|
-
S: this,
|
|
649
|
-
C: (f, a) => f(...a)
|
|
650
|
-
});
|
|
619
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 124, S: this });
|
|
651
620
|
return;
|
|
652
621
|
}
|
|
653
|
-
let debugLogDumpKey;
|
|
654
|
-
if (form.includeLogs !== false &&
|
|
655
|
-
|
|
622
|
+
let debugLogDumpKey = null;
|
|
623
|
+
if (form.includeLogs !== false && logStore !== void 0) {
|
|
624
|
+
const ndjson = await logStore.export();
|
|
625
|
+
if (ndjson.length > 0) {
|
|
626
|
+
debugLogDumpKey = await uploadLogs(ndjson) ?? "failed";
|
|
627
|
+
}
|
|
656
628
|
}
|
|
657
629
|
const question = survey.questions[0];
|
|
658
630
|
posthog.capture("survey sent", {
|
|
@@ -664,9 +636,7 @@ var extensions2 = Effect4.fn(function* ({ config, release, environment, posthog:
|
|
|
664
636
|
}
|
|
665
637
|
],
|
|
666
638
|
[`$survey_response_${question.id}`]: form.message,
|
|
667
|
-
|
|
668
|
-
debug_log_dump_key: debugLogDumpKey
|
|
669
|
-
} : {}
|
|
639
|
+
debug_log_dump_key: debugLogDumpKey
|
|
670
640
|
});
|
|
671
641
|
});
|
|
672
642
|
},
|
|
@@ -732,19 +702,11 @@ var identityProvider = (clientServices) => Effect5.fn(function* (observability)
|
|
|
732
702
|
});
|
|
733
703
|
});
|
|
734
704
|
var networkMetricsProvider = (clientServices) => Effect5.fn(function* (observability) {
|
|
735
|
-
const ctx = new Context(void 0, {
|
|
736
|
-
F: __dxlog_file5,
|
|
737
|
-
L: 61
|
|
738
|
-
});
|
|
705
|
+
const ctx = new Context(void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file5, L: 50 });
|
|
739
706
|
let lastNetworkStatus;
|
|
740
707
|
const updateSignalMetrics = new Event().debounce(NETWORK_METRICS_MIN_INTERVAL);
|
|
741
708
|
updateSignalMetrics.on(ctx, async () => {
|
|
742
|
-
log5("send signal metrics", void 0, {
|
|
743
|
-
F: __dxlog_file5,
|
|
744
|
-
L: 67,
|
|
745
|
-
S: this,
|
|
746
|
-
C: (f, a) => f(...a)
|
|
747
|
-
});
|
|
709
|
+
log5("send signal metrics", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file5, L: 55, S: this });
|
|
748
710
|
lastNetworkStatus?.signaling?.forEach(({ server, state }) => {
|
|
749
711
|
observability.metrics.gauge("dxos.client.network.signal.connectionState", state, {
|
|
750
712
|
server
|
|
@@ -789,20 +751,11 @@ var networkMetricsProvider = (clientServices) => Effect5.fn(function* (observabi
|
|
|
789
751
|
};
|
|
790
752
|
});
|
|
791
753
|
var runtimeMetricsProvider = (clientServices) => Effect5.fn(function* (observability) {
|
|
792
|
-
const ctx = new Context(void 0, {
|
|
793
|
-
|
|
794
|
-
L: 121
|
|
795
|
-
});
|
|
754
|
+
const ctx = new Context(void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file5, L: 100 });
|
|
755
|
+
log5("runtimeMetricsProvider: requesting platform from SystemService", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file5, L: 101, S: this });
|
|
796
756
|
const platform = yield* Effect5.promise(() => clientServices.SystemService.getPlatform());
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
L: 123,
|
|
800
|
-
S: this,
|
|
801
|
-
A: [
|
|
802
|
-
"platform",
|
|
803
|
-
"'platform is required'"
|
|
804
|
-
]
|
|
805
|
-
});
|
|
757
|
+
log5("runtimeMetricsProvider: platform received", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file5, L: 103, S: this });
|
|
758
|
+
invariant2(platform, "platform is required", { "~LogMeta": "~LogMeta", F: __dxlog_file5, L: 104, S: this, A: ["platform", "'platform is required'"] });
|
|
806
759
|
observability.setTags({
|
|
807
760
|
platformType: Platform.PLATFORM_TYPE[platform.type].toLowerCase(),
|
|
808
761
|
platform: platform.platform,
|
|
@@ -826,33 +779,20 @@ var runtimeMetricsProvider = (clientServices) => Effect5.fn(function* (observabi
|
|
|
826
779
|
}
|
|
827
780
|
}).catch((error) => log5("platform error", {
|
|
828
781
|
error
|
|
829
|
-
}, {
|
|
830
|
-
F: __dxlog_file5,
|
|
831
|
-
L: 152,
|
|
832
|
-
S: this,
|
|
833
|
-
C: (f, a) => f(...a)
|
|
834
|
-
}));
|
|
782
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file5, L: 126, S: this }));
|
|
835
783
|
}, RUNTIME_METRICS_MIN_INTERVAL);
|
|
836
784
|
return async () => {
|
|
837
785
|
await ctx.dispose();
|
|
838
786
|
};
|
|
839
787
|
});
|
|
840
788
|
var spacesMetricsProvider = (client) => Effect5.fn(function* (observability) {
|
|
841
|
-
const ctx = new Context(void 0, {
|
|
842
|
-
F: __dxlog_file5,
|
|
843
|
-
L: 165
|
|
844
|
-
});
|
|
789
|
+
const ctx = new Context(void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file5, L: 135 });
|
|
845
790
|
const spaces = client.spaces.get();
|
|
846
791
|
const subscriptions = /* @__PURE__ */ new Map();
|
|
847
792
|
ctx.onDispose(() => subscriptions.forEach((subscription) => subscription.unsubscribe()));
|
|
848
793
|
const updateSpaceMetrics = new Event().debounce(SPACE_METRICS_MIN_INTERVAL);
|
|
849
794
|
updateSpaceMetrics.on(ctx, async () => {
|
|
850
|
-
log5("send space metrics", void 0, {
|
|
851
|
-
F: __dxlog_file5,
|
|
852
|
-
L: 173,
|
|
853
|
-
S: this,
|
|
854
|
-
C: (f, a) => f(...a)
|
|
855
|
-
});
|
|
795
|
+
log5("send space metrics", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file5, L: 142, S: this });
|
|
856
796
|
for (const data of mapSpaces(spaces, {
|
|
857
797
|
truncateKeys: true
|
|
858
798
|
})) {
|
|
@@ -973,12 +913,7 @@ var provider = (config) => (observability) => Effect6.gen(function* () {
|
|
|
973
913
|
}).pipe(Effect6.provide(FetchHttpClient.layer), Effect6.catchAll((err) => Effect6.sync(() => {
|
|
974
914
|
log6.verbose("ipdata fetch failed", {
|
|
975
915
|
err
|
|
976
|
-
}, {
|
|
977
|
-
F: __dxlog_file6,
|
|
978
|
-
L: 88,
|
|
979
|
-
S: void 0,
|
|
980
|
-
C: (f, a) => f(...a)
|
|
981
|
-
});
|
|
916
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file6, L: 54, S: void 0 });
|
|
982
917
|
})));
|
|
983
918
|
|
|
984
919
|
// src/providers/storage.ts
|