@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.
Files changed (56) hide show
  1. package/dist/lib/browser/{chunk-V6THSHYS.mjs → chunk-FWGZ42PL.mjs} +47 -51
  2. package/dist/lib/browser/chunk-FWGZ42PL.mjs.map +7 -0
  3. package/dist/lib/browser/datadog/index.mjs +37 -4
  4. package/dist/lib/browser/datadog/index.mjs.map +4 -4
  5. package/dist/lib/browser/index.mjs +1 -4
  6. package/dist/lib/browser/meta.json +1 -1
  7. package/dist/lib/browser/observability-OXPW6W3U.mjs +7 -0
  8. package/dist/lib/browser/segment/index.mjs +77 -3
  9. package/dist/lib/browser/segment/index.mjs.map +4 -4
  10. package/dist/lib/node/{chunk-NIGBDV2L.cjs → chunk-4JQR255Q.cjs} +56 -49
  11. package/dist/lib/node/chunk-4JQR255Q.cjs.map +7 -0
  12. package/dist/lib/node/datadog/index.cjs +73 -3
  13. package/dist/lib/node/datadog/index.cjs.map +4 -4
  14. package/dist/lib/node/index.cjs +15 -18
  15. package/dist/lib/node/index.cjs.map +2 -2
  16. package/dist/lib/node/meta.json +1 -1
  17. package/dist/lib/node/{observability-KLYDIJPY.cjs → observability-JN7ZVH64.cjs} +6 -9
  18. package/dist/lib/node/observability-JN7ZVH64.cjs.map +7 -0
  19. package/dist/lib/node/segment/index.cjs +145 -2
  20. package/dist/lib/node/segment/index.cjs.map +4 -4
  21. package/dist/types/src/datadog/browser.d.ts +4 -0
  22. package/dist/types/src/datadog/browser.d.ts.map +1 -1
  23. package/dist/types/src/datadog/browser.js +8 -1
  24. package/dist/types/src/datadog/browser.js.map +1 -1
  25. package/dist/types/src/helpers/browser-observability.d.ts.map +1 -1
  26. package/dist/types/src/helpers/browser-observability.js +3 -1
  27. package/dist/types/src/helpers/browser-observability.js.map +1 -1
  28. package/dist/types/src/helpers/node-observability.d.ts +2 -12
  29. package/dist/types/src/helpers/node-observability.d.ts.map +1 -1
  30. package/dist/types/src/helpers/node-observability.js +8 -3
  31. package/dist/types/src/helpers/node-observability.js.map +1 -1
  32. package/dist/types/src/observability.d.ts +6 -2
  33. package/dist/types/src/observability.d.ts.map +1 -1
  34. package/dist/types/src/observability.js +49 -22
  35. package/dist/types/src/observability.js.map +1 -1
  36. package/dist/types/src/segment/node.js +1 -1
  37. package/dist/types/src/segment/node.js.map +1 -1
  38. package/package.json +20 -19
  39. package/src/datadog/browser.ts +7 -0
  40. package/src/helpers/browser-observability.ts +3 -1
  41. package/src/helpers/node-observability.ts +8 -14
  42. package/src/observability.ts +39 -27
  43. package/src/segment/node.ts +1 -1
  44. package/dist/lib/browser/chunk-6ZTMPKEG.mjs +0 -81
  45. package/dist/lib/browser/chunk-6ZTMPKEG.mjs.map +0 -7
  46. package/dist/lib/browser/chunk-HPGC4HC7.mjs +0 -83
  47. package/dist/lib/browser/chunk-HPGC4HC7.mjs.map +0 -7
  48. package/dist/lib/browser/chunk-V6THSHYS.mjs.map +0 -7
  49. package/dist/lib/browser/observability-5GM33EWR.mjs +0 -10
  50. package/dist/lib/node/chunk-BHF4PKAP.cjs +0 -170
  51. package/dist/lib/node/chunk-BHF4PKAP.cjs.map +0 -7
  52. package/dist/lib/node/chunk-NIGBDV2L.cjs.map +0 -7
  53. package/dist/lib/node/chunk-ZJRKFREX.cjs +0 -101
  54. package/dist/lib/node/chunk-ZJRKFREX.cjs.map +0 -7
  55. package/dist/lib/node/observability-KLYDIJPY.cjs.map +0 -7
  56. /package/dist/lib/browser/{observability-5GM33EWR.mjs.map → observability-OXPW6W3U.mjs.map} +0 -0
@@ -56,7 +56,7 @@ class SegmentTelemetry {
56
56
  try {
57
57
  this._analytics.track({
58
58
  ...options,
59
- context: this._getTags(),
59
+ properties: { ...options.properties, ...this._getTags() },
60
60
  userId,
61
61
  anonymousId: anonymousId,
62
62
  event,
@@ -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;gBACxB,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"}
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.9f75c97",
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.98.0",
62
- "@sentry/integrations": "7.98.0",
63
- "@sentry/node": "^7.98.0",
64
- "@sentry/tracing": "^7.98.0",
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.9f75c97",
72
- "@dxos/client-services": "0.4.4-main.9f75c97",
73
- "@dxos/config": "0.4.4-main.9f75c97",
74
- "@dxos/client-protocol": "0.4.4-main.9f75c97",
75
- "@dxos/context": "0.4.4-main.9f75c97",
76
- "@dxos/debug": "0.4.4-main.9f75c97",
77
- "@dxos/log": "0.4.4-main.9f75c97",
78
- "@dxos/invariant": "0.4.4-main.9f75c97",
79
- "@dxos/network-manager": "0.4.4-main.9f75c97",
80
- "@dxos/protocols": "0.4.4-main.9f75c97",
81
- "@dxos/node-std": "0.4.4-main.9f75c97",
82
- "@dxos/util": "0.4.4-main.9f75c97",
83
- "@dxos/react-client": "0.4.4-main.9f75c97"
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.98.0",
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",
@@ -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
- const release = `${namespace}@${config.get('runtime.app.build.version')}`;
123
- const environment = config.get('runtime.app.env.DX_ENVIRONMENT');
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}`);
@@ -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({ namespace, config, secrets, group, mode, telemetry, errorLog }: ObservabilityOptions) {
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
- if (this._mode === 'full') {
107
- // TODO(nf): set group and hostname?
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
- sentrySetTag(key, value);
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
- sentryInit({
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
- sentryConfigureTracing();
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
- sentrySetTag(k, v.value);
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
- sentryCaptureException(err);
489
+ this._captureException?.(err);
478
490
  }
479
491
  }
480
492
  }
@@ -61,7 +61,7 @@ export class SegmentTelemetry {
61
61
  try {
62
62
  this._analytics.track({
63
63
  ...options,
64
- context: this._getTags(),
64
+ properties: { ...options.properties, ...this._getTags() },
65
65
  userId,
66
66
  anonymousId: anonymousId!,
67
67
  event,
@@ -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
- }