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