@dxos/observability 0.3.11-main.5c52a13 → 0.3.11-main.5cbcf4e

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 (82) hide show
  1. package/README.md +9 -4
  2. package/dist/lib/browser/{chunk-2J5YS65Q.mjs → chunk-6ZTMPKEG.mjs} +3 -3
  3. package/dist/lib/browser/{chunk-2J5YS65Q.mjs.map → chunk-6ZTMPKEG.mjs.map} +3 -3
  4. package/dist/lib/browser/{chunk-ROSK6U3K.mjs → chunk-HPGC4HC7.mjs} +3 -3
  5. package/dist/lib/browser/chunk-HPGC4HC7.mjs.map +7 -0
  6. package/dist/lib/browser/{chunk-STWCJK52.mjs → chunk-OCQVYNE3.mjs} +223 -129
  7. package/dist/lib/browser/chunk-OCQVYNE3.mjs.map +7 -0
  8. package/dist/lib/browser/datadog/index.mjs +1 -1
  9. package/dist/lib/browser/index.mjs +9 -5
  10. package/dist/lib/browser/meta.json +1 -1
  11. package/dist/lib/browser/observability-QNG5QON4.mjs +10 -0
  12. package/dist/lib/browser/segment/index.mjs +1 -1
  13. package/dist/lib/node/{chunk-ARUBPK2W.cjs → chunk-BHF4PKAP.cjs} +6 -6
  14. package/dist/lib/node/chunk-BHF4PKAP.cjs.map +7 -0
  15. package/dist/lib/node/{chunk-DE7OVD7T.cjs → chunk-CBMRJXSL.cjs} +211 -119
  16. package/dist/lib/node/chunk-CBMRJXSL.cjs.map +7 -0
  17. package/dist/lib/node/{chunk-VDBBIYH6.cjs → chunk-ZJRKFREX.cjs} +6 -6
  18. package/dist/lib/node/{chunk-VDBBIYH6.cjs.map → chunk-ZJRKFREX.cjs.map} +3 -3
  19. package/dist/lib/node/datadog/index.cjs +3 -3
  20. package/dist/lib/node/datadog/index.cjs.map +1 -1
  21. package/dist/lib/node/index.cjs +20 -16
  22. package/dist/lib/node/index.cjs.map +2 -2
  23. package/dist/lib/node/meta.json +1 -1
  24. package/dist/lib/node/{observability-YMIQHLME.cjs → observability-JMKBRR4L.cjs} +8 -8
  25. package/dist/lib/node/observability-JMKBRR4L.cjs.map +7 -0
  26. package/dist/lib/node/segment/index.cjs +2 -2
  27. package/dist/lib/node/segment/index.cjs.map +1 -1
  28. package/dist/types/src/datadog/metrics.d.ts +3 -1
  29. package/dist/types/src/datadog/metrics.d.ts.map +1 -1
  30. package/dist/types/src/datadog/metrics.js +1 -1
  31. package/dist/types/src/datadog/metrics.js.map +1 -1
  32. package/dist/types/src/helpers/{app-observability.d.ts → browser-observability.d.ts} +4 -6
  33. package/dist/types/src/helpers/browser-observability.d.ts.map +1 -0
  34. package/dist/types/src/helpers/{app-observability.js → browser-observability.js} +22 -51
  35. package/dist/types/src/helpers/browser-observability.js.map +1 -0
  36. package/dist/types/src/helpers/common.d.ts +10 -0
  37. package/dist/types/src/helpers/common.d.ts.map +1 -0
  38. package/dist/types/src/helpers/common.js +23 -0
  39. package/dist/types/src/helpers/common.js.map +1 -0
  40. package/dist/types/src/helpers/index.d.ts +3 -1
  41. package/dist/types/src/helpers/index.d.ts.map +1 -1
  42. package/dist/types/src/helpers/index.js +3 -1
  43. package/dist/types/src/helpers/index.js.map +1 -1
  44. package/dist/types/src/helpers/node-observability.d.ts +34 -0
  45. package/dist/types/src/helpers/node-observability.d.ts.map +1 -0
  46. package/dist/types/src/helpers/node-observability.js +106 -0
  47. package/dist/types/src/helpers/node-observability.js.map +1 -0
  48. package/dist/types/src/helpers/setup-telemetry-listeners.d.ts.map +1 -1
  49. package/dist/types/src/helpers/setup-telemetry-listeners.js +7 -12
  50. package/dist/types/src/helpers/setup-telemetry-listeners.js.map +1 -1
  51. package/dist/types/src/observability.d.ts +5 -4
  52. package/dist/types/src/observability.d.ts.map +1 -1
  53. package/dist/types/src/observability.js +29 -16
  54. package/dist/types/src/observability.js.map +1 -1
  55. package/dist/types/src/segment/browser.d.ts.map +1 -1
  56. package/dist/types/src/segment/browser.js +2 -2
  57. package/dist/types/src/segment/browser.js.map +1 -1
  58. package/dist/types/src/segment/node.d.ts.map +1 -1
  59. package/dist/types/src/segment/node.js +2 -2
  60. package/dist/types/src/segment/node.js.map +1 -1
  61. package/dist/types/src/segment/types.d.ts +3 -1
  62. package/dist/types/src/segment/types.d.ts.map +1 -1
  63. package/package.json +17 -14
  64. package/src/datadog/metrics.ts +3 -5
  65. package/src/helpers/{app-observability.ts → browser-observability.ts} +26 -54
  66. package/src/helpers/common.ts +25 -0
  67. package/src/helpers/index.ts +3 -1
  68. package/src/helpers/node-observability.ts +151 -0
  69. package/src/helpers/setup-telemetry-listeners.ts +2 -7
  70. package/src/observability.ts +40 -20
  71. package/src/segment/browser.ts +3 -3
  72. package/src/segment/node.ts +3 -3
  73. package/src/segment/types.ts +1 -1
  74. package/dist/lib/browser/chunk-ROSK6U3K.mjs.map +0 -7
  75. package/dist/lib/browser/chunk-STWCJK52.mjs.map +0 -7
  76. package/dist/lib/browser/observability-XIDFB6PJ.mjs +0 -10
  77. package/dist/lib/node/chunk-ARUBPK2W.cjs.map +0 -7
  78. package/dist/lib/node/chunk-DE7OVD7T.cjs.map +0 -7
  79. package/dist/lib/node/observability-YMIQHLME.cjs.map +0 -7
  80. package/dist/types/src/helpers/app-observability.d.ts.map +0 -1
  81. package/dist/types/src/helpers/app-observability.js.map +0 -1
  82. /package/dist/lib/browser/{observability-XIDFB6PJ.mjs.map → observability-QNG5QON4.mjs.map} +0 -0
@@ -25,44 +25,13 @@ var __importStar = (this && this.__importStar) || function (mod) {
25
25
  __setModuleDefault(result, mod);
26
26
  return result;
27
27
  };
28
- var _a;
29
28
  Object.defineProperty(exports, "__esModule", { value: true });
30
- exports.initializeAppObservability = exports.storeObservabilityGroup = exports.getObservabilityGroup = exports.storeObservabilityDisabled = exports.isObservabilityDisabled = exports.getTelemetryIdentifier = exports.OBSERVABILITY_GROUP_KEY = exports.OBSERVABILITY_DISABLED_KEY = exports.BASE_TELEMETRY_PROPERTIES = void 0;
29
+ exports.initializeAppObservability = exports.storeObservabilityGroup = exports.getObservabilityGroup = exports.storeObservabilityDisabled = exports.isObservabilityDisabled = exports.OBSERVABILITY_GROUP_KEY = exports.OBSERVABILITY_DISABLED_KEY = void 0;
31
30
  // NOTE: localStorage is not available in web workers.
32
31
  const localForage = __importStar(require("localforage"));
33
32
  const log_1 = require("@dxos/log");
34
- exports.BASE_TELEMETRY_PROPERTIES = {};
35
- // item name is 'telemetry' for backwards compatibility
36
- exports.OBSERVABILITY_DISABLED_KEY = 'telemetry-disabled';
37
- exports.OBSERVABILITY_GROUP_KEY = 'telemetry-group';
38
- if (typeof navigator !== 'undefined' && ((_a = navigator.storage) === null || _a === void 0 ? void 0 : _a.estimate)) {
39
- setInterval(async () => {
40
- try {
41
- const storageEstimate = await navigator.storage.estimate();
42
- exports.BASE_TELEMETRY_PROPERTIES.storageUsage = storageEstimate.usage;
43
- exports.BASE_TELEMETRY_PROPERTIES.storageQuota = storageEstimate.quota;
44
- }
45
- catch (error) {
46
- log_1.log.warn('Failed to run estimate()', error);
47
- }
48
- }, 10e3);
49
- }
50
- // TODO(wittjosiah): Improve privacy of telemetry identifiers.
51
- // - Identifier should be generated client-side with no attachment to identity.
52
- // - Identifier can then be reset by user.
53
- // - Identifier can be synced via HALO to allow for correlation of events bewteen devices.
54
- // - Identifier should also be stored outside of HALO such that it is available immediately on startup.
55
- const getTelemetryIdentifier = (client) => {
56
- if (!(client === null || client === void 0 ? void 0 : client.initialized)) {
57
- return undefined;
58
- }
59
- const identity = client.halo.identity.get();
60
- if (identity) {
61
- return identity.identityKey.truncate();
62
- }
63
- return undefined;
64
- };
65
- exports.getTelemetryIdentifier = getTelemetryIdentifier;
33
+ exports.OBSERVABILITY_DISABLED_KEY = 'observability-disabled';
34
+ exports.OBSERVABILITY_GROUP_KEY = 'observability-group';
66
35
  const isObservabilityDisabled = async (namespace) => {
67
36
  try {
68
37
  return (await localForage.getItem(`${namespace}:${exports.OBSERVABILITY_DISABLED_KEY}`)) === 'true';
@@ -101,11 +70,11 @@ const storeObservabilityGroup = async (namespace, value) => {
101
70
  }
102
71
  };
103
72
  exports.storeObservabilityGroup = storeObservabilityGroup;
104
- // TODO(wittjosiah): Store preference for disabling telemetry.
73
+ // TODO(wittjosiah): Store preference for disabling observability.
105
74
  // At minimum should be stored locally (i.e., localstorage), possibly in halo preference.
106
75
  // Needs to be hooked up to settings page for user visibility.
107
76
  const initializeAppObservability = async ({ namespace, config, mode = 'basic', tracingEnable = true, replayEnable = true, }) => {
108
- var _a;
77
+ var _a, _b;
109
78
  (0, log_1.log)('initializeAppObservability', { config });
110
79
  /*
111
80
  const platform = (await client.services.services.SystemService?.getPlatform()) as Platform;
@@ -117,9 +86,6 @@ const initializeAppObservability = async ({ namespace, config, mode = 'basic', t
117
86
  const group = (_a = (await (0, exports.getObservabilityGroup)(namespace))) !== null && _a !== void 0 ? _a : undefined;
118
87
  const release = `${namespace}@${config.get('runtime.app.build.version')}`;
119
88
  const environment = config.get('runtime.app.env.DX_ENVIRONMENT');
120
- exports.BASE_TELEMETRY_PROPERTIES.group = group;
121
- exports.BASE_TELEMETRY_PROPERTIES.release = release;
122
- exports.BASE_TELEMETRY_PROPERTIES.environment = environment;
123
89
  const observabilityDisabled = await (0, exports.isObservabilityDisabled)(namespace);
124
90
  const { Observability } = await Promise.resolve().then(() => __importStar(require('../observability')));
125
91
  // TODO(nf): configure mode
@@ -151,11 +117,10 @@ const initializeAppObservability = async ({ namespace, config, mode = 'basic', t
151
117
  const getIPData = async (config) => {
152
118
  const IP_DATA_CACHE_TIMEOUT = 6 * 60 * 60 * 1000; // 6 hours
153
119
  // Check cache first.
154
- const cachedData = await localForage.getItem('dxos:telemetry:ipdata');
120
+ const cachedData = await localForage.getItem('dxos:observability:ipdata');
155
121
  if (cachedData && cachedData.timestamp > Date.now() - IP_DATA_CACHE_TIMEOUT) {
156
122
  return cachedData.data;
157
123
  }
158
- // TODO(nf): move into observability
159
124
  // Fetch data if not cached.
160
125
  const IPDATA_API_KEY = config.get('runtime.app.env.DX_IPDATA_API_KEY');
161
126
  if (IPDATA_API_KEY) {
@@ -164,7 +129,7 @@ const initializeAppObservability = async ({ namespace, config, mode = 'basic', t
164
129
  .then((data) => {
165
130
  // Cache data.
166
131
  localForage
167
- .setItem('dxos:telemetry:ipdata', {
132
+ .setItem('dxos:observability:ipdata', {
168
133
  data,
169
134
  timestamp: Date.now(),
170
135
  })
@@ -174,17 +139,23 @@ const initializeAppObservability = async ({ namespace, config, mode = 'basic', t
174
139
  .catch((err) => observability.captureException(err));
175
140
  }
176
141
  };
177
- const ipData = await getIPData(config);
178
- if (ipData && ipData.city) {
179
- exports.BASE_TELEMETRY_PROPERTIES.city = ipData.city;
180
- exports.BASE_TELEMETRY_PROPERTIES.region = ipData.region;
181
- exports.BASE_TELEMETRY_PROPERTIES.country = ipData.country;
182
- exports.BASE_TELEMETRY_PROPERTIES.latitude = ipData.latitude;
183
- exports.BASE_TELEMETRY_PROPERTIES.longitude = ipData.longitude;
184
- }
185
142
  // TODO(nf): plugin state?
186
143
  // TODO(nf): should provide capability to init Sentry earlier in booting process to capture errors during initialization.
187
144
  observability.initialize();
145
+ const ipData = await getIPData(config);
146
+ ipData && observability.addIPDataTelemetryTags(ipData);
147
+ if (typeof navigator !== 'undefined' && ((_b = navigator.storage) === null || _b === void 0 ? void 0 : _b.estimate)) {
148
+ setInterval(async () => {
149
+ try {
150
+ const storageEstimate = await navigator.storage.estimate();
151
+ storageEstimate.usage && observability.setTag('storageUsage', storageEstimate.usage.toString(), 'telemetry');
152
+ storageEstimate.quota && observability.setTag('storageQuota', storageEstimate.quota.toString(), 'telemetry');
153
+ }
154
+ catch (error) {
155
+ log_1.log.warn('Failed to run estimate()', error);
156
+ }
157
+ }, 10e3);
158
+ }
188
159
  }
189
160
  catch (err) {
190
161
  log_1.log.error('Failed to initialize app observability', err);
@@ -192,4 +163,4 @@ const initializeAppObservability = async ({ namespace, config, mode = 'basic', t
192
163
  return observability;
193
164
  };
194
165
  exports.initializeAppObservability = initializeAppObservability;
195
- //# sourceMappingURL=app-observability.js.map
166
+ //# sourceMappingURL=browser-observability.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-observability.js","sourceRoot":"","sources":["../../../../src/helpers/browser-observability.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { Client } from '@dxos/client';
2
+ export declare const getTelemetryIdentifier: (client: Client) => string | undefined;
3
+ export type IPData = {
4
+ city: string;
5
+ region: string;
6
+ country: string;
7
+ latitude: number;
8
+ longitude: number;
9
+ };
10
+ //# sourceMappingURL=common.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../../src/helpers/common.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAO3C,eAAO,MAAM,sBAAsB,WAAY,MAAM,uBAWpD,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ //
3
+ // Copyright 2022 DXOS.org
4
+ //
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getTelemetryIdentifier = void 0;
7
+ // TODO(wittjosiah): Improve privacy of telemetry identifiers.
8
+ // - Identifier should be generated client-side with no attachment to identity.
9
+ // - Identifier can then be reset by user.
10
+ // - Identifier can be synced via HALO to allow for correlation of events bewteen devices.
11
+ // - Identifier should also be stored outside of HALO such that it is available immediately on startup.
12
+ const getTelemetryIdentifier = (client) => {
13
+ if (!(client === null || client === void 0 ? void 0 : client.initialized)) {
14
+ return undefined;
15
+ }
16
+ const identity = client.halo.identity.get();
17
+ if (identity) {
18
+ return identity.identityKey.truncate();
19
+ }
20
+ return undefined;
21
+ };
22
+ exports.getTelemetryIdentifier = getTelemetryIdentifier;
23
+ //# sourceMappingURL=common.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../../src/helpers/common.ts"],"names":[],"mappings":";AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;;;AAIF,8DAA8D;AAC9D,gFAAgF;AAChF,2CAA2C;AAC3C,2FAA2F;AAC3F,wGAAwG;AACjG,MAAM,sBAAsB,GAAG,CAAC,MAAc,EAAE,EAAE;IACvD,IAAI,CAAC,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,WAAW,CAAA,EAAE;QACxB,OAAO,SAAS,CAAC;KAClB;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;IAC5C,IAAI,QAAQ,EAAE;QACZ,OAAO,QAAQ,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;KACxC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAXW,QAAA,sBAAsB,0BAWjC"}
@@ -1,4 +1,6 @@
1
- export * from './app-observability';
1
+ export * from './browser-observability';
2
+ export * from './common';
3
+ export * from './node-observability';
2
4
  export * from './map-spaces';
3
5
  export * from './setup-telemetry-listeners';
4
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/helpers/index.ts"],"names":[],"mappings":"AAIA,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,6BAA6B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/helpers/index.ts"],"names":[],"mappings":"AAIA,cAAc,yBAAyB,CAAC;AACxC,cAAc,UAAU,CAAC;AACzB,cAAc,sBAAsB,CAAC;AACrC,cAAc,cAAc,CAAC;AAC7B,cAAc,6BAA6B,CAAC"}
@@ -17,7 +17,9 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
17
17
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
18
18
  };
19
19
  Object.defineProperty(exports, "__esModule", { value: true });
20
- __exportStar(require("./app-observability"), exports);
20
+ __exportStar(require("./browser-observability"), exports);
21
+ __exportStar(require("./common"), exports);
22
+ __exportStar(require("./node-observability"), exports);
21
23
  __exportStar(require("./map-spaces"), exports);
22
24
  __exportStar(require("./setup-telemetry-listeners"), exports);
23
25
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/helpers/index.ts"],"names":[],"mappings":";AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;;;;;;;;;;;;;;;;AAEF,sDAAoC;AACpC,+CAA6B;AAC7B,8DAA4C"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/helpers/index.ts"],"names":[],"mappings":";AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;;;;;;;;;;;;;;;;AAEF,0DAAwC;AACxC,2CAAyB;AACzB,uDAAqC;AACrC,+CAA6B;AAC7B,8DAA4C"}
@@ -0,0 +1,34 @@
1
+ import type { Config } from '@dxos/client';
2
+ import { Observability, type Mode } from '../observability';
3
+ /**
4
+ * Print observability banner once per installation.
5
+ */
6
+ export declare const showObservabilityBanner: (configDir: string, bannercb: (input: string) => void) => Promise<void>;
7
+ export declare const getObservabilityState: (configDir: string) => Promise<PersistentObservabilityState>;
8
+ export type TelemetryContext = {
9
+ mode: Mode;
10
+ installationId?: string;
11
+ group?: string;
12
+ timezone: string;
13
+ runtime: string;
14
+ os: string;
15
+ arch: string;
16
+ ci: boolean;
17
+ [key: string]: any;
18
+ };
19
+ export type PersistentObservabilityState = {
20
+ installationId: string;
21
+ group?: string;
22
+ mode: Mode;
23
+ };
24
+ export type NodeObservabilityOptions = {
25
+ installationId: string;
26
+ group?: string;
27
+ namespace: string;
28
+ config: Config;
29
+ mode?: Mode;
30
+ tracingEnable?: boolean;
31
+ replayEnable?: boolean;
32
+ };
33
+ export declare const initializeNodeObservability: ({ namespace, config, installationId, group, mode, tracingEnable, replayEnable, }: NodeObservabilityOptions) => Promise<Observability>;
34
+ //# sourceMappingURL=node-observability.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-observability.d.ts","sourceRoot":"","sources":["../../../../src/helpers/node-observability.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAG3C,OAAO,EAAE,aAAa,EAAE,KAAK,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAE5D;;GAEG;AACH,eAAO,MAAM,uBAAuB,cAAqB,MAAM,oBAAoB,MAAM,KAAK,IAAI,kBAcjG,CAAC;AAEF,eAAO,MAAM,qBAAqB,cAAqB,MAAM,KAAG,QAAQ,4BAA4B,CAkBnG,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,IAAI,CAAC;IACX,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,OAAO,CAAC;IACZ,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IACzC,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,IAAI,CAAC;CACZ,CAAC;AA8BF,MAAM,MAAM,wBAAwB,GAAG;IACrC,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,YAAY,CAAC,EAAE,OAAO,CAAC;CAExB,CAAC;AAEF,eAAO,MAAM,2BAA2B,qFAQrC,wBAAwB,KAAG,QAAQ,aAAa,CAgClD,CAAC"}
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.initializeNodeObservability = exports.getObservabilityState = exports.showObservabilityBanner = void 0;
7
+ //
8
+ // Copyright 2022 DXOS.org
9
+ //
10
+ const js_yaml_1 = __importDefault(require("js-yaml"));
11
+ const node_fs_1 = require("node:fs");
12
+ const promises_1 = require("node:fs/promises");
13
+ const node_path_1 = require("node:path");
14
+ const uuid_1 = require("uuid");
15
+ const log_1 = require("@dxos/log");
16
+ const observability_1 = require("../observability");
17
+ /**
18
+ * Print observability banner once per installation.
19
+ */
20
+ const showObservabilityBanner = async (configDir, bannercb) => {
21
+ const path = (0, node_path_1.join)(configDir, '.observability-banner-printed');
22
+ if ((0, node_fs_1.existsSync)(path)) {
23
+ return;
24
+ }
25
+ bannercb(
26
+ // eslint-disable-next-line no-multi-str
27
+ 'Basic observability data will be sent to the DXOS team in order to improve the product. This includes \
28
+ performance metrics, error logs, and usage data. No personally identifiable information, other than your \
29
+ public key, is included with this data and no private data ever leaves your devices. To disable sending \
30
+ observability data, set the environment variable DX_DISABLE_TELEMETRY=true.');
31
+ await (0, promises_1.writeFile)(path, '', 'utf-8');
32
+ };
33
+ exports.showObservabilityBanner = showObservabilityBanner;
34
+ const getObservabilityState = async (configDir) => {
35
+ // check whether configDir exists and if it's a directory
36
+ var _a;
37
+ if ((0, node_fs_1.existsSync)(configDir)) {
38
+ if (!(0, node_fs_1.statSync)(configDir).isDirectory()) {
39
+ throw new Error(`Config directory ${configDir} exists but is not a directory`);
40
+ }
41
+ }
42
+ else {
43
+ await (0, promises_1.mkdir)(configDir, { recursive: true });
44
+ }
45
+ const idPath = (0, node_path_1.join)(configDir, 'observability.yml');
46
+ if ((0, node_fs_1.existsSync)(idPath)) {
47
+ const context = await (0, promises_1.readFile)(idPath, 'utf-8');
48
+ return (_a = validate(context)) !== null && _a !== void 0 ? _a : initializeState(idPath);
49
+ }
50
+ return initializeState(idPath);
51
+ };
52
+ exports.getObservabilityState = getObservabilityState;
53
+ // create initial state and write to file, using environment variables to override defaults.
54
+ const initializeState = async (idPath) => {
55
+ var _a, _b;
56
+ // TODO(nf): read initial values from config or seed file
57
+ const observabilityState = {
58
+ installationId: (0, uuid_1.v4)(),
59
+ group: (_a = process.env.DX_TELEMETRY_GROUP) !== null && _a !== void 0 ? _a : undefined,
60
+ mode: (process.env.DX_DISABLE_TELEMETRY ? 'disabled' : (_b = process.env.DX_TELEMETRY_MODE) !== null && _b !== void 0 ? _b : 'basic'),
61
+ };
62
+ await (0, promises_1.writeFile)(idPath, '# This file is automatically generated by the @dxos/cli.\n' + js_yaml_1.default.dump(observabilityState), 'utf-8');
63
+ return observabilityState;
64
+ };
65
+ const validate = (contextString) => {
66
+ var _a;
67
+ const context = js_yaml_1.default.load(contextString);
68
+ if (Boolean(context.installationId) && (0, uuid_1.validate)(context.installationId)) {
69
+ return {
70
+ ...context,
71
+ mode: process.env.DX_DISABLE_TELEMETRY ? 'disabled' : (_a = context.mode) !== null && _a !== void 0 ? _a : 'basic',
72
+ };
73
+ }
74
+ };
75
+ const initializeNodeObservability = async ({ namespace, config, installationId, group, mode = 'basic', tracingEnable = true, replayEnable = true, }) => {
76
+ (0, log_1.log)('initializeCliObservability', { config });
77
+ const release = `${namespace}@${config.get('runtime.app.build.version')}`;
78
+ const environment = config.get('runtime.app.env.DX_ENVIRONMENT');
79
+ const observability = new observability_1.Observability({
80
+ namespace,
81
+ group,
82
+ mode,
83
+ errorLog: {
84
+ sentryInitOptions: {
85
+ environment,
86
+ release,
87
+ // TODO(wittjosiah): Configure this.
88
+ sampleRate: 1.0,
89
+ },
90
+ logProcessor: true,
91
+ },
92
+ });
93
+ observability.setTag('installationId', installationId);
94
+ const IPDATA_API_KEY = config.get('runtime.app.env.DX_IPDATA_API_KEY');
95
+ try {
96
+ const res = await fetch(`https://api.ipdata.co/?api-key=${IPDATA_API_KEY}`);
97
+ const ipData = await res.json();
98
+ ipData && observability.addIPDataTelemetryTags(ipData);
99
+ }
100
+ catch (err) {
101
+ observability === null || observability === void 0 ? void 0 : observability.captureException(err);
102
+ }
103
+ return observability;
104
+ };
105
+ exports.initializeNodeObservability = initializeNodeObservability;
106
+ //# sourceMappingURL=node-observability.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-observability.js","sourceRoot":"","sources":["../../../../src/helpers/node-observability.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"setup-telemetry-listeners.d.ts","sourceRoot":"","sources":["../../../../src/helpers/setup-telemetry-listeners.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAG3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAKtD,eAAO,MAAM,uBAAuB,cAAe,MAAM,UAAU,MAAM,iBAAiB,aAAa,eAsGtG,CAAC"}
1
+ {"version":3,"file":"setup-telemetry-listeners.d.ts","sourceRoot":"","sources":["../../../../src/helpers/setup-telemetry-listeners.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAG3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAKtD,eAAO,MAAM,uBAAuB,cAAe,MAAM,UAAU,MAAM,iBAAiB,aAAa,eAiGtG,CAAC"}
@@ -4,22 +4,21 @@
4
4
  //
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.setupTelemetryListeners = void 0;
7
- const app_observability_1 = require("./app-observability");
7
+ const common_1 = require("./common");
8
8
  let lastFocusEvent = new Date();
9
9
  let totalTime = 0;
10
10
  const setupTelemetryListeners = (namespace, client, observability) => {
11
11
  const clickCallback = (event) => {
12
- if (app_observability_1.BASE_TELEMETRY_PROPERTIES.group === 'dxos' && event.target && !event.target.id) {
12
+ if (observability.group === 'dxos' && event.target && !event.target.id) {
13
13
  // TODO(wittjosiah): Use @dxos/log so these can be filtered.
14
14
  console.warn('Click event on element without id:', event.target);
15
15
  }
16
16
  setTimeout(() => {
17
17
  var _a, _b;
18
18
  return observability.event({
19
- identityId: (0, app_observability_1.getTelemetryIdentifier)(client),
19
+ identityId: (0, common_1.getTelemetryIdentifier)(client),
20
20
  name: `${namespace}.window.click`,
21
21
  properties: {
22
- ...app_observability_1.BASE_TELEMETRY_PROPERTIES,
23
22
  href: window.location.href,
24
23
  id: (_a = event.target) === null || _a === void 0 ? void 0 : _a.id,
25
24
  path: (_b = event.path) === null || _b === void 0 ? void 0 : _b.filter((el) => Boolean(el.tagName)).map((el) => `${el.tagName.toLowerCase()}${el.id ? `#${el.id}` : ''}`).reverse().join('>'),
@@ -30,10 +29,9 @@ const setupTelemetryListeners = (namespace, client, observability) => {
30
29
  const focusCallback = () => {
31
30
  const now = new Date();
32
31
  setTimeout(() => observability.event({
33
- identityId: (0, app_observability_1.getTelemetryIdentifier)(client),
32
+ identityId: (0, common_1.getTelemetryIdentifier)(client),
34
33
  name: `${namespace}.window.focus`,
35
34
  properties: {
36
- ...app_observability_1.BASE_TELEMETRY_PROPERTIES,
37
35
  href: window.location.href,
38
36
  timeAway: now.getTime() - lastFocusEvent.getTime(),
39
37
  },
@@ -44,10 +42,9 @@ const setupTelemetryListeners = (namespace, client, observability) => {
44
42
  const now = new Date();
45
43
  const timeSpent = now.getTime() - lastFocusEvent.getTime();
46
44
  setTimeout(() => observability.event({
47
- identityId: (0, app_observability_1.getTelemetryIdentifier)(client),
45
+ identityId: (0, common_1.getTelemetryIdentifier)(client),
48
46
  name: `${namespace}.window.blur`,
49
47
  properties: {
50
- ...app_observability_1.BASE_TELEMETRY_PROPERTIES,
51
48
  href: window.location.href,
52
49
  timeSpent,
53
50
  },
@@ -57,10 +54,9 @@ const setupTelemetryListeners = (namespace, client, observability) => {
57
54
  };
58
55
  const unloadCallback = () => {
59
56
  setTimeout(() => observability.event({
60
- identityId: (0, app_observability_1.getTelemetryIdentifier)(client),
57
+ identityId: (0, common_1.getTelemetryIdentifier)(client),
61
58
  name: `${namespace}.page.unload`,
62
59
  properties: {
63
- ...app_observability_1.BASE_TELEMETRY_PROPERTIES,
64
60
  href: window.location.href,
65
61
  timeSpent: totalTime,
66
62
  },
@@ -68,10 +64,9 @@ const setupTelemetryListeners = (namespace, client, observability) => {
68
64
  };
69
65
  const errorCallback = (event) => {
70
66
  setTimeout(() => observability.event({
71
- identityId: (0, app_observability_1.getTelemetryIdentifier)(client),
67
+ identityId: (0, common_1.getTelemetryIdentifier)(client),
72
68
  name: `${namespace}.window.error`,
73
69
  properties: {
74
- ...app_observability_1.BASE_TELEMETRY_PROPERTIES,
75
70
  href: window.location.href,
76
71
  message: event.message,
77
72
  filename: event.filename,
@@ -1 +1 @@
1
- {"version":3,"file":"setup-telemetry-listeners.js","sourceRoot":"","sources":["../../../../src/helpers/setup-telemetry-listeners.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"setup-telemetry-listeners.js","sourceRoot":"","sources":["../../../../src/helpers/setup-telemetry-listeners.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { type Client, type Config } from '@dxos/client';
2
+ import { type IPData } from './helpers';
2
3
  import { type EventOptions, type PageOptions } from './segment';
3
4
  import { type InitOptions } from './sentry';
4
5
  export type ObservabilitySecrets = {
@@ -11,6 +12,7 @@ export type ObservabilitySecrets = {
11
12
  DATADOG_APP_KEY: string | null;
12
13
  };
13
14
  export type Mode = 'basic' | 'full' | 'disabled';
15
+ export type TagScope = 'errors' | 'telemetry' | 'metrics' | 'all';
14
16
  export type ObservabilityOptions = {
15
17
  namespace: string;
16
18
  config?: Config;
@@ -44,11 +46,10 @@ export declare class Observability {
44
46
  close(): Promise<void>;
45
47
  setMode(mode: Mode): void;
46
48
  get mode(): Mode;
49
+ get group(): string | undefined;
47
50
  get enabled(): boolean;
48
- /**
49
- * Set a tag for all observability services.
50
- */
51
- setTag(key: string, value: string): void;
51
+ setTag(key: string, value: string, scope?: TagScope): void;
52
+ addIPDataTelemetryTags: (ipData: IPData) => void;
52
53
  setIdentityTags(client: Client): Promise<void>;
53
54
  private _initMetrics;
54
55
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"observability.d.ts","sourceRoot":"","sources":["../../../src/observability.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAYxD,OAAO,EAAoB,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAClF,OAAO,EAKL,KAAK,WAAW,EAEjB,MAAM,UAAU,CAAC;AAWlB,MAAM,MAAM,oBAAoB,GAAG;IACjC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,IAAI,GAAG,OAAO,GAAG,MAAM,GAAG,UAAU,CAAC;AAEjD,MAAM,MAAM,oBAAoB,GAAG;IAEjC,SAAS,EAAE,MAAM,CAAC;IAGlB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,IAAI,CAAC;IAEZ,SAAS,CAAC,EAAE;QACV,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IAEF,QAAQ,CAAC,EAAE;QACT,iBAAiB,CAAC,EAAE,WAAW,CAAC;QAChC,YAAY,CAAC,EAAE,OAAO,CAAC;KACxB,CAAC;CACH,CAAC;AAMF,qBAAa,aAAa;IAExB,OAAO,CAAC,QAAQ,CAAC,CAAiB;IAElC,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,UAAU,CAAC,CAAmB;IAEtC,OAAO,CAAC,sBAAsB,CAAC,CAAc;IAC7C,OAAO,CAAC,kBAAkB,CAAU;IAEpC,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,OAAO,CAAC,CAAS;IACzB,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,MAAM,CAAC,CAAS;IAExB,OAAO,CAAC,IAAI,CAAiB;IAC7B,OAAO,CAAC,KAAK,CAA6B;gBAG9B,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,oBAAoB;IAoBlG,OAAO,CAAC,YAAY;IAmBpB,UAAU;IAMJ,KAAK;IAMX,OAAO,CAAC,IAAI,EAAE,IAAI;IAIlB,IAAI,IAAI,SAEP;IAED,IAAI,OAAO,YAEV;IAMD;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAS3B,eAAe,CAAC,MAAM,EAAE,MAAM;IAiCpC,OAAO,CAAC,YAAY;IAapB;;;;OAIG;IACH,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,GAAG,EAAE,SAAS,CAAC,EAAE,GAAG;IAMxD,mBAAmB,CAAC,MAAM,EAAE,MAAM;IAkDlC,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAmD9C,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,GAAE,MAA8B;IAwCnF,OAAO,CAAC,cAAc;IAYtB;;;;OAIG;IACH,KAAK,CAAC,OAAO,EAAE,YAAY;IAI3B;;;;OAIG;IACH,IAAI,CAAC,OAAO,EAAE,WAAW;IAQzB,OAAO,CAAC,cAAc;IA8BtB;;;;OAIG;IACH,gBAAgB,CAAC,GAAG,EAAE,GAAG;CAK1B"}
1
+ {"version":3,"file":"observability.d.ts","sourceRoot":"","sources":["../../../src/observability.ts"],"names":[],"mappings":"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"}
@@ -22,8 +22,6 @@ const sentry_1 = require("./sentry");
22
22
  const SPACE_METRICS_MIN_INTERVAL = 1000 * 60;
23
23
  // const DATADOG_IDLE_INTERVAL = 1000 * 60 * 5;
24
24
  const DATADOG_IDLE_INTERVAL = 1000 * 60 * 1;
25
- // TODO(nf): add allowlist for telemetry tags?
26
- const ERROR_TAGS = ['identityKey', 'username', 'deviceKey', 'group'];
27
25
  /*
28
26
  * Observability provides a common interface for error logging, metrics, and telemetry.
29
27
  * It currently provides these capabilities using Sentry, Datadog, and Segment.
@@ -36,6 +34,13 @@ class Observability {
36
34
  // TODO(nf): accept upstream context?
37
35
  this._ctx = new context_1.Context();
38
36
  this._tags = new Map();
37
+ this.addIPDataTelemetryTags = (ipData) => {
38
+ this.setTag('city', ipData.city, 'telemetry');
39
+ this.setTag('region', ipData.region, 'telemetry');
40
+ this.setTag('country', ipData.country, 'telemetry');
41
+ ipData.latitude && this.setTag('latitude', ipData.latitude.toString(), 'telemetry');
42
+ ipData.longitude && this.setTag('longitude', ipData.longitude.toString(), 'telemetry');
43
+ };
39
44
  this._namespace = namespace;
40
45
  this._config = config;
41
46
  this._mode = mode !== null && mode !== void 0 ? mode : 'disabled';
@@ -86,20 +91,23 @@ class Observability {
86
91
  get mode() {
87
92
  return this._mode;
88
93
  }
94
+ get group() {
95
+ return this._group;
96
+ }
89
97
  get enabled() {
90
98
  return this._mode !== 'disabled';
91
99
  }
92
100
  //
93
101
  // Tags
94
102
  //
95
- /**
96
- * Set a tag for all observability services.
97
- */
98
- setTag(key, value) {
99
- if (this.enabled && ERROR_TAGS.includes(key)) {
103
+ setTag(key, value, scope) {
104
+ if (this.enabled && (scope === undefined || scope === 'all' || scope === 'errors')) {
100
105
  (0, sentry_1.setTag)(key, value);
101
106
  }
102
- this._tags.set(key, value);
107
+ if (!scope) {
108
+ scope = 'all';
109
+ }
110
+ this._tags.set(key, { value, scope });
103
111
  }
104
112
  // TODO(wittjosiah): Improve privacy of telemetry identifiers. See `getTelemetryIdentifier`.
105
113
  async setIdentityTags(client) {
@@ -136,7 +144,11 @@ class Observability {
136
144
  if (this.enabled && this._secrets.DATADOG_API_KEY) {
137
145
  this._metrics = new datadog_1.DatadogMetrics({
138
146
  apiKey: this._secrets.DATADOG_API_KEY,
139
- getTags: () => this._tags,
147
+ getTags: () => Object.fromEntries(Array.from(this._tags)
148
+ .filter(([key, value]) => {
149
+ return value.scope === 'all' || value.scope === 'metrics';
150
+ })
151
+ .map(([key, value]) => [key, value.value])),
140
152
  // TODO(nf): move/refactor from telementryContext, needed to read CORS proxy
141
153
  config: this._config,
142
154
  });
@@ -215,10 +227,7 @@ class Observability {
215
227
  this.event({
216
228
  identityId: (0, helpers_1.getTelemetryIdentifier)(client),
217
229
  name: `${namespace}.space.update`,
218
- properties: {
219
- ...helpers_1.BASE_TELEMETRY_PROPERTIES,
220
- ...data,
221
- },
230
+ properties: data,
222
231
  });
223
232
  }
224
233
  });
@@ -279,7 +288,11 @@ class Observability {
279
288
  this._telemetry = new segment_1.SegmentTelemetry({
280
289
  apiKey: this._secrets.TELEMETRY_API_KEY,
281
290
  batchSize: this._telemetryBatchSize,
282
- getTags: () => this._tags,
291
+ getTags: () => Object.fromEntries(Array.from(this._tags)
292
+ .filter(([key, value]) => {
293
+ return value.scope === 'all' || value.scope === 'telemetry';
294
+ })
295
+ .map(([key, value]) => [key, value.value])),
283
296
  });
284
297
  }
285
298
  else {
@@ -329,8 +342,8 @@ class Observability {
329
342
  }
330
343
  // TODO(nf): is this different than passing as properties in options?
331
344
  this._tags.forEach((v, k) => {
332
- if (ERROR_TAGS.includes(k)) {
333
- (0, sentry_1.setTag)(k, v);
345
+ if (v.scope === 'all' || v.scope === 'errors') {
346
+ (0, sentry_1.setTag)(k, v.value);
334
347
  }
335
348
  });
336
349
  }