@dxos/observability 0.8.4-main.ef1bc66f44 → 0.8.4-main.f466a3d56e
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +102 -5
- package/README.md +14 -11
- package/dist/lib/browser/{chunk-K4VFBKST.mjs → chunk-PSFTIG54.mjs} +9 -2
- package/dist/lib/browser/chunk-PSFTIG54.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +181 -283
- package/dist/lib/browser/index.mjs.map +4 -4
- 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-UTNIFYHF.mjs} +7 -4
- package/dist/lib/browser/logs-UTNIFYHF.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{metrics-PKTV6IGF.mjs → metrics-PRGSYAZJ.mjs} +7 -21
- package/dist/lib/browser/metrics-PRGSYAZJ.mjs.map +7 -0
- package/dist/lib/browser/traces-browser-XRINKQUA.mjs +154 -0
- package/dist/lib/browser/traces-browser-XRINKQUA.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-FEVP3MK4.mjs → chunk-EDDZWPYV.mjs} +9 -2
- package/dist/lib/node-esm/chunk-EDDZWPYV.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +166 -250
- package/dist/lib/node-esm/index.mjs.map +4 -4
- 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-ARJUVN3T.mjs} +7 -4
- package/dist/lib/node-esm/logs-ARJUVN3T.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{metrics-H7DDLYSG.mjs → metrics-DREJOOAC.mjs} +7 -21
- package/dist/lib/node-esm/metrics-DREJOOAC.mjs.map +7 -0
- package/dist/lib/node-esm/traces-74F7JUKF.mjs +125 -0
- package/dist/lib/node-esm/traces-74F7JUKF.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 +112 -16
- 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 +6 -3
- 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 +2 -2
- package/dist/types/src/extensions/otel/metrics.js.map +1 -1
- package/dist/types/src/extensions/otel/otel.d.ts +7 -0
- package/dist/types/src/extensions/otel/otel.d.ts.map +1 -1
- package/dist/types/src/extensions/otel/otel.js +12 -0
- package/dist/types/src/extensions/otel/otel.js.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 +73 -12
- 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 +59 -9
- package/dist/types/src/extensions/otel/traces.js.map +1 -1
- package/dist/types/src/extensions/posthog/extension.d.ts +13 -0
- package/dist/types/src/extensions/posthog/extension.d.ts.map +1 -1
- package/dist/types/src/extensions/posthog/extension.js +41 -28
- 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/index.d.ts +0 -1
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/index.js +0 -1
- package/dist/types/src/index.js.map +1 -1
- package/dist/types/src/observability-extension.d.ts +1 -1
- package/dist/types/src/observability-extension.d.ts.map +1 -1
- package/dist/types/src/observability.d.ts.map +1 -1
- package/dist/types/src/observability.js +4 -2
- package/dist/types/src/observability.js.map +1 -1
- package/dist/types/src/observability.test.js +1 -1
- package/dist/types/src/observability.test.js.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/providers/ip-data.js +4 -2
- package/dist/types/src/providers/ip-data.js.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 +36 -32
- package/src/cli-observability-secrets.json +2 -2
- package/src/extensions/otel/extension.ts +118 -17
- package/src/extensions/otel/logs.ts +6 -3
- package/src/extensions/otel/metrics.ts +2 -2
- package/src/extensions/otel/otel.ts +13 -0
- package/src/extensions/otel/span-processors.ts +45 -0
- package/src/extensions/otel/traces-browser.ts +95 -13
- package/src/extensions/otel/traces.ts +76 -12
- package/src/extensions/posthog/extension.ts +54 -27
- package/src/extensions/posthog/log-processor.test.ts +7 -6
- package/src/extensions/posthog/log-processor.ts +10 -21
- package/src/index.ts +0 -1
- package/src/observability-extension.ts +1 -1
- package/src/observability.test.ts +1 -1
- package/src/observability.ts +4 -2
- package/src/providers/client-observability.ts +2 -0
- package/src/providers/ip-data.ts +5 -2
- 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/chunk-K4VFBKST.mjs.map +0 -7
- package/dist/lib/browser/log-processor-FDLTDQEM.mjs.map +0 -7
- package/dist/lib/browser/logs-ATTRIUTL.mjs.map +0 -7
- package/dist/lib/browser/metrics-PKTV6IGF.mjs.map +0 -7
- package/dist/lib/browser/traces-browser-XYXBF5ZX.mjs +0 -62
- package/dist/lib/browser/traces-browser-XYXBF5ZX.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-FEVP3MK4.mjs.map +0 -7
- package/dist/lib/node-esm/log-processor-TKJVJJSJ.mjs.map +0 -7
- package/dist/lib/node-esm/logs-7J45KLM7.mjs.map +0 -7
- package/dist/lib/node-esm/metrics-H7DDLYSG.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
- package/dist/types/src/log-buffer.d.ts +0 -34
- package/dist/types/src/log-buffer.d.ts.map +0 -1
- package/dist/types/src/log-buffer.js +0 -70
- package/dist/types/src/log-buffer.js.map +0 -1
- package/dist/types/src/log-buffer.test.d.ts +0 -2
- package/dist/types/src/log-buffer.test.d.ts.map +0 -1
- package/dist/types/src/log-buffer.test.js +0 -107
- package/dist/types/src/log-buffer.test.js.map +0 -1
- package/src/log-buffer.test.ts +0 -134
- package/src/log-buffer.ts +0 -101
|
@@ -2,69 +2,6 @@ import {
|
|
|
2
2
|
__export
|
|
3
3
|
} from "./chunk-J5LGTIGS.mjs";
|
|
4
4
|
|
|
5
|
-
// src/log-buffer.ts
|
|
6
|
-
import { LogLevel, shortLevelName } from "@dxos/log";
|
|
7
|
-
import { CircularBuffer } from "@dxos/util";
|
|
8
|
-
var DEFAULT_BUFFER_SIZE = 2e3;
|
|
9
|
-
var MAX_CONTEXT_LENGTH = 500;
|
|
10
|
-
var LogBuffer = class {
|
|
11
|
-
_buffer;
|
|
12
|
-
constructor(size = DEFAULT_BUFFER_SIZE) {
|
|
13
|
-
this._buffer = new CircularBuffer(size);
|
|
14
|
-
}
|
|
15
|
-
/** Log processor that can be registered with `log.runtimeConfig.processors`. */
|
|
16
|
-
logProcessor = (_config, entry) => {
|
|
17
|
-
if (entry.level <= LogLevel.TRACE) {
|
|
18
|
-
return;
|
|
19
|
-
}
|
|
20
|
-
const record = {
|
|
21
|
-
t: (/* @__PURE__ */ new Date()).toISOString(),
|
|
22
|
-
l: shortLevelName[entry.level] ?? "?",
|
|
23
|
-
m: entry.message ?? ""
|
|
24
|
-
};
|
|
25
|
-
if (entry.meta) {
|
|
26
|
-
record.f = getRelativeFilename(entry.meta.F);
|
|
27
|
-
record.n = entry.meta.L;
|
|
28
|
-
}
|
|
29
|
-
if (entry.error) {
|
|
30
|
-
record.e = entry.error.stack ?? entry.error.message;
|
|
31
|
-
}
|
|
32
|
-
if (entry.context != null) {
|
|
33
|
-
try {
|
|
34
|
-
const ctx = typeof entry.context === "function" ? entry.context() : entry.context;
|
|
35
|
-
if (ctx != null && !(ctx instanceof Error)) {
|
|
36
|
-
let json = JSON.stringify(ctx);
|
|
37
|
-
if (json.length > MAX_CONTEXT_LENGTH) {
|
|
38
|
-
json = json.slice(0, MAX_CONTEXT_LENGTH);
|
|
39
|
-
}
|
|
40
|
-
record.c = json;
|
|
41
|
-
}
|
|
42
|
-
} catch {
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
this._buffer.push(record);
|
|
46
|
-
};
|
|
47
|
-
/** Number of entries currently in the buffer. */
|
|
48
|
-
get size() {
|
|
49
|
-
return this._buffer.elementCount;
|
|
50
|
-
}
|
|
51
|
-
/** Serialize buffer contents as NDJSON (newline-delimited JSON). */
|
|
52
|
-
serialize() {
|
|
53
|
-
const lines = [];
|
|
54
|
-
for (const record of this._buffer) {
|
|
55
|
-
lines.push(JSON.stringify(record));
|
|
56
|
-
}
|
|
57
|
-
return lines.join("\n");
|
|
58
|
-
}
|
|
59
|
-
};
|
|
60
|
-
var getRelativeFilename = (filename) => {
|
|
61
|
-
const match = filename.match(/.+\/(packages\/.+\/.+)/);
|
|
62
|
-
if (match) {
|
|
63
|
-
return match[1];
|
|
64
|
-
}
|
|
65
|
-
return filename;
|
|
66
|
-
};
|
|
67
|
-
|
|
68
5
|
// src/observability.ts
|
|
69
6
|
var observability_exports = {};
|
|
70
7
|
__export(observability_exports, {
|
|
@@ -88,64 +25,46 @@ import { log as log2 } from "@dxos/log";
|
|
|
88
25
|
// src/storage/browser.ts
|
|
89
26
|
import * as localForage from "localforage";
|
|
90
27
|
import { log } from "@dxos/log";
|
|
28
|
+
import { compositeKey } from "@dxos/util";
|
|
91
29
|
var __dxlog_file = "/__w/dxos/dxos/packages/sdk/observability/src/storage/browser.ts";
|
|
92
30
|
var OBSERVABILITY_DISABLED_KEY = "observability-disabled";
|
|
93
31
|
var OBSERVABILITY_GROUP_KEY = "observability-group";
|
|
94
32
|
var showObservabilityBanner = () => {
|
|
95
|
-
log.warn("showObservabilityBanner is not supported in browser contexts.", void 0, {
|
|
96
|
-
F: __dxlog_file,
|
|
97
|
-
L: 15,
|
|
98
|
-
S: void 0,
|
|
99
|
-
C: (f, a) => f(...a)
|
|
100
|
-
});
|
|
33
|
+
log.warn("showObservabilityBanner is not supported in browser contexts.", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 11, S: void 0 });
|
|
101
34
|
};
|
|
102
35
|
var isObservabilityDisabled = async (namespace) => {
|
|
103
36
|
try {
|
|
104
|
-
return await localForage.getItem(
|
|
37
|
+
return await localForage.getItem(compositeKey(namespace, OBSERVABILITY_DISABLED_KEY)) === "true";
|
|
105
38
|
} catch (err) {
|
|
106
|
-
log.catch("Failed to check if observability is disabled, assuming it is", err, {
|
|
107
|
-
F: __dxlog_file,
|
|
108
|
-
L: 25,
|
|
109
|
-
S: void 0,
|
|
110
|
-
C: (f, a) => f(...a)
|
|
111
|
-
});
|
|
39
|
+
log.catch("Failed to check if observability is disabled, assuming it is", err, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 19, S: void 0 });
|
|
112
40
|
return true;
|
|
113
41
|
}
|
|
114
42
|
};
|
|
115
43
|
var storeObservabilityDisabled = async (namespace, value2) => {
|
|
116
44
|
try {
|
|
117
|
-
await localForage.setItem(
|
|
45
|
+
await localForage.setItem(compositeKey(namespace, OBSERVABILITY_DISABLED_KEY), String(value2));
|
|
118
46
|
} catch (err) {
|
|
119
|
-
log.catch("Failed to store observability disabled", err, {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
}
|
|
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 {
|
|
125
54
|
}
|
|
126
55
|
};
|
|
127
56
|
var getObservabilityGroup = async (namespace) => {
|
|
128
57
|
try {
|
|
129
|
-
return await localForage.getItem(
|
|
58
|
+
return await localForage.getItem(compositeKey(namespace, OBSERVABILITY_GROUP_KEY)) ?? void 0;
|
|
130
59
|
} catch (err) {
|
|
131
|
-
log.catch("Failed to get observability group", err, {
|
|
132
|
-
F: __dxlog_file,
|
|
133
|
-
L: 48,
|
|
134
|
-
S: void 0,
|
|
135
|
-
C: (f, a) => f(...a)
|
|
136
|
-
});
|
|
60
|
+
log.catch("Failed to get observability group", err, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 47, S: void 0 });
|
|
137
61
|
}
|
|
138
62
|
};
|
|
139
63
|
var storeObservabilityGroup = async (namespace, value2) => {
|
|
140
64
|
try {
|
|
141
|
-
await localForage.setItem(
|
|
65
|
+
await localForage.setItem(compositeKey(namespace, OBSERVABILITY_GROUP_KEY), value2);
|
|
142
66
|
} catch (err) {
|
|
143
|
-
log.catch("Failed to store observability group", err, {
|
|
144
|
-
F: __dxlog_file,
|
|
145
|
-
L: 59,
|
|
146
|
-
S: void 0,
|
|
147
|
-
C: (f, a) => f(...a)
|
|
148
|
-
});
|
|
67
|
+
log.catch("Failed to store observability group", err, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 56, S: void 0 });
|
|
149
68
|
}
|
|
150
69
|
};
|
|
151
70
|
|
|
@@ -172,12 +91,7 @@ var ObservabilityImpl = class {
|
|
|
172
91
|
this._subscriptions.add(...cleanups.filter((cleanup) => cleanup !== void 0));
|
|
173
92
|
this._initialized = true;
|
|
174
93
|
}).pipe(Effect.catchAll((error) => Effect.gen(this, function* () {
|
|
175
|
-
log2.catch(error, void 0, {
|
|
176
|
-
F: __dxlog_file2,
|
|
177
|
-
L: 85,
|
|
178
|
-
S: this,
|
|
179
|
-
C: (f, a) => f(...a)
|
|
180
|
-
});
|
|
94
|
+
log2.catch(error, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 32, S: this });
|
|
181
95
|
for (const extension of initializedExtensions) {
|
|
182
96
|
if (extension.close) {
|
|
183
97
|
yield* extension.close().pipe(Effect.catchAll(() => Effect.succeed(void 0)));
|
|
@@ -226,27 +140,11 @@ var ObservabilityImpl = class {
|
|
|
226
140
|
});
|
|
227
141
|
}
|
|
228
142
|
_addExtension(extension) {
|
|
229
|
-
invariant(!this._initialized, "Observability is already initialized", {
|
|
230
|
-
F: __dxlog_file2,
|
|
231
|
-
L: 142,
|
|
232
|
-
S: this,
|
|
233
|
-
A: [
|
|
234
|
-
"!this._initialized",
|
|
235
|
-
"'Observability is already initialized'"
|
|
236
|
-
]
|
|
237
|
-
});
|
|
143
|
+
invariant(!this._initialized, "Observability is already initialized", { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 82, S: this, A: ["!this._initialized", "'Observability is already initialized'"] });
|
|
238
144
|
this._extensions.push(extension);
|
|
239
145
|
}
|
|
240
146
|
_addDataProvider(dataProvider) {
|
|
241
|
-
invariant(!this._initialized, "Observability is already initialized", {
|
|
242
|
-
F: __dxlog_file2,
|
|
243
|
-
L: 147,
|
|
244
|
-
S: this,
|
|
245
|
-
A: [
|
|
246
|
-
"!this._initialized",
|
|
247
|
-
"'Observability is already initialized'"
|
|
248
|
-
]
|
|
249
|
-
});
|
|
147
|
+
invariant(!this._initialized, "Observability is already initialized", { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 86, S: this, A: ["!this._initialized", "'Observability is already initialized'"] });
|
|
250
148
|
this._dataProviders.push(dataProvider);
|
|
251
149
|
}
|
|
252
150
|
/**
|
|
@@ -306,10 +204,12 @@ var ObservabilityImpl = class {
|
|
|
306
204
|
}
|
|
307
205
|
get feedback() {
|
|
308
206
|
return {
|
|
309
|
-
captureUserFeedback: (form) => {
|
|
207
|
+
captureUserFeedback: async (form) => {
|
|
208
|
+
let eventUuid;
|
|
310
209
|
for (const extension of this._getExtensions("feedback")) {
|
|
311
|
-
extension.captureUserFeedback(form);
|
|
210
|
+
eventUuid = await extension.captureUserFeedback(form) ?? eventUuid;
|
|
312
211
|
}
|
|
212
|
+
return eventUuid;
|
|
313
213
|
}
|
|
314
214
|
};
|
|
315
215
|
}
|
|
@@ -355,29 +255,13 @@ var make = () => Effect.succeed(new ObservabilityImpl());
|
|
|
355
255
|
var addExtension = (_extension) => Effect.fn(function* (_observability) {
|
|
356
256
|
const observability = yield* _observability;
|
|
357
257
|
const extension = yield* _extension;
|
|
358
|
-
invariant("_addExtension" in observability && typeof observability._addExtension === "function", void 0, {
|
|
359
|
-
F: __dxlog_file2,
|
|
360
|
-
L: 276,
|
|
361
|
-
S: this,
|
|
362
|
-
A: [
|
|
363
|
-
"'_addExtension' in observability && typeof observability._addExtension === 'function'",
|
|
364
|
-
""
|
|
365
|
-
]
|
|
366
|
-
});
|
|
258
|
+
invariant("_addExtension" in observability && typeof observability._addExtension === "function", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 196, S: this, A: ["'_addExtension' in observability && typeof observability._addExtension === 'function'", ""] });
|
|
367
259
|
observability._addExtension(extension);
|
|
368
260
|
return observability;
|
|
369
261
|
});
|
|
370
262
|
var addDataProvider = (dataProvider) => Effect.fn(function* (_observability) {
|
|
371
263
|
const observability = yield* _observability;
|
|
372
|
-
invariant("_addDataProvider" in observability && typeof observability._addDataProvider === "function", void 0, {
|
|
373
|
-
F: __dxlog_file2,
|
|
374
|
-
L: 284,
|
|
375
|
-
S: this,
|
|
376
|
-
A: [
|
|
377
|
-
"'_addDataProvider' in observability && typeof observability._addDataProvider === 'function'",
|
|
378
|
-
""
|
|
379
|
-
]
|
|
380
|
-
});
|
|
264
|
+
invariant("_addDataProvider" in observability && typeof observability._addDataProvider === "function", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 202, S: this, A: ["'_addDataProvider' in observability && typeof observability._addDataProvider === 'function'", ""] });
|
|
381
265
|
observability._addDataProvider(dataProvider);
|
|
382
266
|
return observability;
|
|
383
267
|
});
|
|
@@ -407,15 +291,16 @@ import * as Effect3 from "effect/Effect";
|
|
|
407
291
|
import * as Match from "effect/Match";
|
|
408
292
|
import * as Option from "effect/Option";
|
|
409
293
|
import * as Ref from "effect/Ref";
|
|
410
|
-
import {
|
|
294
|
+
import { resolveTelemetryTag } from "@dxos/config";
|
|
295
|
+
import { LogLevel, log as log3 } from "@dxos/log";
|
|
411
296
|
import { isNode, isNonNullable } from "@dxos/util";
|
|
412
297
|
|
|
413
298
|
// src/cli-observability-secrets.json
|
|
414
299
|
var cli_observability_secrets_default = {
|
|
415
300
|
POSTHOG_API_KEY: null,
|
|
416
301
|
IPDATA_API_KEY: "73dfdecdf979c18f07d50cf841bbdd9e589f237256326ac8cca23786",
|
|
417
|
-
OTEL_ENDPOINT: "
|
|
418
|
-
OTEL_HEADERS:
|
|
302
|
+
OTEL_ENDPOINT: "/api/otel",
|
|
303
|
+
OTEL_HEADERS: null
|
|
419
304
|
};
|
|
420
305
|
|
|
421
306
|
// src/extensions/stub.ts
|
|
@@ -446,53 +331,64 @@ var extensions = Effect3.fn(function* ({
|
|
|
446
331
|
// - logs should be cached locally in a circular buffer
|
|
447
332
|
// - logs should be flushed to the server if user opts to include them in a bug report
|
|
448
333
|
logs: logsEnabled = false,
|
|
449
|
-
logLevel =
|
|
334
|
+
logLevel = LogLevel.INFO,
|
|
450
335
|
metrics: metricsEnabled = false,
|
|
451
336
|
traces: tracesEnabled = false
|
|
452
337
|
}) {
|
|
453
|
-
const { OtelLogs } = yield* Effect3.promise(() => import("./logs-
|
|
454
|
-
const { OtelMetrics } = yield* Effect3.promise(() => import("./metrics-
|
|
455
|
-
const { OtelTraces } = yield* Effect3.promise(() => import("./traces-browser-
|
|
338
|
+
const { OtelLogs } = yield* Effect3.promise(() => import("./logs-UTNIFYHF.mjs"));
|
|
339
|
+
const { OtelMetrics } = yield* Effect3.promise(() => import("./metrics-PRGSYAZJ.mjs"));
|
|
340
|
+
const { OtelTraces } = yield* Effect3.promise(() => import("./traces-browser-XRINKQUA.mjs"));
|
|
456
341
|
const cachedDisabled = yield* Effect3.promise(() => isObservabilityDisabled(serviceName));
|
|
457
|
-
const
|
|
342
|
+
const disabled = cachedDisabled || isObservabilityDisabledSync(serviceName);
|
|
343
|
+
const enabledRef = yield* Ref.make(!disabled);
|
|
458
344
|
const tags = /* @__PURE__ */ new Map();
|
|
459
|
-
const
|
|
345
|
+
const rawEndpoint = isNode() ? process.env.DX_OTEL_ENDPOINT ?? _endpoint ?? cli_observability_secrets_default.OTEL_ENDPOINT : config.values.runtime?.app?.env?.DX_OTEL_ENDPOINT ?? _endpoint;
|
|
346
|
+
const endpoint = !isNode() && rawEndpoint?.startsWith("/") ? resolveRelativeEndpoint(rawEndpoint) : rawEndpoint;
|
|
460
347
|
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));
|
|
461
|
-
if (!endpoint
|
|
462
|
-
log3.info("Missing OTEL_ENDPOINT
|
|
463
|
-
F: __dxlog_file3,
|
|
464
|
-
L: 77,
|
|
465
|
-
S: this,
|
|
466
|
-
C: (f, a) => f(...a)
|
|
467
|
-
});
|
|
348
|
+
if (!endpoint) {
|
|
349
|
+
log3.info("Missing OTEL_ENDPOINT", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 35, S: this });
|
|
468
350
|
return stubExtension;
|
|
469
351
|
}
|
|
352
|
+
const resolvedHeaders = headers ?? {};
|
|
353
|
+
const resolvedEndpoint = !isNode() && endpoint.startsWith("/") ? `${globalThis.location.origin}${endpoint}` : endpoint;
|
|
354
|
+
const clientTag = resolveTelemetryTag(config);
|
|
355
|
+
if (clientTag) {
|
|
356
|
+
tags.set("ctx.tag", clientTag);
|
|
357
|
+
}
|
|
470
358
|
const resource = defaultResource().merge(resourceFromAttributes({
|
|
471
359
|
[ATTR_SERVICE_NAME]: serviceName,
|
|
472
360
|
[ATTR_SERVICE_VERSION]: serviceVersion,
|
|
473
|
-
"
|
|
361
|
+
"session.id": crypto.randomUUID(),
|
|
362
|
+
"deployment.environment": environment,
|
|
363
|
+
"dxos.process.type": detectProcessType(),
|
|
364
|
+
...clientTag ? {
|
|
365
|
+
"ctx.tag": clientTag
|
|
366
|
+
} : {}
|
|
474
367
|
}));
|
|
475
368
|
const logs = logsEnabled ? new OtelLogs({
|
|
476
|
-
endpoint,
|
|
477
|
-
headers,
|
|
369
|
+
endpoint: resolvedEndpoint,
|
|
370
|
+
headers: resolvedHeaders,
|
|
478
371
|
resource,
|
|
479
372
|
getTags: () => Object.fromEntries(tags),
|
|
480
373
|
logLevel
|
|
481
374
|
}) : void 0;
|
|
482
375
|
const metrics = metricsEnabled ? new OtelMetrics({
|
|
483
|
-
endpoint,
|
|
484
|
-
headers,
|
|
376
|
+
endpoint: resolvedEndpoint,
|
|
377
|
+
headers: resolvedHeaders,
|
|
485
378
|
resource,
|
|
486
379
|
getTags: () => Object.fromEntries(tags)
|
|
487
380
|
}) : void 0;
|
|
488
381
|
const traces = tracesEnabled ? new OtelTraces({
|
|
489
|
-
endpoint,
|
|
490
|
-
headers,
|
|
382
|
+
endpoint: resolvedEndpoint,
|
|
383
|
+
headers: resolvedHeaders,
|
|
491
384
|
resource,
|
|
492
385
|
getTags: () => Object.fromEntries(tags)
|
|
493
386
|
}) : void 0;
|
|
494
|
-
|
|
387
|
+
const extension = {
|
|
495
388
|
initialize: () => Effect3.sync(() => {
|
|
389
|
+
if (disabled) {
|
|
390
|
+
return;
|
|
391
|
+
}
|
|
496
392
|
if (logs) {
|
|
497
393
|
log3.runtimeConfig.processors.push(logs.logProcessor);
|
|
498
394
|
}
|
|
@@ -509,12 +405,28 @@ var extensions = Effect3.fn(function* ({
|
|
|
509
405
|
yield* Ref.update(enabledRef, () => false);
|
|
510
406
|
}),
|
|
511
407
|
close: () => Effect3.promise(async () => {
|
|
512
|
-
await
|
|
513
|
-
|
|
408
|
+
const results = await Promise.allSettled([
|
|
409
|
+
logs?.close(),
|
|
410
|
+
metrics?.close()
|
|
411
|
+
]);
|
|
412
|
+
for (const result of results) {
|
|
413
|
+
if (result.status === "rejected") {
|
|
414
|
+
log3.catch(result.reason, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 120, S: this });
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
await traces?.close();
|
|
514
418
|
}),
|
|
515
419
|
flush: () => Effect3.promise(async () => {
|
|
516
|
-
await
|
|
517
|
-
|
|
420
|
+
const results = await Promise.allSettled([
|
|
421
|
+
logs?.flush(),
|
|
422
|
+
metrics?.flush()
|
|
423
|
+
]);
|
|
424
|
+
for (const result of results) {
|
|
425
|
+
if (result.status === "rejected") {
|
|
426
|
+
log3.catch(result.reason, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 135, S: this });
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
await traces?.flush();
|
|
518
430
|
}),
|
|
519
431
|
setTags: (incomingTags) => {
|
|
520
432
|
for (const [key, value2] of Object.entries(incomingTags)) {
|
|
@@ -542,7 +454,39 @@ var extensions = Effect3.fn(function* ({
|
|
|
542
454
|
} : void 0
|
|
543
455
|
].filter(isNonNullable)
|
|
544
456
|
};
|
|
457
|
+
return extension;
|
|
545
458
|
});
|
|
459
|
+
var isObservabilityDisabledSync = (serviceName) => {
|
|
460
|
+
if (isNode()) {
|
|
461
|
+
return process.env.DX_DISABLE_OBSERVABILITY === "true";
|
|
462
|
+
}
|
|
463
|
+
try {
|
|
464
|
+
if (typeof localStorage !== "undefined") {
|
|
465
|
+
return localStorage.getItem(`${serviceName}/observability-disabled`) === "true";
|
|
466
|
+
}
|
|
467
|
+
} catch {
|
|
468
|
+
}
|
|
469
|
+
return false;
|
|
470
|
+
};
|
|
471
|
+
var detectProcessType = () => {
|
|
472
|
+
if (isNode()) {
|
|
473
|
+
return "node";
|
|
474
|
+
}
|
|
475
|
+
if (typeof window !== "undefined") {
|
|
476
|
+
return "browser";
|
|
477
|
+
}
|
|
478
|
+
if (typeof globalThis.ServiceWorkerGlobalScope !== "undefined") {
|
|
479
|
+
return "service-worker";
|
|
480
|
+
}
|
|
481
|
+
if (typeof globalThis.SharedWorkerGlobalScope !== "undefined") {
|
|
482
|
+
return "shared-worker";
|
|
483
|
+
}
|
|
484
|
+
return "dedicated-worker";
|
|
485
|
+
};
|
|
486
|
+
var resolveRelativeEndpoint = (path) => {
|
|
487
|
+
const origin = globalThis.location?.origin;
|
|
488
|
+
return origin ? `${origin}${path}` : path;
|
|
489
|
+
};
|
|
546
490
|
var parseHeaders = (unparsedHeaders) => {
|
|
547
491
|
return unparsedHeaders.split(";").reduce((acc, header) => {
|
|
548
492
|
const [key, ...rest] = header.split(":");
|
|
@@ -575,12 +519,7 @@ var uploadLogs = async (body) => {
|
|
|
575
519
|
if (!response.ok) {
|
|
576
520
|
log4.warn("feedback log upload failed", {
|
|
577
521
|
status: response.status
|
|
578
|
-
}, {
|
|
579
|
-
F: __dxlog_file4,
|
|
580
|
-
L: 33,
|
|
581
|
-
S: void 0,
|
|
582
|
-
C: (f, a) => f(...a)
|
|
583
|
-
});
|
|
522
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 17, S: void 0 });
|
|
584
523
|
return void 0;
|
|
585
524
|
}
|
|
586
525
|
const { key } = await response.json();
|
|
@@ -588,41 +527,26 @@ var uploadLogs = async (body) => {
|
|
|
588
527
|
} catch (err) {
|
|
589
528
|
log4.warn("feedback log upload error", {
|
|
590
529
|
error: err
|
|
591
|
-
}, {
|
|
592
|
-
F: __dxlog_file4,
|
|
593
|
-
L: 39,
|
|
594
|
-
S: void 0,
|
|
595
|
-
C: (f, a) => f(...a)
|
|
596
|
-
});
|
|
530
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 25, S: void 0 });
|
|
597
531
|
return void 0;
|
|
598
532
|
}
|
|
599
533
|
};
|
|
600
|
-
var extensions2 = Effect4.fn(function* ({ config, release, environment, posthog: posthogConfig }) {
|
|
534
|
+
var extensions2 = Effect4.fn(function* ({ config, release, environment, posthog: posthogConfig, logStore, feedbackLogMaxSize }) {
|
|
601
535
|
if (typeof window === "undefined") {
|
|
602
|
-
log4("PostHog is being stubbed because it is running in a worker.", void 0, {
|
|
603
|
-
F: __dxlog_file4,
|
|
604
|
-
L: 52,
|
|
605
|
-
S: this,
|
|
606
|
-
C: (f, a) => f(...a)
|
|
607
|
-
});
|
|
536
|
+
log4("PostHog is being stubbed because it is running in a worker.", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 33, S: this });
|
|
608
537
|
return stubExtension;
|
|
609
538
|
}
|
|
610
539
|
const feedbackSurveyId = config.get("runtime.app.env.DX_POSTHOG_FEEDBACK_SURVEY_ID");
|
|
611
540
|
const apiKey = config.get("runtime.app.env.DX_POSTHOG_API_KEY");
|
|
612
541
|
const api_host = config.get("runtime.app.env.DX_POSTHOG_API_HOST");
|
|
613
542
|
if (!apiKey || !api_host) {
|
|
614
|
-
log4.info("Missing POSTHOG_API_KEY or POSTHOG_API_HOST", void 0, {
|
|
615
|
-
F: __dxlog_file4,
|
|
616
|
-
L: 60,
|
|
617
|
-
S: this,
|
|
618
|
-
C: (f, a) => f(...a)
|
|
619
|
-
});
|
|
543
|
+
log4.info("Missing POSTHOG_API_KEY or POSTHOG_API_HOST", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 40, S: this });
|
|
620
544
|
return stubExtension;
|
|
621
545
|
}
|
|
622
546
|
const { default: posthog } = yield* Effect4.promise(() => import("posthog-js"));
|
|
623
|
-
const { logProcessor } = yield* Effect4.promise(() => import("./log-processor-
|
|
624
|
-
const logBuffer = new LogBuffer();
|
|
547
|
+
const { logProcessor } = yield* Effect4.promise(() => import("./log-processor-HPHWNBOK.mjs"));
|
|
625
548
|
let feedbackSurveyAvailable = null;
|
|
549
|
+
let unregisterPosthogProcessors;
|
|
626
550
|
const checkFeedbackSurveyAvailable = () => feedbackSurveyId ? Effect4.promise(() => {
|
|
627
551
|
if (feedbackSurveyAvailable !== null) {
|
|
628
552
|
return Promise.resolve(feedbackSurveyAvailable);
|
|
@@ -653,19 +577,15 @@ var extensions2 = Effect4.fn(function* ({ config, release, environment, posthog:
|
|
|
653
577
|
} : {}
|
|
654
578
|
});
|
|
655
579
|
}
|
|
656
|
-
|
|
657
|
-
log4.
|
|
580
|
+
unregisterPosthogProcessors?.();
|
|
581
|
+
const removePosthogLog = log4.addProcessor(logProcessor, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 79, S: this });
|
|
582
|
+
unregisterPosthogProcessors = () => {
|
|
583
|
+
removePosthogLog();
|
|
584
|
+
};
|
|
658
585
|
}),
|
|
659
586
|
close: () => Effect4.sync(() => {
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
logBuffer.logProcessor
|
|
663
|
-
]) {
|
|
664
|
-
const index = log4.runtimeConfig.processors.indexOf(processor);
|
|
665
|
-
if (index !== -1) {
|
|
666
|
-
log4.runtimeConfig.processors.splice(index, 1);
|
|
667
|
-
}
|
|
668
|
-
}
|
|
587
|
+
unregisterPosthogProcessors?.();
|
|
588
|
+
unregisterPosthogProcessors = void 0;
|
|
669
589
|
}),
|
|
670
590
|
enable: () => Effect4.sync(() => posthog.opt_in_capturing()),
|
|
671
591
|
disable: () => Effect4.sync(() => posthog.opt_out_capturing()),
|
|
@@ -700,36 +620,47 @@ var extensions2 = Effect4.fn(function* ({ config, release, environment, posthog:
|
|
|
700
620
|
kind: "feedback",
|
|
701
621
|
// TODO(wittjosiah): Support custom surveys.
|
|
702
622
|
captureUserFeedback: (form) => {
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
623
|
+
return new Promise((resolve, reject) => {
|
|
624
|
+
posthog.getSurveys((surveys) => {
|
|
625
|
+
void (async () => {
|
|
626
|
+
try {
|
|
627
|
+
const survey = surveys.find((survey2) => survey2.id === feedbackSurveyId);
|
|
628
|
+
if (!survey || survey.questions.length === 0) {
|
|
629
|
+
log4.error("Missing feedback survey or survey has no questions", {
|
|
630
|
+
feedbackSurveyId
|
|
631
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 127, S: this });
|
|
632
|
+
resolve(void 0);
|
|
633
|
+
return;
|
|
634
|
+
}
|
|
635
|
+
let debugLogDumpKey = null;
|
|
636
|
+
if (form.includeLogs !== false && logStore !== void 0) {
|
|
637
|
+
const ndjson = await logStore.export({
|
|
638
|
+
maxSize: feedbackLogMaxSize
|
|
639
|
+
});
|
|
640
|
+
if (ndjson.length > 0) {
|
|
641
|
+
debugLogDumpKey = await uploadLogs(ndjson) ?? "failed";
|
|
642
|
+
}
|
|
643
|
+
}
|
|
644
|
+
const question = survey.questions[0];
|
|
645
|
+
const result = posthog.capture("survey sent", {
|
|
646
|
+
$survey_id: survey.id,
|
|
647
|
+
$survey_questions: [
|
|
648
|
+
{
|
|
649
|
+
id: question.id,
|
|
650
|
+
question: question.question
|
|
651
|
+
}
|
|
652
|
+
],
|
|
653
|
+
[`$survey_response_${question.id}`]: form.message,
|
|
654
|
+
debug_log_dump_key: debugLogDumpKey
|
|
655
|
+
});
|
|
656
|
+
resolve(result?.uuid);
|
|
657
|
+
} catch (err) {
|
|
658
|
+
log4.error("Failed to capture user feedback", {
|
|
659
|
+
err
|
|
660
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 157, S: this });
|
|
661
|
+
reject(err);
|
|
727
662
|
}
|
|
728
|
-
|
|
729
|
-
[`$survey_response_${question.id}`]: form.message,
|
|
730
|
-
...debugLogDumpKey ? {
|
|
731
|
-
debug_log_dump_key: debugLogDumpKey
|
|
732
|
-
} : {}
|
|
663
|
+
})();
|
|
733
664
|
});
|
|
734
665
|
});
|
|
735
666
|
},
|
|
@@ -795,19 +726,11 @@ var identityProvider = (clientServices) => Effect5.fn(function* (observability)
|
|
|
795
726
|
});
|
|
796
727
|
});
|
|
797
728
|
var networkMetricsProvider = (clientServices) => Effect5.fn(function* (observability) {
|
|
798
|
-
const ctx = new Context(void 0, {
|
|
799
|
-
F: __dxlog_file5,
|
|
800
|
-
L: 61
|
|
801
|
-
});
|
|
729
|
+
const ctx = new Context(void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file5, L: 50 });
|
|
802
730
|
let lastNetworkStatus;
|
|
803
731
|
const updateSignalMetrics = new Event().debounce(NETWORK_METRICS_MIN_INTERVAL);
|
|
804
732
|
updateSignalMetrics.on(ctx, async () => {
|
|
805
|
-
log5("send signal metrics", void 0, {
|
|
806
|
-
F: __dxlog_file5,
|
|
807
|
-
L: 67,
|
|
808
|
-
S: this,
|
|
809
|
-
C: (f, a) => f(...a)
|
|
810
|
-
});
|
|
733
|
+
log5("send signal metrics", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file5, L: 55, S: this });
|
|
811
734
|
lastNetworkStatus?.signaling?.forEach(({ server, state }) => {
|
|
812
735
|
observability.metrics.gauge("dxos.client.network.signal.connectionState", state, {
|
|
813
736
|
server
|
|
@@ -852,20 +775,11 @@ var networkMetricsProvider = (clientServices) => Effect5.fn(function* (observabi
|
|
|
852
775
|
};
|
|
853
776
|
});
|
|
854
777
|
var runtimeMetricsProvider = (clientServices) => Effect5.fn(function* (observability) {
|
|
855
|
-
const ctx = new Context(void 0, {
|
|
856
|
-
|
|
857
|
-
L: 121
|
|
858
|
-
});
|
|
778
|
+
const ctx = new Context(void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file5, L: 100 });
|
|
779
|
+
log5("runtimeMetricsProvider: requesting platform from SystemService", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file5, L: 101, S: this });
|
|
859
780
|
const platform = yield* Effect5.promise(() => clientServices.SystemService.getPlatform());
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
L: 123,
|
|
863
|
-
S: this,
|
|
864
|
-
A: [
|
|
865
|
-
"platform",
|
|
866
|
-
"'platform is required'"
|
|
867
|
-
]
|
|
868
|
-
});
|
|
781
|
+
log5("runtimeMetricsProvider: platform received", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file5, L: 103, S: this });
|
|
782
|
+
invariant2(platform, "platform is required", { "~LogMeta": "~LogMeta", F: __dxlog_file5, L: 104, S: this, A: ["platform", "'platform is required'"] });
|
|
869
783
|
observability.setTags({
|
|
870
784
|
platformType: Platform.PLATFORM_TYPE[platform.type].toLowerCase(),
|
|
871
785
|
platform: platform.platform,
|
|
@@ -889,33 +803,20 @@ var runtimeMetricsProvider = (clientServices) => Effect5.fn(function* (observabi
|
|
|
889
803
|
}
|
|
890
804
|
}).catch((error) => log5("platform error", {
|
|
891
805
|
error
|
|
892
|
-
}, {
|
|
893
|
-
F: __dxlog_file5,
|
|
894
|
-
L: 152,
|
|
895
|
-
S: this,
|
|
896
|
-
C: (f, a) => f(...a)
|
|
897
|
-
}));
|
|
806
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file5, L: 126, S: this }));
|
|
898
807
|
}, RUNTIME_METRICS_MIN_INTERVAL);
|
|
899
808
|
return async () => {
|
|
900
809
|
await ctx.dispose();
|
|
901
810
|
};
|
|
902
811
|
});
|
|
903
812
|
var spacesMetricsProvider = (client) => Effect5.fn(function* (observability) {
|
|
904
|
-
const ctx = new Context(void 0, {
|
|
905
|
-
F: __dxlog_file5,
|
|
906
|
-
L: 165
|
|
907
|
-
});
|
|
813
|
+
const ctx = new Context(void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file5, L: 135 });
|
|
908
814
|
const spaces = client.spaces.get();
|
|
909
815
|
const subscriptions = /* @__PURE__ */ new Map();
|
|
910
816
|
ctx.onDispose(() => subscriptions.forEach((subscription) => subscription.unsubscribe()));
|
|
911
817
|
const updateSpaceMetrics = new Event().debounce(SPACE_METRICS_MIN_INTERVAL);
|
|
912
818
|
updateSpaceMetrics.on(ctx, async () => {
|
|
913
|
-
log5("send space metrics", void 0, {
|
|
914
|
-
F: __dxlog_file5,
|
|
915
|
-
L: 173,
|
|
916
|
-
S: this,
|
|
917
|
-
C: (f, a) => f(...a)
|
|
918
|
-
});
|
|
819
|
+
log5("send space metrics", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file5, L: 142, S: this });
|
|
919
820
|
for (const data of mapSpaces(spaces, {
|
|
920
821
|
truncateKeys: true
|
|
921
822
|
})) {
|
|
@@ -1006,13 +907,14 @@ var IPData = Schema.Struct({
|
|
|
1006
907
|
});
|
|
1007
908
|
var getIPData = Effect6.fn(function* (config) {
|
|
1008
909
|
const httpClient = yield* HttpClient.HttpClient;
|
|
910
|
+
const httpClientNoTrace = httpClient.pipe(HttpClient.withTracerDisabledWhen(() => true));
|
|
1009
911
|
const cachedData = yield* Effect6.promise(() => localForage2.getItem("dxos:observability:ipdata"));
|
|
1010
912
|
if (cachedData && cachedData.timestamp > Date.now() - IP_DATA_CACHE_TIMEOUT) {
|
|
1011
913
|
return cachedData.data;
|
|
1012
914
|
}
|
|
1013
915
|
const IPDATA_API_KEY = config.get("runtime.app.env.DX_IPDATA_API_KEY");
|
|
1014
916
|
if (IPDATA_API_KEY) {
|
|
1015
|
-
const data = yield* HttpClientRequest.get(`https://api.ipdata.co?api-key=${IPDATA_API_KEY}`).pipe(
|
|
917
|
+
const data = yield* HttpClientRequest.get(`https://api.ipdata.co?api-key=${IPDATA_API_KEY}`).pipe(httpClientNoTrace.execute, Effect6.flatMap((res) => res.json), Effect6.flatMap(Schema.decodeUnknown(IPData)));
|
|
1016
918
|
yield* Effect6.promise(() => localForage2.setItem("dxos:observability:ipdata", {
|
|
1017
919
|
data,
|
|
1018
920
|
timestamp: Date.now()
|
|
@@ -1033,12 +935,9 @@ var provider = (config) => (observability) => Effect6.gen(function* () {
|
|
|
1033
935
|
longitude: ipData.longitude
|
|
1034
936
|
});
|
|
1035
937
|
}).pipe(Effect6.provide(FetchHttpClient.layer), Effect6.catchAll((err) => Effect6.sync(() => {
|
|
1036
|
-
log6.
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
S: void 0,
|
|
1040
|
-
C: (f, a) => f(...a)
|
|
1041
|
-
});
|
|
938
|
+
log6.verbose("ipdata fetch failed", {
|
|
939
|
+
err
|
|
940
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file6, L: 54, S: void 0 });
|
|
1042
941
|
})));
|
|
1043
942
|
|
|
1044
943
|
// src/providers/storage.ts
|
|
@@ -1062,7 +961,6 @@ var provider2 = Effect7.fn(function* (observability) {
|
|
|
1062
961
|
}
|
|
1063
962
|
});
|
|
1064
963
|
export {
|
|
1065
|
-
LogBuffer,
|
|
1066
964
|
observability_exports as Observability,
|
|
1067
965
|
observability_extension_exports as ObservabilityExtension,
|
|
1068
966
|
providers_exports as ObservabilityProvider
|