@dxos/observability 0.4.4-main.9f75c97 → 0.4.4-main.a2f6a92
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-V6THSHYS.mjs → chunk-FWGZ42PL.mjs} +47 -51
- package/dist/lib/browser/chunk-FWGZ42PL.mjs.map +7 -0
- package/dist/lib/browser/datadog/index.mjs +37 -4
- package/dist/lib/browser/datadog/index.mjs.map +4 -4
- package/dist/lib/browser/index.mjs +1 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/observability-OXPW6W3U.mjs +7 -0
- package/dist/lib/browser/segment/index.mjs +77 -3
- package/dist/lib/browser/segment/index.mjs.map +4 -4
- package/dist/lib/node/{chunk-NIGBDV2L.cjs → chunk-4JQR255Q.cjs} +56 -49
- package/dist/lib/node/chunk-4JQR255Q.cjs.map +7 -0
- package/dist/lib/node/datadog/index.cjs +73 -3
- package/dist/lib/node/datadog/index.cjs.map +4 -4
- package/dist/lib/node/index.cjs +15 -18
- package/dist/lib/node/index.cjs.map +2 -2
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/{observability-KLYDIJPY.cjs → observability-JN7ZVH64.cjs} +6 -9
- package/dist/lib/node/observability-JN7ZVH64.cjs.map +7 -0
- package/dist/lib/node/segment/index.cjs +145 -2
- package/dist/lib/node/segment/index.cjs.map +4 -4
- package/dist/types/src/datadog/browser.d.ts +4 -0
- package/dist/types/src/datadog/browser.d.ts.map +1 -1
- package/dist/types/src/datadog/browser.js +8 -1
- package/dist/types/src/datadog/browser.js.map +1 -1
- package/dist/types/src/helpers/browser-observability.d.ts.map +1 -1
- package/dist/types/src/helpers/browser-observability.js +3 -1
- package/dist/types/src/helpers/browser-observability.js.map +1 -1
- package/dist/types/src/helpers/node-observability.d.ts +2 -12
- package/dist/types/src/helpers/node-observability.d.ts.map +1 -1
- package/dist/types/src/helpers/node-observability.js +8 -3
- package/dist/types/src/helpers/node-observability.js.map +1 -1
- package/dist/types/src/observability.d.ts +6 -2
- package/dist/types/src/observability.d.ts.map +1 -1
- package/dist/types/src/observability.js +49 -22
- package/dist/types/src/observability.js.map +1 -1
- package/dist/types/src/segment/node.js +1 -1
- package/dist/types/src/segment/node.js.map +1 -1
- package/package.json +20 -19
- package/src/datadog/browser.ts +7 -0
- package/src/helpers/browser-observability.ts +3 -1
- package/src/helpers/node-observability.ts +8 -14
- package/src/observability.ts +39 -27
- package/src/segment/node.ts +1 -1
- package/dist/lib/browser/chunk-6ZTMPKEG.mjs +0 -81
- package/dist/lib/browser/chunk-6ZTMPKEG.mjs.map +0 -7
- package/dist/lib/browser/chunk-HPGC4HC7.mjs +0 -83
- package/dist/lib/browser/chunk-HPGC4HC7.mjs.map +0 -7
- package/dist/lib/browser/chunk-V6THSHYS.mjs.map +0 -7
- package/dist/lib/browser/observability-5GM33EWR.mjs +0 -10
- package/dist/lib/node/chunk-BHF4PKAP.cjs +0 -170
- package/dist/lib/node/chunk-BHF4PKAP.cjs.map +0 -7
- package/dist/lib/node/chunk-NIGBDV2L.cjs.map +0 -7
- package/dist/lib/node/chunk-ZJRKFREX.cjs +0 -101
- package/dist/lib/node/chunk-ZJRKFREX.cjs.map +0 -7
- package/dist/lib/node/observability-KLYDIJPY.cjs.map +0 -7
- /package/dist/lib/browser/{observability-5GM33EWR.mjs.map → observability-OXPW6W3U.mjs.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.js","sourceRoot":"","sources":["../../../../src/segment/node.ts"],"names":[],"mappings":";AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;;;;;;AAEF,oEAAuC;AAEvC,+CAA4C;AAC5C,mCAAgC;AAGhC,sCAA6C;AAE7C,MAAa,gBAAgB;IAI3B,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAA2B;QACjE,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI;YACF,IAAA,qBAAS,EAAC,MAAM,EAAE,gCAAgC,CAAC,CAAC;YAEpD,IAAI,CAAC,UAAU,GAAG,IAAI,wBAAS,CAAC,MAAM,EAAE;gBACtC,OAAO,EAAE,SAAS;gBAClB,MAAM,EAAE,IAAI;aACb,CAAC,CAAC;SACJ;QAAC,OAAO,GAAG,EAAE;YACZ,SAAG,CAAC,KAAK,CAAC,gCAAgC,EAAE,GAAG,CAAC,CAAC;SAClD;IACH,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,KAAkB,EAAE;QACpF,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACpB,IAAA,SAAG,EAAC,2BAA2B,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;YACrD,OAAO;SACR;QAED,IAAI;YACF,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;gBACnB,GAAG,OAAO;gBACV,MAAM;gBACN,WAAW,EAAE,WAAY;aAC1B,CAAC,CAAC;SACJ;QAAC,OAAO,GAAG,EAAE;YACZ,SAAG,CAAC,KAAK,CAAC,sBAAsB,EAAE,GAAG,CAAC,CAAC;SACxC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,OAAO,EAAgB;QAC9F,IAAA,SAAG,EAAC,4BAA4B,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC7E,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACpB,IAAA,SAAG,EAAC,2BAA2B,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;YACtD,OAAO;SACR;QAED,IAAI;YACF,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;gBACpB,GAAG,OAAO;gBACV,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE;
|
|
1
|
+
{"version":3,"file":"node.js","sourceRoot":"","sources":["../../../../src/segment/node.ts"],"names":[],"mappings":";AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;;;;;;AAEF,oEAAuC;AAEvC,+CAA4C;AAC5C,mCAAgC;AAGhC,sCAA6C;AAE7C,MAAa,gBAAgB;IAI3B,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAA2B;QACjE,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI;YACF,IAAA,qBAAS,EAAC,MAAM,EAAE,gCAAgC,CAAC,CAAC;YAEpD,IAAI,CAAC,UAAU,GAAG,IAAI,wBAAS,CAAC,MAAM,EAAE;gBACtC,OAAO,EAAE,SAAS;gBAClB,MAAM,EAAE,IAAI;aACb,CAAC,CAAC;SACJ;QAAC,OAAO,GAAG,EAAE;YACZ,SAAG,CAAC,KAAK,CAAC,gCAAgC,EAAE,GAAG,CAAC,CAAC;SAClD;IACH,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,KAAkB,EAAE;QACpF,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACpB,IAAA,SAAG,EAAC,2BAA2B,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;YACrD,OAAO;SACR;QAED,IAAI;YACF,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;gBACnB,GAAG,OAAO;gBACV,MAAM;gBACN,WAAW,EAAE,WAAY;aAC1B,CAAC,CAAC;SACJ;QAAC,OAAO,GAAG,EAAE;YACZ,SAAG,CAAC,KAAK,CAAC,sBAAsB,EAAE,GAAG,CAAC,CAAC;SACxC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,OAAO,EAAgB;QAC9F,IAAA,SAAG,EAAC,4BAA4B,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC7E,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACpB,IAAA,SAAG,EAAC,2BAA2B,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;YACtD,OAAO;SACR;QAED,IAAI;YACF,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;gBACpB,GAAG,OAAO;gBACV,UAAU,EAAE,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE;gBACzD,MAAM;gBACN,WAAW,EAAE,WAAY;gBACzB,KAAK;aACN,CAAC,CAAC;SACJ;QAAC,OAAO,GAAG,EAAE;YACZ,SAAG,CAAC,KAAK,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC;SACzC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACpB,IAAA,SAAG,EAAC,2BAA2B,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;YACtD,OAAO;SACR;QAED,IAAI;YACF,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBAClC,IAAA,yBAAgB,EAAC,GAAG,CAAC,CAAC;YACxB,CAAC,CAAC,CAAC;SACJ;QAAC,OAAO,GAAG,EAAE;YACZ,SAAG,CAAC,KAAK,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;SACnC;IACH,CAAC;CACF;AA9ED,4CA8EC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dxos/observability",
|
|
3
|
-
"version": "0.4.4-main.
|
|
3
|
+
"version": "0.4.4-main.a2f6a92",
|
|
4
4
|
"description": "Provides a common interface for app and platform observability",
|
|
5
5
|
"homepage": "https://dxos.org",
|
|
6
6
|
"bugs": "https://github.com/dxos/dxos/issues",
|
|
@@ -33,6 +33,7 @@
|
|
|
33
33
|
}
|
|
34
34
|
},
|
|
35
35
|
"browser": {
|
|
36
|
+
"./src/datadog/metrics.ts": "./src/datadog/browser.ts",
|
|
36
37
|
"./src/datadog/node.ts": "./src/datadog/browser.ts",
|
|
37
38
|
"./src/segment/node.ts": "./src/segment/browser.ts",
|
|
38
39
|
"./src/sentry/node.ts": "./src/sentry/browser.ts",
|
|
@@ -58,32 +59,32 @@
|
|
|
58
59
|
],
|
|
59
60
|
"dependencies": {
|
|
60
61
|
"@segment/snippet": "^4.15.3",
|
|
61
|
-
"@sentry/browser": "^7.
|
|
62
|
-
"@sentry/integrations": "7.
|
|
63
|
-
"@sentry/node": "^7.
|
|
64
|
-
"@sentry/tracing": "^7.
|
|
62
|
+
"@sentry/browser": "^7.100.1",
|
|
63
|
+
"@sentry/integrations": "7.100.1",
|
|
64
|
+
"@sentry/node": "^7.100.1",
|
|
65
|
+
"@sentry/tracing": "^7.100.1",
|
|
65
66
|
"analytics-node": "^6.2.0",
|
|
66
67
|
"datadog-metrics": "^0.11.1",
|
|
67
68
|
"debug": "^4.3.4",
|
|
68
69
|
"js-yaml": "^4.1.0",
|
|
69
70
|
"localforage": "^1.10.0",
|
|
70
71
|
"uuid": "^8.3.2",
|
|
71
|
-
"@dxos/async": "0.4.4-main.
|
|
72
|
-
"@dxos/client-services": "0.4.4-main.
|
|
73
|
-
"@dxos/
|
|
74
|
-
"@dxos/
|
|
75
|
-
"@dxos/
|
|
76
|
-
"@dxos/
|
|
77
|
-
"@dxos/
|
|
78
|
-
"@dxos/
|
|
79
|
-
"@dxos/network-manager": "0.4.4-main.
|
|
80
|
-
"@dxos/
|
|
81
|
-
"@dxos/
|
|
82
|
-
"@dxos/util": "0.4.4-main.
|
|
83
|
-
"@dxos/react-client": "0.4.4-main.
|
|
72
|
+
"@dxos/async": "0.4.4-main.a2f6a92",
|
|
73
|
+
"@dxos/client-services": "0.4.4-main.a2f6a92",
|
|
74
|
+
"@dxos/client-protocol": "0.4.4-main.a2f6a92",
|
|
75
|
+
"@dxos/debug": "0.4.4-main.a2f6a92",
|
|
76
|
+
"@dxos/config": "0.4.4-main.a2f6a92",
|
|
77
|
+
"@dxos/invariant": "0.4.4-main.a2f6a92",
|
|
78
|
+
"@dxos/context": "0.4.4-main.a2f6a92",
|
|
79
|
+
"@dxos/log": "0.4.4-main.a2f6a92",
|
|
80
|
+
"@dxos/network-manager": "0.4.4-main.a2f6a92",
|
|
81
|
+
"@dxos/node-std": "0.4.4-main.a2f6a92",
|
|
82
|
+
"@dxos/protocols": "0.4.4-main.a2f6a92",
|
|
83
|
+
"@dxos/util": "0.4.4-main.a2f6a92",
|
|
84
|
+
"@dxos/react-client": "0.4.4-main.a2f6a92"
|
|
84
85
|
},
|
|
85
86
|
"devDependencies": {
|
|
86
|
-
"@sentry/types": "^7.
|
|
87
|
+
"@sentry/types": "^7.100.1",
|
|
87
88
|
"@types/analytics-node": "^3.1.9",
|
|
88
89
|
"@types/debug": "^4.1.10",
|
|
89
90
|
"@types/js-yaml": "^4.0.5",
|
package/src/datadog/browser.ts
CHANGED
|
@@ -19,3 +19,10 @@ export const defaultOptions = ({ apiKey, config, host }: DatadogOptions) => {
|
|
|
19
19
|
},
|
|
20
20
|
};
|
|
21
21
|
};
|
|
22
|
+
|
|
23
|
+
// TODO(wittjosiah): This is a stub for now.
|
|
24
|
+
// We need a browser version of the datadog metrics that doesn't bundle everything under the sun.
|
|
25
|
+
export class DatadogMetrics {
|
|
26
|
+
gauge(name: string, value: number, tags?: any) {}
|
|
27
|
+
flush() {}
|
|
28
|
+
}
|
|
@@ -90,6 +90,8 @@ export const initializeAppObservability = async ({
|
|
|
90
90
|
// TODO(nf): configure mode
|
|
91
91
|
const observability = new Observability({
|
|
92
92
|
namespace,
|
|
93
|
+
release,
|
|
94
|
+
environment,
|
|
93
95
|
group,
|
|
94
96
|
mode,
|
|
95
97
|
config,
|
|
@@ -152,7 +154,7 @@ export const initializeAppObservability = async ({
|
|
|
152
154
|
|
|
153
155
|
// TODO(nf): should provide capability to init Sentry earlier in booting process to capture errors during initialization.
|
|
154
156
|
|
|
155
|
-
observability.initialize();
|
|
157
|
+
await observability.initialize();
|
|
156
158
|
|
|
157
159
|
const ipData = await getIPData(config);
|
|
158
160
|
|
|
@@ -51,18 +51,6 @@ export const getObservabilityState = async (configDir: string): Promise<Persiste
|
|
|
51
51
|
return initializeState(idPath);
|
|
52
52
|
};
|
|
53
53
|
|
|
54
|
-
export type TelemetryContext = {
|
|
55
|
-
mode: Mode;
|
|
56
|
-
installationId?: string;
|
|
57
|
-
group?: string;
|
|
58
|
-
timezone: string;
|
|
59
|
-
runtime: string;
|
|
60
|
-
os: string;
|
|
61
|
-
arch: string;
|
|
62
|
-
ci: boolean;
|
|
63
|
-
[key: string]: any;
|
|
64
|
-
};
|
|
65
|
-
|
|
66
54
|
export type PersistentObservabilityState = {
|
|
67
55
|
installationId: string;
|
|
68
56
|
group?: string;
|
|
@@ -101,6 +89,7 @@ export type NodeObservabilityOptions = {
|
|
|
101
89
|
installationId: string;
|
|
102
90
|
group?: string;
|
|
103
91
|
namespace: string;
|
|
92
|
+
version: string;
|
|
104
93
|
config: Config;
|
|
105
94
|
mode?: Mode;
|
|
106
95
|
tracingEnable?: boolean;
|
|
@@ -110,6 +99,7 @@ export type NodeObservabilityOptions = {
|
|
|
110
99
|
|
|
111
100
|
export const initializeNodeObservability = async ({
|
|
112
101
|
namespace,
|
|
102
|
+
version,
|
|
113
103
|
config,
|
|
114
104
|
installationId,
|
|
115
105
|
group,
|
|
@@ -119,11 +109,14 @@ export const initializeNodeObservability = async ({
|
|
|
119
109
|
}: NodeObservabilityOptions): Promise<Observability> => {
|
|
120
110
|
log('initializeCliObservability', { config });
|
|
121
111
|
|
|
122
|
-
|
|
123
|
-
const
|
|
112
|
+
// TODO(nf): make CLI build populate runtime.app.build config?
|
|
113
|
+
const release = `${namespace}@${version}`;
|
|
114
|
+
const environment = process.env.DX_ENVIRONMENT ?? 'unknown';
|
|
124
115
|
|
|
125
116
|
const observability = new Observability({
|
|
126
117
|
namespace,
|
|
118
|
+
release,
|
|
119
|
+
environment,
|
|
127
120
|
group,
|
|
128
121
|
mode,
|
|
129
122
|
errorLog: {
|
|
@@ -139,6 +132,7 @@ export const initializeNodeObservability = async ({
|
|
|
139
132
|
|
|
140
133
|
observability.setTag('installationId', installationId);
|
|
141
134
|
|
|
135
|
+
// TODO(nf): cache ipdata to avoid repeated requests
|
|
142
136
|
const IPDATA_API_KEY = config.get('runtime.app.env.DX_IPDATA_API_KEY');
|
|
143
137
|
try {
|
|
144
138
|
const res = await fetch(`https://api.ipdata.co/?api-key=${IPDATA_API_KEY}`);
|
package/src/observability.ts
CHANGED
|
@@ -13,17 +13,10 @@ import { DeviceKind, type NetworkStatus, Platform } from '@dxos/protocols/proto/
|
|
|
13
13
|
import { isNode } from '@dxos/util';
|
|
14
14
|
|
|
15
15
|
import buildSecrets from './cli-observability-secrets.json';
|
|
16
|
-
import { DatadogMetrics } from './datadog';
|
|
16
|
+
import { type DatadogMetrics } from './datadog';
|
|
17
17
|
import { type IPData, getTelemetryIdentifier, mapSpaces } from './helpers';
|
|
18
|
-
import { SegmentTelemetry, type EventOptions, type PageOptions } from './segment';
|
|
19
|
-
import {
|
|
20
|
-
captureException as sentryCaptureException,
|
|
21
|
-
enableSentryLogProcessor,
|
|
22
|
-
configureTracing as sentryConfigureTracing,
|
|
23
|
-
init as sentryInit,
|
|
24
|
-
type InitOptions,
|
|
25
|
-
setTag as sentrySetTag,
|
|
26
|
-
} from './sentry';
|
|
18
|
+
import { type SegmentTelemetry, type EventOptions, type PageOptions } from './segment';
|
|
19
|
+
import { type InitOptions, type captureException as SentryCaptureException } from './sentry';
|
|
27
20
|
|
|
28
21
|
const SPACE_METRICS_MIN_INTERVAL = 1000 * 60;
|
|
29
22
|
// const DATADOG_IDLE_INTERVAL = 1000 * 60 * 5;
|
|
@@ -49,6 +42,8 @@ export type ObservabilityOptions = {
|
|
|
49
42
|
namespace: string;
|
|
50
43
|
// TODO(nf): make platform a required extension?
|
|
51
44
|
// platform: Platform;
|
|
45
|
+
release?: string;
|
|
46
|
+
environment?: string;
|
|
52
47
|
config?: Config;
|
|
53
48
|
secrets?: Record<string, string>;
|
|
54
49
|
group?: string;
|
|
@@ -77,6 +72,8 @@ export class Observability {
|
|
|
77
72
|
// TODO(wittjosiah): Generic error logging interface.
|
|
78
73
|
private _errorReportingOptions?: InitOptions;
|
|
79
74
|
private _errorLogProcessor: boolean;
|
|
75
|
+
private _captureException?: typeof SentryCaptureException;
|
|
76
|
+
private _setTag?: (key: string, value: string) => void;
|
|
80
77
|
|
|
81
78
|
private _secrets: ObservabilitySecrets;
|
|
82
79
|
private _namespace: string;
|
|
@@ -88,7 +85,17 @@ export class Observability {
|
|
|
88
85
|
private _tags = new Map<string, { value: string; scope: TagScope }>();
|
|
89
86
|
|
|
90
87
|
// TODO(nf): make platform a required extension?
|
|
91
|
-
constructor({
|
|
88
|
+
constructor({
|
|
89
|
+
namespace,
|
|
90
|
+
environment,
|
|
91
|
+
release,
|
|
92
|
+
config,
|
|
93
|
+
secrets,
|
|
94
|
+
group,
|
|
95
|
+
mode,
|
|
96
|
+
telemetry,
|
|
97
|
+
errorLog,
|
|
98
|
+
}: ObservabilityOptions) {
|
|
92
99
|
this._namespace = namespace;
|
|
93
100
|
this._config = config;
|
|
94
101
|
this._mode = mode ?? 'disabled';
|
|
@@ -102,10 +109,9 @@ export class Observability {
|
|
|
102
109
|
this.setTag('group', this._group);
|
|
103
110
|
}
|
|
104
111
|
this.setTag('namespace', this._namespace);
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
}
|
|
112
|
+
environment && this.setTag('environment', environment);
|
|
113
|
+
release && this.setTag('release', release);
|
|
114
|
+
this.setTag('mode', this._mode);
|
|
109
115
|
}
|
|
110
116
|
|
|
111
117
|
private _loadSecrets(config: Config | undefined, secrets?: Record<string, string>) {
|
|
@@ -139,10 +145,10 @@ export class Observability {
|
|
|
139
145
|
}
|
|
140
146
|
}
|
|
141
147
|
|
|
142
|
-
initialize() {
|
|
143
|
-
this._initMetrics();
|
|
144
|
-
this._initTelemetry();
|
|
145
|
-
this._initErrorLogs();
|
|
148
|
+
async initialize() {
|
|
149
|
+
await this._initMetrics();
|
|
150
|
+
await this._initTelemetry();
|
|
151
|
+
await this._initErrorLogs();
|
|
146
152
|
}
|
|
147
153
|
|
|
148
154
|
async close() {
|
|
@@ -173,7 +179,7 @@ export class Observability {
|
|
|
173
179
|
|
|
174
180
|
setTag(key: string, value: string, scope?: TagScope) {
|
|
175
181
|
if (this.enabled && (scope === undefined || scope === 'all' || scope === 'errors')) {
|
|
176
|
-
|
|
182
|
+
this._setTag?.(key, value);
|
|
177
183
|
}
|
|
178
184
|
if (!scope) {
|
|
179
185
|
scope = 'all';
|
|
@@ -227,8 +233,9 @@ export class Observability {
|
|
|
227
233
|
// Metrics
|
|
228
234
|
//
|
|
229
235
|
|
|
230
|
-
private _initMetrics() {
|
|
236
|
+
private async _initMetrics() {
|
|
231
237
|
if (this.enabled && this._secrets.DATADOG_API_KEY) {
|
|
238
|
+
const { DatadogMetrics } = await import('./datadog');
|
|
232
239
|
this._metrics = new DatadogMetrics({
|
|
233
240
|
apiKey: this._secrets.DATADOG_API_KEY,
|
|
234
241
|
getTags: () =>
|
|
@@ -396,8 +403,9 @@ export class Observability {
|
|
|
396
403
|
// Telemetry
|
|
397
404
|
//
|
|
398
405
|
|
|
399
|
-
private _initTelemetry() {
|
|
406
|
+
private async _initTelemetry() {
|
|
400
407
|
if (this._secrets.TELEMETRY_API_KEY && this._mode !== 'disabled') {
|
|
408
|
+
const { SegmentTelemetry } = await import('./segment');
|
|
401
409
|
this._telemetry = new SegmentTelemetry({
|
|
402
410
|
apiKey: this._secrets.TELEMETRY_API_KEY,
|
|
403
411
|
batchSize: this._telemetryBatchSize,
|
|
@@ -437,20 +445,24 @@ export class Observability {
|
|
|
437
445
|
// Error Logs
|
|
438
446
|
//
|
|
439
447
|
|
|
440
|
-
private _initErrorLogs() {
|
|
448
|
+
private async _initErrorLogs() {
|
|
441
449
|
if (this._secrets.SENTRY_DESTINATION && this._mode !== 'disabled') {
|
|
450
|
+
const { captureException, enableSentryLogProcessor, configureTracing, init, setTag } = await import('./sentry');
|
|
451
|
+
this._captureException = captureException;
|
|
452
|
+
this._setTag = setTag;
|
|
453
|
+
|
|
442
454
|
// TODO(nf): refactor package into this one?
|
|
443
455
|
log.info('Initializing Sentry', {
|
|
444
456
|
dest: this._secrets.SENTRY_DESTINATION,
|
|
445
457
|
options: this._errorReportingOptions,
|
|
446
458
|
});
|
|
447
|
-
|
|
459
|
+
init({
|
|
448
460
|
...this._errorReportingOptions,
|
|
449
461
|
destination: this._secrets.SENTRY_DESTINATION,
|
|
450
462
|
scrubFilenames: this._mode !== 'full',
|
|
451
463
|
});
|
|
452
464
|
if (this._errorReportingOptions?.tracing) {
|
|
453
|
-
|
|
465
|
+
configureTracing();
|
|
454
466
|
}
|
|
455
467
|
// TODO(nf): set platform at instantiation? needed for node.
|
|
456
468
|
if (this._errorLogProcessor) {
|
|
@@ -459,7 +471,7 @@ export class Observability {
|
|
|
459
471
|
// TODO(nf): is this different than passing as properties in options?
|
|
460
472
|
this._tags.forEach((v, k) => {
|
|
461
473
|
if (v.scope === 'all' || v.scope === 'errors') {
|
|
462
|
-
|
|
474
|
+
setTag(k, v.value);
|
|
463
475
|
}
|
|
464
476
|
});
|
|
465
477
|
} else {
|
|
@@ -474,7 +486,7 @@ export class Observability {
|
|
|
474
486
|
*/
|
|
475
487
|
captureException(err: any) {
|
|
476
488
|
if (this.enabled) {
|
|
477
|
-
|
|
489
|
+
this._captureException?.(err);
|
|
478
490
|
}
|
|
479
491
|
}
|
|
480
492
|
}
|
package/src/segment/node.ts
CHANGED
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
// packages/sdk/observability/src/datadog/browser.ts
|
|
2
|
-
import { invariant } from "@dxos/invariant";
|
|
3
|
-
import { log } from "@dxos/log";
|
|
4
|
-
var __dxlog_file = "/home/runner/work/dxos/dxos/packages/sdk/observability/src/datadog/browser.ts";
|
|
5
|
-
var defaultOptions = ({ apiKey, config, host }) => {
|
|
6
|
-
const corsProxy = config.get("runtime.app.env.DX_DATADOG_PROXY");
|
|
7
|
-
invariant(corsProxy, "need DX_DATADOG_PROXY for CORS proxy", {
|
|
8
|
-
F: __dxlog_file,
|
|
9
|
-
L: 12,
|
|
10
|
-
S: void 0,
|
|
11
|
-
A: [
|
|
12
|
-
"corsProxy",
|
|
13
|
-
"'need DX_DATADOG_PROXY for CORS proxy'"
|
|
14
|
-
]
|
|
15
|
-
});
|
|
16
|
-
return {
|
|
17
|
-
apiKey,
|
|
18
|
-
host,
|
|
19
|
-
site: corsProxy,
|
|
20
|
-
onError: (err) => {
|
|
21
|
-
log.info("Datadog error", {
|
|
22
|
-
err
|
|
23
|
-
}, {
|
|
24
|
-
F: __dxlog_file,
|
|
25
|
-
L: 18,
|
|
26
|
-
S: void 0,
|
|
27
|
-
C: (f, a) => f(...a)
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
};
|
|
31
|
-
};
|
|
32
|
-
|
|
33
|
-
// packages/sdk/observability/src/datadog/metrics.ts
|
|
34
|
-
import * as Datadog from "datadog-metrics";
|
|
35
|
-
import debug from "debug";
|
|
36
|
-
import { invariant as invariant2 } from "@dxos/invariant";
|
|
37
|
-
import { log as log2 } from "@dxos/log";
|
|
38
|
-
var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/sdk/observability/src/datadog/metrics.ts";
|
|
39
|
-
debug.enable("metrics");
|
|
40
|
-
var DatadogMetrics = class {
|
|
41
|
-
constructor(options) {
|
|
42
|
-
this._getTags = options.getTags;
|
|
43
|
-
this._datadogmetrics = Datadog;
|
|
44
|
-
this._datadogmetrics.init(defaultOptions(options));
|
|
45
|
-
}
|
|
46
|
-
gauge(name, value, tags) {
|
|
47
|
-
invariant2(this._datadogmetrics, "Datadog not initialized", {
|
|
48
|
-
F: __dxlog_file2,
|
|
49
|
-
L: 38,
|
|
50
|
-
S: this,
|
|
51
|
-
A: [
|
|
52
|
-
"this._datadogmetrics",
|
|
53
|
-
"'Datadog not initialized'"
|
|
54
|
-
]
|
|
55
|
-
});
|
|
56
|
-
const mergedTags = Object.entries({
|
|
57
|
-
...this._getTags(),
|
|
58
|
-
...tags
|
|
59
|
-
}).map(([key, value2]) => `${key}:${value2}`);
|
|
60
|
-
log2("datadog gauge", {
|
|
61
|
-
name,
|
|
62
|
-
value,
|
|
63
|
-
tags: mergedTags
|
|
64
|
-
}, {
|
|
65
|
-
F: __dxlog_file2,
|
|
66
|
-
L: 40,
|
|
67
|
-
S: this,
|
|
68
|
-
C: (f, a) => f(...a)
|
|
69
|
-
});
|
|
70
|
-
this._datadogmetrics.gauge(name, value, mergedTags);
|
|
71
|
-
}
|
|
72
|
-
flush() {
|
|
73
|
-
this._datadogmetrics.flush();
|
|
74
|
-
}
|
|
75
|
-
};
|
|
76
|
-
|
|
77
|
-
export {
|
|
78
|
-
defaultOptions,
|
|
79
|
-
DatadogMetrics
|
|
80
|
-
};
|
|
81
|
-
//# sourceMappingURL=chunk-6ZTMPKEG.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/datadog/browser.ts", "../../../src/datadog/metrics.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\n\nimport { type DatadogOptions } from './metrics';\n\nexport const defaultOptions = ({ apiKey, config, host }: DatadogOptions) => {\n const corsProxy = config.get('runtime.app.env.DX_DATADOG_PROXY');\n invariant(corsProxy, 'need DX_DATADOG_PROXY for CORS proxy');\n return {\n apiKey,\n host,\n site: corsProxy,\n onError: (err: any) => {\n log.info('Datadog error', { err });\n },\n };\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport * as Datadog from 'datadog-metrics';\nimport debug from 'debug';\n\nimport { type Config } from '@dxos/client';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\n\nimport { defaultOptions } from './node';\n// import { tags as globalTags } from '../tags';\n\nexport type DatadogOptions = {\n apiKey: string;\n host?: string;\n site?: String;\n getTags: () => { [key: string]: string };\n // needed to read CORS proxy\n config: Config;\n};\n\ndebug.enable('metrics');\n\nexport class DatadogMetrics {\n private _datadogmetrics?: any;\n private _getTags: () => { [key: string]: string };\n\n constructor(options: DatadogOptions) {\n this._getTags = options.getTags;\n this._datadogmetrics = Datadog;\n\n this._datadogmetrics.init(defaultOptions(options));\n }\n\n gauge(name: string, value: number, tags?: any) {\n invariant(this._datadogmetrics, 'Datadog not initialized');\n const mergedTags = Object.entries({ ...this._getTags(), ...tags }).map(([key, value]) => `${key}:${value}`);\n log('datadog gauge', { name, value, tags: mergedTags });\n this._datadogmetrics.gauge(name, value, mergedTags);\n }\n\n flush() {\n this._datadogmetrics.flush();\n }\n}\n"],
|
|
5
|
-
"mappings": ";AAIA,SAASA,iBAAiB;AAC1B,SAASC,WAAW;;AAIb,IAAMC,iBAAiB,CAAC,EAAEC,QAAQC,QAAQC,KAAI,MAAkB;AACrE,QAAMC,YAAYF,OAAOG,IAAI,kCAAA;AAC7BP,YAAUM,WAAW,wCAAA;;;;;;;;;AACrB,SAAO;IACLH;IACAE;IACAG,MAAMF;IACNG,SAAS,CAACC,QAAAA;AACRT,UAAIU,KAAK,iBAAiB;QAAED;MAAI,GAAA;;;;;;IAClC;EACF;AACF;;;AChBA,YAAYE,aAAa;AACzB,OAAOC,WAAW;AAGlB,SAASC,aAAAA,kBAAiB;AAC1B,SAASC,OAAAA,YAAW;;AAcpBC,MAAMC,OAAO,SAAA;AAEN,IAAMC,iBAAN,MAAMA;EAIXC,YAAYC,SAAyB;AACnC,SAAKC,WAAWD,QAAQE;AACxB,SAAKC,kBAAkBC;AAEvB,SAAKD,gBAAgBE,KAAKC,eAAeN,OAAAA,CAAAA;EAC3C;EAEAO,MAAMC,MAAcC,OAAeC,MAAY;AAC7CC,IAAAA,WAAU,KAAKR,iBAAiB,2BAAA;;;;;;;;;AAChC,UAAMS,aAAaC,OAAOC,QAAQ;MAAE,GAAG,KAAKb,SAAQ;MAAI,GAAGS;IAAK,CAAA,EAAGK,IAAI,CAAC,CAACC,KAAKP,MAAAA,MAAW,GAAGO,GAAAA,IAAOP,MAAAA,EAAO;AAC1GQ,IAAAA,KAAI,iBAAiB;MAAET;MAAMC;MAAOC,MAAME;IAAW,GAAA;;;;;;AACrD,SAAKT,gBAAgBI,MAAMC,MAAMC,OAAOG,UAAAA;EAC1C;EAEAM,QAAQ;AACN,SAAKf,gBAAgBe,MAAK;EAC5B;AACF;",
|
|
6
|
-
"names": ["invariant", "log", "defaultOptions", "apiKey", "config", "host", "corsProxy", "get", "site", "onError", "err", "info", "Datadog", "debug", "invariant", "log", "debug", "enable", "DatadogMetrics", "constructor", "options", "_getTags", "getTags", "_datadogmetrics", "Datadog", "init", "defaultOptions", "gauge", "name", "value", "tags", "invariant", "mergedTags", "Object", "entries", "map", "key", "log", "flush"]
|
|
7
|
-
}
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
captureException
|
|
3
|
-
} from "./chunk-6KUJPLEH.mjs";
|
|
4
|
-
|
|
5
|
-
// packages/sdk/observability/src/segment/browser.ts
|
|
6
|
-
import snippet from "@segment/snippet";
|
|
7
|
-
import { log } from "@dxos/log";
|
|
8
|
-
var __dxlog_file = "/home/runner/work/dxos/dxos/packages/sdk/observability/src/segment/browser.ts";
|
|
9
|
-
var SegmentTelemetry = class {
|
|
10
|
-
constructor({ apiKey, batchSize, getTags }) {
|
|
11
|
-
this._getTags = getTags;
|
|
12
|
-
try {
|
|
13
|
-
const contents = snippet.min({
|
|
14
|
-
apiKey,
|
|
15
|
-
page: false
|
|
16
|
-
});
|
|
17
|
-
const script = document.createElement("script");
|
|
18
|
-
script.innerHTML = contents;
|
|
19
|
-
document.body.append(script);
|
|
20
|
-
} catch (err) {
|
|
21
|
-
log.catch("Failed to initialize telemetry", err, {
|
|
22
|
-
F: __dxlog_file,
|
|
23
|
-
L: 27,
|
|
24
|
-
S: this,
|
|
25
|
-
C: (f, a) => f(...a)
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
page({ identityId: userId, ...options } = {}) {
|
|
30
|
-
try {
|
|
31
|
-
window.analytics?.page({
|
|
32
|
-
context: this._getTags(),
|
|
33
|
-
...options,
|
|
34
|
-
userId
|
|
35
|
-
});
|
|
36
|
-
} catch (err) {
|
|
37
|
-
log.catch("Failed to track page", err, {
|
|
38
|
-
F: __dxlog_file,
|
|
39
|
-
L: 39,
|
|
40
|
-
S: this,
|
|
41
|
-
C: (f, a) => f(...a)
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
event({ identityId: userId, name: event, ...options }) {
|
|
46
|
-
try {
|
|
47
|
-
options.properties = {
|
|
48
|
-
...options.properties,
|
|
49
|
-
...this._getTags()
|
|
50
|
-
};
|
|
51
|
-
window.analytics?.track({
|
|
52
|
-
...options,
|
|
53
|
-
event
|
|
54
|
-
});
|
|
55
|
-
} catch (err) {
|
|
56
|
-
log.catch("Failed to track event", err, {
|
|
57
|
-
F: __dxlog_file,
|
|
58
|
-
L: 54,
|
|
59
|
-
S: this,
|
|
60
|
-
C: (f, a) => f(...a)
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
async flush() {
|
|
65
|
-
try {
|
|
66
|
-
await window.analytics?.flush((err) => {
|
|
67
|
-
captureException(err);
|
|
68
|
-
});
|
|
69
|
-
} catch (err) {
|
|
70
|
-
log.catch("Failed to flush telemetry", err, {
|
|
71
|
-
F: __dxlog_file,
|
|
72
|
-
L: 64,
|
|
73
|
-
S: this,
|
|
74
|
-
C: (f, a) => f(...a)
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
};
|
|
79
|
-
|
|
80
|
-
export {
|
|
81
|
-
SegmentTelemetry
|
|
82
|
-
};
|
|
83
|
-
//# sourceMappingURL=chunk-HPGC4HC7.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/segment/browser.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2022 DXOS.org\n//\n\nimport snippet from '@segment/snippet';\n\nimport { log } from '@dxos/log';\n\nimport type { EventOptions, SegmentTelemetryOptions, PageOptions } from './types';\nimport { captureException } from '../sentry';\n\nexport class SegmentTelemetry {\n private _getTags: () => { [key: string]: string };\n\n constructor({ apiKey, batchSize, getTags }: SegmentTelemetryOptions) {\n this._getTags = getTags;\n try {\n const contents = snippet.min({\n apiKey,\n page: false,\n });\n\n const script = document.createElement('script');\n script.innerHTML = contents;\n document.body.append(script);\n } catch (err) {\n log.catch('Failed to initialize telemetry', err);\n }\n }\n\n page({ identityId: userId, ...options }: PageOptions = {}) {\n try {\n (window as any).analytics?.page({\n context: this._getTags(),\n ...options,\n userId,\n });\n } catch (err) {\n log.catch('Failed to track page', err);\n }\n }\n\n event({ identityId: userId, name: event, ...options }: EventOptions) {\n try {\n options.properties = {\n ...options.properties,\n ...this._getTags(),\n };\n (window as any).analytics?.track({\n ...options,\n event,\n });\n } catch (err) {\n log.catch('Failed to track event', err);\n }\n }\n\n async flush() {\n try {\n await (window as any).analytics?.flush((err: any) => {\n captureException(err);\n });\n } catch (err) {\n log.catch('Failed to flush telemetry', err);\n }\n }\n}\n"],
|
|
5
|
-
"mappings": ";;;;;AAIA,OAAOA,aAAa;AAEpB,SAASC,WAAW;;AAKb,IAAMC,mBAAN,MAAMA;EAGXC,YAAY,EAAEC,QAAQC,WAAWC,QAAO,GAA6B;AACnE,SAAKC,WAAWD;AAChB,QAAI;AACF,YAAME,WAAWC,QAAQC,IAAI;QAC3BN;QACAO,MAAM;MACR,CAAA;AAEA,YAAMC,SAASC,SAASC,cAAc,QAAA;AACtCF,aAAOG,YAAYP;AACnBK,eAASG,KAAKC,OAAOL,MAAAA;IACvB,SAASM,KAAK;AACZC,UAAIC,MAAM,kCAAkCF,KAAAA;;;;;;IAC9C;EACF;EAEAP,KAAK,EAAEU,YAAYC,QAAQ,GAAGC,QAAAA,IAAyB,CAAC,GAAG;AACzD,QAAI;AACDC,aAAeC,WAAWd,KAAK;QAC9Be,SAAS,KAAKnB,SAAQ;QACtB,GAAGgB;QACHD;MACF,CAAA;IACF,SAASJ,KAAK;AACZC,UAAIC,MAAM,wBAAwBF,KAAAA;;;;;;IACpC;EACF;EAEAS,MAAM,EAAEN,YAAYC,QAAQM,MAAMD,OAAO,GAAGJ,QAAAA,GAAyB;AACnE,QAAI;AACFA,cAAQM,aAAa;QACnB,GAAGN,QAAQM;QACX,GAAG,KAAKtB,SAAQ;MAClB;AACCiB,aAAeC,WAAWK,MAAM;QAC/B,GAAGP;QACHI;MACF,CAAA;IACF,SAAST,KAAK;AACZC,UAAIC,MAAM,yBAAyBF,KAAAA;;;;;;IACrC;EACF;EAEA,MAAMa,QAAQ;AACZ,QAAI;AACF,YAAOP,OAAeC,WAAWM,MAAM,CAACb,QAAAA;AACtCc,yBAAiBd,GAAAA;MACnB,CAAA;IACF,SAASA,KAAK;AACZC,UAAIC,MAAM,6BAA6BF,KAAAA;;;;;;IACzC;EACF;AACF;",
|
|
6
|
-
"names": ["snippet", "log", "SegmentTelemetry", "constructor", "apiKey", "batchSize", "getTags", "_getTags", "contents", "snippet", "min", "page", "script", "document", "createElement", "innerHTML", "body", "append", "err", "log", "catch", "identityId", "userId", "options", "window", "analytics", "context", "event", "name", "properties", "track", "flush", "captureException"]
|
|
7
|
-
}
|