@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.
- package/dist/lib/browser/chunk-J5LGTIGS.mjs +10 -0
- package/dist/lib/browser/chunk-K4VFBKST.mjs +13 -0
- package/dist/lib/browser/chunk-K4VFBKST.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +1066 -34
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/log-processor-FDLTDQEM.mjs +45 -0
- package/dist/lib/browser/log-processor-FDLTDQEM.mjs.map +7 -0
- package/dist/lib/browser/logs-ATTRIUTL.mjs +113 -0
- package/dist/lib/browser/logs-ATTRIUTL.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/metrics-PKTV6IGF.mjs +130 -0
- package/dist/lib/browser/metrics-PKTV6IGF.mjs.map +7 -0
- package/dist/lib/browser/traces-browser-XYXBF5ZX.mjs +62 -0
- package/dist/lib/browser/traces-browser-XYXBF5ZX.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-FEVP3MK4.mjs +15 -0
- package/dist/lib/node-esm/chunk-FEVP3MK4.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
- package/dist/lib/node-esm/index.mjs +1070 -34
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/log-processor-TKJVJJSJ.mjs +46 -0
- package/dist/lib/node-esm/log-processor-TKJVJJSJ.mjs.map +7 -0
- package/dist/lib/node-esm/logs-7J45KLM7.mjs +114 -0
- package/dist/lib/node-esm/logs-7J45KLM7.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/metrics-H7DDLYSG.mjs +131 -0
- package/dist/lib/node-esm/metrics-H7DDLYSG.mjs.map +7 -0
- package/dist/lib/node-esm/traces-KMTHMYFX.mjs +44 -0
- package/dist/lib/node-esm/traces-KMTHMYFX.mjs.map +7 -0
- package/dist/types/src/cli-observability-secrets.json +3 -4
- package/dist/types/src/extensions/index.d.ts +3 -0
- package/dist/types/src/extensions/index.d.ts.map +1 -0
- package/dist/types/src/extensions/index.js +6 -0
- package/dist/types/src/extensions/index.js.map +1 -0
- package/dist/types/src/extensions/otel/extension.d.ts +23 -0
- package/dist/types/src/extensions/otel/extension.d.ts.map +1 -0
- package/dist/types/src/extensions/otel/extension.js +124 -0
- package/dist/types/src/extensions/otel/extension.js.map +1 -0
- package/dist/types/src/extensions/otel/index.d.ts +2 -0
- package/dist/types/src/extensions/otel/index.d.ts.map +1 -0
- package/dist/types/src/extensions/otel/index.js +5 -0
- package/dist/types/src/extensions/otel/index.js.map +1 -0
- package/dist/types/src/{otel → extensions/otel}/logs.d.ts +4 -3
- package/dist/types/src/extensions/otel/logs.d.ts.map +1 -0
- package/dist/types/src/extensions/otel/logs.js +104 -0
- package/dist/types/src/extensions/otel/logs.js.map +1 -0
- package/dist/types/src/{otel → extensions/otel}/metrics.d.ts +0 -1
- package/dist/types/src/extensions/otel/metrics.d.ts.map +1 -0
- package/dist/types/src/{otel → extensions/otel}/metrics.js +6 -12
- package/dist/types/src/extensions/otel/metrics.js.map +1 -0
- package/dist/types/src/{otel → extensions/otel}/otel.d.ts +3 -3
- package/dist/types/src/extensions/otel/otel.d.ts.map +1 -0
- package/dist/types/src/{otel → extensions/otel}/otel.js +1 -1
- package/dist/types/src/extensions/otel/otel.js.map +1 -0
- package/dist/types/src/extensions/otel/traces-browser.d.ts.map +1 -0
- package/dist/types/src/extensions/otel/traces-browser.js +44 -0
- package/dist/types/src/extensions/otel/traces-browser.js.map +1 -0
- package/dist/types/src/extensions/otel/traces.d.ts.map +1 -0
- package/dist/types/src/extensions/otel/traces.js +38 -0
- package/dist/types/src/extensions/otel/traces.js.map +1 -0
- package/dist/types/src/extensions/posthog/extension.d.ts +15 -0
- package/dist/types/src/extensions/posthog/extension.d.ts.map +1 -0
- package/dist/types/src/extensions/posthog/extension.js +143 -0
- package/dist/types/src/extensions/posthog/extension.js.map +1 -0
- package/dist/types/src/extensions/posthog/index.d.ts +2 -0
- package/dist/types/src/extensions/posthog/index.d.ts.map +1 -0
- package/dist/types/src/extensions/posthog/index.js +5 -0
- package/dist/types/src/extensions/posthog/index.js.map +1 -0
- package/dist/types/src/extensions/posthog/log-processor.d.ts +3 -0
- package/dist/types/src/extensions/posthog/log-processor.d.ts.map +1 -0
- package/dist/types/src/extensions/posthog/log-processor.js +45 -0
- package/dist/types/src/extensions/posthog/log-processor.js.map +1 -0
- package/dist/types/src/extensions/posthog/log-processor.test.d.ts +2 -0
- package/dist/types/src/extensions/posthog/log-processor.test.d.ts.map +1 -0
- package/dist/types/src/extensions/posthog/log-processor.test.js +146 -0
- package/dist/types/src/extensions/posthog/log-processor.test.js.map +1 -0
- package/dist/types/src/extensions/stub.d.ts +3 -0
- package/dist/types/src/extensions/stub.d.ts.map +1 -0
- package/dist/types/src/extensions/stub.js +16 -0
- package/dist/types/src/extensions/stub.js.map +1 -0
- package/dist/types/src/index.d.ts +4 -2
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/index.js +5 -3
- package/dist/types/src/index.js.map +1 -1
- package/dist/types/src/log-buffer.d.ts +34 -0
- package/dist/types/src/log-buffer.d.ts.map +1 -0
- package/dist/types/src/log-buffer.js +70 -0
- package/dist/types/src/log-buffer.js.map +1 -0
- package/dist/types/src/log-buffer.test.d.ts +2 -0
- package/dist/types/src/log-buffer.test.d.ts.map +1 -0
- package/dist/types/src/log-buffer.test.js +107 -0
- package/dist/types/src/log-buffer.test.js.map +1 -0
- package/dist/types/src/observability-extension.d.ts +74 -0
- package/dist/types/src/observability-extension.d.ts.map +1 -0
- package/dist/types/src/observability-extension.js +5 -0
- package/dist/types/src/observability-extension.js.map +1 -0
- package/dist/types/src/observability.d.ts +32 -110
- package/dist/types/src/observability.d.ts.map +1 -1
- package/dist/types/src/observability.js +176 -455
- package/dist/types/src/observability.js.map +1 -1
- package/dist/types/src/observability.test.d.ts +2 -0
- package/dist/types/src/observability.test.d.ts.map +1 -0
- package/dist/types/src/observability.test.js +312 -0
- package/dist/types/src/observability.test.js.map +1 -0
- package/dist/types/src/providers/client-observability.d.ts +11 -0
- package/dist/types/src/providers/client-observability.d.ts.map +1 -0
- package/dist/types/src/providers/client-observability.js +200 -0
- package/dist/types/src/providers/client-observability.js.map +1 -0
- package/dist/types/src/providers/index.d.ts +4 -0
- package/dist/types/src/providers/index.d.ts.map +1 -0
- package/dist/types/src/providers/index.js +7 -0
- package/dist/types/src/providers/index.js.map +1 -0
- package/dist/types/src/providers/ip-data.d.ts +5 -0
- package/dist/types/src/providers/ip-data.d.ts.map +1 -0
- package/dist/types/src/providers/ip-data.js +55 -0
- package/dist/types/src/providers/ip-data.js.map +1 -0
- package/dist/types/src/providers/storage.d.ts +3 -0
- package/dist/types/src/providers/storage.d.ts.map +1 -0
- package/dist/types/src/providers/storage.js +19 -0
- package/dist/types/src/providers/storage.js.map +1 -0
- package/dist/types/src/storage/browser.d.ts +19 -0
- package/dist/types/src/storage/browser.d.ts.map +1 -0
- package/dist/types/src/storage/browser.js +58 -0
- package/dist/types/src/storage/browser.js.map +1 -0
- package/dist/types/src/storage/index.d.ts +2 -0
- package/dist/types/src/storage/index.d.ts.map +1 -0
- package/{src/segment/index.ts → dist/types/src/storage/index.js} +1 -2
- package/dist/types/src/storage/index.js.map +1 -0
- package/dist/types/src/storage/node.d.ts +26 -0
- package/dist/types/src/storage/node.d.ts.map +1 -0
- package/dist/types/src/storage/node.js +92 -0
- package/dist/types/src/storage/node.js.map +1 -0
- package/dist/types/src/storage/node.test.d.ts +2 -0
- package/dist/types/src/storage/node.test.d.ts.map +1 -0
- package/dist/types/src/storage/node.test.js +103 -0
- package/dist/types/src/storage/node.test.js.map +1 -0
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +42 -63
- package/src/cli-observability-secrets.json +3 -4
- package/src/extensions/index.ts +6 -0
- package/src/extensions/otel/extension.ts +178 -0
- package/src/extensions/otel/index.ts +5 -0
- package/src/extensions/otel/logs.ts +134 -0
- package/src/{otel → extensions/otel}/metrics.ts +4 -21
- package/src/{otel → extensions/otel}/otel.ts +4 -4
- package/src/extensions/otel/traces-browser.ts +57 -0
- package/src/extensions/otel/traces.ts +49 -0
- package/src/extensions/posthog/extension.ts +172 -0
- package/src/extensions/posthog/index.ts +5 -0
- package/src/extensions/posthog/log-processor.test.ts +185 -0
- package/src/extensions/posthog/log-processor.ts +54 -0
- package/src/extensions/stub.ts +19 -0
- package/src/index.ts +5 -3
- package/src/log-buffer.test.ts +134 -0
- package/src/log-buffer.ts +101 -0
- package/src/observability-extension.ts +94 -0
- package/src/observability.test.ts +531 -0
- package/src/observability.ts +236 -577
- package/src/providers/client-observability.ts +253 -0
- package/src/providers/index.ts +7 -0
- package/src/providers/ip-data.ts +88 -0
- package/src/providers/storage.ts +23 -0
- package/src/storage/browser.ts +61 -0
- package/src/{sentry → storage}/index.ts +0 -1
- package/src/storage/node.test.ts +130 -0
- package/src/{helpers/node-observability.ts → storage/node.ts} +42 -70
- package/dist/lib/browser/chunk-G6EE7HFV.mjs +0 -147
- package/dist/lib/browser/chunk-G6EE7HFV.mjs.map +0 -7
- package/dist/lib/browser/chunk-JA5VJRKF.mjs +0 -164
- package/dist/lib/browser/chunk-JA5VJRKF.mjs.map +0 -7
- package/dist/lib/browser/chunk-KDP3SESE.mjs +0 -1
- package/dist/lib/browser/chunk-YQJELTRP.mjs +0 -996
- package/dist/lib/browser/chunk-YQJELTRP.mjs.map +0 -7
- package/dist/lib/browser/observability-HDE3I7TA.mjs +0 -10
- package/dist/lib/browser/otel-LHAFLNBQ.mjs +0 -277
- package/dist/lib/browser/otel-LHAFLNBQ.mjs.map +0 -7
- package/dist/lib/browser/segment/index.mjs +0 -11
- package/dist/lib/browser/segment/index.mjs.map +0 -7
- package/dist/lib/browser/sentry/index.mjs +0 -24
- package/dist/lib/browser/sentry/index.mjs.map +0 -7
- package/dist/lib/browser/sentry-log-processor-625AISXI.mjs +0 -146
- package/dist/lib/browser/sentry-log-processor-625AISXI.mjs.map +0 -7
- package/dist/lib/node/chunk-325GAGFA.cjs +0 -213
- package/dist/lib/node/chunk-325GAGFA.cjs.map +0 -7
- package/dist/lib/node/chunk-BZHVFSLF.cjs +0 -1025
- package/dist/lib/node/chunk-BZHVFSLF.cjs.map +0 -7
- package/dist/lib/node/chunk-GIYJMZEQ.cjs +0 -2
- package/dist/lib/node/chunk-GIYJMZEQ.cjs.map +0 -7
- package/dist/lib/node/chunk-MZ3PMDTP.cjs +0 -163
- package/dist/lib/node/chunk-MZ3PMDTP.cjs.map +0 -7
- package/dist/lib/node/index.cjs +0 -60
- package/dist/lib/node/index.cjs.map +0 -7
- package/dist/lib/node/meta.json +0 -1
- package/dist/lib/node/observability-E2NGRIEN.cjs +0 -32
- package/dist/lib/node/observability-E2NGRIEN.cjs.map +0 -7
- package/dist/lib/node/otel-VF5YNCR3.cjs +0 -278
- package/dist/lib/node/otel-VF5YNCR3.cjs.map +0 -7
- package/dist/lib/node/segment/index.cjs +0 -33
- package/dist/lib/node/segment/index.cjs.map +0 -7
- package/dist/lib/node/sentry/index.cjs +0 -46
- package/dist/lib/node/sentry/index.cjs.map +0 -7
- package/dist/lib/node/sentry-log-processor-CCV4RL7N.cjs +0 -164
- package/dist/lib/node/sentry-log-processor-CCV4RL7N.cjs.map +0 -7
- package/dist/lib/node-esm/chunk-AZMSBUWR.mjs +0 -202
- package/dist/lib/node-esm/chunk-AZMSBUWR.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-H7Y2DDUN.mjs +0 -135
- package/dist/lib/node-esm/chunk-H7Y2DDUN.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-M7QJLFGR.mjs +0 -997
- package/dist/lib/node-esm/chunk-M7QJLFGR.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-YJ4KVBWC.mjs +0 -2
- package/dist/lib/node-esm/chunk-YJ4KVBWC.mjs.map +0 -7
- package/dist/lib/node-esm/observability-7BTI46NM.mjs +0 -11
- package/dist/lib/node-esm/observability-7BTI46NM.mjs.map +0 -7
- package/dist/lib/node-esm/otel-AF5TSABC.mjs +0 -260
- package/dist/lib/node-esm/otel-AF5TSABC.mjs.map +0 -7
- package/dist/lib/node-esm/segment/index.mjs +0 -12
- package/dist/lib/node-esm/segment/index.mjs.map +0 -7
- package/dist/lib/node-esm/sentry/index.mjs +0 -25
- package/dist/lib/node-esm/sentry/index.mjs.map +0 -7
- package/dist/lib/node-esm/sentry-log-processor-HPUPCMRG.mjs +0 -147
- package/dist/lib/node-esm/sentry-log-processor-HPUPCMRG.mjs.map +0 -7
- package/dist/types/src/helpers/browser-observability.d.ts +0 -17
- package/dist/types/src/helpers/browser-observability.d.ts.map +0 -1
- package/dist/types/src/helpers/browser-observability.js +0 -140
- package/dist/types/src/helpers/browser-observability.js.map +0 -1
- package/dist/types/src/helpers/common.d.ts +0 -12
- package/dist/types/src/helpers/common.d.ts.map +0 -1
- package/dist/types/src/helpers/common.js +0 -23
- package/dist/types/src/helpers/common.js.map +0 -1
- package/dist/types/src/helpers/index.d.ts +0 -6
- package/dist/types/src/helpers/index.d.ts.map +0 -1
- package/dist/types/src/helpers/index.js +0 -9
- package/dist/types/src/helpers/index.js.map +0 -1
- package/dist/types/src/helpers/map-spaces.d.ts +0 -18
- package/dist/types/src/helpers/map-spaces.d.ts.map +0 -1
- package/dist/types/src/helpers/map-spaces.js +0 -37
- package/dist/types/src/helpers/map-spaces.js.map +0 -1
- package/dist/types/src/helpers/node-observability.d.ts +0 -24
- package/dist/types/src/helpers/node-observability.d.ts.map +0 -1
- package/dist/types/src/helpers/node-observability.js +0 -101
- package/dist/types/src/helpers/node-observability.js.map +0 -1
- package/dist/types/src/helpers/setup-telemetry-listeners.d.ts +0 -4
- package/dist/types/src/helpers/setup-telemetry-listeners.d.ts.map +0 -1
- package/dist/types/src/helpers/setup-telemetry-listeners.js +0 -97
- package/dist/types/src/helpers/setup-telemetry-listeners.js.map +0 -1
- package/dist/types/src/otel/index.d.ts +0 -5
- package/dist/types/src/otel/index.d.ts.map +0 -1
- package/dist/types/src/otel/index.js +0 -8
- package/dist/types/src/otel/index.js.map +0 -1
- package/dist/types/src/otel/logs.d.ts.map +0 -1
- package/dist/types/src/otel/logs.js +0 -71
- package/dist/types/src/otel/logs.js.map +0 -1
- package/dist/types/src/otel/metrics.d.ts.map +0 -1
- package/dist/types/src/otel/metrics.js.map +0 -1
- package/dist/types/src/otel/otel.d.ts.map +0 -1
- package/dist/types/src/otel/otel.js.map +0 -1
- package/dist/types/src/otel/traces-browser.d.ts.map +0 -1
- package/dist/types/src/otel/traces-browser.js +0 -47
- package/dist/types/src/otel/traces-browser.js.map +0 -1
- package/dist/types/src/otel/traces.d.ts.map +0 -1
- package/dist/types/src/otel/traces.js +0 -40
- package/dist/types/src/otel/traces.js.map +0 -1
- package/dist/types/src/segment/base.d.ts +0 -15
- package/dist/types/src/segment/base.d.ts.map +0 -1
- package/dist/types/src/segment/base.js +0 -50
- package/dist/types/src/segment/base.js.map +0 -1
- package/dist/types/src/segment/browser.d.ts +0 -15
- package/dist/types/src/segment/browser.d.ts.map +0 -1
- package/dist/types/src/segment/browser.js +0 -67
- package/dist/types/src/segment/browser.js.map +0 -1
- package/dist/types/src/segment/index.d.ts +0 -3
- package/dist/types/src/segment/index.d.ts.map +0 -1
- package/dist/types/src/segment/index.js +0 -6
- package/dist/types/src/segment/index.js.map +0 -1
- package/dist/types/src/segment/node.d.ts +0 -16
- package/dist/types/src/segment/node.d.ts.map +0 -1
- package/dist/types/src/segment/node.js +0 -83
- package/dist/types/src/segment/node.js.map +0 -1
- package/dist/types/src/segment/types.d.ts +0 -52
- package/dist/types/src/segment/types.d.ts.map +0 -1
- package/dist/types/src/segment/types.js +0 -18
- package/dist/types/src/segment/types.js.map +0 -1
- package/dist/types/src/sentry/browser.d.ts +0 -32
- package/dist/types/src/sentry/browser.d.ts.map +0 -1
- package/dist/types/src/sentry/browser.js +0 -112
- package/dist/types/src/sentry/browser.js.map +0 -1
- package/dist/types/src/sentry/index.d.ts +0 -3
- package/dist/types/src/sentry/index.d.ts.map +0 -1
- package/dist/types/src/sentry/index.js +0 -6
- package/dist/types/src/sentry/index.js.map +0 -1
- package/dist/types/src/sentry/node.d.ts +0 -32
- package/dist/types/src/sentry/node.d.ts.map +0 -1
- package/dist/types/src/sentry/node.js +0 -111
- package/dist/types/src/sentry/node.js.map +0 -1
- package/dist/types/src/sentry/node.node.test.d.ts +0 -2
- package/dist/types/src/sentry/node.node.test.d.ts.map +0 -1
- package/dist/types/src/sentry/node.node.test.js +0 -34
- package/dist/types/src/sentry/node.node.test.js.map +0 -1
- package/dist/types/src/sentry/sentry-log-processor.d.ts +0 -9
- package/dist/types/src/sentry/sentry-log-processor.d.ts.map +0 -1
- package/dist/types/src/sentry/sentry-log-processor.js +0 -149
- package/dist/types/src/sentry/sentry-log-processor.js.map +0 -1
- package/dist/types/src/sentry/sentry.node.test.d.ts +0 -2
- package/dist/types/src/sentry/sentry.node.test.d.ts.map +0 -1
- package/dist/types/src/sentry/sentry.node.test.js +0 -28
- package/dist/types/src/sentry/sentry.node.test.js.map +0 -1
- package/dist/types/src/sentry/types.d.ts +0 -18
- package/dist/types/src/sentry/types.d.ts.map +0 -1
- package/dist/types/src/sentry/types.js +0 -4
- package/dist/types/src/sentry/types.js.map +0 -1
- package/dist/types/src/testing/index.d.ts +0 -2
- package/dist/types/src/testing/index.d.ts.map +0 -1
- package/dist/types/src/testing/index.js +0 -5
- package/dist/types/src/testing/index.js.map +0 -1
- package/dist/types/src/testing/testkit/browser.d.ts +0 -2
- package/dist/types/src/testing/testkit/browser.d.ts.map +0 -1
- package/dist/types/src/testing/testkit/browser.js +0 -7
- package/dist/types/src/testing/testkit/browser.js.map +0 -1
- package/dist/types/src/testing/testkit/index.d.ts +0 -2
- package/dist/types/src/testing/testkit/index.d.ts.map +0 -1
- package/dist/types/src/testing/testkit/index.js +0 -6
- package/dist/types/src/testing/testkit/index.js.map +0 -1
- package/src/helpers/browser-observability.ts +0 -177
- package/src/helpers/common.ts +0 -38
- package/src/helpers/index.ts +0 -9
- package/src/helpers/map-spaces.ts +0 -48
- package/src/helpers/setup-telemetry-listeners.ts +0 -108
- package/src/otel/index.ts +0 -8
- package/src/otel/logs.ts +0 -100
- package/src/otel/traces-browser.ts +0 -59
- package/src/otel/traces.ts +0 -57
- package/src/segment/base.ts +0 -69
- package/src/segment/browser.ts +0 -68
- package/src/segment/node.ts +0 -94
- package/src/segment/types.ts +0 -57
- package/src/sentry/browser.ts +0 -133
- package/src/sentry/node.node.test.ts +0 -39
- package/src/sentry/node.ts +0 -126
- package/src/sentry/sentry-log-processor.ts +0 -166
- package/src/sentry/sentry.node.test.ts +0 -34
- package/src/sentry/types.ts +0 -22
- package/src/testing/index.ts +0 -5
- package/src/testing/testkit/browser.ts +0 -8
- package/src/testing/testkit/index.ts +0 -7
- package/src/testing/testkit/shims.d.ts +0 -5
- /package/dist/lib/browser/{chunk-KDP3SESE.mjs.map → chunk-J5LGTIGS.mjs.map} +0 -0
- /package/dist/lib/{browser/observability-HDE3I7TA.mjs.map → node-esm/chunk-HSLMI22Q.mjs.map} +0 -0
- /package/dist/types/src/{otel → extensions/otel}/traces-browser.d.ts +0 -0
- /package/dist/types/src/{otel → extensions/otel}/traces.d.ts +0 -0
|
@@ -1,997 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
|
-
import {
|
|
3
|
-
TelemetryEvent
|
|
4
|
-
} from "./chunk-AZMSBUWR.mjs";
|
|
5
|
-
|
|
6
|
-
// packages/sdk/observability/src/observability.ts
|
|
7
|
-
import { Event, scheduleTaskInterval } from "@dxos/async";
|
|
8
|
-
import { PublicKey } from "@dxos/client";
|
|
9
|
-
import { Context } from "@dxos/context";
|
|
10
|
-
import { invariant } from "@dxos/invariant";
|
|
11
|
-
import { log as log3, LogLevel } from "@dxos/log";
|
|
12
|
-
import { ConnectionState } from "@dxos/network-manager";
|
|
13
|
-
import { DeviceKind, Platform } from "@dxos/protocols/proto/dxos/client/services";
|
|
14
|
-
import { isNode } from "@dxos/util";
|
|
15
|
-
|
|
16
|
-
// packages/sdk/observability/src/cli-observability-secrets.json
|
|
17
|
-
var cli_observability_secrets_default = {
|
|
18
|
-
SENTRY_DESTINATION: "https://2647916221e643869965e78469479aa4@o4504012000067584.ingest.sentry.io/4504012027265029",
|
|
19
|
-
TELEMETRY_API_KEY: "B00QG6PtJJrJ0VVFe0H5a6bcUUShKyZM",
|
|
20
|
-
IPDATA_API_KEY: "73dfdecdf979c18f07d50cf841bbdd9e589f237256326ac8cca23786",
|
|
21
|
-
OTEL_ENDPOINT: "https://otlp-proxy.dxos.workers.dev",
|
|
22
|
-
OTEL_AUTHORIZATION: "Basic OTA3MzIzOmdsY19leUp2SWpvaU1URXdNVEl6TnlJc0ltNGlPaUp6ZEdGamF5MDVNRGN6TWpNdGFXNTBaV2R5WVhScGIyNHRZMnh2ZFdSbWJHRnlaUzF2ZEd4d0xYQnliM2g1SWl3aWF5STZJalZ2Tkd4cFYydE5iRmszTlRNMGJUVXpTemRTVjNBeVNpSXNJbTBpT25zaWNpSTZJbkJ5YjJRdGRYTXRaV0Z6ZEMwd0luMTk="
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
// packages/sdk/observability/src/helpers/browser-observability.ts
|
|
26
|
-
import * as localForage from "localforage";
|
|
27
|
-
import { log } from "@dxos/log";
|
|
28
|
-
var __dxlog_file = "/home/runner/work/dxos/dxos/packages/sdk/observability/src/helpers/browser-observability.ts";
|
|
29
|
-
var OBSERVABILITY_DISABLED_KEY = "observability-disabled";
|
|
30
|
-
var OBSERVABILITY_GROUP_KEY = "observability-group";
|
|
31
|
-
var isObservabilityDisabled = async (namespace) => {
|
|
32
|
-
try {
|
|
33
|
-
return await localForage.getItem(`${namespace}:${OBSERVABILITY_DISABLED_KEY}`) === "true";
|
|
34
|
-
} catch (err) {
|
|
35
|
-
log.catch("Failed to check if observability is disabled, assuming it is", err, {
|
|
36
|
-
F: __dxlog_file,
|
|
37
|
-
L: 24,
|
|
38
|
-
S: void 0,
|
|
39
|
-
C: (f, a) => f(...a)
|
|
40
|
-
});
|
|
41
|
-
return true;
|
|
42
|
-
}
|
|
43
|
-
};
|
|
44
|
-
var storeObservabilityDisabled = async (namespace, value) => {
|
|
45
|
-
try {
|
|
46
|
-
await localForage.setItem(`${namespace}:${OBSERVABILITY_DISABLED_KEY}`, String(value));
|
|
47
|
-
} catch (err) {
|
|
48
|
-
log.catch("Failed to store observability disabled", err, {
|
|
49
|
-
F: __dxlog_file,
|
|
50
|
-
L: 33,
|
|
51
|
-
S: void 0,
|
|
52
|
-
C: (f, a) => f(...a)
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
};
|
|
56
|
-
var getObservabilityGroup = async (namespace) => {
|
|
57
|
-
try {
|
|
58
|
-
return await localForage.getItem(`${namespace}:${OBSERVABILITY_GROUP_KEY}`) ?? void 0;
|
|
59
|
-
} catch (err) {
|
|
60
|
-
log.catch("Failed to get observability group", err, {
|
|
61
|
-
F: __dxlog_file,
|
|
62
|
-
L: 41,
|
|
63
|
-
S: void 0,
|
|
64
|
-
C: (f, a) => f(...a)
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
};
|
|
68
|
-
var storeObservabilityGroup = async (namespace, value) => {
|
|
69
|
-
try {
|
|
70
|
-
await localForage.setItem(`${namespace}:${OBSERVABILITY_GROUP_KEY}`, value);
|
|
71
|
-
} catch (err) {
|
|
72
|
-
log.catch("Failed to store observability group", err, {
|
|
73
|
-
F: __dxlog_file,
|
|
74
|
-
L: 49,
|
|
75
|
-
S: void 0,
|
|
76
|
-
C: (f, a) => f(...a)
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
};
|
|
80
|
-
var initializeAppObservability = async ({
|
|
81
|
-
namespace,
|
|
82
|
-
config,
|
|
83
|
-
// TODO(nf): Configure mode.
|
|
84
|
-
mode = "basic",
|
|
85
|
-
tracingEnable = false,
|
|
86
|
-
replayEnable = false
|
|
87
|
-
}) => {
|
|
88
|
-
log("initializeAppObservability", {
|
|
89
|
-
config
|
|
90
|
-
}, {
|
|
91
|
-
F: __dxlog_file,
|
|
92
|
-
L: 73,
|
|
93
|
-
S: void 0,
|
|
94
|
-
C: (f, a) => f(...a)
|
|
95
|
-
});
|
|
96
|
-
const group = await getObservabilityGroup(namespace) ?? void 0;
|
|
97
|
-
const release = `${namespace}@${config.get("runtime.app.build.version")}`;
|
|
98
|
-
const environment = config.get("runtime.app.env.DX_ENVIRONMENT");
|
|
99
|
-
const { Observability: Observability2 } = await import("./observability-7BTI46NM.mjs");
|
|
100
|
-
const observability = new Observability2({
|
|
101
|
-
namespace,
|
|
102
|
-
release,
|
|
103
|
-
environment,
|
|
104
|
-
group,
|
|
105
|
-
mode,
|
|
106
|
-
config,
|
|
107
|
-
errorLog: {
|
|
108
|
-
sentryInitOptions: {
|
|
109
|
-
environment,
|
|
110
|
-
release,
|
|
111
|
-
tracing: tracingEnable,
|
|
112
|
-
replay: replayEnable,
|
|
113
|
-
// TODO(wittjosiah): Configure these.
|
|
114
|
-
// Consider using a sampling function to dynamically configure these values.
|
|
115
|
-
// https://docs.sentry.io/platforms/javascript/configuration/sampling/#setting-a-sampling-function
|
|
116
|
-
sampleRate: 1,
|
|
117
|
-
replaySampleRate: 1,
|
|
118
|
-
replaySampleRateOnError: 1
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
});
|
|
122
|
-
const observabilityDisabled = await isObservabilityDisabled(namespace);
|
|
123
|
-
if (observabilityDisabled) {
|
|
124
|
-
observability.setMode("disabled");
|
|
125
|
-
log.info("observability disabled", void 0, {
|
|
126
|
-
F: __dxlog_file,
|
|
127
|
-
L: 113,
|
|
128
|
-
S: void 0,
|
|
129
|
-
C: (f, a) => f(...a)
|
|
130
|
-
});
|
|
131
|
-
return observability;
|
|
132
|
-
}
|
|
133
|
-
try {
|
|
134
|
-
const getIPData = async (config2) => {
|
|
135
|
-
const IP_DATA_CACHE_TIMEOUT = 6 * 60 * 60 * 1e3;
|
|
136
|
-
const cachedData = await localForage.getItem("dxos:observability:ipdata");
|
|
137
|
-
if (cachedData && cachedData.timestamp > Date.now() - IP_DATA_CACHE_TIMEOUT) {
|
|
138
|
-
return cachedData.data;
|
|
139
|
-
}
|
|
140
|
-
const IPDATA_API_KEY = config2.get("runtime.app.env.DX_IPDATA_API_KEY");
|
|
141
|
-
if (IPDATA_API_KEY) {
|
|
142
|
-
return fetch(`https://api.ipdata.co?api-key=${IPDATA_API_KEY}`).then((res) => res.json()).then((data) => {
|
|
143
|
-
localForage.setItem("dxos:observability:ipdata", {
|
|
144
|
-
data,
|
|
145
|
-
timestamp: Date.now()
|
|
146
|
-
}).catch((err) => observability.captureException(err));
|
|
147
|
-
return data;
|
|
148
|
-
}).catch((err) => observability.captureException(err));
|
|
149
|
-
}
|
|
150
|
-
};
|
|
151
|
-
await observability.initialize();
|
|
152
|
-
observability.startErrorLogs();
|
|
153
|
-
const ipData = await getIPData(config);
|
|
154
|
-
ipData && observability.setIPDataTelemetryTags(ipData);
|
|
155
|
-
if (typeof navigator !== "undefined" && navigator.storage?.estimate) {
|
|
156
|
-
setInterval(async () => {
|
|
157
|
-
try {
|
|
158
|
-
const storageEstimate = await navigator.storage.estimate();
|
|
159
|
-
storageEstimate.usage && observability.setTag("storageUsage", storageEstimate.usage.toString(), "telemetry");
|
|
160
|
-
storageEstimate.quota && observability.setTag("storageQuota", storageEstimate.quota.toString(), "telemetry");
|
|
161
|
-
} catch (error) {
|
|
162
|
-
log.warn("Failed to run estimate()", error, {
|
|
163
|
-
F: __dxlog_file,
|
|
164
|
-
L: 168,
|
|
165
|
-
S: void 0,
|
|
166
|
-
C: (f, a) => f(...a)
|
|
167
|
-
});
|
|
168
|
-
}
|
|
169
|
-
}, 1e4);
|
|
170
|
-
}
|
|
171
|
-
} catch (err) {
|
|
172
|
-
log.error("Failed to initialize app observability", err, {
|
|
173
|
-
F: __dxlog_file,
|
|
174
|
-
L: 173,
|
|
175
|
-
S: void 0,
|
|
176
|
-
C: (f, a) => f(...a)
|
|
177
|
-
});
|
|
178
|
-
}
|
|
179
|
-
return observability;
|
|
180
|
-
};
|
|
181
|
-
|
|
182
|
-
// packages/sdk/observability/src/helpers/common.ts
|
|
183
|
-
var getTelemetryIdentifier = (client) => {
|
|
184
|
-
if (!client?.initialized) {
|
|
185
|
-
return void 0;
|
|
186
|
-
}
|
|
187
|
-
const identity = client.halo.identity.get();
|
|
188
|
-
if (identity) {
|
|
189
|
-
return identity.did;
|
|
190
|
-
}
|
|
191
|
-
return void 0;
|
|
192
|
-
};
|
|
193
|
-
var getTelemetryIdentity = (client) => {
|
|
194
|
-
const did = getTelemetryIdentifier(client);
|
|
195
|
-
return {
|
|
196
|
-
did
|
|
197
|
-
};
|
|
198
|
-
};
|
|
199
|
-
|
|
200
|
-
// packages/sdk/observability/src/helpers/node-observability.ts
|
|
201
|
-
import yaml from "js-yaml";
|
|
202
|
-
import { existsSync, statSync } from "node:fs";
|
|
203
|
-
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
204
|
-
import { join } from "node:path";
|
|
205
|
-
import { v4 as uuid, validate as validateUuid } from "uuid";
|
|
206
|
-
import { log as log2 } from "@dxos/log";
|
|
207
|
-
var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/sdk/observability/src/helpers/node-observability.ts";
|
|
208
|
-
var showObservabilityBanner = async (configDir, bannercb) => {
|
|
209
|
-
const path = join(configDir, ".observability-banner-printed");
|
|
210
|
-
if (existsSync(path)) {
|
|
211
|
-
return;
|
|
212
|
-
}
|
|
213
|
-
bannercb(
|
|
214
|
-
// eslint-disable-next-line no-multi-str
|
|
215
|
-
"Basic observability data will be sent to the DXOS team in order to improve the product. This includes performance metrics, error logs, and usage data. No personally identifiable information, other than your public key, is included with this data and no private data ever leaves your devices. To disable sending observability data, set the environment variable DX_DISABLE_OBSERVABILITY=true."
|
|
216
|
-
);
|
|
217
|
-
await writeFile(path, "", "utf-8");
|
|
218
|
-
};
|
|
219
|
-
var getObservabilityState = async (configDir) => {
|
|
220
|
-
if (existsSync(configDir)) {
|
|
221
|
-
if (!statSync(configDir).isDirectory()) {
|
|
222
|
-
throw new Error(`Config directory ${configDir} exists but is not a directory`);
|
|
223
|
-
}
|
|
224
|
-
} else {
|
|
225
|
-
await mkdir(configDir, {
|
|
226
|
-
recursive: true
|
|
227
|
-
});
|
|
228
|
-
}
|
|
229
|
-
const idPath = join(configDir, "observability.yml");
|
|
230
|
-
if (existsSync(idPath)) {
|
|
231
|
-
const context = await readFile(idPath, "utf-8");
|
|
232
|
-
return validate(context) ?? initializeState(idPath);
|
|
233
|
-
}
|
|
234
|
-
return initializeState(idPath);
|
|
235
|
-
};
|
|
236
|
-
var initializeState = async (idPath) => {
|
|
237
|
-
const observabilityState = {
|
|
238
|
-
installationId: uuid(),
|
|
239
|
-
group: process.env.DX_OBSERVABILITY_GROUP ?? void 0,
|
|
240
|
-
mode: process.env.DX_DISABLE_OBSERVABILITY ? "disabled" : process.env.DX_OBSERVABILITY_MODE ?? "basic"
|
|
241
|
-
};
|
|
242
|
-
await writeFile(idPath, "# This file is automatically generated by the @dxos/cli.\n" + yaml.dump(observabilityState), "utf-8");
|
|
243
|
-
return observabilityState;
|
|
244
|
-
};
|
|
245
|
-
var validate = (contextString) => {
|
|
246
|
-
const context = yaml.load(contextString);
|
|
247
|
-
if (Boolean(context.installationId) && validateUuid(context.installationId)) {
|
|
248
|
-
return {
|
|
249
|
-
...context,
|
|
250
|
-
mode: process.env.DX_DISABLE_OBSERVABILITY ? "disabled" : context.mode ?? "basic"
|
|
251
|
-
};
|
|
252
|
-
}
|
|
253
|
-
};
|
|
254
|
-
var initializeNodeObservability = async ({ namespace, version, config, installationId, group, mode = "basic", tracingEnable = true, replayEnable = true }) => {
|
|
255
|
-
log2("initializeCliObservability", {
|
|
256
|
-
config
|
|
257
|
-
}, {
|
|
258
|
-
F: __dxlog_file2,
|
|
259
|
-
L: 110,
|
|
260
|
-
S: void 0,
|
|
261
|
-
C: (f, a) => f(...a)
|
|
262
|
-
});
|
|
263
|
-
const release = `${namespace}@${version}`;
|
|
264
|
-
const environment = process.env.DX_ENVIRONMENT ?? "unknown";
|
|
265
|
-
const observability = new Observability({
|
|
266
|
-
mode,
|
|
267
|
-
namespace,
|
|
268
|
-
release,
|
|
269
|
-
environment,
|
|
270
|
-
group,
|
|
271
|
-
errorLog: {
|
|
272
|
-
sentryInitOptions: {
|
|
273
|
-
environment,
|
|
274
|
-
release,
|
|
275
|
-
// TODO(wittjosiah): Configure this.
|
|
276
|
-
sampleRate: 1
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
});
|
|
280
|
-
observability.setTag("installationId", installationId);
|
|
281
|
-
const IPDATA_API_KEY = config.get("runtime.app.env.DX_IPDATA_API_KEY");
|
|
282
|
-
try {
|
|
283
|
-
const res = await fetch(`https://api.ipdata.co/?api-key=${IPDATA_API_KEY}`);
|
|
284
|
-
const ipData = await res.json();
|
|
285
|
-
ipData && observability.setIPDataTelemetryTags(ipData);
|
|
286
|
-
} catch (err) {
|
|
287
|
-
observability?.captureException(err);
|
|
288
|
-
}
|
|
289
|
-
return observability;
|
|
290
|
-
};
|
|
291
|
-
|
|
292
|
-
// packages/sdk/observability/src/helpers/map-spaces.ts
|
|
293
|
-
var mapSpaces = (spaces, options = {
|
|
294
|
-
verbose: false,
|
|
295
|
-
truncateKeys: false
|
|
296
|
-
}) => {
|
|
297
|
-
return spaces.map((space) => {
|
|
298
|
-
const { open, ready } = space.internal.data.metrics ?? {};
|
|
299
|
-
const startup = open && ready && ready.getTime() - open.getTime();
|
|
300
|
-
const pipeline = space.internal.data.pipeline;
|
|
301
|
-
const startDataMutations = pipeline?.currentEpoch?.subject.assertion.timeframe.totalMessages() ?? 0;
|
|
302
|
-
const epoch = pipeline?.currentEpoch?.subject.assertion.number;
|
|
303
|
-
const currentDataMutations = pipeline?.currentDataTimeframe?.totalMessages() ?? 0;
|
|
304
|
-
const totalDataMutations = pipeline?.targetDataTimeframe?.totalMessages() ?? 0;
|
|
305
|
-
return {
|
|
306
|
-
// TODO(nf): truncate keys for DD?
|
|
307
|
-
key: space.key.truncate(),
|
|
308
|
-
open: space.isOpen,
|
|
309
|
-
members: space.members.get().length,
|
|
310
|
-
objects: space.db.coreDatabase.getAllObjectIds().length,
|
|
311
|
-
startup,
|
|
312
|
-
epoch,
|
|
313
|
-
// appliedEpoch,
|
|
314
|
-
startDataMutations,
|
|
315
|
-
currentDataMutations,
|
|
316
|
-
totalDataMutations,
|
|
317
|
-
// TODO(burdon): Negative?
|
|
318
|
-
progress: (Math.min(Math.abs((currentDataMutations - startDataMutations) / (totalDataMutations - startDataMutations)), 1) * 100).toFixed(0)
|
|
319
|
-
};
|
|
320
|
-
});
|
|
321
|
-
};
|
|
322
|
-
|
|
323
|
-
// packages/sdk/observability/src/helpers/setup-telemetry-listeners.ts
|
|
324
|
-
var lastFocusEvent = /* @__PURE__ */ new Date();
|
|
325
|
-
var totalTime = 0;
|
|
326
|
-
var setupTelemetryListeners = (namespace, client, observability) => {
|
|
327
|
-
const clickCallback = (event) => {
|
|
328
|
-
const id = event.target?.id;
|
|
329
|
-
if (!id) {
|
|
330
|
-
return;
|
|
331
|
-
}
|
|
332
|
-
setTimeout(() => {
|
|
333
|
-
observability.track({
|
|
334
|
-
...getTelemetryIdentity(client),
|
|
335
|
-
action: "window.click",
|
|
336
|
-
properties: {
|
|
337
|
-
id: event.target?.id,
|
|
338
|
-
path: event.composedPath().filter((el) => Boolean(el.tagName)).map((el) => `${el.tagName.toLowerCase()}${el.id ? `#${el.id}` : ""}`).reverse().join(">")
|
|
339
|
-
}
|
|
340
|
-
});
|
|
341
|
-
});
|
|
342
|
-
};
|
|
343
|
-
const focusCallback = () => {
|
|
344
|
-
const now = /* @__PURE__ */ new Date();
|
|
345
|
-
setTimeout(() => {
|
|
346
|
-
observability.track({
|
|
347
|
-
...getTelemetryIdentity(client),
|
|
348
|
-
action: "window.focus",
|
|
349
|
-
properties: {
|
|
350
|
-
timeAway: now.getTime() - lastFocusEvent.getTime()
|
|
351
|
-
}
|
|
352
|
-
});
|
|
353
|
-
});
|
|
354
|
-
lastFocusEvent = now;
|
|
355
|
-
};
|
|
356
|
-
const blurCallback = () => {
|
|
357
|
-
const now = /* @__PURE__ */ new Date();
|
|
358
|
-
const duration = now.getTime() - lastFocusEvent.getTime();
|
|
359
|
-
setTimeout(() => {
|
|
360
|
-
observability.track({
|
|
361
|
-
...getTelemetryIdentity(client),
|
|
362
|
-
action: "window.blur",
|
|
363
|
-
properties: {
|
|
364
|
-
duration
|
|
365
|
-
}
|
|
366
|
-
});
|
|
367
|
-
});
|
|
368
|
-
lastFocusEvent = now;
|
|
369
|
-
totalTime = totalTime + duration;
|
|
370
|
-
};
|
|
371
|
-
const unloadCallback = () => {
|
|
372
|
-
setTimeout(() => {
|
|
373
|
-
observability.track({
|
|
374
|
-
...getTelemetryIdentity(client),
|
|
375
|
-
action: "page.unload",
|
|
376
|
-
properties: {
|
|
377
|
-
duration: totalTime
|
|
378
|
-
}
|
|
379
|
-
});
|
|
380
|
-
});
|
|
381
|
-
};
|
|
382
|
-
const errorCallback = (event) => {
|
|
383
|
-
setTimeout(() => {
|
|
384
|
-
observability.track({
|
|
385
|
-
...getTelemetryIdentity(client),
|
|
386
|
-
action: "window.error",
|
|
387
|
-
properties: {
|
|
388
|
-
message: event.message,
|
|
389
|
-
filename: event.filename,
|
|
390
|
-
stack: event.error?.stack,
|
|
391
|
-
cause: event.error?.cause
|
|
392
|
-
}
|
|
393
|
-
});
|
|
394
|
-
});
|
|
395
|
-
};
|
|
396
|
-
window.addEventListener("click", clickCallback, true);
|
|
397
|
-
window.addEventListener("focus", focusCallback);
|
|
398
|
-
window.addEventListener("blur", blurCallback);
|
|
399
|
-
window.addEventListener("beforeunload", unloadCallback);
|
|
400
|
-
window.addEventListener("error", errorCallback);
|
|
401
|
-
return () => {
|
|
402
|
-
window.removeEventListener("click", clickCallback, true);
|
|
403
|
-
window.removeEventListener("focus", focusCallback);
|
|
404
|
-
window.removeEventListener("blur", blurCallback);
|
|
405
|
-
window.removeEventListener("beforeunload", unloadCallback);
|
|
406
|
-
window.removeEventListener("error", errorCallback);
|
|
407
|
-
};
|
|
408
|
-
};
|
|
409
|
-
|
|
410
|
-
// packages/sdk/observability/src/observability.ts
|
|
411
|
-
var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/sdk/observability/src/observability.ts";
|
|
412
|
-
var SPACE_METRICS_MIN_INTERVAL = 1e3 * 60;
|
|
413
|
-
var SPACE_TELEMETRY_MIN_INTERVAL = 1e3 * 60 * 60;
|
|
414
|
-
var NETWORK_METRICS_MIN_INTERVAL = 1e3 * 60 * 5;
|
|
415
|
-
var Observability = class {
|
|
416
|
-
// TODO(nf): make platform a required extension?
|
|
417
|
-
constructor({ mode, namespace, environment, release, config, group, secrets, telemetry, errorLog }) {
|
|
418
|
-
this._tags = /* @__PURE__ */ new Map();
|
|
419
|
-
this._ctx = new Context(void 0, {
|
|
420
|
-
F: __dxlog_file3,
|
|
421
|
-
L: 115
|
|
422
|
-
});
|
|
423
|
-
this.setIPDataTelemetryTags = (ipData) => {
|
|
424
|
-
this.setTag("city", ipData.city, "telemetry");
|
|
425
|
-
this.setTag("region", ipData.region, "telemetry");
|
|
426
|
-
this.setTag("country", ipData.country, "telemetry");
|
|
427
|
-
ipData.latitude && this.setTag("latitude", ipData.latitude.toString(), "telemetry");
|
|
428
|
-
ipData.longitude && this.setTag("longitude", ipData.longitude.toString(), "telemetry");
|
|
429
|
-
};
|
|
430
|
-
this._mode = mode;
|
|
431
|
-
this._namespace = namespace;
|
|
432
|
-
this._config = config;
|
|
433
|
-
this._group = group;
|
|
434
|
-
this._secrets = this._loadSecrets(config, secrets);
|
|
435
|
-
this._telemetryBatchSize = telemetry?.batchSize ?? 30;
|
|
436
|
-
this._errorReportingOptions = errorLog?.sentryInitOptions;
|
|
437
|
-
this.setTag("mode", this._mode);
|
|
438
|
-
this.setTag("namespace", this._namespace);
|
|
439
|
-
this.setTag("environment", environment);
|
|
440
|
-
this.setTag("release", release);
|
|
441
|
-
this.setTag("session", PublicKey.random().toHex());
|
|
442
|
-
this.setTag("group", this._group);
|
|
443
|
-
}
|
|
444
|
-
get mode() {
|
|
445
|
-
return this._mode;
|
|
446
|
-
}
|
|
447
|
-
get group() {
|
|
448
|
-
return this._group;
|
|
449
|
-
}
|
|
450
|
-
get enabled() {
|
|
451
|
-
return this._mode !== "disabled";
|
|
452
|
-
}
|
|
453
|
-
_loadSecrets(config, secrets) {
|
|
454
|
-
if (isNode()) {
|
|
455
|
-
const mergedSecrets = {
|
|
456
|
-
...cli_observability_secrets_default,
|
|
457
|
-
...secrets
|
|
458
|
-
};
|
|
459
|
-
process.env.DX_ENVIRONMENT && (mergedSecrets.DX_ENVIRONMENT = process.env.DX_ENVIRONMENT);
|
|
460
|
-
process.env.DX_RELEASE && (mergedSecrets.DX_RELEASE = process.env.DX_RELEASE);
|
|
461
|
-
process.env.SENTRY_DESTINATION && (mergedSecrets.SENTRY_DESTINATION = process.env.SENTRY_DESTINATION);
|
|
462
|
-
process.env.TELEMETRY_API_KEY && (mergedSecrets.TELEMETRY_API_KEY = process.env.TELEMETRY_API_KEY);
|
|
463
|
-
process.env.IPDATA_API_KEY && (mergedSecrets.IPDATA_API_KEY = process.env.IPDATA_API_KEY);
|
|
464
|
-
process.env.DX_OTEL_ENDPOINT && (mergedSecrets.OTEL_ENDPOINT = process.env.DX_OTEL_ENDPOINT);
|
|
465
|
-
process.env.DX_OTEL_AUTHORIZATION && (mergedSecrets.OTEL_AUTHORIZATION = process.env.DX_OTEL_AUTHORIZATION);
|
|
466
|
-
return mergedSecrets;
|
|
467
|
-
} else {
|
|
468
|
-
log3("config", {
|
|
469
|
-
rtc: this._secrets,
|
|
470
|
-
config
|
|
471
|
-
}, {
|
|
472
|
-
F: __dxlog_file3,
|
|
473
|
-
L: 176,
|
|
474
|
-
S: this,
|
|
475
|
-
C: (f, a) => f(...a)
|
|
476
|
-
});
|
|
477
|
-
return {
|
|
478
|
-
DX_ENVIRONMENT: config?.get("runtime.app.env.DX_ENVIRONMENT"),
|
|
479
|
-
DX_RELEASE: config?.get("runtime.app.env.DX_RELEASE"),
|
|
480
|
-
SENTRY_DESTINATION: config?.get("runtime.app.env.DX_SENTRY_DESTINATION"),
|
|
481
|
-
TELEMETRY_API_KEY: config?.get("runtime.app.env.DX_TELEMETRY_API_KEY"),
|
|
482
|
-
IPDATA_API_KEY: config?.get("runtime.app.env.DX_IPDATA_API_KEY"),
|
|
483
|
-
OTEL_ENDPOINT: config?.get("runtime.app.env.DX_OTEL_ENDPOINT"),
|
|
484
|
-
OTEL_AUTHORIZATION: config?.get("runtime.app.env.DX_OTEL_AUTHORIZATION"),
|
|
485
|
-
...secrets
|
|
486
|
-
};
|
|
487
|
-
}
|
|
488
|
-
}
|
|
489
|
-
async initialize() {
|
|
490
|
-
log3("initializing...", void 0, {
|
|
491
|
-
F: __dxlog_file3,
|
|
492
|
-
L: 191,
|
|
493
|
-
S: this,
|
|
494
|
-
C: (f, a) => f(...a)
|
|
495
|
-
});
|
|
496
|
-
await this._initLogs();
|
|
497
|
-
await this._initMetrics();
|
|
498
|
-
await this._initTelemetry();
|
|
499
|
-
await this._initErrorLogs();
|
|
500
|
-
await this._initTraces();
|
|
501
|
-
}
|
|
502
|
-
async close() {
|
|
503
|
-
log3("closing...", void 0, {
|
|
504
|
-
F: __dxlog_file3,
|
|
505
|
-
L: 200,
|
|
506
|
-
S: this,
|
|
507
|
-
C: (f, a) => f(...a)
|
|
508
|
-
});
|
|
509
|
-
const closes = [];
|
|
510
|
-
this._telemetry && closes.push(this._telemetry.close());
|
|
511
|
-
this._otelMetrics && closes.push(this._otelMetrics.close());
|
|
512
|
-
this._otelLogs && closes.push(this._otelLogs.close());
|
|
513
|
-
await Promise.all(closes);
|
|
514
|
-
await this._ctx.dispose();
|
|
515
|
-
}
|
|
516
|
-
setMode(mode) {
|
|
517
|
-
this._mode = mode;
|
|
518
|
-
}
|
|
519
|
-
/**
|
|
520
|
-
* camelCase keys are converted to snake_case in Segment.
|
|
521
|
-
*/
|
|
522
|
-
setTag(key, value, scope) {
|
|
523
|
-
if (value === void 0) {
|
|
524
|
-
return;
|
|
525
|
-
}
|
|
526
|
-
if (this.enabled && (scope === void 0 || scope === "all" || scope === "errors")) {
|
|
527
|
-
this._setTag?.(key, value);
|
|
528
|
-
}
|
|
529
|
-
if (!scope) {
|
|
530
|
-
scope = "all";
|
|
531
|
-
}
|
|
532
|
-
this._tags.set(key, {
|
|
533
|
-
value,
|
|
534
|
-
scope
|
|
535
|
-
});
|
|
536
|
-
}
|
|
537
|
-
getTag(key) {
|
|
538
|
-
return this._tags.get(key);
|
|
539
|
-
}
|
|
540
|
-
// TODO(wittjosiah): Improve privacy of telemetry identifiers. See `getTelemetryIdentifier`.
|
|
541
|
-
async setIdentityTags(clientServices) {
|
|
542
|
-
if (clientServices.IdentityService) {
|
|
543
|
-
clientServices.IdentityService.queryIdentity().subscribe((idqr) => {
|
|
544
|
-
if (!idqr?.identity?.did) {
|
|
545
|
-
log3("empty response from identity service", {
|
|
546
|
-
idqr
|
|
547
|
-
}, {
|
|
548
|
-
F: __dxlog_file3,
|
|
549
|
-
L: 247,
|
|
550
|
-
S: this,
|
|
551
|
-
C: (f, a) => f(...a)
|
|
552
|
-
});
|
|
553
|
-
return;
|
|
554
|
-
}
|
|
555
|
-
this.setTag("did", idqr.identity.did);
|
|
556
|
-
this._telemetry?.identify({
|
|
557
|
-
userId: idqr.identity.did
|
|
558
|
-
});
|
|
559
|
-
});
|
|
560
|
-
}
|
|
561
|
-
if (clientServices.DevicesService) {
|
|
562
|
-
clientServices.DevicesService.queryDevices().subscribe((dqr) => {
|
|
563
|
-
if (!dqr || !dqr.devices || dqr.devices.length === 0) {
|
|
564
|
-
log3("empty response from device service", {
|
|
565
|
-
device: dqr
|
|
566
|
-
}, {
|
|
567
|
-
F: __dxlog_file3,
|
|
568
|
-
L: 259,
|
|
569
|
-
S: this,
|
|
570
|
-
C: (f, a) => f(...a)
|
|
571
|
-
});
|
|
572
|
-
return;
|
|
573
|
-
}
|
|
574
|
-
invariant(dqr, "empty response from device service", {
|
|
575
|
-
F: __dxlog_file3,
|
|
576
|
-
L: 263,
|
|
577
|
-
S: this,
|
|
578
|
-
A: [
|
|
579
|
-
"dqr",
|
|
580
|
-
"'empty response from device service'"
|
|
581
|
-
]
|
|
582
|
-
});
|
|
583
|
-
const thisDevice = dqr.devices.find((device) => device.kind === DeviceKind.CURRENT);
|
|
584
|
-
if (!thisDevice) {
|
|
585
|
-
log3("no current device", {
|
|
586
|
-
device: dqr
|
|
587
|
-
}, {
|
|
588
|
-
F: __dxlog_file3,
|
|
589
|
-
L: 266,
|
|
590
|
-
S: this,
|
|
591
|
-
C: (f, a) => f(...a)
|
|
592
|
-
});
|
|
593
|
-
return;
|
|
594
|
-
}
|
|
595
|
-
this.setTag("deviceKey", thisDevice.deviceKey.truncate());
|
|
596
|
-
if (thisDevice.profile?.label) {
|
|
597
|
-
this.setTag("deviceProfile", thisDevice.profile.label);
|
|
598
|
-
}
|
|
599
|
-
});
|
|
600
|
-
}
|
|
601
|
-
}
|
|
602
|
-
//
|
|
603
|
-
// Logs
|
|
604
|
-
//
|
|
605
|
-
async _initLogs() {
|
|
606
|
-
if (this._secrets.OTEL_ENDPOINT && this._secrets.OTEL_AUTHORIZATION && this._mode !== "disabled") {
|
|
607
|
-
const { OtelLogs } = await import("./otel-AF5TSABC.mjs");
|
|
608
|
-
this._otelLogs = new OtelLogs({
|
|
609
|
-
endpoint: this._secrets.OTEL_ENDPOINT,
|
|
610
|
-
authorizationHeader: this._secrets.OTEL_AUTHORIZATION,
|
|
611
|
-
serviceName: this._namespace,
|
|
612
|
-
serviceVersion: this.getTag("release")?.value ?? "0.0.0",
|
|
613
|
-
getTags: () => Object.fromEntries(Array.from(this._tags).filter(([key, value]) => {
|
|
614
|
-
return value.scope === "all" || value.scope === "errors";
|
|
615
|
-
}).map(([key, value]) => [
|
|
616
|
-
key,
|
|
617
|
-
value.value
|
|
618
|
-
])),
|
|
619
|
-
logLevel: LogLevel.VERBOSE,
|
|
620
|
-
includeSharedWorkerLogs: false
|
|
621
|
-
});
|
|
622
|
-
this._otelLogs && log3.runtimeConfig.processors.push(this._otelLogs.logProcessor);
|
|
623
|
-
log3("otel logs enabled", {
|
|
624
|
-
namespace: this._namespace
|
|
625
|
-
}, {
|
|
626
|
-
F: __dxlog_file3,
|
|
627
|
-
L: 310,
|
|
628
|
-
S: this,
|
|
629
|
-
C: (f, a) => f(...a)
|
|
630
|
-
});
|
|
631
|
-
} else {
|
|
632
|
-
log3("otel logs disabled", void 0, {
|
|
633
|
-
F: __dxlog_file3,
|
|
634
|
-
L: 312,
|
|
635
|
-
S: this,
|
|
636
|
-
C: (f, a) => f(...a)
|
|
637
|
-
});
|
|
638
|
-
}
|
|
639
|
-
}
|
|
640
|
-
//
|
|
641
|
-
// Metrics
|
|
642
|
-
//
|
|
643
|
-
async _initMetrics() {
|
|
644
|
-
if (this.enabled && this._secrets.OTEL_ENDPOINT && this._secrets.OTEL_AUTHORIZATION) {
|
|
645
|
-
const { OtelMetrics } = await import("./otel-AF5TSABC.mjs");
|
|
646
|
-
this._otelMetrics = new OtelMetrics({
|
|
647
|
-
endpoint: this._secrets.OTEL_ENDPOINT,
|
|
648
|
-
authorizationHeader: this._secrets.OTEL_AUTHORIZATION,
|
|
649
|
-
serviceName: this._namespace,
|
|
650
|
-
serviceVersion: this.getTag("release")?.value ?? "0.0.0",
|
|
651
|
-
getTags: () => Object.fromEntries(Array.from(this._tags).filter(([key, value]) => {
|
|
652
|
-
return value.scope === "all" || value.scope === "metrics";
|
|
653
|
-
}).map(([key, value]) => [
|
|
654
|
-
key,
|
|
655
|
-
value.value
|
|
656
|
-
]))
|
|
657
|
-
});
|
|
658
|
-
log3("otel metrics enabled", void 0, {
|
|
659
|
-
F: __dxlog_file3,
|
|
660
|
-
L: 337,
|
|
661
|
-
S: this,
|
|
662
|
-
C: (f, a) => f(...a)
|
|
663
|
-
});
|
|
664
|
-
} else {
|
|
665
|
-
log3("otel metrics disabled", void 0, {
|
|
666
|
-
F: __dxlog_file3,
|
|
667
|
-
L: 339,
|
|
668
|
-
S: this,
|
|
669
|
-
C: (f, a) => f(...a)
|
|
670
|
-
});
|
|
671
|
-
}
|
|
672
|
-
}
|
|
673
|
-
/**
|
|
674
|
-
* Gauge metric.
|
|
675
|
-
*
|
|
676
|
-
* The default implementation uses OpenTelemetry
|
|
677
|
-
*/
|
|
678
|
-
gauge(name, value, extraTags) {
|
|
679
|
-
this._otelMetrics?.gauge(name, value, extraTags);
|
|
680
|
-
}
|
|
681
|
-
// TODO(nf): Refactor into ObservabilityExtensions.
|
|
682
|
-
startNetworkMetrics(clientServices) {
|
|
683
|
-
if (!clientServices.NetworkService) {
|
|
684
|
-
return;
|
|
685
|
-
}
|
|
686
|
-
const updateSignalMetrics = new Event().debounce(NETWORK_METRICS_MIN_INTERVAL);
|
|
687
|
-
updateSignalMetrics.on(this._ctx, async () => {
|
|
688
|
-
log3("send signal metrics", void 0, {
|
|
689
|
-
F: __dxlog_file3,
|
|
690
|
-
L: 361,
|
|
691
|
-
S: this,
|
|
692
|
-
C: (f, a) => f(...a)
|
|
693
|
-
});
|
|
694
|
-
this._lastNetworkStatus?.signaling?.forEach(({ server, state }) => {
|
|
695
|
-
this.gauge("dxos.client.network.signal.connectionState", state, {
|
|
696
|
-
server
|
|
697
|
-
});
|
|
698
|
-
});
|
|
699
|
-
let swarmCount = 0;
|
|
700
|
-
const connectionStates = /* @__PURE__ */ new Map();
|
|
701
|
-
for (const state in ConnectionState) {
|
|
702
|
-
connectionStates.set(state, 0);
|
|
703
|
-
}
|
|
704
|
-
let totalReadBufferSize = 0;
|
|
705
|
-
let totalWriteBufferSize = 0;
|
|
706
|
-
let totalChannelBufferSize = 0;
|
|
707
|
-
this._lastNetworkStatus?.connectionInfo?.forEach((connectionInfo) => {
|
|
708
|
-
swarmCount++;
|
|
709
|
-
for (const conn of connectionInfo.connections ?? []) {
|
|
710
|
-
connectionStates.set(conn.state, (connectionStates.get(conn.state) ?? 0) + 1);
|
|
711
|
-
totalReadBufferSize += conn.readBufferSize ?? 0;
|
|
712
|
-
totalWriteBufferSize += conn.writeBufferSize ?? 0;
|
|
713
|
-
for (const stream of conn.streams ?? []) {
|
|
714
|
-
totalChannelBufferSize += stream.writeBufferSize ?? 0;
|
|
715
|
-
}
|
|
716
|
-
}
|
|
717
|
-
this.gauge("dxos.client.network.swarm.count", swarmCount);
|
|
718
|
-
for (const state in ConnectionState) {
|
|
719
|
-
this.gauge("dxos.client.network.connection.count", connectionStates.get(state) ?? 0, {
|
|
720
|
-
state
|
|
721
|
-
});
|
|
722
|
-
}
|
|
723
|
-
this.gauge("dxos.client.network.totalReadBufferSize", totalReadBufferSize);
|
|
724
|
-
this.gauge("dxos.client.network.totalWriteBufferSize", totalWriteBufferSize);
|
|
725
|
-
this.gauge("dxos.client.network.totalChannelBufferSize", totalChannelBufferSize);
|
|
726
|
-
});
|
|
727
|
-
});
|
|
728
|
-
clientServices.NetworkService.queryStatus().subscribe((networkStatus) => {
|
|
729
|
-
this._lastNetworkStatus = networkStatus;
|
|
730
|
-
updateSignalMetrics.emit();
|
|
731
|
-
});
|
|
732
|
-
scheduleTaskInterval(this._ctx, async () => updateSignalMetrics.emit(), NETWORK_METRICS_MIN_INTERVAL);
|
|
733
|
-
}
|
|
734
|
-
startSpacesMetrics(client, namespace) {
|
|
735
|
-
const spaces = client.spaces.get();
|
|
736
|
-
const subscriptions = /* @__PURE__ */ new Map();
|
|
737
|
-
this._ctx.onDispose(() => subscriptions.forEach((subscription) => subscription.unsubscribe()));
|
|
738
|
-
const updateSpaceMetrics = new Event().debounce(SPACE_METRICS_MIN_INTERVAL);
|
|
739
|
-
updateSpaceMetrics.on(this._ctx, async () => {
|
|
740
|
-
log3("send space metrics", void 0, {
|
|
741
|
-
F: __dxlog_file3,
|
|
742
|
-
L: 414,
|
|
743
|
-
S: this,
|
|
744
|
-
C: (f, a) => f(...a)
|
|
745
|
-
});
|
|
746
|
-
for (const data of mapSpaces(spaces, {
|
|
747
|
-
truncateKeys: true
|
|
748
|
-
})) {
|
|
749
|
-
this.gauge("dxos.client.space.members", data.members, {
|
|
750
|
-
key: data.key
|
|
751
|
-
});
|
|
752
|
-
this.gauge("dxos.client.space.objects", data.objects, {
|
|
753
|
-
key: data.key
|
|
754
|
-
});
|
|
755
|
-
this.gauge("dxos.client.space.epoch", data.epoch, {
|
|
756
|
-
key: data.key
|
|
757
|
-
});
|
|
758
|
-
this.gauge("dxos.client.space.currentDataMutations", data.currentDataMutations, {
|
|
759
|
-
key: data.key
|
|
760
|
-
});
|
|
761
|
-
}
|
|
762
|
-
});
|
|
763
|
-
const updateSpaceTelemetry = new Event().debounce(SPACE_TELEMETRY_MIN_INTERVAL);
|
|
764
|
-
updateSpaceTelemetry.on(this._ctx, async () => {
|
|
765
|
-
log3("send space telemetry", void 0, {
|
|
766
|
-
F: __dxlog_file3,
|
|
767
|
-
L: 425,
|
|
768
|
-
S: this,
|
|
769
|
-
C: (f, a) => f(...a)
|
|
770
|
-
});
|
|
771
|
-
for (const data of mapSpaces(spaces, {
|
|
772
|
-
truncateKeys: true
|
|
773
|
-
})) {
|
|
774
|
-
this.track({
|
|
775
|
-
...getTelemetryIdentity(client),
|
|
776
|
-
event: TelemetryEvent.METRICS,
|
|
777
|
-
action: "space.update",
|
|
778
|
-
properties: data
|
|
779
|
-
});
|
|
780
|
-
}
|
|
781
|
-
});
|
|
782
|
-
const subscribeToSpaceUpdate = (space) => space.pipeline.subscribe({
|
|
783
|
-
next: () => {
|
|
784
|
-
updateSpaceMetrics.emit();
|
|
785
|
-
updateSpaceTelemetry.emit();
|
|
786
|
-
}
|
|
787
|
-
});
|
|
788
|
-
spaces.forEach((space) => {
|
|
789
|
-
subscriptions.set(space.id, subscribeToSpaceUpdate(space));
|
|
790
|
-
});
|
|
791
|
-
client.spaces.subscribe({
|
|
792
|
-
next: async (spaces2) => {
|
|
793
|
-
spaces2.filter((space) => !subscriptions.has(space.id)).forEach((space) => {
|
|
794
|
-
subscriptions.set(space.id, subscribeToSpaceUpdate(space));
|
|
795
|
-
});
|
|
796
|
-
}
|
|
797
|
-
});
|
|
798
|
-
scheduleTaskInterval(this._ctx, async () => updateSpaceMetrics.emit(), NETWORK_METRICS_MIN_INTERVAL);
|
|
799
|
-
}
|
|
800
|
-
async startRuntimeMetrics(client, frequency = NETWORK_METRICS_MIN_INTERVAL) {
|
|
801
|
-
const platform = await client.services.services.SystemService?.getPlatform();
|
|
802
|
-
invariant(platform, "platform is required", {
|
|
803
|
-
F: __dxlog_file3,
|
|
804
|
-
L: 463,
|
|
805
|
-
S: this,
|
|
806
|
-
A: [
|
|
807
|
-
"platform",
|
|
808
|
-
"'platform is required'"
|
|
809
|
-
]
|
|
810
|
-
});
|
|
811
|
-
this.setTag("platformType", Platform.PLATFORM_TYPE[platform.type].toLowerCase());
|
|
812
|
-
if (this._mode === "full") {
|
|
813
|
-
if (platform.platform) {
|
|
814
|
-
this.setTag("platform", platform.platform);
|
|
815
|
-
}
|
|
816
|
-
if (platform.arch) {
|
|
817
|
-
this.setTag("arch", platform.arch);
|
|
818
|
-
}
|
|
819
|
-
if (platform.runtime) {
|
|
820
|
-
this.setTag("runtime", platform.runtime);
|
|
821
|
-
}
|
|
822
|
-
}
|
|
823
|
-
scheduleTaskInterval(this._ctx, async () => {
|
|
824
|
-
if (client.services.constructor.name === "WorkerClientServices") {
|
|
825
|
-
const memory = window.performance.memory;
|
|
826
|
-
if (memory) {
|
|
827
|
-
this.gauge("dxos.client.runtime.heapTotal", memory.totalJSHeapSize);
|
|
828
|
-
this.gauge("dxos.client.runtime.heapUsed", memory.usedJSHeapSize);
|
|
829
|
-
this.gauge("dxos.client.runtime.heapSizeLimit", memory.jsHeapSizeLimit);
|
|
830
|
-
}
|
|
831
|
-
}
|
|
832
|
-
client.services.services.SystemService?.getPlatform().then((platform2) => {
|
|
833
|
-
if (platform2.memory) {
|
|
834
|
-
this.gauge("dxos.client.services.runtime.rss", platform2.memory.rss);
|
|
835
|
-
this.gauge("dxos.client.services.runtime.heapTotal", platform2.memory.heapTotal);
|
|
836
|
-
this.gauge("dxos.client.services.runtime.heapUsed", platform2.memory.heapUsed);
|
|
837
|
-
}
|
|
838
|
-
}).catch((error) => log3("platform error", {
|
|
839
|
-
error
|
|
840
|
-
}, {
|
|
841
|
-
F: __dxlog_file3,
|
|
842
|
-
L: 497,
|
|
843
|
-
S: this,
|
|
844
|
-
C: (f, a) => f(...a)
|
|
845
|
-
}));
|
|
846
|
-
}, frequency);
|
|
847
|
-
}
|
|
848
|
-
//
|
|
849
|
-
// Telemetry
|
|
850
|
-
//
|
|
851
|
-
async _initTelemetry() {
|
|
852
|
-
if (this._secrets.TELEMETRY_API_KEY && this._mode !== "disabled" && typeof document !== "undefined") {
|
|
853
|
-
const { SegmentTelemetry } = await import("./segment/index.mjs");
|
|
854
|
-
this._telemetry = new SegmentTelemetry({
|
|
855
|
-
apiKey: this._secrets.TELEMETRY_API_KEY,
|
|
856
|
-
batchSize: this._telemetryBatchSize,
|
|
857
|
-
getTags: () => Object.fromEntries(Array.from(this._tags).filter(([key, value]) => {
|
|
858
|
-
return value.scope === "all" || value.scope === "telemetry";
|
|
859
|
-
}).map(([key, value]) => [
|
|
860
|
-
key,
|
|
861
|
-
value.value
|
|
862
|
-
]))
|
|
863
|
-
});
|
|
864
|
-
} else {
|
|
865
|
-
log3("segment disabled", void 0, {
|
|
866
|
-
F: __dxlog_file3,
|
|
867
|
-
L: 523,
|
|
868
|
-
S: this,
|
|
869
|
-
C: (f, a) => f(...a)
|
|
870
|
-
});
|
|
871
|
-
}
|
|
872
|
-
}
|
|
873
|
-
/**
|
|
874
|
-
* Submit telemetry page view.
|
|
875
|
-
* The default implementation uses Segment.
|
|
876
|
-
*/
|
|
877
|
-
page(options) {
|
|
878
|
-
this._telemetry?.page(options);
|
|
879
|
-
}
|
|
880
|
-
/**
|
|
881
|
-
* Submit telemetry user action.
|
|
882
|
-
* The default implementation uses Segment.
|
|
883
|
-
*/
|
|
884
|
-
track(options) {
|
|
885
|
-
this._telemetry?.track(options);
|
|
886
|
-
}
|
|
887
|
-
//
|
|
888
|
-
// Error Logs
|
|
889
|
-
//
|
|
890
|
-
async _initErrorLogs() {
|
|
891
|
-
if (this._secrets.SENTRY_DESTINATION && this._mode !== "disabled") {
|
|
892
|
-
const { captureException, captureUserFeedback, init, setTag } = await import("./sentry/index.mjs");
|
|
893
|
-
const { SentryLogProcessor } = await import("./sentry-log-processor-HPUPCMRG.mjs");
|
|
894
|
-
this._captureException = captureException;
|
|
895
|
-
this._captureUserFeedback = captureUserFeedback;
|
|
896
|
-
this._setTag = setTag;
|
|
897
|
-
log3.info("Initializing Sentry", {
|
|
898
|
-
dest: this._secrets.SENTRY_DESTINATION,
|
|
899
|
-
options: this._errorReportingOptions
|
|
900
|
-
}, {
|
|
901
|
-
F: __dxlog_file3,
|
|
902
|
-
L: 556,
|
|
903
|
-
S: this,
|
|
904
|
-
C: (f, a) => f(...a)
|
|
905
|
-
});
|
|
906
|
-
this._sentryLogProcessor = new SentryLogProcessor();
|
|
907
|
-
init({
|
|
908
|
-
...this._errorReportingOptions,
|
|
909
|
-
destination: this._secrets.SENTRY_DESTINATION,
|
|
910
|
-
scrubFilenames: this._mode !== "full",
|
|
911
|
-
onError: (event) => this._sentryLogProcessor.addLogBreadcrumbsTo(event)
|
|
912
|
-
});
|
|
913
|
-
this._tags.forEach((v, k) => {
|
|
914
|
-
if (v.scope === "all" || v.scope === "errors") {
|
|
915
|
-
setTag(k, v.value);
|
|
916
|
-
}
|
|
917
|
-
});
|
|
918
|
-
} else {
|
|
919
|
-
log3("sentry disabled", void 0, {
|
|
920
|
-
F: __dxlog_file3,
|
|
921
|
-
L: 576,
|
|
922
|
-
S: this,
|
|
923
|
-
C: (f, a) => f(...a)
|
|
924
|
-
});
|
|
925
|
-
}
|
|
926
|
-
}
|
|
927
|
-
startErrorLogs() {
|
|
928
|
-
this._sentryLogProcessor && log3.runtimeConfig.processors.push(this._sentryLogProcessor.logProcessor);
|
|
929
|
-
}
|
|
930
|
-
startTraces() {
|
|
931
|
-
this._otelTraces && this._otelTraces.start();
|
|
932
|
-
}
|
|
933
|
-
// TODO(nf): Refactor init based on providers and their capabilities.
|
|
934
|
-
async _initTraces() {
|
|
935
|
-
if (this._secrets.OTEL_ENDPOINT && this._secrets.OTEL_AUTHORIZATION && this._mode !== "disabled") {
|
|
936
|
-
const { OtelTraces } = await import("./otel-AF5TSABC.mjs");
|
|
937
|
-
this._otelTraces = new OtelTraces({
|
|
938
|
-
endpoint: this._secrets.OTEL_ENDPOINT,
|
|
939
|
-
authorizationHeader: this._secrets.OTEL_AUTHORIZATION,
|
|
940
|
-
serviceName: this._namespace,
|
|
941
|
-
serviceVersion: this.getTag("release")?.value ?? "0.0.0",
|
|
942
|
-
getTags: () => Object.fromEntries(Array.from(this._tags).filter(([key, value]) => {
|
|
943
|
-
return value.scope === "all" || value.scope === "metrics";
|
|
944
|
-
}).map(([key, value]) => [
|
|
945
|
-
key,
|
|
946
|
-
value.value
|
|
947
|
-
]))
|
|
948
|
-
});
|
|
949
|
-
}
|
|
950
|
-
}
|
|
951
|
-
/**
|
|
952
|
-
* Manually capture an exception.
|
|
953
|
-
* The default implementation uses Sentry.
|
|
954
|
-
*/
|
|
955
|
-
captureException(err) {
|
|
956
|
-
if (this.enabled) {
|
|
957
|
-
this._captureException?.(err);
|
|
958
|
-
}
|
|
959
|
-
}
|
|
960
|
-
/**
|
|
961
|
-
* Manually capture user feedback.
|
|
962
|
-
* The default implementation uses Sentry.
|
|
963
|
-
*/
|
|
964
|
-
captureUserFeedback(message) {
|
|
965
|
-
if (!this._secrets.SENTRY_DESTINATION) {
|
|
966
|
-
log3.info("Feedback submitted without Sentry destination", {
|
|
967
|
-
message
|
|
968
|
-
}, {
|
|
969
|
-
F: __dxlog_file3,
|
|
970
|
-
L: 625,
|
|
971
|
-
S: this,
|
|
972
|
-
C: (f, a) => f(...a)
|
|
973
|
-
});
|
|
974
|
-
return;
|
|
975
|
-
}
|
|
976
|
-
void this._captureUserFeedback?.(message);
|
|
977
|
-
}
|
|
978
|
-
};
|
|
979
|
-
|
|
980
|
-
export {
|
|
981
|
-
Observability,
|
|
982
|
-
OBSERVABILITY_DISABLED_KEY,
|
|
983
|
-
OBSERVABILITY_GROUP_KEY,
|
|
984
|
-
isObservabilityDisabled,
|
|
985
|
-
storeObservabilityDisabled,
|
|
986
|
-
getObservabilityGroup,
|
|
987
|
-
storeObservabilityGroup,
|
|
988
|
-
initializeAppObservability,
|
|
989
|
-
getTelemetryIdentifier,
|
|
990
|
-
getTelemetryIdentity,
|
|
991
|
-
showObservabilityBanner,
|
|
992
|
-
getObservabilityState,
|
|
993
|
-
initializeNodeObservability,
|
|
994
|
-
mapSpaces,
|
|
995
|
-
setupTelemetryListeners
|
|
996
|
-
};
|
|
997
|
-
//# sourceMappingURL=chunk-M7QJLFGR.mjs.map
|