@dxos/observability 0.8.4-main.84f28bd → 0.8.4-main.937b3ca

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 (168) hide show
  1. package/dist/lib/browser/chunk-5ICT2XF2.mjs +1 -0
  2. package/dist/lib/browser/{chunk-MWTIKIBZ.mjs → chunk-5LN7D6GM.mjs} +14 -13
  3. package/dist/lib/browser/chunk-5LN7D6GM.mjs.map +7 -0
  4. package/dist/lib/browser/{chunk-33TCMAUB.mjs → chunk-JJQT5TQH.mjs} +85 -409
  5. package/dist/lib/browser/chunk-JJQT5TQH.mjs.map +7 -0
  6. package/dist/lib/browser/{chunk-YEPQFAES.mjs → chunk-O4BG5MRL.mjs} +2 -2
  7. package/dist/lib/browser/chunk-O4BG5MRL.mjs.map +7 -0
  8. package/dist/lib/browser/chunk-U6JWT3E2.mjs +1 -0
  9. package/dist/lib/browser/chunk-VL6LVQPU.mjs +69 -0
  10. package/dist/lib/browser/chunk-VL6LVQPU.mjs.map +7 -0
  11. package/dist/lib/browser/index.mjs +342 -16
  12. package/dist/lib/browser/index.mjs.map +4 -4
  13. package/dist/lib/browser/meta.json +1 -1
  14. package/dist/lib/browser/observability-XK652NZG.mjs +11 -0
  15. package/dist/lib/browser/otel/traces-browser.mjs +7 -0
  16. package/dist/lib/browser/otel/traces.mjs +7 -0
  17. package/dist/lib/browser/otel/traces.mjs.map +7 -0
  18. package/dist/lib/browser/{otel-IRDZ7PES.mjs → otel-DI4ASU7Y.mjs} +44 -95
  19. package/dist/lib/browser/otel-DI4ASU7Y.mjs.map +7 -0
  20. package/dist/lib/browser/segment/browser.mjs +9 -0
  21. package/dist/lib/browser/segment/browser.mjs.map +7 -0
  22. package/dist/lib/browser/segment/index.mjs +4 -3
  23. package/dist/lib/browser/segment/node.mjs +9 -0
  24. package/dist/lib/browser/segment/node.mjs.map +7 -0
  25. package/dist/lib/browser/sentry/browser.mjs +23 -0
  26. package/dist/lib/browser/sentry/browser.mjs.map +7 -0
  27. package/dist/lib/browser/sentry/index.mjs +2 -2
  28. package/dist/lib/browser/sentry/node.mjs +23 -0
  29. package/dist/lib/browser/sentry/node.mjs.map +7 -0
  30. package/dist/lib/browser/{sentry-log-processor-3F3SBJXM.mjs → sentry-log-processor-W7LI6WXA.mjs} +53 -53
  31. package/dist/lib/browser/sentry-log-processor-W7LI6WXA.mjs.map +7 -0
  32. package/dist/lib/node-esm/{chunk-EYW4X3O6.mjs → chunk-KKNY7TRV.mjs} +85 -409
  33. package/dist/lib/node-esm/chunk-KKNY7TRV.mjs.map +7 -0
  34. package/dist/lib/node-esm/{chunk-MRAK2H7O.mjs → chunk-KLJGCUYA.mjs} +1 -1
  35. package/dist/lib/node-esm/chunk-KLJGCUYA.mjs.map +7 -0
  36. package/dist/lib/node-esm/chunk-KVJTNW3F.mjs +147 -0
  37. package/dist/lib/node-esm/chunk-KVJTNW3F.mjs.map +7 -0
  38. package/dist/lib/node-esm/{chunk-TEH6VIKV.mjs → chunk-M4627SMT.mjs} +2 -2
  39. package/dist/lib/node-esm/{chunk-TEH6VIKV.mjs.map → chunk-M4627SMT.mjs.map} +3 -3
  40. package/dist/lib/node-esm/chunk-QUZL7LKE.mjs +2 -0
  41. package/dist/lib/node-esm/chunk-QUZL7LKE.mjs.map +7 -0
  42. package/dist/lib/node-esm/chunk-UIVXGEGJ.mjs +62 -0
  43. package/dist/lib/node-esm/chunk-UIVXGEGJ.mjs.map +7 -0
  44. package/dist/lib/node-esm/chunk-WAGGA7IT.mjs +52 -0
  45. package/dist/lib/node-esm/chunk-WAGGA7IT.mjs.map +7 -0
  46. package/dist/lib/node-esm/index.mjs +343 -16
  47. package/dist/lib/node-esm/index.mjs.map +4 -4
  48. package/dist/lib/node-esm/meta.json +1 -1
  49. package/dist/lib/node-esm/observability-CXQ3CZGB.mjs +13 -0
  50. package/dist/lib/node-esm/observability-CXQ3CZGB.mjs.map +7 -0
  51. package/dist/lib/node-esm/otel/traces-browser.mjs +70 -0
  52. package/dist/lib/node-esm/otel/traces-browser.mjs.map +7 -0
  53. package/dist/lib/node-esm/otel/traces.mjs +8 -0
  54. package/dist/lib/node-esm/otel/traces.mjs.map +7 -0
  55. package/dist/lib/node-esm/{otel-62HYJETM.mjs → otel-JFXO22WD.mjs} +43 -76
  56. package/dist/lib/node-esm/otel-JFXO22WD.mjs.map +7 -0
  57. package/dist/lib/node-esm/segment/browser.mjs +92 -0
  58. package/dist/lib/node-esm/segment/browser.mjs.map +7 -0
  59. package/dist/lib/node-esm/segment/index.mjs +7 -4
  60. package/dist/lib/node-esm/segment/node.mjs +11 -0
  61. package/dist/lib/node-esm/segment/node.mjs.map +7 -0
  62. package/dist/lib/node-esm/sentry/browser.mjs +165 -0
  63. package/dist/lib/node-esm/sentry/browser.mjs.map +7 -0
  64. package/dist/lib/node-esm/sentry/index.mjs +2 -2
  65. package/dist/lib/node-esm/sentry/node.mjs +24 -0
  66. package/dist/lib/node-esm/sentry/node.mjs.map +7 -0
  67. package/dist/lib/node-esm/{sentry-log-processor-JAYRA23C.mjs → sentry-log-processor-W3SG4RQL.mjs} +53 -53
  68. package/dist/lib/node-esm/sentry-log-processor-W3SG4RQL.mjs.map +7 -0
  69. package/dist/types/src/helpers/browser-observability.d.ts.map +1 -1
  70. package/dist/types/src/helpers/browser-observability.js +4 -6
  71. package/dist/types/src/helpers/browser-observability.js.map +1 -1
  72. package/dist/types/src/helpers/common.js +1 -1
  73. package/dist/types/src/helpers/common.js.map +1 -1
  74. package/dist/types/src/helpers/map-spaces.js +6 -7
  75. package/dist/types/src/helpers/map-spaces.js.map +1 -1
  76. package/dist/types/src/helpers/node-observability.d.ts +1 -1
  77. package/dist/types/src/helpers/node-observability.d.ts.map +1 -1
  78. package/dist/types/src/helpers/node-observability.js +7 -11
  79. package/dist/types/src/helpers/node-observability.js.map +1 -1
  80. package/dist/types/src/helpers/setup-telemetry-listeners.d.ts.map +1 -1
  81. package/dist/types/src/helpers/setup-telemetry-listeners.js +4 -7
  82. package/dist/types/src/helpers/setup-telemetry-listeners.js.map +1 -1
  83. package/dist/types/src/observability.d.ts +1 -1
  84. package/dist/types/src/observability.d.ts.map +1 -1
  85. package/dist/types/src/observability.js +68 -59
  86. package/dist/types/src/observability.js.map +1 -1
  87. package/dist/types/src/otel/logs.d.ts.map +1 -1
  88. package/dist/types/src/otel/logs.js +26 -23
  89. package/dist/types/src/otel/logs.js.map +1 -1
  90. package/dist/types/src/otel/metrics.d.ts +0 -1
  91. package/dist/types/src/otel/metrics.d.ts.map +1 -1
  92. package/dist/types/src/otel/metrics.js +6 -4
  93. package/dist/types/src/otel/metrics.js.map +1 -1
  94. package/dist/types/src/otel/otel.js +1 -1
  95. package/dist/types/src/otel/otel.js.map +1 -1
  96. package/dist/types/src/otel/traces-browser.d.ts.map +1 -1
  97. package/dist/types/src/otel/traces-browser.js +19 -13
  98. package/dist/types/src/otel/traces-browser.js.map +1 -1
  99. package/dist/types/src/otel/traces.d.ts.map +1 -1
  100. package/dist/types/src/otel/traces.js +18 -12
  101. package/dist/types/src/otel/traces.js.map +1 -1
  102. package/dist/types/src/segment/base.d.ts +3 -3
  103. package/dist/types/src/segment/base.d.ts.map +1 -1
  104. package/dist/types/src/segment/base.js +4 -3
  105. package/dist/types/src/segment/base.js.map +1 -1
  106. package/dist/types/src/segment/browser.d.ts +1 -1
  107. package/dist/types/src/segment/browser.d.ts.map +1 -1
  108. package/dist/types/src/segment/browser.js +8 -12
  109. package/dist/types/src/segment/browser.js.map +1 -1
  110. package/dist/types/src/segment/node.d.ts +1 -1
  111. package/dist/types/src/segment/node.d.ts.map +1 -1
  112. package/dist/types/src/segment/node.js +4 -3
  113. package/dist/types/src/segment/node.js.map +1 -1
  114. package/dist/types/src/sentry/browser.d.ts.map +1 -1
  115. package/dist/types/src/sentry/browser.js +5 -7
  116. package/dist/types/src/sentry/browser.js.map +1 -1
  117. package/dist/types/src/sentry/index.d.ts +1 -1
  118. package/dist/types/src/sentry/index.d.ts.map +1 -1
  119. package/dist/types/src/sentry/index.js +0 -1
  120. package/dist/types/src/sentry/index.js.map +1 -1
  121. package/dist/types/src/sentry/node.d.ts.map +1 -1
  122. package/dist/types/src/sentry/node.js +8 -13
  123. package/dist/types/src/sentry/node.js.map +1 -1
  124. package/dist/types/src/sentry/node.node.test.js +3 -5
  125. package/dist/types/src/sentry/node.node.test.js.map +1 -1
  126. package/dist/types/src/sentry/sentry-log-processor.d.ts.map +1 -1
  127. package/dist/types/src/sentry/sentry-log-processor.js +58 -63
  128. package/dist/types/src/sentry/sentry-log-processor.js.map +1 -1
  129. package/dist/types/src/sentry/sentry.node.test.js +1 -1
  130. package/dist/types/src/sentry/sentry.node.test.js.map +1 -1
  131. package/dist/types/tsconfig.tsbuildinfo +1 -1
  132. package/package.json +38 -34
  133. package/src/helpers/browser-observability.ts +2 -1
  134. package/src/helpers/map-spaces.ts +1 -1
  135. package/src/helpers/node-observability.ts +5 -4
  136. package/src/helpers/setup-telemetry-listeners.ts +2 -1
  137. package/src/observability.ts +4 -4
  138. package/src/otel/logs.ts +9 -7
  139. package/src/otel/metrics.ts +5 -12
  140. package/src/otel/otel.ts +1 -1
  141. package/src/otel/traces-browser.ts +23 -20
  142. package/src/otel/traces.ts +22 -19
  143. package/src/segment/base.ts +3 -3
  144. package/src/segment/browser.ts +5 -4
  145. package/src/segment/node.ts +5 -4
  146. package/src/sentry/browser.ts +8 -8
  147. package/src/sentry/index.ts +1 -1
  148. package/src/sentry/node.node.test.ts +2 -1
  149. package/src/sentry/node.ts +3 -3
  150. package/src/sentry/sentry-log-processor.ts +17 -7
  151. package/src/sentry/sentry.node.test.ts +2 -1
  152. package/dist/lib/browser/chunk-33TCMAUB.mjs.map +0 -7
  153. package/dist/lib/browser/chunk-5OQYI27L.mjs +0 -1
  154. package/dist/lib/browser/chunk-MWTIKIBZ.mjs.map +0 -7
  155. package/dist/lib/browser/chunk-YEPQFAES.mjs.map +0 -7
  156. package/dist/lib/browser/observability-EEM6BEY6.mjs +0 -10
  157. package/dist/lib/browser/otel-IRDZ7PES.mjs.map +0 -7
  158. package/dist/lib/browser/sentry-log-processor-3F3SBJXM.mjs.map +0 -7
  159. package/dist/lib/node-esm/chunk-552KLA6Z.mjs +0 -202
  160. package/dist/lib/node-esm/chunk-552KLA6Z.mjs.map +0 -7
  161. package/dist/lib/node-esm/chunk-EYW4X3O6.mjs.map +0 -7
  162. package/dist/lib/node-esm/observability-DAXZGOBS.mjs +0 -11
  163. package/dist/lib/node-esm/otel-62HYJETM.mjs.map +0 -7
  164. package/dist/lib/node-esm/sentry-log-processor-JAYRA23C.mjs.map +0 -7
  165. /package/dist/lib/browser/{chunk-5OQYI27L.mjs.map → chunk-5ICT2XF2.mjs.map} +0 -0
  166. /package/dist/lib/browser/{observability-EEM6BEY6.mjs.map → chunk-U6JWT3E2.mjs.map} +0 -0
  167. /package/dist/lib/{node-esm/chunk-MRAK2H7O.mjs.map → browser/observability-XK652NZG.mjs.map} +0 -0
  168. /package/dist/lib/{node-esm/observability-DAXZGOBS.mjs.map → browser/otel/traces-browser.mjs.map} +0 -0
package/package.json CHANGED
@@ -1,25 +1,32 @@
1
1
  {
2
2
  "name": "@dxos/observability",
3
- "version": "0.8.4-main.84f28bd",
3
+ "version": "0.8.4-main.937b3ca",
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",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/dxos/dxos"
10
+ },
7
11
  "license": "MIT",
8
12
  "author": "DXOS.org",
9
- "sideEffects": true,
13
+ "sideEffects": false,
10
14
  "type": "module",
11
15
  "exports": {
12
16
  ".": {
17
+ "source": "./src/index.ts",
13
18
  "types": "./dist/types/src/index.d.ts",
14
19
  "browser": "./dist/lib/browser/index.mjs",
15
20
  "node": "./dist/lib/node-esm/index.mjs"
16
21
  },
17
22
  "./segment": {
23
+ "source": "./src/segment/index.ts",
18
24
  "types": "./dist/types/src/segment/index.d.ts",
19
25
  "browser": "./dist/lib/browser/segment/index.mjs",
20
26
  "node": "./dist/lib/node-esm/segment/index.mjs"
21
27
  },
22
28
  "./sentry": {
29
+ "source": "./src/sentry/index.ts",
23
30
  "types": "./dist/types/src/sentry/index.d.ts",
24
31
  "browser": "./dist/lib/browser/sentry/index.mjs",
25
32
  "node": "./dist/lib/node-esm/sentry/index.mjs"
@@ -28,8 +35,8 @@
28
35
  "browser": {
29
36
  "./src/segment/node.ts": "./src/segment/browser.ts",
30
37
  "./src/sentry/node.ts": "./src/sentry/browser.ts",
31
- "./testing/testkit/index.ts": "./testing/testkit/browser.ts",
32
- "./src/otel/traces.ts": "./src/otel/traces-browser.ts"
38
+ "./src/otel/traces.ts": "./src/otel/traces-browser.ts",
39
+ "./src/testing/testkit/index.ts": "./src/testing/testkit/browser.ts"
33
40
  },
34
41
  "types": "dist/types/src/index.d.ts",
35
42
  "typesVersions": {
@@ -48,40 +55,40 @@
48
55
  ],
49
56
  "dependencies": {
50
57
  "@opentelemetry/api": "^1.9.0",
51
- "@opentelemetry/api-logs": "^0.52.1",
52
- "@opentelemetry/auto-instrumentations-web": "^0.40.0",
53
- "@opentelemetry/exporter-logs-otlp-http": "^0.52.1",
54
- "@opentelemetry/exporter-metrics-otlp-http": "^0.52.0",
55
- "@opentelemetry/exporter-trace-otlp-http": "^0.52.1",
56
- "@opentelemetry/instrumentation": "^0.52.1",
57
- "@opentelemetry/resources": "^1.25.1",
58
- "@opentelemetry/sdk-logs": "^0.52.1",
59
- "@opentelemetry/sdk-metrics": "^1.25.1",
60
- "@opentelemetry/sdk-trace-base": "^1.25.1",
61
- "@opentelemetry/sdk-trace-web": "^1.25.1",
62
- "@opentelemetry/semantic-conventions": "^1.25.0",
58
+ "@opentelemetry/api-logs": "^0.203.0",
59
+ "@opentelemetry/auto-instrumentations-web": "^0.51.0",
60
+ "@opentelemetry/exporter-logs-otlp-http": "^0.203.0",
61
+ "@opentelemetry/exporter-metrics-otlp-http": "^0.203.0",
62
+ "@opentelemetry/exporter-trace-otlp-http": "^0.203.0",
63
+ "@opentelemetry/instrumentation": "^0.203.0",
64
+ "@opentelemetry/resources": "^2.1.0",
65
+ "@opentelemetry/sdk-logs": "^0.203.0",
66
+ "@opentelemetry/sdk-metrics": "^2.1.0",
67
+ "@opentelemetry/sdk-trace-base": "^2.1.0",
68
+ "@opentelemetry/sdk-trace-web": "^2.1.0",
69
+ "@opentelemetry/semantic-conventions": "^1.37.0",
63
70
  "@segment/analytics-node": "^2.1.0",
64
71
  "@segment/snippet": "^4.15.3",
65
72
  "@sentry/browser": "^8.8.0",
66
73
  "@sentry/node": "^8.8.0",
67
74
  "debug": "^4.3.4",
68
- "js-yaml": "^4.1.0",
75
+ "js-yaml": "4.1.1",
69
76
  "localforage": "^1.10.0",
70
77
  "uuid": "^9.0.0",
71
- "@dxos/async": "0.8.4-main.84f28bd",
72
- "@dxos/client": "0.8.4-main.84f28bd",
73
- "@dxos/client-protocol": "0.8.4-main.84f28bd",
74
- "@dxos/client-services": "0.8.4-main.84f28bd",
75
- "@dxos/config": "0.8.4-main.84f28bd",
76
- "@dxos/context": "0.8.4-main.84f28bd",
77
- "@dxos/debug": "0.8.4-main.84f28bd",
78
- "@dxos/log": "0.8.4-main.84f28bd",
79
- "@dxos/network-manager": "0.8.4-main.84f28bd",
80
- "@dxos/node-std": "0.8.4-main.84f28bd",
81
- "@dxos/invariant": "0.8.4-main.84f28bd",
82
- "@dxos/protocols": "0.8.4-main.84f28bd",
83
- "@dxos/tracing": "0.8.4-main.84f28bd",
84
- "@dxos/util": "0.8.4-main.84f28bd"
78
+ "@dxos/client": "0.8.4-main.937b3ca",
79
+ "@dxos/async": "0.8.4-main.937b3ca",
80
+ "@dxos/client-protocol": "0.8.4-main.937b3ca",
81
+ "@dxos/client-services": "0.8.4-main.937b3ca",
82
+ "@dxos/config": "0.8.4-main.937b3ca",
83
+ "@dxos/context": "0.8.4-main.937b3ca",
84
+ "@dxos/debug": "0.8.4-main.937b3ca",
85
+ "@dxos/invariant": "0.8.4-main.937b3ca",
86
+ "@dxos/log": "0.8.4-main.937b3ca",
87
+ "@dxos/node-std": "0.8.4-main.937b3ca",
88
+ "@dxos/protocols": "0.8.4-main.937b3ca",
89
+ "@dxos/util": "0.8.4-main.937b3ca",
90
+ "@dxos/tracing": "0.8.4-main.937b3ca",
91
+ "@dxos/network-manager": "0.8.4-main.937b3ca"
85
92
  },
86
93
  "devDependencies": {
87
94
  "@sentry/types": "^8.8.0",
@@ -92,8 +99,5 @@
92
99
  },
93
100
  "publishConfig": {
94
101
  "access": "public"
95
- },
96
- "scripts": {
97
- "api-keys": "./scripts/inject_api_keys.mjs"
98
102
  }
99
103
  }
@@ -11,9 +11,10 @@ import * as localForage from 'localforage';
11
11
  import type { Config } from '@dxos/client';
12
12
  import { log } from '@dxos/log';
13
13
 
14
- import type { IPData } from './common';
15
14
  import type { Mode, Observability } from '../observability';
16
15
 
16
+ import type { IPData } from './common';
17
+
17
18
  export const OBSERVABILITY_DISABLED_KEY = 'observability-disabled';
18
19
  export const OBSERVABILITY_GROUP_KEY = 'observability-group';
19
20
 
@@ -30,7 +30,7 @@ export const mapSpaces = (spaces: Space[], options: MapSpacesOptions = { verbose
30
30
  key: space.key.truncate(),
31
31
  open: space.isOpen,
32
32
  members: space.members.get().length,
33
- objects: space.db.coreDatabase.getAllObjectIds().length,
33
+ objects: space.internal.db.coreDatabase.getAllObjectIds().length,
34
34
  startup,
35
35
  epoch,
36
36
  // appliedEpoch,
@@ -1,16 +1,17 @@
1
1
  //
2
2
  // Copyright 2022 DXOS.org
3
3
  //
4
- import yaml from 'js-yaml';
5
4
  import { existsSync, statSync } from 'node:fs';
6
5
  import { mkdir, readFile, writeFile } from 'node:fs/promises';
7
6
  import { join } from 'node:path';
7
+
8
+ import yaml from 'js-yaml';
8
9
  import { v4 as uuid, validate as validateUuid } from 'uuid';
9
10
 
10
11
  import type { Config } from '@dxos/client';
11
12
  import { log } from '@dxos/log';
12
13
 
13
- import { Observability, type Mode } from '../observability';
14
+ import { type Mode, Observability } from '../observability';
14
15
 
15
16
  /**
16
17
  * Print observability banner once per installation.
@@ -63,7 +64,7 @@ const initializeState = async (idPath: string): Promise<PersistentObservabilityS
63
64
  const observabilityState = {
64
65
  installationId: uuid(),
65
66
  group: process.env.DX_OBSERVABILITY_GROUP ?? undefined,
66
- mode: (process.env.DX_DISABLE_OBSERVABILITY ? 'disabled' : process.env.DX_OBSERVABILITY_MODE ?? 'basic') as Mode,
67
+ mode: (process.env.DX_DISABLE_OBSERVABILITY ? 'disabled' : (process.env.DX_OBSERVABILITY_MODE ?? 'basic')) as Mode,
67
68
  };
68
69
 
69
70
  await writeFile(
@@ -80,7 +81,7 @@ const validate = (contextString: string) => {
80
81
  if (Boolean(context.installationId) && validateUuid(context.installationId!)) {
81
82
  return {
82
83
  ...context,
83
- mode: process.env.DX_DISABLE_OBSERVABILITY ? 'disabled' : context.mode ?? 'basic',
84
+ mode: process.env.DX_DISABLE_OBSERVABILITY ? 'disabled' : (context.mode ?? 'basic'),
84
85
  };
85
86
  }
86
87
  };
@@ -4,9 +4,10 @@
4
4
 
5
5
  import type { Client } from '@dxos/client';
6
6
 
7
- import { getTelemetryIdentity } from './common';
8
7
  import { type Observability } from '../observability';
9
8
 
9
+ import { getTelemetryIdentity } from './common';
10
+
10
11
  let lastFocusEvent = new Date();
11
12
  let totalTime = 0;
12
13
 
@@ -3,19 +3,19 @@
3
3
  //
4
4
 
5
5
  import { Event, scheduleTaskInterval } from '@dxos/async';
6
- import { PublicKey, type Client, type Config } from '@dxos/client';
6
+ import { type Client, type Config, PublicKey } from '@dxos/client';
7
7
  import { type ClientServices, type Space } from '@dxos/client-protocol';
8
8
  import { Context } from '@dxos/context';
9
9
  import { invariant } from '@dxos/invariant';
10
- import { log, LogLevel } from '@dxos/log';
10
+ import { LogLevel, log } from '@dxos/log';
11
11
  import { ConnectionState } from '@dxos/network-manager';
12
12
  import { DeviceKind, type NetworkStatus, Platform } from '@dxos/protocols/proto/dxos/client/services';
13
13
  import { isNode } from '@dxos/util';
14
14
 
15
15
  import buildSecrets from './cli-observability-secrets.json';
16
- import { getTelemetryIdentity, type IPData, mapSpaces } from './helpers';
16
+ import { type IPData, getTelemetryIdentity, mapSpaces } from './helpers';
17
17
  import { type OtelLogs, type OtelMetrics, type OtelTraces } from './otel';
18
- import { type SegmentTelemetry, type TrackOptions, type PageOptions, TelemetryEvent } from './segment';
18
+ import { type PageOptions, type SegmentTelemetry, TelemetryEvent, type TrackOptions } from './segment';
19
19
  import { type InitOptions, type captureException as SentryCaptureException } from './sentry';
20
20
  import { type SentryLogProcessor } from './sentry/sentry-log-processor';
21
21
 
package/src/otel/logs.ts CHANGED
@@ -4,17 +4,17 @@
4
4
 
5
5
  import { SeverityNumber } from '@opentelemetry/api-logs';
6
6
  import { OTLPLogExporter } from '@opentelemetry/exporter-logs-otlp-http';
7
- import { Resource } from '@opentelemetry/resources';
7
+ import { defaultResource, resourceFromAttributes } from '@opentelemetry/resources';
8
8
  import { BatchLogRecordProcessor, LoggerProvider } from '@opentelemetry/sdk-logs';
9
9
  import { SEMRESATTRS_SERVICE_NAME, SEMRESATTRS_SERVICE_VERSION } from '@opentelemetry/semantic-conventions';
10
10
 
11
11
  import {
12
- getContextFromEntry,
13
- getRelativeFilename,
14
12
  type LogConfig,
15
13
  type LogEntry,
16
14
  LogLevel,
17
15
  type LogProcessor,
16
+ getContextFromEntry,
17
+ getRelativeFilename,
18
18
  } from '@dxos/log';
19
19
  import { jsonlogify } from '@dxos/util';
20
20
 
@@ -33,8 +33,8 @@ export class OtelLogs {
33
33
  private _loggerProvider: LoggerProvider;
34
34
  constructor(private readonly options: OtelLogOptions) {
35
35
  setDiagLogger(options.consoleDiagLogLevel);
36
- const resource = Resource.default().merge(
37
- new Resource({
36
+ const resource = defaultResource().merge(
37
+ resourceFromAttributes({
38
38
  [SEMRESATTRS_SERVICE_NAME]: this.options.serviceName,
39
39
  [SEMRESATTRS_SERVICE_VERSION]: this.options.serviceVersion,
40
40
  }),
@@ -46,8 +46,10 @@ export class OtelLogs {
46
46
  },
47
47
  concurrencyLimit: 10, // an optional limit on pending requests
48
48
  });
49
- this._loggerProvider = new LoggerProvider({ resource });
50
- this._loggerProvider.addLogRecordProcessor(new BatchLogRecordProcessor(logExporter));
49
+ this._loggerProvider = new LoggerProvider({
50
+ resource,
51
+ processors: [new BatchLogRecordProcessor(logExporter)],
52
+ });
51
53
  }
52
54
 
53
55
  public readonly logProcessor: LogProcessor = (config: LogConfig, entry: LogEntry) => {
@@ -2,36 +2,29 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- import { type Attributes, type Meter, type ObservableGauge } from '@opentelemetry/api';
5
+ import { type Meter } from '@opentelemetry/api';
6
6
  import { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-http';
7
- import { Resource } from '@opentelemetry/resources';
7
+ import { defaultResource, resourceFromAttributes } from '@opentelemetry/resources';
8
8
  import { MeterProvider, PeriodicExportingMetricReader } from '@opentelemetry/sdk-metrics';
9
9
  import { SEMRESATTRS_SERVICE_NAME, SEMRESATTRS_SERVICE_VERSION } from '@opentelemetry/semantic-conventions';
10
10
 
11
11
  import { log } from '@dxos/log';
12
- import { TRACE_PROCESSOR, type MetricData } from '@dxos/tracing';
12
+ import { type MetricData, TRACE_PROCESSOR } from '@dxos/tracing';
13
13
 
14
14
  import { type OtelOptions, setDiagLogger } from './otel';
15
15
 
16
16
  const EXPORT_INTERVAL = 60 * 1000;
17
17
 
18
- type SynchronousGauge = {
19
- gauge: ObservableGauge<Attributes>;
20
- nextValue: number;
21
- nextTags?: any;
22
- };
23
-
24
18
  export class OtelMetrics {
25
19
  private _meterProvider: MeterProvider;
26
20
  private _meter: Meter;
27
- private _gauges = new Map<string, SynchronousGauge>();
28
21
 
29
22
  constructor(private readonly options: OtelOptions) {
30
23
  // TODO: improve error handling/logging
31
24
  // https://github.com/open-telemetry/opentelemetry-js/issues/4823
32
25
  setDiagLogger(options.consoleDiagLogLevel);
33
- const resource = Resource.default().merge(
34
- new Resource({
26
+ const resource = defaultResource().merge(
27
+ resourceFromAttributes({
35
28
  [SEMRESATTRS_SERVICE_NAME]: this.options.serviceName,
36
29
  [SEMRESATTRS_SERVICE_VERSION]: this.options.serviceVersion,
37
30
  }),
package/src/otel/otel.ts CHANGED
@@ -2,7 +2,7 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- import { diag, DiagConsoleLogger, DiagLogLevel } from '@opentelemetry/api';
5
+ import { DiagConsoleLogger, DiagLogLevel, diag } from '@opentelemetry/api';
6
6
 
7
7
  export type OtelOptions = {
8
8
  endpoint: string;
@@ -2,45 +2,48 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- import { trace, type Tracer } from '@opentelemetry/api';
5
+ import { type Tracer, trace } from '@opentelemetry/api';
6
6
  import { getWebAutoInstrumentations } from '@opentelemetry/auto-instrumentations-web';
7
7
  import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
8
8
  import { registerInstrumentations } from '@opentelemetry/instrumentation';
9
- import { Resource } from '@opentelemetry/resources';
10
- import { ConsoleSpanExporter, SimpleSpanProcessor, BatchSpanProcessor } from '@opentelemetry/sdk-trace-base';
9
+ import { defaultResource, resourceFromAttributes } from '@opentelemetry/resources';
10
+ import { BatchSpanProcessor, ConsoleSpanExporter, SimpleSpanProcessor } from '@opentelemetry/sdk-trace-base';
11
11
  import { WebTracerProvider } from '@opentelemetry/sdk-trace-web';
12
12
  import { SEMRESATTRS_SERVICE_NAME, SEMRESATTRS_SERVICE_VERSION } from '@opentelemetry/semantic-conventions';
13
13
 
14
14
  import { log } from '@dxos/log';
15
- import { TRACE_PROCESSOR, type StartSpanOptions } from '@dxos/tracing';
15
+ import { type StartSpanOptions, TRACE_PROCESSOR } from '@dxos/tracing';
16
16
 
17
17
  import { type OtelOptions } from './otel';
18
18
 
19
19
  export class OtelTraces {
20
20
  private _tracer: Tracer;
21
21
  constructor(private readonly options: OtelOptions) {
22
- const resource = Resource.default().merge(
23
- new Resource({
22
+ const resource = defaultResource().merge(
23
+ resourceFromAttributes({
24
24
  [SEMRESATTRS_SERVICE_NAME]: this.options.serviceName,
25
25
  [SEMRESATTRS_SERVICE_VERSION]: this.options.serviceVersion,
26
26
  }),
27
27
  );
28
28
 
29
- const tracerProvider = new WebTracerProvider({ resource });
30
- tracerProvider.addSpanProcessor(new SimpleSpanProcessor(new ConsoleSpanExporter()));
31
- tracerProvider.addSpanProcessor(
32
- new BatchSpanProcessor(
33
- new OTLPTraceExporter({
34
- url: this.options.endpoint + '/v1/traces',
35
- headers: {
36
- Authorization: this.options.authorizationHeader,
37
- },
38
- concurrencyLimit: 10, // an optional limit on pending requests
39
- }),
40
- ),
41
- );
29
+ const tracerProvider = new WebTracerProvider({
30
+ resource,
31
+ spanProcessors: [
32
+ new SimpleSpanProcessor(new ConsoleSpanExporter()),
33
+ new BatchSpanProcessor(
34
+ new OTLPTraceExporter({
35
+ url: this.options.endpoint + '/v1/traces',
36
+ headers: {
37
+ Authorization: this.options.authorizationHeader,
38
+ },
39
+ concurrencyLimit: 10, // an optional limit on pending requests
40
+ }),
41
+ ),
42
+ ],
43
+ });
44
+
42
45
  // TODO(nf): ContextManager? Propogator?
43
- tracerProvider.register({});
46
+ trace.setGlobalTracerProvider(tracerProvider);
44
47
  this._tracer = trace.getTracer('dxos-observability', this.options.serviceVersion);
45
48
  }
46
49
 
@@ -2,9 +2,9 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- import { trace, type Tracer } from '@opentelemetry/api';
5
+ import { type Tracer, trace } from '@opentelemetry/api';
6
6
  import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
7
- import { Resource } from '@opentelemetry/resources';
7
+ import { defaultResource, resourceFromAttributes } from '@opentelemetry/resources';
8
8
  import {
9
9
  BasicTracerProvider,
10
10
  BatchSpanProcessor,
@@ -14,34 +14,37 @@ import {
14
14
  import { SEMRESATTRS_SERVICE_NAME, SEMRESATTRS_SERVICE_VERSION } from '@opentelemetry/semantic-conventions';
15
15
  import { log } from 'debug';
16
16
 
17
- import { TRACE_PROCESSOR, type StartSpanOptions } from '@dxos/tracing';
17
+ import { type StartSpanOptions, TRACE_PROCESSOR } from '@dxos/tracing';
18
18
 
19
19
  import { type OtelOptions } from './otel';
20
20
 
21
21
  export class OtelTraces {
22
22
  private _tracer: Tracer;
23
23
  constructor(private readonly options: OtelOptions) {
24
- const resource = Resource.default().merge(
25
- new Resource({
24
+ const resource = defaultResource().merge(
25
+ resourceFromAttributes({
26
26
  [SEMRESATTRS_SERVICE_NAME]: this.options.serviceName,
27
27
  [SEMRESATTRS_SERVICE_VERSION]: this.options.serviceVersion,
28
28
  }),
29
29
  );
30
30
 
31
- const tracerProvider = new BasicTracerProvider({ resource });
32
- tracerProvider.addSpanProcessor(new SimpleSpanProcessor(new ConsoleSpanExporter()));
33
- tracerProvider.addSpanProcessor(
34
- new BatchSpanProcessor(
35
- new OTLPTraceExporter({
36
- url: this.options.endpoint + '/v1/traces',
37
- headers: {
38
- Authorization: this.options.authorizationHeader,
39
- },
40
- concurrencyLimit: 10, // an optional limit on pending requests
41
- }),
42
- ),
43
- );
44
- tracerProvider.register();
31
+ const tracerProvider = new BasicTracerProvider({
32
+ resource,
33
+ spanProcessors: [
34
+ new SimpleSpanProcessor(new ConsoleSpanExporter()),
35
+ new BatchSpanProcessor(
36
+ new OTLPTraceExporter({
37
+ url: this.options.endpoint + '/v1/traces',
38
+ headers: {
39
+ Authorization: this.options.authorizationHeader,
40
+ },
41
+ concurrencyLimit: 10, // an optional limit on pending requests
42
+ }),
43
+ ),
44
+ ],
45
+ });
46
+
47
+ trace.setGlobalTracerProvider(tracerProvider);
45
48
  this._tracer = trace.getTracer('dxos-observability', this.options.serviceVersion);
46
49
  }
47
50
 
@@ -2,7 +2,7 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { type TrackParams, type PageParams, type IdentifyParams } from '@segment/analytics-node';
5
+ import { type IdentifyParams, type PageParams, type TrackParams } from '@segment/analytics-node';
6
6
 
7
7
  import { log } from '@dxos/log';
8
8
 
@@ -41,7 +41,7 @@ export abstract class AbstractSegmentTelemetry {
41
41
 
42
42
  abstract track(options: TrackOptions): void;
43
43
 
44
- protected createPageProps(options: PageOptions): PageParams {
44
+ protected createPageParams(options: PageOptions): PageParams {
45
45
  const { properties, ...rest } = options;
46
46
  return {
47
47
  ...getIdentityOptions(options),
@@ -53,7 +53,7 @@ export abstract class AbstractSegmentTelemetry {
53
53
  };
54
54
  }
55
55
 
56
- protected createTrackProps(options: TrackOptions): TrackParams {
56
+ protected createTrackParams(options: TrackOptions): TrackParams {
57
57
  const { event, action, properties, ...rest } = options;
58
58
  return {
59
59
  ...getIdentityOptions(options),
@@ -7,10 +7,11 @@ import snippet from '@segment/snippet';
7
7
 
8
8
  import { log } from '@dxos/log';
9
9
 
10
- import { AbstractSegmentTelemetry } from './base';
11
- import type { TrackOptions, SegmentTelemetryOptions, PageOptions } from './types';
12
10
  import { captureException } from '../sentry';
13
11
 
12
+ import { AbstractSegmentTelemetry } from './base';
13
+ import type { PageOptions, SegmentTelemetryOptions, TrackOptions } from './types';
14
+
14
15
  /**
15
16
  * Browser telemetry.
16
17
  */
@@ -38,7 +39,7 @@ export class SegmentTelemetry extends AbstractSegmentTelemetry {
38
39
 
39
40
  page(options: PageOptions): void {
40
41
  try {
41
- const props = this.createPageProps(options);
42
+ const props = this.createPageParams(options);
42
43
  (window as any).analytics?.page(props.category, props.name, props.properties);
43
44
  } catch (err) {
44
45
  log.catch('failed to track page', err);
@@ -47,7 +48,7 @@ export class SegmentTelemetry extends AbstractSegmentTelemetry {
47
48
 
48
49
  track(options: TrackOptions): void {
49
50
  try {
50
- const props = this.createTrackProps(options);
51
+ const props = this.createTrackParams(options);
51
52
  (window as any).analytics?.track(props.event, props.properties);
52
53
  } catch (err) {
53
54
  log.catch('failed to track event', err);
@@ -7,10 +7,11 @@ import { Analytics, type IdentifyParams } from '@segment/analytics-node';
7
7
  import { invariant } from '@dxos/invariant';
8
8
  import { log } from '@dxos/log';
9
9
 
10
- import { AbstractSegmentTelemetry } from './base';
11
- import type { SegmentTelemetryOptions, PageOptions, TrackOptions } from './types';
12
10
  import { captureException } from '../sentry';
13
11
 
12
+ import { AbstractSegmentTelemetry } from './base';
13
+ import type { PageOptions, SegmentTelemetryOptions, TrackOptions } from './types';
14
+
14
15
  /**
15
16
  * Node telemetry.
16
17
  */
@@ -50,7 +51,7 @@ export class SegmentTelemetry extends AbstractSegmentTelemetry {
50
51
  }
51
52
 
52
53
  try {
53
- this._analytics.page(this.createPageProps(options));
54
+ this._analytics.page(this.createPageParams(options));
54
55
  } catch (err) {
55
56
  log.catch('Failed to track page', err);
56
57
  }
@@ -64,7 +65,7 @@ export class SegmentTelemetry extends AbstractSegmentTelemetry {
64
65
 
65
66
  log.info('sending event to telemetry', { options });
66
67
  try {
67
- this._analytics.track(this.createTrackProps(options));
68
+ this._analytics.track(this.createTrackParams(options));
68
69
  } catch (err) {
69
70
  log.catch('Failed to track action', err);
70
71
  }
@@ -3,19 +3,19 @@
3
3
  //
4
4
 
5
5
  import {
6
- init as naturalInit,
7
- setTag,
6
+ breadcrumbsIntegration,
7
+ browserTracingIntegration,
8
+ feedbackIntegration,
9
+ httpClientIntegration,
10
+ metrics,
8
11
  addBreadcrumb as naturalAddBreadcrumb,
9
12
  captureException as naturalCaptureException,
10
13
  captureMessage as naturalCaptureMessage,
14
+ init as naturalInit,
11
15
  sendFeedback as naturalSendFeedback,
12
16
  withScope as naturalWithScope,
13
- breadcrumbsIntegration,
14
- browserTracingIntegration,
15
- feedbackIntegration,
16
- httpClientIntegration,
17
17
  replayIntegration,
18
- metrics,
18
+ setTag,
19
19
  startInactiveSpan,
20
20
  } from '@sentry/browser';
21
21
 
@@ -57,7 +57,7 @@ export const init = (options: InitOptions) => {
57
57
  replaysSessionSampleRate: options.replaySampleRate,
58
58
  replaysOnErrorSampleRate: options.replaySampleRateOnError,
59
59
  tracesSampleRate: options.sampleRate,
60
- transport: options.transport,
60
+ transport: options.transport as any, // TODO(dmaretskyi): Fix
61
61
  beforeSend: (event) => {
62
62
  options.onError?.(event);
63
63
  return event;
@@ -3,4 +3,4 @@
3
3
  //
4
4
 
5
5
  export * from './node';
6
- export * from './types';
6
+ export type * from './types';
@@ -5,9 +5,10 @@
5
5
  import type { Stacktrace } from '@sentry/types';
6
6
  import { beforeAll, beforeEach, describe, expect, test } from 'vitest';
7
7
 
8
- import * as Sentry from './node';
9
8
  import { sentryTestkit } from '../testing';
10
9
 
10
+ import * as Sentry from './node';
11
+
11
12
  const { testkit, sentryTransport } = sentryTestkit();
12
13
 
13
14
  // TODO(burdon): https://example.com?
@@ -4,13 +4,13 @@
4
4
 
5
5
  import {
6
6
  type Event,
7
- init as naturalInit,
8
- setTag,
7
+ metrics,
9
8
  addBreadcrumb as naturalAddBreadcrumb,
10
9
  captureException as naturalCaptureException,
11
10
  captureMessage as naturalCaptureMessage,
11
+ init as naturalInit,
12
12
  withScope as naturalWithScope,
13
- metrics,
13
+ setTag,
14
14
  startInactiveSpan,
15
15
  } from '@sentry/node';
16
16