@dxos/observability 0.8.4-main.ae835ea → 0.8.4-main.bc674ce
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-XNAF22QM.mjs → chunk-5LN7D6GM.mjs} +6 -6
- package/dist/lib/browser/chunk-5LN7D6GM.mjs.map +7 -0
- package/dist/lib/browser/{chunk-USIB5JOP.mjs → chunk-JJQT5TQH.mjs} +51 -398
- package/dist/lib/browser/chunk-JJQT5TQH.mjs.map +7 -0
- package/dist/lib/browser/{chunk-ZI3ZS3PA.mjs → chunk-O4BG5MRL.mjs} +1 -1
- package/dist/lib/browser/chunk-U6JWT3E2.mjs +1 -0
- package/dist/lib/browser/chunk-VL6LVQPU.mjs +69 -0
- package/dist/lib/browser/chunk-VL6LVQPU.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +341 -15
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/observability-XK652NZG.mjs +11 -0
- package/dist/lib/browser/otel/traces-browser.mjs +7 -0
- package/dist/lib/browser/otel/traces-browser.mjs.map +7 -0
- package/dist/lib/browser/otel/traces.mjs +7 -0
- package/dist/lib/browser/otel/traces.mjs.map +7 -0
- package/dist/lib/browser/{otel-UH7ZRWC2.mjs → otel-DI4ASU7Y.mjs} +5 -66
- package/dist/lib/{node-esm/otel-7PUCFSTY.mjs.map → browser/otel-DI4ASU7Y.mjs.map} +4 -4
- package/dist/lib/browser/segment/browser.mjs +9 -0
- package/dist/lib/browser/segment/browser.mjs.map +7 -0
- package/dist/lib/browser/segment/index.mjs +3 -2
- package/dist/lib/browser/segment/node.mjs +9 -0
- package/dist/lib/browser/segment/node.mjs.map +7 -0
- package/dist/lib/browser/sentry/browser.mjs +23 -0
- package/dist/lib/browser/sentry/browser.mjs.map +7 -0
- package/dist/lib/browser/sentry/index.mjs +1 -1
- package/dist/lib/browser/sentry/node.mjs +23 -0
- package/dist/lib/browser/sentry/node.mjs.map +7 -0
- package/dist/lib/browser/{sentry-log-processor-5LSQJMIO.mjs → sentry-log-processor-W7LI6WXA.mjs} +2 -2
- package/dist/lib/browser/sentry-log-processor-W7LI6WXA.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-JJS4CBLT.mjs → chunk-KKNY7TRV.mjs} +51 -398
- package/dist/lib/node-esm/chunk-KKNY7TRV.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-KLJGCUYA.mjs +2 -0
- package/dist/lib/node-esm/chunk-KLJGCUYA.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-OJV247NY.mjs → chunk-KVJTNW3F.mjs} +27 -84
- package/dist/lib/node-esm/chunk-KVJTNW3F.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-QK5IUYVA.mjs → chunk-M4627SMT.mjs} +1 -1
- package/dist/lib/node-esm/chunk-UIVXGEGJ.mjs +62 -0
- package/dist/lib/node-esm/chunk-UIVXGEGJ.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-WAGGA7IT.mjs +52 -0
- package/dist/lib/node-esm/chunk-WAGGA7IT.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +342 -15
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/observability-CXQ3CZGB.mjs +13 -0
- package/dist/lib/node-esm/observability-CXQ3CZGB.mjs.map +7 -0
- package/dist/lib/node-esm/otel/traces-browser.mjs +70 -0
- package/dist/lib/node-esm/otel/traces-browser.mjs.map +7 -0
- package/dist/lib/node-esm/otel/traces.mjs +8 -0
- package/dist/lib/node-esm/otel/traces.mjs.map +7 -0
- package/dist/lib/node-esm/{otel-7PUCFSTY.mjs → otel-JFXO22WD.mjs} +4 -47
- package/dist/lib/{browser/otel-UH7ZRWC2.mjs.map → node-esm/otel-JFXO22WD.mjs.map} +4 -4
- package/dist/lib/node-esm/segment/browser.mjs +92 -0
- package/dist/lib/node-esm/segment/browser.mjs.map +7 -0
- package/dist/lib/node-esm/segment/index.mjs +6 -3
- package/dist/lib/node-esm/segment/node.mjs +11 -0
- package/dist/lib/node-esm/segment/node.mjs.map +7 -0
- package/dist/lib/node-esm/sentry/browser.mjs +165 -0
- package/dist/lib/node-esm/sentry/browser.mjs.map +7 -0
- package/dist/lib/node-esm/sentry/index.mjs +1 -1
- package/dist/lib/node-esm/sentry/node.mjs +24 -0
- package/dist/lib/node-esm/sentry/node.mjs.map +7 -0
- package/dist/lib/node-esm/{sentry-log-processor-C4UGMAMV.mjs → sentry-log-processor-W3SG4RQL.mjs} +2 -2
- package/dist/lib/node-esm/sentry-log-processor-W3SG4RQL.mjs.map +7 -0
- package/dist/types/src/helpers/map-spaces.js +1 -1
- package/dist/types/src/helpers/map-spaces.js.map +1 -1
- package/dist/types/src/segment/base.d.ts +2 -2
- package/dist/types/src/segment/base.d.ts.map +1 -1
- package/dist/types/src/segment/base.js +2 -2
- package/dist/types/src/segment/base.js.map +1 -1
- package/dist/types/src/segment/browser.js +2 -2
- package/dist/types/src/segment/browser.js.map +1 -1
- package/dist/types/src/segment/node.js +2 -2
- package/dist/types/src/segment/node.js.map +1 -1
- package/dist/types/src/sentry/sentry-log-processor.d.ts.map +1 -1
- package/dist/types/src/sentry/sentry-log-processor.js.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +23 -22
- package/src/helpers/map-spaces.ts +1 -1
- package/src/segment/base.ts +2 -2
- package/src/segment/browser.ts +2 -2
- package/src/segment/node.ts +2 -2
- package/src/sentry/sentry-log-processor.ts +2 -0
- package/dist/lib/browser/chunk-USIB5JOP.mjs.map +0 -7
- package/dist/lib/browser/chunk-XNAF22QM.mjs.map +0 -7
- package/dist/lib/browser/observability-AOZNUWZS.mjs +0 -10
- package/dist/lib/browser/sentry-log-processor-5LSQJMIO.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-JJS4CBLT.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-OJV247NY.mjs.map +0 -7
- package/dist/lib/node-esm/observability-UWX2LAYX.mjs +0 -11
- package/dist/lib/node-esm/sentry-log-processor-C4UGMAMV.mjs.map +0 -7
- /package/dist/lib/browser/{chunk-ZI3ZS3PA.mjs.map → chunk-O4BG5MRL.mjs.map} +0 -0
- /package/dist/lib/browser/{observability-AOZNUWZS.mjs.map → chunk-U6JWT3E2.mjs.map} +0 -0
- /package/dist/lib/{node-esm/observability-UWX2LAYX.mjs.map → browser/observability-XK652NZG.mjs.map} +0 -0
- /package/dist/lib/node-esm/{chunk-QK5IUYVA.mjs.map → chunk-M4627SMT.mjs.map} +0 -0
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
TelemetryEvent
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-UIVXGEGJ.mjs";
|
|
5
5
|
|
|
6
6
|
// src/observability.ts
|
|
7
7
|
import { Event, scheduleTaskInterval } from "@dxos/async";
|
|
8
8
|
import { PublicKey } from "@dxos/client";
|
|
9
9
|
import { Context } from "@dxos/context";
|
|
10
10
|
import { invariant } from "@dxos/invariant";
|
|
11
|
-
import { LogLevel, log
|
|
11
|
+
import { LogLevel, log } from "@dxos/log";
|
|
12
12
|
import { ConnectionState } from "@dxos/network-manager";
|
|
13
13
|
import { DeviceKind, Platform } from "@dxos/protocols/proto/dxos/client/services";
|
|
14
14
|
import { isNode } from "@dxos/util";
|
|
@@ -22,163 +22,6 @@ var cli_observability_secrets_default = {
|
|
|
22
22
|
OTEL_AUTHORIZATION: "Basic OTA3MzIzOmdsY19leUp2SWpvaU1URXdNVEl6TnlJc0ltNGlPaUp6ZEdGamF5MDVNRGN6TWpNdGFXNTBaV2R5WVhScGIyNHRZMnh2ZFdSbWJHRnlaUzF2ZEd4d0xYQnliM2g1SWl3aWF5STZJalZ2Tkd4cFYydE5iRmszTlRNMGJUVXpTemRTVjNBeVNpSXNJbTBpT25zaWNpSTZJbkJ5YjJRdGRYTXRaV0Z6ZEMwd0luMTk="
|
|
23
23
|
};
|
|
24
24
|
|
|
25
|
-
// src/helpers/browser-observability.ts
|
|
26
|
-
import * as localForage from "localforage";
|
|
27
|
-
import { log } from "@dxos/log";
|
|
28
|
-
var __dxlog_file = "/__w/dxos/dxos/packages/sdk/observability/src/helpers/browser-observability.ts";
|
|
29
|
-
var OBSERVABILITY_DISABLED_KEY = "observability-disabled";
|
|
30
|
-
var OBSERVABILITY_GROUP_KEY = "observability-group";
|
|
31
|
-
var isObservabilityDisabled = async (namespace) => {
|
|
32
|
-
try {
|
|
33
|
-
return await localForage.getItem(`${namespace}:${OBSERVABILITY_DISABLED_KEY}`) === "true";
|
|
34
|
-
} catch (err) {
|
|
35
|
-
log.catch("Failed to check if observability is disabled, assuming it is", err, {
|
|
36
|
-
F: __dxlog_file,
|
|
37
|
-
L: 25,
|
|
38
|
-
S: void 0,
|
|
39
|
-
C: (f, a) => f(...a)
|
|
40
|
-
});
|
|
41
|
-
return true;
|
|
42
|
-
}
|
|
43
|
-
};
|
|
44
|
-
var storeObservabilityDisabled = async (namespace, value) => {
|
|
45
|
-
try {
|
|
46
|
-
await localForage.setItem(`${namespace}:${OBSERVABILITY_DISABLED_KEY}`, String(value));
|
|
47
|
-
} catch (err) {
|
|
48
|
-
log.catch("Failed to store observability disabled", err, {
|
|
49
|
-
F: __dxlog_file,
|
|
50
|
-
L: 34,
|
|
51
|
-
S: void 0,
|
|
52
|
-
C: (f, a) => f(...a)
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
};
|
|
56
|
-
var getObservabilityGroup = async (namespace) => {
|
|
57
|
-
try {
|
|
58
|
-
return await localForage.getItem(`${namespace}:${OBSERVABILITY_GROUP_KEY}`) ?? void 0;
|
|
59
|
-
} catch (err) {
|
|
60
|
-
log.catch("Failed to get observability group", err, {
|
|
61
|
-
F: __dxlog_file,
|
|
62
|
-
L: 42,
|
|
63
|
-
S: void 0,
|
|
64
|
-
C: (f, a) => f(...a)
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
};
|
|
68
|
-
var storeObservabilityGroup = async (namespace, value) => {
|
|
69
|
-
try {
|
|
70
|
-
await localForage.setItem(`${namespace}:${OBSERVABILITY_GROUP_KEY}`, value);
|
|
71
|
-
} catch (err) {
|
|
72
|
-
log.catch("Failed to store observability group", err, {
|
|
73
|
-
F: __dxlog_file,
|
|
74
|
-
L: 50,
|
|
75
|
-
S: void 0,
|
|
76
|
-
C: (f, a) => f(...a)
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
};
|
|
80
|
-
var initializeAppObservability = async ({
|
|
81
|
-
namespace,
|
|
82
|
-
config,
|
|
83
|
-
// TODO(nf): Configure mode.
|
|
84
|
-
mode = "basic",
|
|
85
|
-
tracingEnable = false,
|
|
86
|
-
replayEnable = false
|
|
87
|
-
}) => {
|
|
88
|
-
log("initializeAppObservability", {
|
|
89
|
-
config
|
|
90
|
-
}, {
|
|
91
|
-
F: __dxlog_file,
|
|
92
|
-
L: 74,
|
|
93
|
-
S: void 0,
|
|
94
|
-
C: (f, a) => f(...a)
|
|
95
|
-
});
|
|
96
|
-
const group = await getObservabilityGroup(namespace) ?? void 0;
|
|
97
|
-
const release = `${namespace}@${config.get("runtime.app.build.version")}`;
|
|
98
|
-
const environment = config.get("runtime.app.env.DX_ENVIRONMENT");
|
|
99
|
-
const { Observability: Observability2 } = await import("./observability-UWX2LAYX.mjs");
|
|
100
|
-
const observability = new Observability2({
|
|
101
|
-
namespace,
|
|
102
|
-
release,
|
|
103
|
-
environment,
|
|
104
|
-
group,
|
|
105
|
-
mode,
|
|
106
|
-
config,
|
|
107
|
-
errorLog: {
|
|
108
|
-
sentryInitOptions: {
|
|
109
|
-
environment,
|
|
110
|
-
release,
|
|
111
|
-
tracing: tracingEnable,
|
|
112
|
-
replay: replayEnable,
|
|
113
|
-
// TODO(wittjosiah): Configure these.
|
|
114
|
-
// Consider using a sampling function to dynamically configure these values.
|
|
115
|
-
// https://docs.sentry.io/platforms/javascript/configuration/sampling/#setting-a-sampling-function
|
|
116
|
-
sampleRate: 1,
|
|
117
|
-
replaySampleRate: 1,
|
|
118
|
-
replaySampleRateOnError: 1
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
});
|
|
122
|
-
const observabilityDisabled = await isObservabilityDisabled(namespace);
|
|
123
|
-
if (observabilityDisabled) {
|
|
124
|
-
observability.setMode("disabled");
|
|
125
|
-
log.info("observability disabled", void 0, {
|
|
126
|
-
F: __dxlog_file,
|
|
127
|
-
L: 114,
|
|
128
|
-
S: void 0,
|
|
129
|
-
C: (f, a) => f(...a)
|
|
130
|
-
});
|
|
131
|
-
return observability;
|
|
132
|
-
}
|
|
133
|
-
try {
|
|
134
|
-
const getIPData = async (config2) => {
|
|
135
|
-
const IP_DATA_CACHE_TIMEOUT = 6 * 60 * 60 * 1e3;
|
|
136
|
-
const cachedData = await localForage.getItem("dxos:observability:ipdata");
|
|
137
|
-
if (cachedData && cachedData.timestamp > Date.now() - IP_DATA_CACHE_TIMEOUT) {
|
|
138
|
-
return cachedData.data;
|
|
139
|
-
}
|
|
140
|
-
const IPDATA_API_KEY = config2.get("runtime.app.env.DX_IPDATA_API_KEY");
|
|
141
|
-
if (IPDATA_API_KEY) {
|
|
142
|
-
return fetch(`https://api.ipdata.co?api-key=${IPDATA_API_KEY}`).then((res) => res.json()).then((data) => {
|
|
143
|
-
localForage.setItem("dxos:observability:ipdata", {
|
|
144
|
-
data,
|
|
145
|
-
timestamp: Date.now()
|
|
146
|
-
}).catch((err) => observability.captureException(err));
|
|
147
|
-
return data;
|
|
148
|
-
}).catch((err) => observability.captureException(err));
|
|
149
|
-
}
|
|
150
|
-
};
|
|
151
|
-
await observability.initialize();
|
|
152
|
-
observability.startErrorLogs();
|
|
153
|
-
const ipData = await getIPData(config);
|
|
154
|
-
ipData && observability.setIPDataTelemetryTags(ipData);
|
|
155
|
-
if (typeof navigator !== "undefined" && navigator.storage?.estimate) {
|
|
156
|
-
setInterval(async () => {
|
|
157
|
-
try {
|
|
158
|
-
const storageEstimate = await navigator.storage.estimate();
|
|
159
|
-
storageEstimate.usage && observability.setTag("storageUsage", storageEstimate.usage.toString(), "telemetry");
|
|
160
|
-
storageEstimate.quota && observability.setTag("storageQuota", storageEstimate.quota.toString(), "telemetry");
|
|
161
|
-
} catch (error) {
|
|
162
|
-
log.warn("Failed to run estimate()", error, {
|
|
163
|
-
F: __dxlog_file,
|
|
164
|
-
L: 169,
|
|
165
|
-
S: void 0,
|
|
166
|
-
C: (f, a) => f(...a)
|
|
167
|
-
});
|
|
168
|
-
}
|
|
169
|
-
}, 1e4);
|
|
170
|
-
}
|
|
171
|
-
} catch (err) {
|
|
172
|
-
log.error("Failed to initialize app observability", err, {
|
|
173
|
-
F: __dxlog_file,
|
|
174
|
-
L: 174,
|
|
175
|
-
S: void 0,
|
|
176
|
-
C: (f, a) => f(...a)
|
|
177
|
-
});
|
|
178
|
-
}
|
|
179
|
-
return observability;
|
|
180
|
-
};
|
|
181
|
-
|
|
182
25
|
// src/helpers/common.ts
|
|
183
26
|
var getTelemetryIdentifier = (client) => {
|
|
184
27
|
if (!client?.initialized) {
|
|
@@ -197,98 +40,6 @@ var getTelemetryIdentity = (client) => {
|
|
|
197
40
|
};
|
|
198
41
|
};
|
|
199
42
|
|
|
200
|
-
// src/helpers/node-observability.ts
|
|
201
|
-
import { existsSync, statSync } from "node:fs";
|
|
202
|
-
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
203
|
-
import { join } from "node:path";
|
|
204
|
-
import yaml from "js-yaml";
|
|
205
|
-
import { v4 as uuid, validate as validateUuid } from "uuid";
|
|
206
|
-
import { log as log2 } from "@dxos/log";
|
|
207
|
-
var __dxlog_file2 = "/__w/dxos/dxos/packages/sdk/observability/src/helpers/node-observability.ts";
|
|
208
|
-
var showObservabilityBanner = async (configDir, bannercb) => {
|
|
209
|
-
const path = join(configDir, ".observability-banner-printed");
|
|
210
|
-
if (existsSync(path)) {
|
|
211
|
-
return;
|
|
212
|
-
}
|
|
213
|
-
bannercb(
|
|
214
|
-
// eslint-disable-next-line no-multi-str
|
|
215
|
-
"Basic observability data will be sent to the DXOS team in order to improve the product. This includes performance metrics, error logs, and usage data. No personally identifiable information, other than your public key, is included with this data and no private data ever leaves your devices. To disable sending observability data, set the environment variable DX_DISABLE_OBSERVABILITY=true."
|
|
216
|
-
);
|
|
217
|
-
await writeFile(path, "", "utf-8");
|
|
218
|
-
};
|
|
219
|
-
var getObservabilityState = async (configDir) => {
|
|
220
|
-
if (existsSync(configDir)) {
|
|
221
|
-
if (!statSync(configDir).isDirectory()) {
|
|
222
|
-
throw new Error(`Config directory ${configDir} exists but is not a directory`);
|
|
223
|
-
}
|
|
224
|
-
} else {
|
|
225
|
-
await mkdir(configDir, {
|
|
226
|
-
recursive: true
|
|
227
|
-
});
|
|
228
|
-
}
|
|
229
|
-
const idPath = join(configDir, "observability.yml");
|
|
230
|
-
if (existsSync(idPath)) {
|
|
231
|
-
const context = await readFile(idPath, "utf-8");
|
|
232
|
-
return validate(context) ?? initializeState(idPath);
|
|
233
|
-
}
|
|
234
|
-
return initializeState(idPath);
|
|
235
|
-
};
|
|
236
|
-
var initializeState = async (idPath) => {
|
|
237
|
-
const observabilityState = {
|
|
238
|
-
installationId: uuid(),
|
|
239
|
-
group: process.env.DX_OBSERVABILITY_GROUP ?? void 0,
|
|
240
|
-
mode: process.env.DX_DISABLE_OBSERVABILITY ? "disabled" : process.env.DX_OBSERVABILITY_MODE ?? "basic"
|
|
241
|
-
};
|
|
242
|
-
await writeFile(idPath, "# This file is automatically generated by the @dxos/cli.\n" + yaml.dump(observabilityState), "utf-8");
|
|
243
|
-
return observabilityState;
|
|
244
|
-
};
|
|
245
|
-
var validate = (contextString) => {
|
|
246
|
-
const context = yaml.load(contextString);
|
|
247
|
-
if (Boolean(context.installationId) && validateUuid(context.installationId)) {
|
|
248
|
-
return {
|
|
249
|
-
...context,
|
|
250
|
-
mode: process.env.DX_DISABLE_OBSERVABILITY ? "disabled" : context.mode ?? "basic"
|
|
251
|
-
};
|
|
252
|
-
}
|
|
253
|
-
};
|
|
254
|
-
var initializeNodeObservability = async ({ namespace, version, config, installationId, group, mode = "basic", tracingEnable = true, replayEnable = true }) => {
|
|
255
|
-
log2("initializeCliObservability", {
|
|
256
|
-
config
|
|
257
|
-
}, {
|
|
258
|
-
F: __dxlog_file2,
|
|
259
|
-
L: 111,
|
|
260
|
-
S: void 0,
|
|
261
|
-
C: (f, a) => f(...a)
|
|
262
|
-
});
|
|
263
|
-
const release = `${namespace}@${version}`;
|
|
264
|
-
const environment = process.env.DX_ENVIRONMENT ?? "unknown";
|
|
265
|
-
const observability = new Observability({
|
|
266
|
-
mode,
|
|
267
|
-
namespace,
|
|
268
|
-
release,
|
|
269
|
-
environment,
|
|
270
|
-
group,
|
|
271
|
-
errorLog: {
|
|
272
|
-
sentryInitOptions: {
|
|
273
|
-
environment,
|
|
274
|
-
release,
|
|
275
|
-
// TODO(wittjosiah): Configure this.
|
|
276
|
-
sampleRate: 1
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
});
|
|
280
|
-
observability.setTag("installationId", installationId);
|
|
281
|
-
const IPDATA_API_KEY = config.get("runtime.app.env.DX_IPDATA_API_KEY");
|
|
282
|
-
try {
|
|
283
|
-
const res = await fetch(`https://api.ipdata.co/?api-key=${IPDATA_API_KEY}`);
|
|
284
|
-
const ipData = await res.json();
|
|
285
|
-
ipData && observability.setIPDataTelemetryTags(ipData);
|
|
286
|
-
} catch (err) {
|
|
287
|
-
observability?.captureException(err);
|
|
288
|
-
}
|
|
289
|
-
return observability;
|
|
290
|
-
};
|
|
291
|
-
|
|
292
43
|
// src/helpers/map-spaces.ts
|
|
293
44
|
var mapSpaces = (spaces, options = {
|
|
294
45
|
verbose: false,
|
|
@@ -307,7 +58,7 @@ var mapSpaces = (spaces, options = {
|
|
|
307
58
|
key: space.key.truncate(),
|
|
308
59
|
open: space.isOpen,
|
|
309
60
|
members: space.members.get().length,
|
|
310
|
-
objects: space.db.coreDatabase.getAllObjectIds().length,
|
|
61
|
+
objects: space.internal.db.coreDatabase.getAllObjectIds().length,
|
|
311
62
|
startup,
|
|
312
63
|
epoch,
|
|
313
64
|
// appliedEpoch,
|
|
@@ -320,95 +71,8 @@ var mapSpaces = (spaces, options = {
|
|
|
320
71
|
});
|
|
321
72
|
};
|
|
322
73
|
|
|
323
|
-
// src/helpers/setup-telemetry-listeners.ts
|
|
324
|
-
var lastFocusEvent = /* @__PURE__ */ new Date();
|
|
325
|
-
var totalTime = 0;
|
|
326
|
-
var setupTelemetryListeners = (namespace, client, observability) => {
|
|
327
|
-
const clickCallback = (event) => {
|
|
328
|
-
const id = event.target?.id;
|
|
329
|
-
if (!id) {
|
|
330
|
-
return;
|
|
331
|
-
}
|
|
332
|
-
setTimeout(() => {
|
|
333
|
-
observability.track({
|
|
334
|
-
...getTelemetryIdentity(client),
|
|
335
|
-
action: "window.click",
|
|
336
|
-
properties: {
|
|
337
|
-
id: event.target?.id,
|
|
338
|
-
path: event.composedPath().filter((el) => Boolean(el.tagName)).map((el) => `${el.tagName.toLowerCase()}${el.id ? `#${el.id}` : ""}`).reverse().join(">")
|
|
339
|
-
}
|
|
340
|
-
});
|
|
341
|
-
});
|
|
342
|
-
};
|
|
343
|
-
const focusCallback = () => {
|
|
344
|
-
const now = /* @__PURE__ */ new Date();
|
|
345
|
-
setTimeout(() => {
|
|
346
|
-
observability.track({
|
|
347
|
-
...getTelemetryIdentity(client),
|
|
348
|
-
action: "window.focus",
|
|
349
|
-
properties: {
|
|
350
|
-
timeAway: now.getTime() - lastFocusEvent.getTime()
|
|
351
|
-
}
|
|
352
|
-
});
|
|
353
|
-
});
|
|
354
|
-
lastFocusEvent = now;
|
|
355
|
-
};
|
|
356
|
-
const blurCallback = () => {
|
|
357
|
-
const now = /* @__PURE__ */ new Date();
|
|
358
|
-
const duration = now.getTime() - lastFocusEvent.getTime();
|
|
359
|
-
setTimeout(() => {
|
|
360
|
-
observability.track({
|
|
361
|
-
...getTelemetryIdentity(client),
|
|
362
|
-
action: "window.blur",
|
|
363
|
-
properties: {
|
|
364
|
-
duration
|
|
365
|
-
}
|
|
366
|
-
});
|
|
367
|
-
});
|
|
368
|
-
lastFocusEvent = now;
|
|
369
|
-
totalTime = totalTime + duration;
|
|
370
|
-
};
|
|
371
|
-
const unloadCallback = () => {
|
|
372
|
-
setTimeout(() => {
|
|
373
|
-
observability.track({
|
|
374
|
-
...getTelemetryIdentity(client),
|
|
375
|
-
action: "page.unload",
|
|
376
|
-
properties: {
|
|
377
|
-
duration: totalTime
|
|
378
|
-
}
|
|
379
|
-
});
|
|
380
|
-
});
|
|
381
|
-
};
|
|
382
|
-
const errorCallback = (event) => {
|
|
383
|
-
setTimeout(() => {
|
|
384
|
-
observability.track({
|
|
385
|
-
...getTelemetryIdentity(client),
|
|
386
|
-
action: "window.error",
|
|
387
|
-
properties: {
|
|
388
|
-
message: event.message,
|
|
389
|
-
filename: event.filename,
|
|
390
|
-
stack: event.error?.stack,
|
|
391
|
-
cause: event.error?.cause
|
|
392
|
-
}
|
|
393
|
-
});
|
|
394
|
-
});
|
|
395
|
-
};
|
|
396
|
-
window.addEventListener("click", clickCallback, true);
|
|
397
|
-
window.addEventListener("focus", focusCallback);
|
|
398
|
-
window.addEventListener("blur", blurCallback);
|
|
399
|
-
window.addEventListener("beforeunload", unloadCallback);
|
|
400
|
-
window.addEventListener("error", errorCallback);
|
|
401
|
-
return () => {
|
|
402
|
-
window.removeEventListener("click", clickCallback, true);
|
|
403
|
-
window.removeEventListener("focus", focusCallback);
|
|
404
|
-
window.removeEventListener("blur", blurCallback);
|
|
405
|
-
window.removeEventListener("beforeunload", unloadCallback);
|
|
406
|
-
window.removeEventListener("error", errorCallback);
|
|
407
|
-
};
|
|
408
|
-
};
|
|
409
|
-
|
|
410
74
|
// src/observability.ts
|
|
411
|
-
var
|
|
75
|
+
var __dxlog_file = "/__w/dxos/dxos/packages/sdk/observability/src/observability.ts";
|
|
412
76
|
var SPACE_METRICS_MIN_INTERVAL = 1e3 * 60;
|
|
413
77
|
var SPACE_TELEMETRY_MIN_INTERVAL = 1e3 * 60 * 60;
|
|
414
78
|
var NETWORK_METRICS_MIN_INTERVAL = 1e3 * 60 * 5;
|
|
@@ -433,7 +97,7 @@ var Observability = class {
|
|
|
433
97
|
_captureUserFeedback;
|
|
434
98
|
_lastNetworkStatus;
|
|
435
99
|
_ctx = new Context(void 0, {
|
|
436
|
-
F:
|
|
100
|
+
F: __dxlog_file,
|
|
437
101
|
L: 115
|
|
438
102
|
});
|
|
439
103
|
// TODO(nf): make platform a required extension?
|
|
@@ -476,11 +140,11 @@ var Observability = class {
|
|
|
476
140
|
process.env.DX_OTEL_AUTHORIZATION && (mergedSecrets.OTEL_AUTHORIZATION = process.env.DX_OTEL_AUTHORIZATION);
|
|
477
141
|
return mergedSecrets;
|
|
478
142
|
} else {
|
|
479
|
-
|
|
143
|
+
log("config", {
|
|
480
144
|
rtc: this._secrets,
|
|
481
145
|
config
|
|
482
146
|
}, {
|
|
483
|
-
F:
|
|
147
|
+
F: __dxlog_file,
|
|
484
148
|
L: 176,
|
|
485
149
|
S: this,
|
|
486
150
|
C: (f, a) => f(...a)
|
|
@@ -498,8 +162,8 @@ var Observability = class {
|
|
|
498
162
|
}
|
|
499
163
|
}
|
|
500
164
|
async initialize() {
|
|
501
|
-
|
|
502
|
-
F:
|
|
165
|
+
log("initializing...", void 0, {
|
|
166
|
+
F: __dxlog_file,
|
|
503
167
|
L: 191,
|
|
504
168
|
S: this,
|
|
505
169
|
C: (f, a) => f(...a)
|
|
@@ -511,8 +175,8 @@ var Observability = class {
|
|
|
511
175
|
await this._initTraces();
|
|
512
176
|
}
|
|
513
177
|
async close() {
|
|
514
|
-
|
|
515
|
-
F:
|
|
178
|
+
log("closing...", void 0, {
|
|
179
|
+
F: __dxlog_file,
|
|
516
180
|
L: 200,
|
|
517
181
|
S: this,
|
|
518
182
|
C: (f, a) => f(...a)
|
|
@@ -558,10 +222,10 @@ var Observability = class {
|
|
|
558
222
|
if (clientServices.IdentityService) {
|
|
559
223
|
clientServices.IdentityService.queryIdentity().subscribe((idqr) => {
|
|
560
224
|
if (!idqr?.identity?.did) {
|
|
561
|
-
|
|
225
|
+
log("empty response from identity service", {
|
|
562
226
|
idqr
|
|
563
227
|
}, {
|
|
564
|
-
F:
|
|
228
|
+
F: __dxlog_file,
|
|
565
229
|
L: 247,
|
|
566
230
|
S: this,
|
|
567
231
|
C: (f, a) => f(...a)
|
|
@@ -577,10 +241,10 @@ var Observability = class {
|
|
|
577
241
|
if (clientServices.DevicesService) {
|
|
578
242
|
clientServices.DevicesService.queryDevices().subscribe((dqr) => {
|
|
579
243
|
if (!dqr || !dqr.devices || dqr.devices.length === 0) {
|
|
580
|
-
|
|
244
|
+
log("empty response from device service", {
|
|
581
245
|
device: dqr
|
|
582
246
|
}, {
|
|
583
|
-
F:
|
|
247
|
+
F: __dxlog_file,
|
|
584
248
|
L: 259,
|
|
585
249
|
S: this,
|
|
586
250
|
C: (f, a) => f(...a)
|
|
@@ -588,7 +252,7 @@ var Observability = class {
|
|
|
588
252
|
return;
|
|
589
253
|
}
|
|
590
254
|
invariant(dqr, "empty response from device service", {
|
|
591
|
-
F:
|
|
255
|
+
F: __dxlog_file,
|
|
592
256
|
L: 263,
|
|
593
257
|
S: this,
|
|
594
258
|
A: [
|
|
@@ -598,10 +262,10 @@ var Observability = class {
|
|
|
598
262
|
});
|
|
599
263
|
const thisDevice = dqr.devices.find((device) => device.kind === DeviceKind.CURRENT);
|
|
600
264
|
if (!thisDevice) {
|
|
601
|
-
|
|
265
|
+
log("no current device", {
|
|
602
266
|
device: dqr
|
|
603
267
|
}, {
|
|
604
|
-
F:
|
|
268
|
+
F: __dxlog_file,
|
|
605
269
|
L: 266,
|
|
606
270
|
S: this,
|
|
607
271
|
C: (f, a) => f(...a)
|
|
@@ -627,7 +291,7 @@ var Observability = class {
|
|
|
627
291
|
//
|
|
628
292
|
async _initLogs() {
|
|
629
293
|
if (this._secrets.OTEL_ENDPOINT && this._secrets.OTEL_AUTHORIZATION && this._mode !== "disabled") {
|
|
630
|
-
const { OtelLogs } = await import("./otel-
|
|
294
|
+
const { OtelLogs } = await import("./otel-JFXO22WD.mjs");
|
|
631
295
|
this._otelLogs = new OtelLogs({
|
|
632
296
|
endpoint: this._secrets.OTEL_ENDPOINT,
|
|
633
297
|
authorizationHeader: this._secrets.OTEL_AUTHORIZATION,
|
|
@@ -642,18 +306,18 @@ var Observability = class {
|
|
|
642
306
|
logLevel: LogLevel.VERBOSE,
|
|
643
307
|
includeSharedWorkerLogs: false
|
|
644
308
|
});
|
|
645
|
-
this._otelLogs &&
|
|
646
|
-
|
|
309
|
+
this._otelLogs && log.runtimeConfig.processors.push(this._otelLogs.logProcessor);
|
|
310
|
+
log("otel logs enabled", {
|
|
647
311
|
namespace: this._namespace
|
|
648
312
|
}, {
|
|
649
|
-
F:
|
|
313
|
+
F: __dxlog_file,
|
|
650
314
|
L: 310,
|
|
651
315
|
S: this,
|
|
652
316
|
C: (f, a) => f(...a)
|
|
653
317
|
});
|
|
654
318
|
} else {
|
|
655
|
-
|
|
656
|
-
F:
|
|
319
|
+
log("otel logs disabled", void 0, {
|
|
320
|
+
F: __dxlog_file,
|
|
657
321
|
L: 312,
|
|
658
322
|
S: this,
|
|
659
323
|
C: (f, a) => f(...a)
|
|
@@ -665,7 +329,7 @@ var Observability = class {
|
|
|
665
329
|
//
|
|
666
330
|
async _initMetrics() {
|
|
667
331
|
if (this.enabled && this._secrets.OTEL_ENDPOINT && this._secrets.OTEL_AUTHORIZATION) {
|
|
668
|
-
const { OtelMetrics } = await import("./otel-
|
|
332
|
+
const { OtelMetrics } = await import("./otel-JFXO22WD.mjs");
|
|
669
333
|
this._otelMetrics = new OtelMetrics({
|
|
670
334
|
endpoint: this._secrets.OTEL_ENDPOINT,
|
|
671
335
|
authorizationHeader: this._secrets.OTEL_AUTHORIZATION,
|
|
@@ -678,15 +342,15 @@ var Observability = class {
|
|
|
678
342
|
value.value
|
|
679
343
|
]))
|
|
680
344
|
});
|
|
681
|
-
|
|
682
|
-
F:
|
|
345
|
+
log("otel metrics enabled", void 0, {
|
|
346
|
+
F: __dxlog_file,
|
|
683
347
|
L: 337,
|
|
684
348
|
S: this,
|
|
685
349
|
C: (f, a) => f(...a)
|
|
686
350
|
});
|
|
687
351
|
} else {
|
|
688
|
-
|
|
689
|
-
F:
|
|
352
|
+
log("otel metrics disabled", void 0, {
|
|
353
|
+
F: __dxlog_file,
|
|
690
354
|
L: 339,
|
|
691
355
|
S: this,
|
|
692
356
|
C: (f, a) => f(...a)
|
|
@@ -708,8 +372,8 @@ var Observability = class {
|
|
|
708
372
|
}
|
|
709
373
|
const updateSignalMetrics = new Event().debounce(NETWORK_METRICS_MIN_INTERVAL);
|
|
710
374
|
updateSignalMetrics.on(this._ctx, async () => {
|
|
711
|
-
|
|
712
|
-
F:
|
|
375
|
+
log("send signal metrics", void 0, {
|
|
376
|
+
F: __dxlog_file,
|
|
713
377
|
L: 361,
|
|
714
378
|
S: this,
|
|
715
379
|
C: (f, a) => f(...a)
|
|
@@ -760,8 +424,8 @@ var Observability = class {
|
|
|
760
424
|
this._ctx.onDispose(() => subscriptions.forEach((subscription) => subscription.unsubscribe()));
|
|
761
425
|
const updateSpaceMetrics = new Event().debounce(SPACE_METRICS_MIN_INTERVAL);
|
|
762
426
|
updateSpaceMetrics.on(this._ctx, async () => {
|
|
763
|
-
|
|
764
|
-
F:
|
|
427
|
+
log("send space metrics", void 0, {
|
|
428
|
+
F: __dxlog_file,
|
|
765
429
|
L: 414,
|
|
766
430
|
S: this,
|
|
767
431
|
C: (f, a) => f(...a)
|
|
@@ -785,8 +449,8 @@ var Observability = class {
|
|
|
785
449
|
});
|
|
786
450
|
const updateSpaceTelemetry = new Event().debounce(SPACE_TELEMETRY_MIN_INTERVAL);
|
|
787
451
|
updateSpaceTelemetry.on(this._ctx, async () => {
|
|
788
|
-
|
|
789
|
-
F:
|
|
452
|
+
log("send space telemetry", void 0, {
|
|
453
|
+
F: __dxlog_file,
|
|
790
454
|
L: 425,
|
|
791
455
|
S: this,
|
|
792
456
|
C: (f, a) => f(...a)
|
|
@@ -823,7 +487,7 @@ var Observability = class {
|
|
|
823
487
|
async startRuntimeMetrics(client, frequency = NETWORK_METRICS_MIN_INTERVAL) {
|
|
824
488
|
const platform = await client.services.services.SystemService?.getPlatform();
|
|
825
489
|
invariant(platform, "platform is required", {
|
|
826
|
-
F:
|
|
490
|
+
F: __dxlog_file,
|
|
827
491
|
L: 463,
|
|
828
492
|
S: this,
|
|
829
493
|
A: [
|
|
@@ -858,10 +522,10 @@ var Observability = class {
|
|
|
858
522
|
this.gauge("dxos.client.services.runtime.heapTotal", platform2.memory.heapTotal);
|
|
859
523
|
this.gauge("dxos.client.services.runtime.heapUsed", platform2.memory.heapUsed);
|
|
860
524
|
}
|
|
861
|
-
}).catch((error) =>
|
|
525
|
+
}).catch((error) => log("platform error", {
|
|
862
526
|
error
|
|
863
527
|
}, {
|
|
864
|
-
F:
|
|
528
|
+
F: __dxlog_file,
|
|
865
529
|
L: 497,
|
|
866
530
|
S: this,
|
|
867
531
|
C: (f, a) => f(...a)
|
|
@@ -885,8 +549,8 @@ var Observability = class {
|
|
|
885
549
|
]))
|
|
886
550
|
});
|
|
887
551
|
} else {
|
|
888
|
-
|
|
889
|
-
F:
|
|
552
|
+
log("segment disabled", void 0, {
|
|
553
|
+
F: __dxlog_file,
|
|
890
554
|
L: 523,
|
|
891
555
|
S: this,
|
|
892
556
|
C: (f, a) => f(...a)
|
|
@@ -913,15 +577,15 @@ var Observability = class {
|
|
|
913
577
|
async _initErrorLogs() {
|
|
914
578
|
if (this._secrets.SENTRY_DESTINATION && this._mode !== "disabled") {
|
|
915
579
|
const { captureException, captureUserFeedback, init, setTag } = await import("./sentry/index.mjs");
|
|
916
|
-
const { SentryLogProcessor } = await import("./sentry-log-processor-
|
|
580
|
+
const { SentryLogProcessor } = await import("./sentry-log-processor-W3SG4RQL.mjs");
|
|
917
581
|
this._captureException = captureException;
|
|
918
582
|
this._captureUserFeedback = captureUserFeedback;
|
|
919
583
|
this._setTag = setTag;
|
|
920
|
-
|
|
584
|
+
log.info("Initializing Sentry", {
|
|
921
585
|
dest: this._secrets.SENTRY_DESTINATION,
|
|
922
586
|
options: this._errorReportingOptions
|
|
923
587
|
}, {
|
|
924
|
-
F:
|
|
588
|
+
F: __dxlog_file,
|
|
925
589
|
L: 556,
|
|
926
590
|
S: this,
|
|
927
591
|
C: (f, a) => f(...a)
|
|
@@ -939,8 +603,8 @@ var Observability = class {
|
|
|
939
603
|
}
|
|
940
604
|
});
|
|
941
605
|
} else {
|
|
942
|
-
|
|
943
|
-
F:
|
|
606
|
+
log("sentry disabled", void 0, {
|
|
607
|
+
F: __dxlog_file,
|
|
944
608
|
L: 576,
|
|
945
609
|
S: this,
|
|
946
610
|
C: (f, a) => f(...a)
|
|
@@ -948,7 +612,7 @@ var Observability = class {
|
|
|
948
612
|
}
|
|
949
613
|
}
|
|
950
614
|
startErrorLogs() {
|
|
951
|
-
this._sentryLogProcessor &&
|
|
615
|
+
this._sentryLogProcessor && log.runtimeConfig.processors.push(this._sentryLogProcessor.logProcessor);
|
|
952
616
|
}
|
|
953
617
|
startTraces() {
|
|
954
618
|
this._otelTraces && this._otelTraces.start();
|
|
@@ -956,7 +620,7 @@ var Observability = class {
|
|
|
956
620
|
// TODO(nf): Refactor init based on providers and their capabilities.
|
|
957
621
|
async _initTraces() {
|
|
958
622
|
if (this._secrets.OTEL_ENDPOINT && this._secrets.OTEL_AUTHORIZATION && this._mode !== "disabled") {
|
|
959
|
-
const { OtelTraces } = await import("./otel-
|
|
623
|
+
const { OtelTraces } = await import("./otel-JFXO22WD.mjs");
|
|
960
624
|
this._otelTraces = new OtelTraces({
|
|
961
625
|
endpoint: this._secrets.OTEL_ENDPOINT,
|
|
962
626
|
authorizationHeader: this._secrets.OTEL_AUTHORIZATION,
|
|
@@ -986,10 +650,10 @@ var Observability = class {
|
|
|
986
650
|
*/
|
|
987
651
|
captureUserFeedback(message) {
|
|
988
652
|
if (!this._secrets.SENTRY_DESTINATION) {
|
|
989
|
-
|
|
653
|
+
log.info("Feedback submitted without Sentry destination", {
|
|
990
654
|
message
|
|
991
655
|
}, {
|
|
992
|
-
F:
|
|
656
|
+
F: __dxlog_file,
|
|
993
657
|
L: 625,
|
|
994
658
|
S: this,
|
|
995
659
|
C: (f, a) => f(...a)
|
|
@@ -1002,19 +666,8 @@ var Observability = class {
|
|
|
1002
666
|
|
|
1003
667
|
export {
|
|
1004
668
|
Observability,
|
|
1005
|
-
OBSERVABILITY_DISABLED_KEY,
|
|
1006
|
-
OBSERVABILITY_GROUP_KEY,
|
|
1007
|
-
isObservabilityDisabled,
|
|
1008
|
-
storeObservabilityDisabled,
|
|
1009
|
-
getObservabilityGroup,
|
|
1010
|
-
storeObservabilityGroup,
|
|
1011
|
-
initializeAppObservability,
|
|
1012
669
|
getTelemetryIdentifier,
|
|
1013
670
|
getTelemetryIdentity,
|
|
1014
|
-
|
|
1015
|
-
getObservabilityState,
|
|
1016
|
-
initializeNodeObservability,
|
|
1017
|
-
mapSpaces,
|
|
1018
|
-
setupTelemetryListeners
|
|
671
|
+
mapSpaces
|
|
1019
672
|
};
|
|
1020
|
-
//# sourceMappingURL=chunk-
|
|
673
|
+
//# sourceMappingURL=chunk-KKNY7TRV.mjs.map
|