@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
|
@@ -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
|
}
|
|
@@ -30,23 +30,13 @@ var __dxlog_file = "/__w/dxos/dxos/packages/sdk/observability/src/storage/browse
|
|
|
30
30
|
var OBSERVABILITY_DISABLED_KEY = "observability-disabled";
|
|
31
31
|
var OBSERVABILITY_GROUP_KEY = "observability-group";
|
|
32
32
|
var showObservabilityBanner = () => {
|
|
33
|
-
log.warn("showObservabilityBanner is not supported in browser contexts.", void 0, {
|
|
34
|
-
F: __dxlog_file,
|
|
35
|
-
L: 16,
|
|
36
|
-
S: void 0,
|
|
37
|
-
C: (f, a) => f(...a)
|
|
38
|
-
});
|
|
33
|
+
log.warn("showObservabilityBanner is not supported in browser contexts.", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 11, S: void 0 });
|
|
39
34
|
};
|
|
40
35
|
var isObservabilityDisabled = async (namespace) => {
|
|
41
36
|
try {
|
|
42
37
|
return await localForage.getItem(compositeKey(namespace, OBSERVABILITY_DISABLED_KEY)) === "true";
|
|
43
38
|
} catch (err) {
|
|
44
|
-
log.catch("Failed to check if observability is disabled, assuming it is", err, {
|
|
45
|
-
F: __dxlog_file,
|
|
46
|
-
L: 26,
|
|
47
|
-
S: void 0,
|
|
48
|
-
C: (f, a) => f(...a)
|
|
49
|
-
});
|
|
39
|
+
log.catch("Failed to check if observability is disabled, assuming it is", err, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 19, S: void 0 });
|
|
50
40
|
return true;
|
|
51
41
|
}
|
|
52
42
|
};
|
|
@@ -54,36 +44,27 @@ var storeObservabilityDisabled = async (namespace, value2) => {
|
|
|
54
44
|
try {
|
|
55
45
|
await localForage.setItem(compositeKey(namespace, OBSERVABILITY_DISABLED_KEY), String(value2));
|
|
56
46
|
} catch (err) {
|
|
57
|
-
log.catch("Failed to store observability disabled", err, {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
}
|
|
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 {
|
|
63
54
|
}
|
|
64
55
|
};
|
|
65
56
|
var getObservabilityGroup = async (namespace) => {
|
|
66
57
|
try {
|
|
67
58
|
return await localForage.getItem(compositeKey(namespace, OBSERVABILITY_GROUP_KEY)) ?? void 0;
|
|
68
59
|
} catch (err) {
|
|
69
|
-
log.catch("Failed to get observability group", err, {
|
|
70
|
-
F: __dxlog_file,
|
|
71
|
-
L: 49,
|
|
72
|
-
S: void 0,
|
|
73
|
-
C: (f, a) => f(...a)
|
|
74
|
-
});
|
|
60
|
+
log.catch("Failed to get observability group", err, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 47, S: void 0 });
|
|
75
61
|
}
|
|
76
62
|
};
|
|
77
63
|
var storeObservabilityGroup = async (namespace, value2) => {
|
|
78
64
|
try {
|
|
79
65
|
await localForage.setItem(compositeKey(namespace, OBSERVABILITY_GROUP_KEY), value2);
|
|
80
66
|
} catch (err) {
|
|
81
|
-
log.catch("Failed to store observability group", err, {
|
|
82
|
-
F: __dxlog_file,
|
|
83
|
-
L: 60,
|
|
84
|
-
S: void 0,
|
|
85
|
-
C: (f, a) => f(...a)
|
|
86
|
-
});
|
|
67
|
+
log.catch("Failed to store observability group", err, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 56, S: void 0 });
|
|
87
68
|
}
|
|
88
69
|
};
|
|
89
70
|
|
|
@@ -110,12 +91,7 @@ var ObservabilityImpl = class {
|
|
|
110
91
|
this._subscriptions.add(...cleanups.filter((cleanup) => cleanup !== void 0));
|
|
111
92
|
this._initialized = true;
|
|
112
93
|
}).pipe(Effect.catchAll((error) => Effect.gen(this, function* () {
|
|
113
|
-
log2.catch(error, void 0, {
|
|
114
|
-
F: __dxlog_file2,
|
|
115
|
-
L: 85,
|
|
116
|
-
S: this,
|
|
117
|
-
C: (f, a) => f(...a)
|
|
118
|
-
});
|
|
94
|
+
log2.catch(error, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 32, S: this });
|
|
119
95
|
for (const extension of initializedExtensions) {
|
|
120
96
|
if (extension.close) {
|
|
121
97
|
yield* extension.close().pipe(Effect.catchAll(() => Effect.succeed(void 0)));
|
|
@@ -164,27 +140,11 @@ var ObservabilityImpl = class {
|
|
|
164
140
|
});
|
|
165
141
|
}
|
|
166
142
|
_addExtension(extension) {
|
|
167
|
-
invariant(!this._initialized, "Observability is already initialized", {
|
|
168
|
-
F: __dxlog_file2,
|
|
169
|
-
L: 142,
|
|
170
|
-
S: this,
|
|
171
|
-
A: [
|
|
172
|
-
"!this._initialized",
|
|
173
|
-
"'Observability is already initialized'"
|
|
174
|
-
]
|
|
175
|
-
});
|
|
143
|
+
invariant(!this._initialized, "Observability is already initialized", { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 82, S: this, A: ["!this._initialized", "'Observability is already initialized'"] });
|
|
176
144
|
this._extensions.push(extension);
|
|
177
145
|
}
|
|
178
146
|
_addDataProvider(dataProvider) {
|
|
179
|
-
invariant(!this._initialized, "Observability is already initialized", {
|
|
180
|
-
F: __dxlog_file2,
|
|
181
|
-
L: 147,
|
|
182
|
-
S: this,
|
|
183
|
-
A: [
|
|
184
|
-
"!this._initialized",
|
|
185
|
-
"'Observability is already initialized'"
|
|
186
|
-
]
|
|
187
|
-
});
|
|
147
|
+
invariant(!this._initialized, "Observability is already initialized", { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 86, S: this, A: ["!this._initialized", "'Observability is already initialized'"] });
|
|
188
148
|
this._dataProviders.push(dataProvider);
|
|
189
149
|
}
|
|
190
150
|
/**
|
|
@@ -293,29 +253,13 @@ var make = () => Effect.succeed(new ObservabilityImpl());
|
|
|
293
253
|
var addExtension = (_extension) => Effect.fn(function* (_observability) {
|
|
294
254
|
const observability = yield* _observability;
|
|
295
255
|
const extension = yield* _extension;
|
|
296
|
-
invariant("_addExtension" in observability && typeof observability._addExtension === "function", void 0, {
|
|
297
|
-
F: __dxlog_file2,
|
|
298
|
-
L: 276,
|
|
299
|
-
S: this,
|
|
300
|
-
A: [
|
|
301
|
-
"'_addExtension' in observability && typeof observability._addExtension === 'function'",
|
|
302
|
-
""
|
|
303
|
-
]
|
|
304
|
-
});
|
|
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'", ""] });
|
|
305
257
|
observability._addExtension(extension);
|
|
306
258
|
return observability;
|
|
307
259
|
});
|
|
308
260
|
var addDataProvider = (dataProvider) => Effect.fn(function* (_observability) {
|
|
309
261
|
const observability = yield* _observability;
|
|
310
|
-
invariant("_addDataProvider" in observability && typeof observability._addDataProvider === "function", void 0, {
|
|
311
|
-
F: __dxlog_file2,
|
|
312
|
-
L: 284,
|
|
313
|
-
S: this,
|
|
314
|
-
A: [
|
|
315
|
-
"'_addDataProvider' in observability && typeof observability._addDataProvider === 'function'",
|
|
316
|
-
""
|
|
317
|
-
]
|
|
318
|
-
});
|
|
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'", ""] });
|
|
319
263
|
observability._addDataProvider(dataProvider);
|
|
320
264
|
return observability;
|
|
321
265
|
});
|
|
@@ -345,6 +289,7 @@ import * as Effect3 from "effect/Effect";
|
|
|
345
289
|
import * as Match from "effect/Match";
|
|
346
290
|
import * as Option from "effect/Option";
|
|
347
291
|
import * as Ref from "effect/Ref";
|
|
292
|
+
import { resolveTelemetryTag } from "@dxos/config";
|
|
348
293
|
import { LogLevel, log as log3 } from "@dxos/log";
|
|
349
294
|
import { isNode, isNonNullable } from "@dxos/util";
|
|
350
295
|
|
|
@@ -352,8 +297,8 @@ import { isNode, isNonNullable } from "@dxos/util";
|
|
|
352
297
|
var cli_observability_secrets_default = {
|
|
353
298
|
POSTHOG_API_KEY: null,
|
|
354
299
|
IPDATA_API_KEY: "73dfdecdf979c18f07d50cf841bbdd9e589f237256326ac8cca23786",
|
|
355
|
-
OTEL_ENDPOINT: "
|
|
356
|
-
OTEL_HEADERS:
|
|
300
|
+
OTEL_ENDPOINT: "/api/otel",
|
|
301
|
+
OTEL_HEADERS: null
|
|
357
302
|
};
|
|
358
303
|
|
|
359
304
|
// src/extensions/stub.ts
|
|
@@ -388,27 +333,32 @@ var extensions = Effect3.fn(function* ({
|
|
|
388
333
|
metrics: metricsEnabled = false,
|
|
389
334
|
traces: tracesEnabled = false
|
|
390
335
|
}) {
|
|
391
|
-
const { OtelLogs } = yield* Effect3.promise(() => import("./logs-
|
|
392
|
-
const { OtelMetrics } = yield* Effect3.promise(() => import("./metrics-
|
|
393
|
-
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"));
|
|
394
339
|
const cachedDisabled = yield* Effect3.promise(() => isObservabilityDisabled(serviceName));
|
|
395
|
-
const
|
|
340
|
+
const disabled = cachedDisabled || isObservabilityDisabledSync(serviceName);
|
|
341
|
+
const enabledRef = yield* Ref.make(!disabled);
|
|
396
342
|
const tags = /* @__PURE__ */ new Map();
|
|
397
343
|
const endpoint = isNode() ? process.env.DX_OTEL_ENDPOINT ?? _endpoint ?? cli_observability_secrets_default.OTEL_ENDPOINT : config.values.runtime?.app?.env?.DX_OTEL_ENDPOINT;
|
|
398
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));
|
|
399
345
|
if (!endpoint || !headers) {
|
|
400
|
-
log3.info("Missing OTEL_ENDPOINT or OTEL_HEADERS", void 0, {
|
|
401
|
-
F: __dxlog_file3,
|
|
402
|
-
L: 77,
|
|
403
|
-
S: this,
|
|
404
|
-
C: (f, a) => f(...a)
|
|
405
|
-
});
|
|
346
|
+
log3.info("Missing OTEL_ENDPOINT or OTEL_HEADERS", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 31, S: this });
|
|
406
347
|
return stubExtension;
|
|
407
348
|
}
|
|
349
|
+
const clientTag = resolveTelemetryTag(config);
|
|
350
|
+
if (clientTag) {
|
|
351
|
+
tags.set("ctx.tag", clientTag);
|
|
352
|
+
}
|
|
408
353
|
const resource = defaultResource().merge(resourceFromAttributes({
|
|
409
354
|
[ATTR_SERVICE_NAME]: serviceName,
|
|
410
355
|
[ATTR_SERVICE_VERSION]: serviceVersion,
|
|
411
|
-
"
|
|
356
|
+
"session.id": crypto.randomUUID(),
|
|
357
|
+
"deployment.environment": environment,
|
|
358
|
+
"dxos.process.type": detectProcessType(),
|
|
359
|
+
...clientTag ? {
|
|
360
|
+
"ctx.tag": clientTag
|
|
361
|
+
} : {}
|
|
412
362
|
}));
|
|
413
363
|
const logs = logsEnabled ? new OtelLogs({
|
|
414
364
|
endpoint,
|
|
@@ -429,8 +379,11 @@ var extensions = Effect3.fn(function* ({
|
|
|
429
379
|
resource,
|
|
430
380
|
getTags: () => Object.fromEntries(tags)
|
|
431
381
|
}) : void 0;
|
|
432
|
-
|
|
382
|
+
const extension = {
|
|
433
383
|
initialize: () => Effect3.sync(() => {
|
|
384
|
+
if (disabled) {
|
|
385
|
+
return;
|
|
386
|
+
}
|
|
434
387
|
if (logs) {
|
|
435
388
|
log3.runtimeConfig.processors.push(logs.logProcessor);
|
|
436
389
|
}
|
|
@@ -447,12 +400,28 @@ var extensions = Effect3.fn(function* ({
|
|
|
447
400
|
yield* Ref.update(enabledRef, () => false);
|
|
448
401
|
}),
|
|
449
402
|
close: () => Effect3.promise(async () => {
|
|
450
|
-
await
|
|
451
|
-
|
|
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();
|
|
452
413
|
}),
|
|
453
414
|
flush: () => Effect3.promise(async () => {
|
|
454
|
-
await
|
|
455
|
-
|
|
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();
|
|
456
425
|
}),
|
|
457
426
|
setTags: (incomingTags) => {
|
|
458
427
|
for (const [key, value2] of Object.entries(incomingTags)) {
|
|
@@ -480,7 +449,35 @@ var extensions = Effect3.fn(function* ({
|
|
|
480
449
|
} : void 0
|
|
481
450
|
].filter(isNonNullable)
|
|
482
451
|
};
|
|
452
|
+
return extension;
|
|
483
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
|
+
};
|
|
484
481
|
var parseHeaders = (unparsedHeaders) => {
|
|
485
482
|
return unparsedHeaders.split(";").reduce((acc, header) => {
|
|
486
483
|
const [key, ...rest] = header.split(":");
|
|
@@ -499,7 +496,7 @@ __export(posthog_exports, {
|
|
|
499
496
|
|
|
500
497
|
// src/extensions/posthog/extension.ts
|
|
501
498
|
import * as Effect4 from "effect/Effect";
|
|
502
|
-
import {
|
|
499
|
+
import { log as log4 } from "@dxos/log";
|
|
503
500
|
var __dxlog_file4 = "/__w/dxos/dxos/packages/sdk/observability/src/extensions/posthog/extension.ts";
|
|
504
501
|
var uploadLogs = async (body) => {
|
|
505
502
|
try {
|
|
@@ -513,12 +510,7 @@ var uploadLogs = async (body) => {
|
|
|
513
510
|
if (!response.ok) {
|
|
514
511
|
log4.warn("feedback log upload failed", {
|
|
515
512
|
status: response.status
|
|
516
|
-
}, {
|
|
517
|
-
F: __dxlog_file4,
|
|
518
|
-
L: 34,
|
|
519
|
-
S: void 0,
|
|
520
|
-
C: (f, a) => f(...a)
|
|
521
|
-
});
|
|
513
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 17, S: void 0 });
|
|
522
514
|
return void 0;
|
|
523
515
|
}
|
|
524
516
|
const { key } = await response.json();
|
|
@@ -526,40 +518,24 @@ var uploadLogs = async (body) => {
|
|
|
526
518
|
} catch (err) {
|
|
527
519
|
log4.warn("feedback log upload error", {
|
|
528
520
|
error: err
|
|
529
|
-
}, {
|
|
530
|
-
F: __dxlog_file4,
|
|
531
|
-
L: 40,
|
|
532
|
-
S: void 0,
|
|
533
|
-
C: (f, a) => f(...a)
|
|
534
|
-
});
|
|
521
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 25, S: void 0 });
|
|
535
522
|
return void 0;
|
|
536
523
|
}
|
|
537
524
|
};
|
|
538
|
-
var extensions2 = Effect4.fn(function* ({ config, release, environment, posthog: posthogConfig,
|
|
525
|
+
var extensions2 = Effect4.fn(function* ({ config, release, environment, posthog: posthogConfig, logStore }) {
|
|
539
526
|
if (typeof window === "undefined") {
|
|
540
|
-
log4("PostHog is being stubbed because it is running in a worker.", void 0, {
|
|
541
|
-
F: __dxlog_file4,
|
|
542
|
-
L: 54,
|
|
543
|
-
S: this,
|
|
544
|
-
C: (f, a) => f(...a)
|
|
545
|
-
});
|
|
527
|
+
log4("PostHog is being stubbed because it is running in a worker.", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 33, S: this });
|
|
546
528
|
return stubExtension;
|
|
547
529
|
}
|
|
548
530
|
const feedbackSurveyId = config.get("runtime.app.env.DX_POSTHOG_FEEDBACK_SURVEY_ID");
|
|
549
531
|
const apiKey = config.get("runtime.app.env.DX_POSTHOG_API_KEY");
|
|
550
532
|
const api_host = config.get("runtime.app.env.DX_POSTHOG_API_HOST");
|
|
551
533
|
if (!apiKey || !api_host) {
|
|
552
|
-
log4.info("Missing POSTHOG_API_KEY or POSTHOG_API_HOST", void 0, {
|
|
553
|
-
F: __dxlog_file4,
|
|
554
|
-
L: 62,
|
|
555
|
-
S: this,
|
|
556
|
-
C: (f, a) => f(...a)
|
|
557
|
-
});
|
|
534
|
+
log4.info("Missing POSTHOG_API_KEY or POSTHOG_API_HOST", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 40, S: this });
|
|
558
535
|
return stubExtension;
|
|
559
536
|
}
|
|
560
537
|
const { default: posthog } = yield* Effect4.promise(() => import("posthog-js"));
|
|
561
|
-
const { logProcessor } = yield* Effect4.promise(() => import("./log-processor-
|
|
562
|
-
const logBuffer = externalLogBuffer ?? new LogBuffer();
|
|
538
|
+
const { logProcessor } = yield* Effect4.promise(() => import("./log-processor-HPHWNBOK.mjs"));
|
|
563
539
|
let feedbackSurveyAvailable = null;
|
|
564
540
|
let unregisterPosthogProcessors;
|
|
565
541
|
const checkFeedbackSurveyAvailable = () => feedbackSurveyId ? Effect4.promise(() => {
|
|
@@ -593,21 +569,9 @@ var extensions2 = Effect4.fn(function* ({ config, release, environment, posthog:
|
|
|
593
569
|
});
|
|
594
570
|
}
|
|
595
571
|
unregisterPosthogProcessors?.();
|
|
596
|
-
const removePosthogLog = log4.addProcessor(logProcessor, void 0, {
|
|
597
|
-
F: __dxlog_file4,
|
|
598
|
-
L: 105,
|
|
599
|
-
S: this,
|
|
600
|
-
C: (f, a) => f(...a)
|
|
601
|
-
});
|
|
602
|
-
const removeLogBuffer = log4.addProcessor(logBuffer.logProcessor, void 0, {
|
|
603
|
-
F: __dxlog_file4,
|
|
604
|
-
L: 106,
|
|
605
|
-
S: this,
|
|
606
|
-
C: (f, a) => f(...a)
|
|
607
|
-
});
|
|
572
|
+
const removePosthogLog = log4.addProcessor(logProcessor, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 79, S: this });
|
|
608
573
|
unregisterPosthogProcessors = () => {
|
|
609
574
|
removePosthogLog();
|
|
610
|
-
removeLogBuffer();
|
|
611
575
|
};
|
|
612
576
|
}),
|
|
613
577
|
close: () => Effect4.sync(() => {
|
|
@@ -652,17 +616,15 @@ var extensions2 = Effect4.fn(function* ({ config, release, environment, posthog:
|
|
|
652
616
|
if (!survey || survey.questions.length === 0) {
|
|
653
617
|
log4.error("Missing feedback survey or survey has no questions", {
|
|
654
618
|
feedbackSurveyId
|
|
655
|
-
}, {
|
|
656
|
-
F: __dxlog_file4,
|
|
657
|
-
L: 153,
|
|
658
|
-
S: this,
|
|
659
|
-
C: (f, a) => f(...a)
|
|
660
|
-
});
|
|
619
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 124, S: this });
|
|
661
620
|
return;
|
|
662
621
|
}
|
|
663
622
|
let debugLogDumpKey = null;
|
|
664
|
-
if (form.includeLogs !== false &&
|
|
665
|
-
|
|
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
|
+
}
|
|
666
628
|
}
|
|
667
629
|
const question = survey.questions[0];
|
|
668
630
|
posthog.capture("survey sent", {
|
|
@@ -740,19 +702,11 @@ var identityProvider = (clientServices) => Effect5.fn(function* (observability)
|
|
|
740
702
|
});
|
|
741
703
|
});
|
|
742
704
|
var networkMetricsProvider = (clientServices) => Effect5.fn(function* (observability) {
|
|
743
|
-
const ctx = new Context(void 0, {
|
|
744
|
-
F: __dxlog_file5,
|
|
745
|
-
L: 61
|
|
746
|
-
});
|
|
705
|
+
const ctx = new Context(void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file5, L: 50 });
|
|
747
706
|
let lastNetworkStatus;
|
|
748
707
|
const updateSignalMetrics = new Event().debounce(NETWORK_METRICS_MIN_INTERVAL);
|
|
749
708
|
updateSignalMetrics.on(ctx, async () => {
|
|
750
|
-
log5("send signal metrics", void 0, {
|
|
751
|
-
F: __dxlog_file5,
|
|
752
|
-
L: 67,
|
|
753
|
-
S: this,
|
|
754
|
-
C: (f, a) => f(...a)
|
|
755
|
-
});
|
|
709
|
+
log5("send signal metrics", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file5, L: 55, S: this });
|
|
756
710
|
lastNetworkStatus?.signaling?.forEach(({ server, state }) => {
|
|
757
711
|
observability.metrics.gauge("dxos.client.network.signal.connectionState", state, {
|
|
758
712
|
server
|
|
@@ -797,20 +751,11 @@ var networkMetricsProvider = (clientServices) => Effect5.fn(function* (observabi
|
|
|
797
751
|
};
|
|
798
752
|
});
|
|
799
753
|
var runtimeMetricsProvider = (clientServices) => Effect5.fn(function* (observability) {
|
|
800
|
-
const ctx = new Context(void 0, {
|
|
801
|
-
|
|
802
|
-
L: 121
|
|
803
|
-
});
|
|
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 });
|
|
804
756
|
const platform = yield* Effect5.promise(() => clientServices.SystemService.getPlatform());
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
L: 123,
|
|
808
|
-
S: this,
|
|
809
|
-
A: [
|
|
810
|
-
"platform",
|
|
811
|
-
"'platform is required'"
|
|
812
|
-
]
|
|
813
|
-
});
|
|
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'"] });
|
|
814
759
|
observability.setTags({
|
|
815
760
|
platformType: Platform.PLATFORM_TYPE[platform.type].toLowerCase(),
|
|
816
761
|
platform: platform.platform,
|
|
@@ -834,33 +779,20 @@ var runtimeMetricsProvider = (clientServices) => Effect5.fn(function* (observabi
|
|
|
834
779
|
}
|
|
835
780
|
}).catch((error) => log5("platform error", {
|
|
836
781
|
error
|
|
837
|
-
}, {
|
|
838
|
-
F: __dxlog_file5,
|
|
839
|
-
L: 152,
|
|
840
|
-
S: this,
|
|
841
|
-
C: (f, a) => f(...a)
|
|
842
|
-
}));
|
|
782
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file5, L: 126, S: this }));
|
|
843
783
|
}, RUNTIME_METRICS_MIN_INTERVAL);
|
|
844
784
|
return async () => {
|
|
845
785
|
await ctx.dispose();
|
|
846
786
|
};
|
|
847
787
|
});
|
|
848
788
|
var spacesMetricsProvider = (client) => Effect5.fn(function* (observability) {
|
|
849
|
-
const ctx = new Context(void 0, {
|
|
850
|
-
F: __dxlog_file5,
|
|
851
|
-
L: 165
|
|
852
|
-
});
|
|
789
|
+
const ctx = new Context(void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file5, L: 135 });
|
|
853
790
|
const spaces = client.spaces.get();
|
|
854
791
|
const subscriptions = /* @__PURE__ */ new Map();
|
|
855
792
|
ctx.onDispose(() => subscriptions.forEach((subscription) => subscription.unsubscribe()));
|
|
856
793
|
const updateSpaceMetrics = new Event().debounce(SPACE_METRICS_MIN_INTERVAL);
|
|
857
794
|
updateSpaceMetrics.on(ctx, async () => {
|
|
858
|
-
log5("send space metrics", void 0, {
|
|
859
|
-
F: __dxlog_file5,
|
|
860
|
-
L: 173,
|
|
861
|
-
S: this,
|
|
862
|
-
C: (f, a) => f(...a)
|
|
863
|
-
});
|
|
795
|
+
log5("send space metrics", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file5, L: 142, S: this });
|
|
864
796
|
for (const data of mapSpaces(spaces, {
|
|
865
797
|
truncateKeys: true
|
|
866
798
|
})) {
|
|
@@ -981,12 +913,7 @@ var provider = (config) => (observability) => Effect6.gen(function* () {
|
|
|
981
913
|
}).pipe(Effect6.provide(FetchHttpClient.layer), Effect6.catchAll((err) => Effect6.sync(() => {
|
|
982
914
|
log6.verbose("ipdata fetch failed", {
|
|
983
915
|
err
|
|
984
|
-
}, {
|
|
985
|
-
F: __dxlog_file6,
|
|
986
|
-
L: 88,
|
|
987
|
-
S: void 0,
|
|
988
|
-
C: (f, a) => f(...a)
|
|
989
|
-
});
|
|
916
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file6, L: 54, S: void 0 });
|
|
990
917
|
})));
|
|
991
918
|
|
|
992
919
|
// src/providers/storage.ts
|