@dxos/observability 0.8.3 → 0.8.4-main.1068cf700f

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 (348) hide show
  1. package/dist/lib/browser/chunk-J5LGTIGS.mjs +10 -0
  2. package/dist/lib/browser/chunk-K4VFBKST.mjs +13 -0
  3. package/dist/lib/browser/chunk-K4VFBKST.mjs.map +7 -0
  4. package/dist/lib/browser/index.mjs +1066 -34
  5. package/dist/lib/browser/index.mjs.map +4 -4
  6. package/dist/lib/browser/log-processor-FDLTDQEM.mjs +45 -0
  7. package/dist/lib/browser/log-processor-FDLTDQEM.mjs.map +7 -0
  8. package/dist/lib/browser/logs-ATTRIUTL.mjs +113 -0
  9. package/dist/lib/browser/logs-ATTRIUTL.mjs.map +7 -0
  10. package/dist/lib/browser/meta.json +1 -1
  11. package/dist/lib/browser/metrics-PKTV6IGF.mjs +130 -0
  12. package/dist/lib/browser/metrics-PKTV6IGF.mjs.map +7 -0
  13. package/dist/lib/browser/traces-browser-XYXBF5ZX.mjs +62 -0
  14. package/dist/lib/browser/traces-browser-XYXBF5ZX.mjs.map +7 -0
  15. package/dist/lib/node-esm/chunk-FEVP3MK4.mjs +15 -0
  16. package/dist/lib/node-esm/chunk-FEVP3MK4.mjs.map +7 -0
  17. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
  18. package/dist/lib/node-esm/index.mjs +1070 -34
  19. package/dist/lib/node-esm/index.mjs.map +4 -4
  20. package/dist/lib/node-esm/log-processor-TKJVJJSJ.mjs +46 -0
  21. package/dist/lib/node-esm/log-processor-TKJVJJSJ.mjs.map +7 -0
  22. package/dist/lib/node-esm/logs-7J45KLM7.mjs +114 -0
  23. package/dist/lib/node-esm/logs-7J45KLM7.mjs.map +7 -0
  24. package/dist/lib/node-esm/meta.json +1 -1
  25. package/dist/lib/node-esm/metrics-H7DDLYSG.mjs +131 -0
  26. package/dist/lib/node-esm/metrics-H7DDLYSG.mjs.map +7 -0
  27. package/dist/lib/node-esm/traces-KMTHMYFX.mjs +44 -0
  28. package/dist/lib/node-esm/traces-KMTHMYFX.mjs.map +7 -0
  29. package/dist/types/src/cli-observability-secrets.json +3 -4
  30. package/dist/types/src/extensions/index.d.ts +3 -0
  31. package/dist/types/src/extensions/index.d.ts.map +1 -0
  32. package/dist/types/src/extensions/index.js +6 -0
  33. package/dist/types/src/extensions/index.js.map +1 -0
  34. package/dist/types/src/extensions/otel/extension.d.ts +23 -0
  35. package/dist/types/src/extensions/otel/extension.d.ts.map +1 -0
  36. package/dist/types/src/extensions/otel/extension.js +124 -0
  37. package/dist/types/src/extensions/otel/extension.js.map +1 -0
  38. package/dist/types/src/extensions/otel/index.d.ts +2 -0
  39. package/dist/types/src/extensions/otel/index.d.ts.map +1 -0
  40. package/dist/types/src/extensions/otel/index.js +5 -0
  41. package/dist/types/src/extensions/otel/index.js.map +1 -0
  42. package/dist/types/src/{otel → extensions/otel}/logs.d.ts +4 -3
  43. package/dist/types/src/extensions/otel/logs.d.ts.map +1 -0
  44. package/dist/types/src/extensions/otel/logs.js +104 -0
  45. package/dist/types/src/extensions/otel/logs.js.map +1 -0
  46. package/dist/types/src/{otel → extensions/otel}/metrics.d.ts +0 -1
  47. package/dist/types/src/extensions/otel/metrics.d.ts.map +1 -0
  48. package/dist/types/src/{otel → extensions/otel}/metrics.js +6 -12
  49. package/dist/types/src/extensions/otel/metrics.js.map +1 -0
  50. package/dist/types/src/{otel → extensions/otel}/otel.d.ts +3 -3
  51. package/dist/types/src/extensions/otel/otel.d.ts.map +1 -0
  52. package/dist/types/src/{otel → extensions/otel}/otel.js +1 -1
  53. package/dist/types/src/extensions/otel/otel.js.map +1 -0
  54. package/dist/types/src/extensions/otel/traces-browser.d.ts.map +1 -0
  55. package/dist/types/src/extensions/otel/traces-browser.js +44 -0
  56. package/dist/types/src/extensions/otel/traces-browser.js.map +1 -0
  57. package/dist/types/src/extensions/otel/traces.d.ts.map +1 -0
  58. package/dist/types/src/extensions/otel/traces.js +38 -0
  59. package/dist/types/src/extensions/otel/traces.js.map +1 -0
  60. package/dist/types/src/extensions/posthog/extension.d.ts +15 -0
  61. package/dist/types/src/extensions/posthog/extension.d.ts.map +1 -0
  62. package/dist/types/src/extensions/posthog/extension.js +143 -0
  63. package/dist/types/src/extensions/posthog/extension.js.map +1 -0
  64. package/dist/types/src/extensions/posthog/index.d.ts +2 -0
  65. package/dist/types/src/extensions/posthog/index.d.ts.map +1 -0
  66. package/dist/types/src/extensions/posthog/index.js +5 -0
  67. package/dist/types/src/extensions/posthog/index.js.map +1 -0
  68. package/dist/types/src/extensions/posthog/log-processor.d.ts +3 -0
  69. package/dist/types/src/extensions/posthog/log-processor.d.ts.map +1 -0
  70. package/dist/types/src/extensions/posthog/log-processor.js +45 -0
  71. package/dist/types/src/extensions/posthog/log-processor.js.map +1 -0
  72. package/dist/types/src/extensions/posthog/log-processor.test.d.ts +2 -0
  73. package/dist/types/src/extensions/posthog/log-processor.test.d.ts.map +1 -0
  74. package/dist/types/src/extensions/posthog/log-processor.test.js +146 -0
  75. package/dist/types/src/extensions/posthog/log-processor.test.js.map +1 -0
  76. package/dist/types/src/extensions/stub.d.ts +3 -0
  77. package/dist/types/src/extensions/stub.d.ts.map +1 -0
  78. package/dist/types/src/extensions/stub.js +16 -0
  79. package/dist/types/src/extensions/stub.js.map +1 -0
  80. package/dist/types/src/index.d.ts +4 -2
  81. package/dist/types/src/index.d.ts.map +1 -1
  82. package/dist/types/src/index.js +5 -3
  83. package/dist/types/src/index.js.map +1 -1
  84. package/dist/types/src/log-buffer.d.ts +34 -0
  85. package/dist/types/src/log-buffer.d.ts.map +1 -0
  86. package/dist/types/src/log-buffer.js +70 -0
  87. package/dist/types/src/log-buffer.js.map +1 -0
  88. package/dist/types/src/log-buffer.test.d.ts +2 -0
  89. package/dist/types/src/log-buffer.test.d.ts.map +1 -0
  90. package/dist/types/src/log-buffer.test.js +107 -0
  91. package/dist/types/src/log-buffer.test.js.map +1 -0
  92. package/dist/types/src/observability-extension.d.ts +74 -0
  93. package/dist/types/src/observability-extension.d.ts.map +1 -0
  94. package/dist/types/src/observability-extension.js +5 -0
  95. package/dist/types/src/observability-extension.js.map +1 -0
  96. package/dist/types/src/observability.d.ts +32 -110
  97. package/dist/types/src/observability.d.ts.map +1 -1
  98. package/dist/types/src/observability.js +176 -455
  99. package/dist/types/src/observability.js.map +1 -1
  100. package/dist/types/src/observability.test.d.ts +2 -0
  101. package/dist/types/src/observability.test.d.ts.map +1 -0
  102. package/dist/types/src/observability.test.js +312 -0
  103. package/dist/types/src/observability.test.js.map +1 -0
  104. package/dist/types/src/providers/client-observability.d.ts +11 -0
  105. package/dist/types/src/providers/client-observability.d.ts.map +1 -0
  106. package/dist/types/src/providers/client-observability.js +200 -0
  107. package/dist/types/src/providers/client-observability.js.map +1 -0
  108. package/dist/types/src/providers/index.d.ts +4 -0
  109. package/dist/types/src/providers/index.d.ts.map +1 -0
  110. package/dist/types/src/providers/index.js +7 -0
  111. package/dist/types/src/providers/index.js.map +1 -0
  112. package/dist/types/src/providers/ip-data.d.ts +5 -0
  113. package/dist/types/src/providers/ip-data.d.ts.map +1 -0
  114. package/dist/types/src/providers/ip-data.js +55 -0
  115. package/dist/types/src/providers/ip-data.js.map +1 -0
  116. package/dist/types/src/providers/storage.d.ts +3 -0
  117. package/dist/types/src/providers/storage.d.ts.map +1 -0
  118. package/dist/types/src/providers/storage.js +19 -0
  119. package/dist/types/src/providers/storage.js.map +1 -0
  120. package/dist/types/src/storage/browser.d.ts +19 -0
  121. package/dist/types/src/storage/browser.d.ts.map +1 -0
  122. package/dist/types/src/storage/browser.js +58 -0
  123. package/dist/types/src/storage/browser.js.map +1 -0
  124. package/dist/types/src/storage/index.d.ts +2 -0
  125. package/dist/types/src/storage/index.d.ts.map +1 -0
  126. package/{src/segment/index.ts → dist/types/src/storage/index.js} +1 -2
  127. package/dist/types/src/storage/index.js.map +1 -0
  128. package/dist/types/src/storage/node.d.ts +26 -0
  129. package/dist/types/src/storage/node.d.ts.map +1 -0
  130. package/dist/types/src/storage/node.js +92 -0
  131. package/dist/types/src/storage/node.js.map +1 -0
  132. package/dist/types/src/storage/node.test.d.ts +2 -0
  133. package/dist/types/src/storage/node.test.d.ts.map +1 -0
  134. package/dist/types/src/storage/node.test.js +103 -0
  135. package/dist/types/src/storage/node.test.js.map +1 -0
  136. package/dist/types/tsconfig.tsbuildinfo +1 -1
  137. package/package.json +42 -63
  138. package/src/cli-observability-secrets.json +3 -4
  139. package/src/extensions/index.ts +6 -0
  140. package/src/extensions/otel/extension.ts +178 -0
  141. package/src/extensions/otel/index.ts +5 -0
  142. package/src/extensions/otel/logs.ts +134 -0
  143. package/src/{otel → extensions/otel}/metrics.ts +4 -21
  144. package/src/{otel → extensions/otel}/otel.ts +4 -4
  145. package/src/extensions/otel/traces-browser.ts +57 -0
  146. package/src/extensions/otel/traces.ts +49 -0
  147. package/src/extensions/posthog/extension.ts +172 -0
  148. package/src/extensions/posthog/index.ts +5 -0
  149. package/src/extensions/posthog/log-processor.test.ts +185 -0
  150. package/src/extensions/posthog/log-processor.ts +54 -0
  151. package/src/extensions/stub.ts +19 -0
  152. package/src/index.ts +5 -3
  153. package/src/log-buffer.test.ts +134 -0
  154. package/src/log-buffer.ts +101 -0
  155. package/src/observability-extension.ts +94 -0
  156. package/src/observability.test.ts +531 -0
  157. package/src/observability.ts +236 -577
  158. package/src/providers/client-observability.ts +253 -0
  159. package/src/providers/index.ts +7 -0
  160. package/src/providers/ip-data.ts +88 -0
  161. package/src/providers/storage.ts +23 -0
  162. package/src/storage/browser.ts +61 -0
  163. package/src/{sentry → storage}/index.ts +0 -1
  164. package/src/storage/node.test.ts +130 -0
  165. package/src/{helpers/node-observability.ts → storage/node.ts} +42 -70
  166. package/dist/lib/browser/chunk-G6EE7HFV.mjs +0 -147
  167. package/dist/lib/browser/chunk-G6EE7HFV.mjs.map +0 -7
  168. package/dist/lib/browser/chunk-JA5VJRKF.mjs +0 -164
  169. package/dist/lib/browser/chunk-JA5VJRKF.mjs.map +0 -7
  170. package/dist/lib/browser/chunk-KDP3SESE.mjs +0 -1
  171. package/dist/lib/browser/chunk-YQJELTRP.mjs +0 -996
  172. package/dist/lib/browser/chunk-YQJELTRP.mjs.map +0 -7
  173. package/dist/lib/browser/observability-HDE3I7TA.mjs +0 -10
  174. package/dist/lib/browser/otel-LHAFLNBQ.mjs +0 -277
  175. package/dist/lib/browser/otel-LHAFLNBQ.mjs.map +0 -7
  176. package/dist/lib/browser/segment/index.mjs +0 -11
  177. package/dist/lib/browser/segment/index.mjs.map +0 -7
  178. package/dist/lib/browser/sentry/index.mjs +0 -24
  179. package/dist/lib/browser/sentry/index.mjs.map +0 -7
  180. package/dist/lib/browser/sentry-log-processor-625AISXI.mjs +0 -146
  181. package/dist/lib/browser/sentry-log-processor-625AISXI.mjs.map +0 -7
  182. package/dist/lib/node/chunk-325GAGFA.cjs +0 -213
  183. package/dist/lib/node/chunk-325GAGFA.cjs.map +0 -7
  184. package/dist/lib/node/chunk-BZHVFSLF.cjs +0 -1025
  185. package/dist/lib/node/chunk-BZHVFSLF.cjs.map +0 -7
  186. package/dist/lib/node/chunk-GIYJMZEQ.cjs +0 -2
  187. package/dist/lib/node/chunk-GIYJMZEQ.cjs.map +0 -7
  188. package/dist/lib/node/chunk-MZ3PMDTP.cjs +0 -163
  189. package/dist/lib/node/chunk-MZ3PMDTP.cjs.map +0 -7
  190. package/dist/lib/node/index.cjs +0 -60
  191. package/dist/lib/node/index.cjs.map +0 -7
  192. package/dist/lib/node/meta.json +0 -1
  193. package/dist/lib/node/observability-E2NGRIEN.cjs +0 -32
  194. package/dist/lib/node/observability-E2NGRIEN.cjs.map +0 -7
  195. package/dist/lib/node/otel-VF5YNCR3.cjs +0 -278
  196. package/dist/lib/node/otel-VF5YNCR3.cjs.map +0 -7
  197. package/dist/lib/node/segment/index.cjs +0 -33
  198. package/dist/lib/node/segment/index.cjs.map +0 -7
  199. package/dist/lib/node/sentry/index.cjs +0 -46
  200. package/dist/lib/node/sentry/index.cjs.map +0 -7
  201. package/dist/lib/node/sentry-log-processor-CCV4RL7N.cjs +0 -164
  202. package/dist/lib/node/sentry-log-processor-CCV4RL7N.cjs.map +0 -7
  203. package/dist/lib/node-esm/chunk-AZMSBUWR.mjs +0 -202
  204. package/dist/lib/node-esm/chunk-AZMSBUWR.mjs.map +0 -7
  205. package/dist/lib/node-esm/chunk-H7Y2DDUN.mjs +0 -135
  206. package/dist/lib/node-esm/chunk-H7Y2DDUN.mjs.map +0 -7
  207. package/dist/lib/node-esm/chunk-M7QJLFGR.mjs +0 -997
  208. package/dist/lib/node-esm/chunk-M7QJLFGR.mjs.map +0 -7
  209. package/dist/lib/node-esm/chunk-YJ4KVBWC.mjs +0 -2
  210. package/dist/lib/node-esm/chunk-YJ4KVBWC.mjs.map +0 -7
  211. package/dist/lib/node-esm/observability-7BTI46NM.mjs +0 -11
  212. package/dist/lib/node-esm/observability-7BTI46NM.mjs.map +0 -7
  213. package/dist/lib/node-esm/otel-AF5TSABC.mjs +0 -260
  214. package/dist/lib/node-esm/otel-AF5TSABC.mjs.map +0 -7
  215. package/dist/lib/node-esm/segment/index.mjs +0 -12
  216. package/dist/lib/node-esm/segment/index.mjs.map +0 -7
  217. package/dist/lib/node-esm/sentry/index.mjs +0 -25
  218. package/dist/lib/node-esm/sentry/index.mjs.map +0 -7
  219. package/dist/lib/node-esm/sentry-log-processor-HPUPCMRG.mjs +0 -147
  220. package/dist/lib/node-esm/sentry-log-processor-HPUPCMRG.mjs.map +0 -7
  221. package/dist/types/src/helpers/browser-observability.d.ts +0 -17
  222. package/dist/types/src/helpers/browser-observability.d.ts.map +0 -1
  223. package/dist/types/src/helpers/browser-observability.js +0 -140
  224. package/dist/types/src/helpers/browser-observability.js.map +0 -1
  225. package/dist/types/src/helpers/common.d.ts +0 -12
  226. package/dist/types/src/helpers/common.d.ts.map +0 -1
  227. package/dist/types/src/helpers/common.js +0 -23
  228. package/dist/types/src/helpers/common.js.map +0 -1
  229. package/dist/types/src/helpers/index.d.ts +0 -6
  230. package/dist/types/src/helpers/index.d.ts.map +0 -1
  231. package/dist/types/src/helpers/index.js +0 -9
  232. package/dist/types/src/helpers/index.js.map +0 -1
  233. package/dist/types/src/helpers/map-spaces.d.ts +0 -18
  234. package/dist/types/src/helpers/map-spaces.d.ts.map +0 -1
  235. package/dist/types/src/helpers/map-spaces.js +0 -37
  236. package/dist/types/src/helpers/map-spaces.js.map +0 -1
  237. package/dist/types/src/helpers/node-observability.d.ts +0 -24
  238. package/dist/types/src/helpers/node-observability.d.ts.map +0 -1
  239. package/dist/types/src/helpers/node-observability.js +0 -101
  240. package/dist/types/src/helpers/node-observability.js.map +0 -1
  241. package/dist/types/src/helpers/setup-telemetry-listeners.d.ts +0 -4
  242. package/dist/types/src/helpers/setup-telemetry-listeners.d.ts.map +0 -1
  243. package/dist/types/src/helpers/setup-telemetry-listeners.js +0 -97
  244. package/dist/types/src/helpers/setup-telemetry-listeners.js.map +0 -1
  245. package/dist/types/src/otel/index.d.ts +0 -5
  246. package/dist/types/src/otel/index.d.ts.map +0 -1
  247. package/dist/types/src/otel/index.js +0 -8
  248. package/dist/types/src/otel/index.js.map +0 -1
  249. package/dist/types/src/otel/logs.d.ts.map +0 -1
  250. package/dist/types/src/otel/logs.js +0 -71
  251. package/dist/types/src/otel/logs.js.map +0 -1
  252. package/dist/types/src/otel/metrics.d.ts.map +0 -1
  253. package/dist/types/src/otel/metrics.js.map +0 -1
  254. package/dist/types/src/otel/otel.d.ts.map +0 -1
  255. package/dist/types/src/otel/otel.js.map +0 -1
  256. package/dist/types/src/otel/traces-browser.d.ts.map +0 -1
  257. package/dist/types/src/otel/traces-browser.js +0 -47
  258. package/dist/types/src/otel/traces-browser.js.map +0 -1
  259. package/dist/types/src/otel/traces.d.ts.map +0 -1
  260. package/dist/types/src/otel/traces.js +0 -40
  261. package/dist/types/src/otel/traces.js.map +0 -1
  262. package/dist/types/src/segment/base.d.ts +0 -15
  263. package/dist/types/src/segment/base.d.ts.map +0 -1
  264. package/dist/types/src/segment/base.js +0 -50
  265. package/dist/types/src/segment/base.js.map +0 -1
  266. package/dist/types/src/segment/browser.d.ts +0 -15
  267. package/dist/types/src/segment/browser.d.ts.map +0 -1
  268. package/dist/types/src/segment/browser.js +0 -67
  269. package/dist/types/src/segment/browser.js.map +0 -1
  270. package/dist/types/src/segment/index.d.ts +0 -3
  271. package/dist/types/src/segment/index.d.ts.map +0 -1
  272. package/dist/types/src/segment/index.js +0 -6
  273. package/dist/types/src/segment/index.js.map +0 -1
  274. package/dist/types/src/segment/node.d.ts +0 -16
  275. package/dist/types/src/segment/node.d.ts.map +0 -1
  276. package/dist/types/src/segment/node.js +0 -83
  277. package/dist/types/src/segment/node.js.map +0 -1
  278. package/dist/types/src/segment/types.d.ts +0 -52
  279. package/dist/types/src/segment/types.d.ts.map +0 -1
  280. package/dist/types/src/segment/types.js +0 -18
  281. package/dist/types/src/segment/types.js.map +0 -1
  282. package/dist/types/src/sentry/browser.d.ts +0 -32
  283. package/dist/types/src/sentry/browser.d.ts.map +0 -1
  284. package/dist/types/src/sentry/browser.js +0 -112
  285. package/dist/types/src/sentry/browser.js.map +0 -1
  286. package/dist/types/src/sentry/index.d.ts +0 -3
  287. package/dist/types/src/sentry/index.d.ts.map +0 -1
  288. package/dist/types/src/sentry/index.js +0 -6
  289. package/dist/types/src/sentry/index.js.map +0 -1
  290. package/dist/types/src/sentry/node.d.ts +0 -32
  291. package/dist/types/src/sentry/node.d.ts.map +0 -1
  292. package/dist/types/src/sentry/node.js +0 -111
  293. package/dist/types/src/sentry/node.js.map +0 -1
  294. package/dist/types/src/sentry/node.node.test.d.ts +0 -2
  295. package/dist/types/src/sentry/node.node.test.d.ts.map +0 -1
  296. package/dist/types/src/sentry/node.node.test.js +0 -34
  297. package/dist/types/src/sentry/node.node.test.js.map +0 -1
  298. package/dist/types/src/sentry/sentry-log-processor.d.ts +0 -9
  299. package/dist/types/src/sentry/sentry-log-processor.d.ts.map +0 -1
  300. package/dist/types/src/sentry/sentry-log-processor.js +0 -149
  301. package/dist/types/src/sentry/sentry-log-processor.js.map +0 -1
  302. package/dist/types/src/sentry/sentry.node.test.d.ts +0 -2
  303. package/dist/types/src/sentry/sentry.node.test.d.ts.map +0 -1
  304. package/dist/types/src/sentry/sentry.node.test.js +0 -28
  305. package/dist/types/src/sentry/sentry.node.test.js.map +0 -1
  306. package/dist/types/src/sentry/types.d.ts +0 -18
  307. package/dist/types/src/sentry/types.d.ts.map +0 -1
  308. package/dist/types/src/sentry/types.js +0 -4
  309. package/dist/types/src/sentry/types.js.map +0 -1
  310. package/dist/types/src/testing/index.d.ts +0 -2
  311. package/dist/types/src/testing/index.d.ts.map +0 -1
  312. package/dist/types/src/testing/index.js +0 -5
  313. package/dist/types/src/testing/index.js.map +0 -1
  314. package/dist/types/src/testing/testkit/browser.d.ts +0 -2
  315. package/dist/types/src/testing/testkit/browser.d.ts.map +0 -1
  316. package/dist/types/src/testing/testkit/browser.js +0 -7
  317. package/dist/types/src/testing/testkit/browser.js.map +0 -1
  318. package/dist/types/src/testing/testkit/index.d.ts +0 -2
  319. package/dist/types/src/testing/testkit/index.d.ts.map +0 -1
  320. package/dist/types/src/testing/testkit/index.js +0 -6
  321. package/dist/types/src/testing/testkit/index.js.map +0 -1
  322. package/src/helpers/browser-observability.ts +0 -177
  323. package/src/helpers/common.ts +0 -38
  324. package/src/helpers/index.ts +0 -9
  325. package/src/helpers/map-spaces.ts +0 -48
  326. package/src/helpers/setup-telemetry-listeners.ts +0 -108
  327. package/src/otel/index.ts +0 -8
  328. package/src/otel/logs.ts +0 -100
  329. package/src/otel/traces-browser.ts +0 -59
  330. package/src/otel/traces.ts +0 -57
  331. package/src/segment/base.ts +0 -69
  332. package/src/segment/browser.ts +0 -68
  333. package/src/segment/node.ts +0 -94
  334. package/src/segment/types.ts +0 -57
  335. package/src/sentry/browser.ts +0 -133
  336. package/src/sentry/node.node.test.ts +0 -39
  337. package/src/sentry/node.ts +0 -126
  338. package/src/sentry/sentry-log-processor.ts +0 -166
  339. package/src/sentry/sentry.node.test.ts +0 -34
  340. package/src/sentry/types.ts +0 -22
  341. package/src/testing/index.ts +0 -5
  342. package/src/testing/testkit/browser.ts +0 -8
  343. package/src/testing/testkit/index.ts +0 -7
  344. package/src/testing/testkit/shims.d.ts +0 -5
  345. /package/dist/lib/browser/{chunk-KDP3SESE.mjs.map → chunk-J5LGTIGS.mjs.map} +0 -0
  346. /package/dist/lib/{browser/observability-HDE3I7TA.mjs.map → node-esm/chunk-HSLMI22Q.mjs.map} +0 -0
  347. /package/dist/types/src/{otel → extensions/otel}/traces-browser.d.ts +0 -0
  348. /package/dist/types/src/{otel → extensions/otel}/traces.d.ts +0 -0
package/package.json CHANGED
@@ -1,99 +1,78 @@
1
1
  {
2
2
  "name": "@dxos/observability",
3
- "version": "0.8.3",
3
+ "version": "0.8.4-main.1068cf700f",
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
  ".": {
13
17
  "types": "./dist/types/src/index.d.ts",
14
18
  "browser": "./dist/lib/browser/index.mjs",
15
19
  "node": "./dist/lib/node-esm/index.mjs"
16
- },
17
- "./segment": {
18
- "types": "./dist/types/src/segment/index.d.ts",
19
- "browser": "./dist/lib/browser/segment/index.mjs",
20
- "node": "./dist/lib/node-esm/segment/index.mjs"
21
- },
22
- "./sentry": {
23
- "types": "./dist/types/src/sentry/index.d.ts",
24
- "browser": "./dist/lib/browser/sentry/index.mjs",
25
- "node": "./dist/lib/node-esm/sentry/index.mjs"
26
20
  }
27
21
  },
28
22
  "browser": {
29
- "./src/segment/node.ts": "./src/segment/browser.ts",
30
- "./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"
23
+ "./src/storage/node.ts": "./src/storage/browser.ts",
24
+ "./src/extensions/otel/traces.ts": "./src/extensions/otel/traces-browser.ts"
33
25
  },
34
26
  "types": "dist/types/src/index.d.ts",
35
- "typesVersions": {
36
- "*": {
37
- "segment": [
38
- "dist/types/src/segment/index.d.ts"
39
- ],
40
- "sentry": [
41
- "dist/types/src/sentry/index.d.ts"
42
- ]
43
- }
44
- },
45
27
  "files": [
46
28
  "dist",
47
29
  "src"
48
30
  ],
49
31
  "dependencies": {
50
32
  "@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",
63
- "@segment/analytics-node": "^2.1.0",
64
- "@segment/snippet": "^4.15.3",
65
- "@sentry/browser": "^8.8.0",
66
- "@sentry/node": "^8.8.0",
33
+ "@opentelemetry/api-logs": "^0.203.0",
34
+ "@opentelemetry/auto-instrumentations-web": "^0.51.0",
35
+ "@opentelemetry/exporter-logs-otlp-http": "^0.203.0",
36
+ "@opentelemetry/exporter-metrics-otlp-http": "^0.203.0",
37
+ "@opentelemetry/exporter-trace-otlp-http": "^0.203.0",
38
+ "@opentelemetry/instrumentation": "^0.203.0",
39
+ "@opentelemetry/resources": "^2.1.0",
40
+ "@opentelemetry/sdk-logs": "^0.203.0",
41
+ "@opentelemetry/sdk-metrics": "^2.1.0",
42
+ "@opentelemetry/sdk-trace-base": "^2.1.0",
43
+ "@opentelemetry/sdk-trace-web": "^2.1.0",
44
+ "@opentelemetry/semantic-conventions": "^1.37.0",
67
45
  "debug": "^4.3.4",
68
- "js-yaml": "^4.1.0",
46
+ "js-yaml": "4.1.1",
69
47
  "localforage": "^1.10.0",
48
+ "posthog-js": "^1.347.2",
70
49
  "uuid": "^9.0.0",
71
- "@dxos/async": "0.8.3",
72
- "@dxos/client-protocol": "0.8.3",
73
- "@dxos/config": "0.8.3",
74
- "@dxos/client": "0.8.3",
75
- "@dxos/client-services": "0.8.3",
76
- "@dxos/context": "0.8.3",
77
- "@dxos/log": "0.8.3",
78
- "@dxos/debug": "0.8.3",
79
- "@dxos/network-manager": "0.8.3",
80
- "@dxos/invariant": "0.8.3",
81
- "@dxos/node-std": "0.8.3",
82
- "@dxos/protocols": "0.8.3",
83
- "@dxos/tracing": "0.8.3",
84
- "@dxos/util": "0.8.3"
50
+ "@dxos/async": "0.8.4-main.1068cf700f",
51
+ "@dxos/client": "0.8.4-main.1068cf700f",
52
+ "@dxos/client-protocol": "0.8.4-main.1068cf700f",
53
+ "@dxos/client-services": "0.8.4-main.1068cf700f",
54
+ "@dxos/config": "0.8.4-main.1068cf700f",
55
+ "@dxos/debug": "0.8.4-main.1068cf700f",
56
+ "@dxos/invariant": "0.8.4-main.1068cf700f",
57
+ "@dxos/context": "0.8.4-main.1068cf700f",
58
+ "@dxos/log": "0.8.4-main.1068cf700f",
59
+ "@dxos/network-manager": "0.8.4-main.1068cf700f",
60
+ "@dxos/node-std": "0.8.4-main.1068cf700f",
61
+ "@dxos/tracing": "0.8.4-main.1068cf700f",
62
+ "@dxos/util": "0.8.4-main.1068cf700f",
63
+ "@dxos/protocols": "0.8.4-main.1068cf700f"
85
64
  },
86
65
  "devDependencies": {
87
- "@sentry/types": "^8.8.0",
66
+ "@effect/platform": "0.94.4",
88
67
  "@types/debug": "^4.1.10",
89
68
  "@types/js-yaml": "^4.0.5",
90
- "sentry-testkit": "^5.0.5",
91
- "zone.js": ">=0.11.4 <0.12.0-0 || >=0.13.0 <0.14.0-0 || >=0.14.0 <0.15.0-0"
69
+ "zone.js": "^0.15.0"
70
+ },
71
+ "peerDependencies": {
72
+ "@effect/platform": "0.94.4",
73
+ "effect": "3.19.16"
92
74
  },
93
75
  "publishConfig": {
94
76
  "access": "public"
95
- },
96
- "scripts": {
97
- "api-keys": "./scripts/inject_api_keys.mjs"
98
77
  }
99
78
  }
@@ -1,7 +1,6 @@
1
1
  {
2
- "SENTRY_DESTINATION": "https://2647916221e643869965e78469479aa4@o4504012000067584.ingest.sentry.io/4504012027265029",
3
- "TELEMETRY_API_KEY": "B00QG6PtJJrJ0VVFe0H5a6bcUUShKyZM",
2
+ "POSTHOG_API_KEY": null,
4
3
  "IPDATA_API_KEY": "73dfdecdf979c18f07d50cf841bbdd9e589f237256326ac8cca23786",
5
- "OTEL_ENDPOINT": "https://otlp-proxy.dxos.workers.dev",
6
- "OTEL_AUTHORIZATION": "Basic OTA3MzIzOmdsY19leUp2SWpvaU1URXdNVEl6TnlJc0ltNGlPaUp6ZEdGamF5MDVNRGN6TWpNdGFXNTBaV2R5WVhScGIyNHRZMnh2ZFdSbWJHRnlaUzF2ZEd4d0xYQnliM2g1SWl3aWF5STZJalZ2Tkd4cFYydE5iRmszTlRNMGJUVXpTemRTVjNBeVNpSXNJbTBpT25zaWNpSTZJbkJ5YjJRdGRYTXRaV0Z6ZEMwd0luMTk="
4
+ "OTEL_ENDPOINT": "https://ingest.eu.signoz.cloud:443",
5
+ "OTEL_HEADERS": "signoz-ingestion-key: 5300e0c9-a5e8-4a10-9c61-f473e539c0b7"
7
6
  }
@@ -0,0 +1,6 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ export * as Otel from './otel';
6
+ export * as PostHog from './posthog';
@@ -0,0 +1,178 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { defaultResource, resourceFromAttributes } from '@opentelemetry/resources';
6
+ import { ATTR_SERVICE_NAME, ATTR_SERVICE_VERSION } from '@opentelemetry/semantic-conventions';
7
+ import * as Effect from 'effect/Effect';
8
+ import * as Match from 'effect/Match';
9
+ import * as Option from 'effect/Option';
10
+ import * as Ref from 'effect/Ref';
11
+
12
+ import { type Config } from '@dxos/config';
13
+ import { LogLevel, log } from '@dxos/log';
14
+ import { isNode, isNonNullable } from '@dxos/util';
15
+
16
+ import buildSecrets from '../../cli-observability-secrets.json';
17
+ import { type Extension, type ExtensionApi } from '../../observability-extension';
18
+ import { isObservabilityDisabled, storeObservabilityDisabled } from '../../storage';
19
+ import { stubExtension } from '../stub';
20
+
21
+ export type ExtensionsOptions = {
22
+ /** For the OTEL, the name of the entity for which signals (metrics or trace) are collected. */
23
+ serviceName: string;
24
+ /** For the OTEL, the version of the entity for which signals (metrics or trace) are collected. */
25
+ serviceVersion: string;
26
+ /** For the OTEL, the environment of the entity for which signals (metrics or trace) are collected. */
27
+ environment: string;
28
+ config: Config;
29
+ endpoint?: string;
30
+ headers?: Record<string, string>;
31
+ logs?: boolean;
32
+ /** Minimum log level to export. Defaults to INFO (i.e. info, warn, error). */
33
+ logLevel?: LogLevel;
34
+ metrics?: boolean;
35
+ traces?: boolean;
36
+ };
37
+
38
+ /** Create an OTEL-backed observability extension for logs, metrics, and/or traces. */
39
+ export const extensions: (options: ExtensionsOptions) => Effect.Effect<Extension> = Effect.fn(function* ({
40
+ serviceName,
41
+ serviceVersion,
42
+ environment,
43
+ config,
44
+ endpoint: _endpoint,
45
+ headers: _headers,
46
+ // TODO(wittjosiah): Logging integration.
47
+ // - logger should run even if observability is disabled
48
+ // - logs should be cached locally in a circular buffer
49
+ // - logs should be flushed to the server if user opts to include them in a bug report
50
+ logs: logsEnabled = false,
51
+ logLevel = LogLevel.INFO,
52
+ metrics: metricsEnabled = false,
53
+ traces: tracesEnabled = false,
54
+ }) {
55
+ const { OtelLogs } = yield* Effect.promise(() => import('./logs'));
56
+ const { OtelMetrics } = yield* Effect.promise(() => import('./metrics'));
57
+ const { OtelTraces } = yield* Effect.promise(() => import('./traces'));
58
+
59
+ const cachedDisabled = yield* Effect.promise(() => isObservabilityDisabled(serviceName));
60
+ const enabledRef = yield* Ref.make(!cachedDisabled);
61
+ const tags = new Map<string, string>();
62
+
63
+ const endpoint = isNode()
64
+ ? (process.env.DX_OTEL_ENDPOINT ?? _endpoint ?? buildSecrets.OTEL_ENDPOINT)
65
+ : config.values.runtime?.app?.env?.DX_OTEL_ENDPOINT;
66
+ const headers =
67
+ _headers ??
68
+ Match.value(isNode()).pipe(
69
+ Match.when(true, () => Option.fromNullable(process.env.DX_OTEL_HEADERS ?? buildSecrets.OTEL_HEADERS)),
70
+ Match.when(false, () => Option.fromNullable(config.values.runtime?.app?.env?.DX_OTEL_HEADERS)),
71
+ Match.exhaustive,
72
+ Option.map((raw) => parseHeaders(raw)),
73
+ Option.getOrElse(() => undefined),
74
+ );
75
+
76
+ if (!endpoint || !headers) {
77
+ log.info('Missing OTEL_ENDPOINT or OTEL_HEADERS');
78
+ return stubExtension;
79
+ }
80
+
81
+ const resource = defaultResource().merge(
82
+ resourceFromAttributes({
83
+ [ATTR_SERVICE_NAME]: serviceName,
84
+ [ATTR_SERVICE_VERSION]: serviceVersion,
85
+ 'deployment.environment': environment,
86
+ }),
87
+ );
88
+
89
+ const logs = logsEnabled
90
+ ? new OtelLogs({
91
+ endpoint,
92
+ headers,
93
+ resource,
94
+ getTags: () => Object.fromEntries(tags),
95
+ logLevel,
96
+ })
97
+ : undefined;
98
+
99
+ const metrics = metricsEnabled
100
+ ? new OtelMetrics({
101
+ endpoint,
102
+ headers,
103
+ resource,
104
+ getTags: () => Object.fromEntries(tags),
105
+ })
106
+ : undefined;
107
+
108
+ const traces = tracesEnabled
109
+ ? new OtelTraces({
110
+ endpoint,
111
+ headers,
112
+ resource,
113
+ getTags: () => Object.fromEntries(tags),
114
+ })
115
+ : undefined;
116
+
117
+ return {
118
+ initialize: () =>
119
+ Effect.sync(() => {
120
+ if (logs) {
121
+ log.runtimeConfig.processors.push(logs.logProcessor);
122
+ }
123
+ if (traces) {
124
+ traces.start();
125
+ }
126
+ }),
127
+ enable: Effect.fn(function* () {
128
+ yield* Effect.promise(() => storeObservabilityDisabled(serviceName, false));
129
+ yield* Ref.update(enabledRef, () => true);
130
+ }),
131
+ disable: Effect.fn(function* () {
132
+ yield* Effect.promise(() => storeObservabilityDisabled(serviceName, true));
133
+ yield* Ref.update(enabledRef, () => false);
134
+ }),
135
+ close: () =>
136
+ Effect.promise(async () => {
137
+ await logs?.close();
138
+ await metrics?.close();
139
+ }),
140
+ flush: () =>
141
+ Effect.promise(async () => {
142
+ await logs?.flush();
143
+ await metrics?.flush();
144
+ }),
145
+ setTags: (incomingTags) => {
146
+ for (const [key, value] of Object.entries(incomingTags)) {
147
+ tags.set(key, value);
148
+ }
149
+ },
150
+ get enabled() {
151
+ return Ref.get(enabledRef).pipe(Effect.runSync);
152
+ },
153
+ apis: [
154
+ { kind: 'logs', isAvailable: () => Effect.succeed(!!logs) } satisfies ExtensionApi,
155
+ metrics
156
+ ? ({
157
+ kind: 'metrics',
158
+ isAvailable: () => Effect.succeed(true),
159
+ gauge: (name, value, tags) => metrics.gauge(name, value, tags),
160
+ increment: (name, value, tags) => metrics.increment(name, value, tags),
161
+ distribution: (name, value, tags) => metrics.distribution(name, value, tags),
162
+ } satisfies ExtensionApi)
163
+ : undefined,
164
+ traces ? ({ kind: 'traces', isAvailable: () => Effect.succeed(true) } satisfies ExtensionApi) : undefined,
165
+ ].filter(isNonNullable),
166
+ };
167
+ });
168
+
169
+ const parseHeaders = (unparsedHeaders: string): Record<string, string> => {
170
+ return unparsedHeaders.split(';').reduce((acc: Record<string, string>, header) => {
171
+ const [key, ...rest] = header.split(':');
172
+ if (key && rest.length > 0) {
173
+ acc[key.trim().toLowerCase()] = rest.join(':').trim();
174
+ }
175
+
176
+ return acc;
177
+ }, {});
178
+ };
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ export * from './extension';
@@ -0,0 +1,134 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ import { SeverityNumber } from '@opentelemetry/api-logs';
6
+ import { OTLPLogExporter } from '@opentelemetry/exporter-logs-otlp-http';
7
+ import { BatchLogRecordProcessor, LoggerProvider } from '@opentelemetry/sdk-logs';
8
+ import { ATTR_SERVICE_VERSION } from '@opentelemetry/semantic-conventions';
9
+
10
+ import {
11
+ type LogConfig,
12
+ type LogEntry,
13
+ LogLevel,
14
+ type LogProcessor,
15
+ getContextFromEntry,
16
+ getRelativeFilename,
17
+ } from '@dxos/log';
18
+
19
+ import { type OtelOptions, setDiagLogger } from './otel';
20
+
21
+ const FLATTEN_DEPTH = 1;
22
+
23
+ export type OtelLogOptions = OtelOptions & {
24
+ logLevel: LogLevel;
25
+ /**
26
+ * Include logs forwarded from the shared worker via LoggingService.
27
+ *
28
+ * @deprecated
29
+ */
30
+ includeSharedWorkerLogs?: boolean;
31
+ };
32
+
33
+ export class OtelLogs {
34
+ private _loggerProvider: LoggerProvider;
35
+ constructor(private readonly options: OtelLogOptions) {
36
+ setDiagLogger(options.consoleDiagLogLevel);
37
+ const logExporter = new OTLPLogExporter({
38
+ url: this.options.endpoint + '/v1/logs',
39
+ headers: this.options.headers,
40
+ concurrencyLimit: 10, // an optional limit on pending requests
41
+ });
42
+ this._loggerProvider = new LoggerProvider({
43
+ resource: this.options.resource,
44
+ processors: [new BatchLogRecordProcessor(logExporter)],
45
+ });
46
+ }
47
+
48
+ public readonly logProcessor: LogProcessor = (_config: LogConfig, entry: LogEntry) => {
49
+ const logger = this._loggerProvider.getLogger(
50
+ 'dxos-observability',
51
+ this.options.resource.attributes[ATTR_SERVICE_VERSION]?.toString(),
52
+ );
53
+
54
+ if (
55
+ entry.level < this.options.logLevel ||
56
+ (!this.options.includeSharedWorkerLogs && entry.meta?.S?.remoteSessionId)
57
+ ) {
58
+ return;
59
+ }
60
+
61
+ const attributes = {
62
+ ...this.options.getTags(),
63
+ ...(entry.meta ? { meta: { file: getRelativeFilename(entry.meta.F), line: entry.meta.L } } : {}),
64
+ ...(entry.error ? { error: entry.error.stack } : {}),
65
+ ...stringifyValues(getContextFromEntry(entry), 'ctx_'),
66
+ };
67
+
68
+ logger.emit({
69
+ severityNumber: convertLevel(entry.level),
70
+ body: entry.message,
71
+ attributes,
72
+ });
73
+ };
74
+
75
+ flush(): Promise<void> {
76
+ return this._loggerProvider.forceFlush();
77
+ }
78
+
79
+ close(): Promise<void> {
80
+ return this._loggerProvider.shutdown();
81
+ }
82
+ }
83
+
84
+ const convertLevel = (level: LogLevel): SeverityNumber => {
85
+ switch (level) {
86
+ case LogLevel.DEBUG:
87
+ return SeverityNumber.DEBUG;
88
+ case LogLevel.VERBOSE:
89
+ return SeverityNumber.INFO;
90
+ case LogLevel.INFO:
91
+ return SeverityNumber.INFO;
92
+ case LogLevel.WARN:
93
+ return SeverityNumber.WARN;
94
+ case LogLevel.ERROR:
95
+ return SeverityNumber.ERROR;
96
+ default:
97
+ return SeverityNumber.ERROR;
98
+ }
99
+ };
100
+
101
+ const safeStringify = (value: unknown): string => {
102
+ try {
103
+ return JSON.stringify(value);
104
+ } catch {
105
+ return '[Circular]';
106
+ }
107
+ };
108
+
109
+ // TODO(wittjosiah): Reconcile logging utils w/ EDGE.
110
+ const stringifyValues = (object: object | undefined, keyPrefix?: string, depth: number = 1) => {
111
+ if (!object) {
112
+ return {};
113
+ }
114
+ const result: Record<string, string> = {};
115
+ for (const [key, value] of Object.entries(object)) {
116
+ if (value === undefined) {
117
+ continue;
118
+ }
119
+ const newKey = keyPrefix ? `${keyPrefix}${key}` : key;
120
+ if (typeof value === 'object') {
121
+ if (!value || Array.isArray(value) || depth > FLATTEN_DEPTH) {
122
+ result[newKey] = safeStringify(value);
123
+ } else {
124
+ const flattened = stringifyValues(value, `${newKey}_`, depth + 1);
125
+ for (const [flattenedKey, flattenedValue] of Object.entries(flattened)) {
126
+ result[flattenedKey] = flattenedValue;
127
+ }
128
+ }
129
+ } else {
130
+ result[newKey] = String(value);
131
+ }
132
+ }
133
+ return result;
134
+ };
@@ -2,53 +2,36 @@
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';
8
7
  import { MeterProvider, PeriodicExportingMetricReader } from '@opentelemetry/sdk-metrics';
9
- import { SEMRESATTRS_SERVICE_NAME, SEMRESATTRS_SERVICE_VERSION } from '@opentelemetry/semantic-conventions';
10
8
 
11
9
  import { log } from '@dxos/log';
12
- import { TRACE_PROCESSOR, type MetricData } from '@dxos/tracing';
10
+ import { type MetricData, TRACE_PROCESSOR } from '@dxos/tracing';
13
11
 
14
12
  import { type OtelOptions, setDiagLogger } from './otel';
15
13
 
16
14
  const EXPORT_INTERVAL = 60 * 1000;
17
15
 
18
- type SynchronousGauge = {
19
- gauge: ObservableGauge<Attributes>;
20
- nextValue: number;
21
- nextTags?: any;
22
- };
23
-
24
16
  export class OtelMetrics {
25
17
  private _meterProvider: MeterProvider;
26
18
  private _meter: Meter;
27
- private _gauges = new Map<string, SynchronousGauge>();
28
19
 
29
20
  constructor(private readonly options: OtelOptions) {
30
21
  // TODO: improve error handling/logging
31
22
  // https://github.com/open-telemetry/opentelemetry-js/issues/4823
32
23
  setDiagLogger(options.consoleDiagLogLevel);
33
- const resource = Resource.default().merge(
34
- new Resource({
35
- [SEMRESATTRS_SERVICE_NAME]: this.options.serviceName,
36
- [SEMRESATTRS_SERVICE_VERSION]: this.options.serviceVersion,
37
- }),
38
- );
39
24
 
40
25
  const grafanaMetricReader = new PeriodicExportingMetricReader({
41
26
  exporter: new OTLPMetricExporter({
42
27
  url: this.options.endpoint + '/v1/metrics',
43
- headers: {
44
- Authorization: this.options.authorizationHeader,
45
- },
28
+ headers: this.options.headers,
46
29
  }),
47
30
  exportIntervalMillis: EXPORT_INTERVAL,
48
31
  });
49
32
 
50
33
  this._meterProvider = new MeterProvider({
51
- resource,
34
+ resource: this.options.resource,
52
35
  readers: [grafanaMetricReader],
53
36
  });
54
37
  this._meter = this._meterProvider.getMeter('dxos-observability');
@@ -2,13 +2,13 @@
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
+ import { type Resource } from '@opentelemetry/resources';
6
7
 
7
8
  export type OtelOptions = {
8
9
  endpoint: string;
9
- authorizationHeader: string;
10
- serviceName: string; // For the Otel API, the name of the entity for which signals (metrics or trace) are collected.
11
- serviceVersion: string; // For the Otel API, The name of the entity for which signals (metrics or trace) are collected.
10
+ headers: Record<string, string>;
11
+ resource: Resource;
12
12
  getTags: () => { [key: string]: string };
13
13
  consoleDiagLogLevel?: string;
14
14
  };
@@ -0,0 +1,57 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ import { type Tracer, trace } from '@opentelemetry/api';
6
+ import { getWebAutoInstrumentations } from '@opentelemetry/auto-instrumentations-web';
7
+ import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
8
+ import { registerInstrumentations } from '@opentelemetry/instrumentation';
9
+ import { BatchSpanProcessor } from '@opentelemetry/sdk-trace-base';
10
+ import { WebTracerProvider } from '@opentelemetry/sdk-trace-web';
11
+ import { ATTR_SERVICE_VERSION } from '@opentelemetry/semantic-conventions';
12
+
13
+ import { log } from '@dxos/log';
14
+ import { type StartSpanOptions, TRACE_PROCESSOR } from '@dxos/tracing';
15
+
16
+ import { type OtelOptions } from './otel';
17
+
18
+ export class OtelTraces {
19
+ private _tracer: Tracer;
20
+
21
+ constructor(private readonly options: OtelOptions) {
22
+ const tracerProvider = new WebTracerProvider({
23
+ resource: this.options.resource,
24
+ spanProcessors: [
25
+ new BatchSpanProcessor(
26
+ new OTLPTraceExporter({
27
+ url: this.options.endpoint + '/v1/traces',
28
+ headers: this.options.headers,
29
+ concurrencyLimit: 10, // an optional limit on pending requests
30
+ }),
31
+ ),
32
+ ],
33
+ });
34
+
35
+ trace.setGlobalTracerProvider(tracerProvider);
36
+
37
+ this._tracer = trace.getTracer(
38
+ 'dxos-observability',
39
+ this.options.resource.attributes[ATTR_SERVICE_VERSION]?.toString(),
40
+ );
41
+ }
42
+
43
+ public start(): void {
44
+ log('trace processor registered');
45
+
46
+ registerInstrumentations({
47
+ instrumentations: [getWebAutoInstrumentations()],
48
+ });
49
+
50
+ TRACE_PROCESSOR.remoteTracing.registerProcessor({
51
+ startSpan: (options: StartSpanOptions) => {
52
+ log('begin otel trace', { options });
53
+ return this._tracer.startSpan(options.name, options);
54
+ },
55
+ });
56
+ }
57
+ }
@@ -0,0 +1,49 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ import { type Tracer, trace } from '@opentelemetry/api';
6
+ import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
7
+ import { BasicTracerProvider, BatchSpanProcessor } from '@opentelemetry/sdk-trace-base';
8
+ import { ATTR_SERVICE_VERSION } from '@opentelemetry/semantic-conventions';
9
+ import { log } from 'debug';
10
+
11
+ import { type StartSpanOptions, TRACE_PROCESSOR } from '@dxos/tracing';
12
+
13
+ import { type OtelOptions } from './otel';
14
+
15
+ export class OtelTraces {
16
+ private _tracer: Tracer;
17
+
18
+ constructor(private readonly options: OtelOptions) {
19
+ const tracerProvider = new BasicTracerProvider({
20
+ resource: this.options.resource,
21
+ spanProcessors: [
22
+ new BatchSpanProcessor(
23
+ new OTLPTraceExporter({
24
+ url: this.options.endpoint + '/v1/traces',
25
+ headers: this.options.headers,
26
+ concurrencyLimit: 10, // an optional limit on pending requests
27
+ }),
28
+ ),
29
+ ],
30
+ });
31
+
32
+ trace.setGlobalTracerProvider(tracerProvider);
33
+ this._tracer = trace.getTracer(
34
+ 'dxos-observability',
35
+ this.options.resource.attributes[ATTR_SERVICE_VERSION]?.toString(),
36
+ );
37
+ }
38
+
39
+ public start(): void {
40
+ log('trace processor registered');
41
+
42
+ TRACE_PROCESSOR.remoteTracing.registerProcessor({
43
+ startSpan: (options: StartSpanOptions) => {
44
+ log('begin otel trace', { options });
45
+ return this._tracer.startSpan(options.name, options);
46
+ },
47
+ });
48
+ }
49
+ }