@dxos/observability 0.8.3 → 0.8.4-main.03d5cd7b56
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/README.md +14 -11
- package/dist/lib/browser/chunk-3534PNWM.mjs +13 -0
- package/dist/lib/browser/chunk-3534PNWM.mjs.map +7 -0
- package/dist/lib/browser/chunk-J5LGTIGS.mjs +10 -0
- package/dist/lib/browser/index.mjs +940 -34
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/log-processor-HPHWNBOK.mjs +38 -0
- package/dist/lib/browser/log-processor-HPHWNBOK.mjs.map +7 -0
- package/dist/lib/browser/logs-A2VDAHHD.mjs +115 -0
- package/dist/lib/browser/logs-A2VDAHHD.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/metrics-6OSN54ZV.mjs +115 -0
- package/dist/lib/browser/metrics-6OSN54ZV.mjs.map +7 -0
- package/dist/lib/browser/traces-browser-6MRGAKFC.mjs +151 -0
- package/dist/lib/browser/traces-browser-6MRGAKFC.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
- package/dist/lib/node-esm/chunk-SYPJQI4L.mjs +15 -0
- package/dist/lib/node-esm/chunk-SYPJQI4L.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +962 -34
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/log-processor-ZODHERST.mjs +39 -0
- package/dist/lib/node-esm/log-processor-ZODHERST.mjs.map +7 -0
- package/dist/lib/node-esm/logs-TA32MBMW.mjs +116 -0
- package/dist/lib/node-esm/logs-TA32MBMW.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/metrics-C5IKPAWD.mjs +116 -0
- package/dist/lib/node-esm/metrics-C5IKPAWD.mjs.map +7 -0
- package/dist/lib/node-esm/traces-5LKHMVVG.mjs +122 -0
- package/dist/lib/node-esm/traces-5LKHMVVG.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 +201 -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 +107 -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/span-processors.d.ts +25 -0
- package/dist/types/src/extensions/otel/span-processors.d.ts.map +1 -0
- package/dist/types/src/extensions/otel/span-processors.js +41 -0
- package/dist/types/src/extensions/otel/span-processors.js.map +1 -0
- package/dist/types/src/extensions/otel/traces-browser.d.ts +25 -0
- package/dist/types/src/extensions/otel/traces-browser.d.ts.map +1 -0
- package/dist/types/src/extensions/otel/traces-browser.js +104 -0
- package/dist/types/src/extensions/otel/traces-browser.js.map +1 -0
- package/dist/types/src/extensions/otel/traces.d.ts +25 -0
- package/dist/types/src/extensions/otel/traces.d.ts.map +1 -0
- package/dist/types/src/extensions/otel/traces.js +87 -0
- package/dist/types/src/extensions/otel/traces.js.map +1 -0
- package/dist/types/src/extensions/posthog/extension.d.ts +22 -0
- package/dist/types/src/extensions/posthog/extension.d.ts.map +1 -0
- package/dist/types/src/extensions/posthog/extension.js +144 -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 +36 -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 +3 -2
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/index.js +4 -3
- package/dist/types/src/index.js.map +1 -1
- 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 +202 -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 +57 -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 +69 -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 +46 -63
- package/src/cli-observability-secrets.json +3 -4
- package/src/extensions/index.ts +6 -0
- package/src/extensions/otel/extension.ts +258 -0
- package/src/extensions/otel/index.ts +5 -0
- package/src/extensions/otel/logs.ts +137 -0
- package/src/{otel → extensions/otel}/metrics.ts +4 -21
- package/src/{otel → extensions/otel}/otel.ts +4 -4
- package/src/extensions/otel/span-processors.ts +45 -0
- package/src/extensions/otel/traces-browser.ts +139 -0
- package/src/extensions/otel/traces.ts +113 -0
- package/src/extensions/posthog/extension.ts +181 -0
- package/src/extensions/posthog/index.ts +5 -0
- package/src/extensions/posthog/log-processor.test.ts +186 -0
- package/src/extensions/posthog/log-processor.ts +43 -0
- package/src/extensions/stub.ts +19 -0
- package/src/index.ts +4 -3
- 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 +255 -0
- package/src/providers/index.ts +7 -0
- package/src/providers/ip-data.ts +91 -0
- package/src/providers/storage.ts +23 -0
- package/src/storage/browser.ts +71 -0
- package/src/{sentry → storage}/index.ts +0 -1
- package/src/storage/node.test.ts +129 -0
- package/src/{helpers/node-observability.ts → storage/node.ts} +41 -70
- package/src/vite-import-meta.d.ts +14 -0
- 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 +0 -8
- 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 +0 -8
- 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
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Copyright 2022 DXOS.org
|
|
3
|
-
//
|
|
4
|
-
|
|
5
|
-
import type { Client } from '@dxos/client';
|
|
6
|
-
|
|
7
|
-
import { getTelemetryIdentity } from './common';
|
|
8
|
-
import { type Observability } from '../observability';
|
|
9
|
-
|
|
10
|
-
let lastFocusEvent = new Date();
|
|
11
|
-
let totalTime = 0;
|
|
12
|
-
|
|
13
|
-
export const setupTelemetryListeners = (namespace: string, client: Client, observability: Observability) => {
|
|
14
|
-
const clickCallback = (event: Event) => {
|
|
15
|
-
const id = (event.target as HTMLElement)?.id;
|
|
16
|
-
if (!id) {
|
|
17
|
-
return;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
setTimeout(() => {
|
|
21
|
-
observability.track({
|
|
22
|
-
...getTelemetryIdentity(client),
|
|
23
|
-
action: 'window.click',
|
|
24
|
-
properties: {
|
|
25
|
-
id: (event.target as HTMLElement)?.id,
|
|
26
|
-
path: (event.composedPath() as HTMLElement[])
|
|
27
|
-
.filter((el) => Boolean(el.tagName))
|
|
28
|
-
.map((el) => `${el.tagName.toLowerCase()}${el.id ? `#${el.id}` : ''}`)
|
|
29
|
-
.reverse()
|
|
30
|
-
.join('>'),
|
|
31
|
-
},
|
|
32
|
-
});
|
|
33
|
-
});
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
const focusCallback = () => {
|
|
37
|
-
const now = new Date();
|
|
38
|
-
setTimeout(() => {
|
|
39
|
-
observability.track({
|
|
40
|
-
...getTelemetryIdentity(client),
|
|
41
|
-
action: 'window.focus',
|
|
42
|
-
properties: {
|
|
43
|
-
timeAway: now.getTime() - lastFocusEvent.getTime(),
|
|
44
|
-
},
|
|
45
|
-
});
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
lastFocusEvent = now;
|
|
49
|
-
};
|
|
50
|
-
|
|
51
|
-
const blurCallback = () => {
|
|
52
|
-
const now = new Date();
|
|
53
|
-
const duration = now.getTime() - lastFocusEvent.getTime();
|
|
54
|
-
setTimeout(() => {
|
|
55
|
-
observability.track({
|
|
56
|
-
...getTelemetryIdentity(client),
|
|
57
|
-
action: 'window.blur',
|
|
58
|
-
properties: {
|
|
59
|
-
duration,
|
|
60
|
-
},
|
|
61
|
-
});
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
lastFocusEvent = now;
|
|
65
|
-
totalTime = totalTime + duration;
|
|
66
|
-
};
|
|
67
|
-
|
|
68
|
-
const unloadCallback = () => {
|
|
69
|
-
setTimeout(() => {
|
|
70
|
-
observability.track({
|
|
71
|
-
...getTelemetryIdentity(client),
|
|
72
|
-
action: 'page.unload',
|
|
73
|
-
properties: {
|
|
74
|
-
duration: totalTime,
|
|
75
|
-
},
|
|
76
|
-
});
|
|
77
|
-
});
|
|
78
|
-
};
|
|
79
|
-
|
|
80
|
-
const errorCallback = (event: ErrorEvent) => {
|
|
81
|
-
setTimeout(() => {
|
|
82
|
-
observability.track({
|
|
83
|
-
...getTelemetryIdentity(client),
|
|
84
|
-
action: 'window.error',
|
|
85
|
-
properties: {
|
|
86
|
-
message: event.message,
|
|
87
|
-
filename: event.filename,
|
|
88
|
-
stack: (event.error as Error)?.stack,
|
|
89
|
-
cause: (event.error as Error)?.cause,
|
|
90
|
-
},
|
|
91
|
-
});
|
|
92
|
-
});
|
|
93
|
-
};
|
|
94
|
-
|
|
95
|
-
window.addEventListener('click', clickCallback, true);
|
|
96
|
-
window.addEventListener('focus', focusCallback);
|
|
97
|
-
window.addEventListener('blur', blurCallback);
|
|
98
|
-
window.addEventListener('beforeunload', unloadCallback);
|
|
99
|
-
window.addEventListener('error', errorCallback);
|
|
100
|
-
|
|
101
|
-
return () => {
|
|
102
|
-
window.removeEventListener('click', clickCallback, true);
|
|
103
|
-
window.removeEventListener('focus', focusCallback);
|
|
104
|
-
window.removeEventListener('blur', blurCallback);
|
|
105
|
-
window.removeEventListener('beforeunload', unloadCallback);
|
|
106
|
-
window.removeEventListener('error', errorCallback);
|
|
107
|
-
};
|
|
108
|
-
};
|
package/src/otel/index.ts
DELETED
package/src/otel/logs.ts
DELETED
|
@@ -1,100 +0,0 @@
|
|
|
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 { Resource } from '@opentelemetry/resources';
|
|
8
|
-
import { BatchLogRecordProcessor, LoggerProvider } from '@opentelemetry/sdk-logs';
|
|
9
|
-
import { SEMRESATTRS_SERVICE_NAME, SEMRESATTRS_SERVICE_VERSION } from '@opentelemetry/semantic-conventions';
|
|
10
|
-
|
|
11
|
-
import {
|
|
12
|
-
getContextFromEntry,
|
|
13
|
-
getRelativeFilename,
|
|
14
|
-
type LogConfig,
|
|
15
|
-
type LogEntry,
|
|
16
|
-
LogLevel,
|
|
17
|
-
type LogProcessor,
|
|
18
|
-
} from '@dxos/log';
|
|
19
|
-
import { jsonlogify } from '@dxos/util';
|
|
20
|
-
|
|
21
|
-
import { type OtelOptions, setDiagLogger } from './otel';
|
|
22
|
-
|
|
23
|
-
export type OtelLogOptions = OtelOptions & {
|
|
24
|
-
logLevel: LogLevel;
|
|
25
|
-
/**
|
|
26
|
-
* Set `true` to capture logs sent through LoggingService from shared worker.
|
|
27
|
-
* Better to set to `false` because shared worker is initializing its own logger.
|
|
28
|
-
*/
|
|
29
|
-
includeSharedWorkerLogs: boolean;
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
export class OtelLogs {
|
|
33
|
-
private _loggerProvider: LoggerProvider;
|
|
34
|
-
constructor(private readonly options: OtelLogOptions) {
|
|
35
|
-
setDiagLogger(options.consoleDiagLogLevel);
|
|
36
|
-
const resource = Resource.default().merge(
|
|
37
|
-
new Resource({
|
|
38
|
-
[SEMRESATTRS_SERVICE_NAME]: this.options.serviceName,
|
|
39
|
-
[SEMRESATTRS_SERVICE_VERSION]: this.options.serviceVersion,
|
|
40
|
-
}),
|
|
41
|
-
);
|
|
42
|
-
const logExporter = new OTLPLogExporter({
|
|
43
|
-
url: this.options.endpoint + '/v1/logs',
|
|
44
|
-
headers: {
|
|
45
|
-
Authorization: this.options.authorizationHeader,
|
|
46
|
-
},
|
|
47
|
-
concurrencyLimit: 10, // an optional limit on pending requests
|
|
48
|
-
});
|
|
49
|
-
this._loggerProvider = new LoggerProvider({ resource });
|
|
50
|
-
this._loggerProvider.addLogRecordProcessor(new BatchLogRecordProcessor(logExporter));
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
public readonly logProcessor: LogProcessor = (config: LogConfig, entry: LogEntry) => {
|
|
54
|
-
const logger = this._loggerProvider.getLogger('dxos-observability', this.options.serviceVersion);
|
|
55
|
-
|
|
56
|
-
if (
|
|
57
|
-
entry.level < this.options.logLevel ||
|
|
58
|
-
(!this.options.includeSharedWorkerLogs && entry.meta?.S?.remoteSessionId)
|
|
59
|
-
) {
|
|
60
|
-
return;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
const record = {
|
|
64
|
-
...entry,
|
|
65
|
-
...(entry.meta ? { meta: { file: getRelativeFilename(entry.meta.F), line: entry.meta.L } } : {}),
|
|
66
|
-
context: jsonlogify(getContextFromEntry(entry)),
|
|
67
|
-
};
|
|
68
|
-
|
|
69
|
-
logger.emit({
|
|
70
|
-
severityNumber: convertLevel(entry.level),
|
|
71
|
-
body: JSON.stringify(record),
|
|
72
|
-
attributes: this.options.getTags(),
|
|
73
|
-
});
|
|
74
|
-
};
|
|
75
|
-
|
|
76
|
-
flush(): Promise<void> {
|
|
77
|
-
return this._loggerProvider.forceFlush();
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
close(): Promise<void> {
|
|
81
|
-
return this._loggerProvider.shutdown();
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
const convertLevel = (level: LogLevel): SeverityNumber => {
|
|
86
|
-
switch (level) {
|
|
87
|
-
case LogLevel.DEBUG:
|
|
88
|
-
return SeverityNumber.DEBUG;
|
|
89
|
-
case LogLevel.VERBOSE:
|
|
90
|
-
return SeverityNumber.INFO;
|
|
91
|
-
case LogLevel.INFO:
|
|
92
|
-
return SeverityNumber.INFO;
|
|
93
|
-
case LogLevel.WARN:
|
|
94
|
-
return SeverityNumber.WARN;
|
|
95
|
-
case LogLevel.ERROR:
|
|
96
|
-
return SeverityNumber.ERROR;
|
|
97
|
-
default:
|
|
98
|
-
return SeverityNumber.ERROR;
|
|
99
|
-
}
|
|
100
|
-
};
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Copyright 2024 DXOS.org
|
|
3
|
-
//
|
|
4
|
-
|
|
5
|
-
import { trace, type Tracer } 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 { Resource } from '@opentelemetry/resources';
|
|
10
|
-
import { ConsoleSpanExporter, SimpleSpanProcessor, BatchSpanProcessor } from '@opentelemetry/sdk-trace-base';
|
|
11
|
-
import { WebTracerProvider } from '@opentelemetry/sdk-trace-web';
|
|
12
|
-
import { SEMRESATTRS_SERVICE_NAME, SEMRESATTRS_SERVICE_VERSION } from '@opentelemetry/semantic-conventions';
|
|
13
|
-
|
|
14
|
-
import { log } from '@dxos/log';
|
|
15
|
-
import { TRACE_PROCESSOR, type StartSpanOptions } from '@dxos/tracing';
|
|
16
|
-
|
|
17
|
-
import { type OtelOptions } from './otel';
|
|
18
|
-
|
|
19
|
-
export class OtelTraces {
|
|
20
|
-
private _tracer: Tracer;
|
|
21
|
-
constructor(private readonly options: OtelOptions) {
|
|
22
|
-
const resource = Resource.default().merge(
|
|
23
|
-
new Resource({
|
|
24
|
-
[SEMRESATTRS_SERVICE_NAME]: this.options.serviceName,
|
|
25
|
-
[SEMRESATTRS_SERVICE_VERSION]: this.options.serviceVersion,
|
|
26
|
-
}),
|
|
27
|
-
);
|
|
28
|
-
|
|
29
|
-
const tracerProvider = new WebTracerProvider({ resource });
|
|
30
|
-
tracerProvider.addSpanProcessor(new SimpleSpanProcessor(new ConsoleSpanExporter()));
|
|
31
|
-
tracerProvider.addSpanProcessor(
|
|
32
|
-
new BatchSpanProcessor(
|
|
33
|
-
new OTLPTraceExporter({
|
|
34
|
-
url: this.options.endpoint + '/v1/traces',
|
|
35
|
-
headers: {
|
|
36
|
-
Authorization: this.options.authorizationHeader,
|
|
37
|
-
},
|
|
38
|
-
concurrencyLimit: 10, // an optional limit on pending requests
|
|
39
|
-
}),
|
|
40
|
-
),
|
|
41
|
-
);
|
|
42
|
-
// TODO(nf): ContextManager? Propogator?
|
|
43
|
-
tracerProvider.register({});
|
|
44
|
-
this._tracer = trace.getTracer('dxos-observability', this.options.serviceVersion);
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
public start(): void {
|
|
48
|
-
registerInstrumentations({
|
|
49
|
-
instrumentations: [getWebAutoInstrumentations()],
|
|
50
|
-
});
|
|
51
|
-
log('trace processor registered');
|
|
52
|
-
TRACE_PROCESSOR.remoteTracing.registerProcessor({
|
|
53
|
-
startSpan: (options: StartSpanOptions) => {
|
|
54
|
-
log('begin otel trace', { options });
|
|
55
|
-
return this._tracer.startSpan(options.name, options);
|
|
56
|
-
},
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
}
|
package/src/otel/traces.ts
DELETED
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Copyright 2024 DXOS.org
|
|
3
|
-
//
|
|
4
|
-
|
|
5
|
-
import { trace, type Tracer } from '@opentelemetry/api';
|
|
6
|
-
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
|
|
7
|
-
import { Resource } from '@opentelemetry/resources';
|
|
8
|
-
import {
|
|
9
|
-
BasicTracerProvider,
|
|
10
|
-
BatchSpanProcessor,
|
|
11
|
-
ConsoleSpanExporter,
|
|
12
|
-
SimpleSpanProcessor,
|
|
13
|
-
} from '@opentelemetry/sdk-trace-base';
|
|
14
|
-
import { SEMRESATTRS_SERVICE_NAME, SEMRESATTRS_SERVICE_VERSION } from '@opentelemetry/semantic-conventions';
|
|
15
|
-
import { log } from 'debug';
|
|
16
|
-
|
|
17
|
-
import { TRACE_PROCESSOR, type StartSpanOptions } from '@dxos/tracing';
|
|
18
|
-
|
|
19
|
-
import { type OtelOptions } from './otel';
|
|
20
|
-
|
|
21
|
-
export class OtelTraces {
|
|
22
|
-
private _tracer: Tracer;
|
|
23
|
-
constructor(private readonly options: OtelOptions) {
|
|
24
|
-
const resource = Resource.default().merge(
|
|
25
|
-
new Resource({
|
|
26
|
-
[SEMRESATTRS_SERVICE_NAME]: this.options.serviceName,
|
|
27
|
-
[SEMRESATTRS_SERVICE_VERSION]: this.options.serviceVersion,
|
|
28
|
-
}),
|
|
29
|
-
);
|
|
30
|
-
|
|
31
|
-
const tracerProvider = new BasicTracerProvider({ resource });
|
|
32
|
-
tracerProvider.addSpanProcessor(new SimpleSpanProcessor(new ConsoleSpanExporter()));
|
|
33
|
-
tracerProvider.addSpanProcessor(
|
|
34
|
-
new BatchSpanProcessor(
|
|
35
|
-
new OTLPTraceExporter({
|
|
36
|
-
url: this.options.endpoint + '/v1/traces',
|
|
37
|
-
headers: {
|
|
38
|
-
Authorization: this.options.authorizationHeader,
|
|
39
|
-
},
|
|
40
|
-
concurrencyLimit: 10, // an optional limit on pending requests
|
|
41
|
-
}),
|
|
42
|
-
),
|
|
43
|
-
);
|
|
44
|
-
tracerProvider.register();
|
|
45
|
-
this._tracer = trace.getTracer('dxos-observability', this.options.serviceVersion);
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
public start(): void {
|
|
49
|
-
log('trace processor registered');
|
|
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
|
-
}
|
package/src/segment/base.ts
DELETED
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Copyright 2025 DXOS.org
|
|
3
|
-
//
|
|
4
|
-
|
|
5
|
-
import { type TrackParams, type PageParams, type IdentifyParams } from '@segment/analytics-node';
|
|
6
|
-
|
|
7
|
-
import { log } from '@dxos/log';
|
|
8
|
-
|
|
9
|
-
import {
|
|
10
|
-
type IdentityOptions,
|
|
11
|
-
type PageOptions,
|
|
12
|
-
type SegmentIdentityOptions,
|
|
13
|
-
type Tags,
|
|
14
|
-
TelemetryEvent,
|
|
15
|
-
type TrackOptions,
|
|
16
|
-
} from './types';
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* NOTE: Segment provides a default ID if we don't provide one.
|
|
20
|
-
*/
|
|
21
|
-
const getIdentityOptions = ({ did, installationId }: IdentityOptions): SegmentIdentityOptions => {
|
|
22
|
-
if (!did && !installationId) {
|
|
23
|
-
log.warn('No telemetry identifier provided.');
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
return {
|
|
27
|
-
userId: did,
|
|
28
|
-
anonymousId: installationId,
|
|
29
|
-
} as SegmentIdentityOptions;
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* Base class for Node and BrowserSegment telemetry.
|
|
34
|
-
*/
|
|
35
|
-
export abstract class AbstractSegmentTelemetry {
|
|
36
|
-
constructor(private readonly _getTags: () => Tags) {}
|
|
37
|
-
|
|
38
|
-
abstract identify(options: IdentifyParams): void;
|
|
39
|
-
|
|
40
|
-
abstract page(options: PageOptions): void;
|
|
41
|
-
|
|
42
|
-
abstract track(options: TrackOptions): void;
|
|
43
|
-
|
|
44
|
-
protected createPageProps(options: PageOptions): PageParams {
|
|
45
|
-
const { properties, ...rest } = options;
|
|
46
|
-
return {
|
|
47
|
-
...getIdentityOptions(options),
|
|
48
|
-
...rest,
|
|
49
|
-
properties: {
|
|
50
|
-
common: this._getTags(),
|
|
51
|
-
custom: properties,
|
|
52
|
-
},
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
protected createTrackProps(options: TrackOptions): TrackParams {
|
|
57
|
-
const { event, action, properties, ...rest } = options;
|
|
58
|
-
return {
|
|
59
|
-
...getIdentityOptions(options),
|
|
60
|
-
...rest,
|
|
61
|
-
event: event ?? TelemetryEvent.ACTION,
|
|
62
|
-
properties: {
|
|
63
|
-
action,
|
|
64
|
-
common: this._getTags(),
|
|
65
|
-
custom: properties,
|
|
66
|
-
},
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
}
|
package/src/segment/browser.ts
DELETED
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Copyright 2022 DXOS.org
|
|
3
|
-
//
|
|
4
|
-
|
|
5
|
-
import { type IdentifyParams } from '@segment/analytics-node';
|
|
6
|
-
import snippet from '@segment/snippet';
|
|
7
|
-
|
|
8
|
-
import { log } from '@dxos/log';
|
|
9
|
-
|
|
10
|
-
import { AbstractSegmentTelemetry } from './base';
|
|
11
|
-
import type { TrackOptions, SegmentTelemetryOptions, PageOptions } from './types';
|
|
12
|
-
import { captureException } from '../sentry';
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Browser telemetry.
|
|
16
|
-
*/
|
|
17
|
-
// https://segment.com/docs/connections/sources/catalog/libraries/website/javascript/#basic-tracking-methods
|
|
18
|
-
export class SegmentTelemetry extends AbstractSegmentTelemetry {
|
|
19
|
-
constructor({ apiKey, batchSize, getTags }: SegmentTelemetryOptions) {
|
|
20
|
-
super(getTags);
|
|
21
|
-
try {
|
|
22
|
-
const contents = snippet.min({ apiKey, page: false });
|
|
23
|
-
const script = document.createElement('script');
|
|
24
|
-
script.innerHTML = contents;
|
|
25
|
-
document.body.append(script);
|
|
26
|
-
} catch (err) {
|
|
27
|
-
log.catch('failed to initialize telemetry', err);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
identify(options: IdentifyParams): void {
|
|
32
|
-
try {
|
|
33
|
-
(window as any).analytics?.identify(options.userId, options.traits);
|
|
34
|
-
} catch (err) {
|
|
35
|
-
log.catch('failed to identify', err);
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
page(options: PageOptions): void {
|
|
40
|
-
try {
|
|
41
|
-
const props = this.createPageProps(options);
|
|
42
|
-
(window as any).analytics?.page(props.category, props.name, props.properties);
|
|
43
|
-
} catch (err) {
|
|
44
|
-
log.catch('failed to track page', err);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
track(options: TrackOptions): void {
|
|
49
|
-
try {
|
|
50
|
-
const props = this.createTrackProps(options);
|
|
51
|
-
(window as any).analytics?.track(props.event, props.properties);
|
|
52
|
-
} catch (err) {
|
|
53
|
-
log.catch('failed to track event', err);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
async flush(): Promise<void> {
|
|
58
|
-
try {
|
|
59
|
-
await (window as any).analytics?.flush((err: any) => {
|
|
60
|
-
captureException(err);
|
|
61
|
-
});
|
|
62
|
-
} catch (err) {
|
|
63
|
-
log.catch('failed to flush telemetry', err);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
async close(): Promise<void> {}
|
|
68
|
-
}
|
package/src/segment/node.ts
DELETED
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Copyright 2022 DXOS.org
|
|
3
|
-
//
|
|
4
|
-
|
|
5
|
-
import { Analytics, type IdentifyParams } from '@segment/analytics-node';
|
|
6
|
-
|
|
7
|
-
import { invariant } from '@dxos/invariant';
|
|
8
|
-
import { log } from '@dxos/log';
|
|
9
|
-
|
|
10
|
-
import { AbstractSegmentTelemetry } from './base';
|
|
11
|
-
import type { SegmentTelemetryOptions, PageOptions, TrackOptions } from './types';
|
|
12
|
-
import { captureException } from '../sentry';
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Node telemetry.
|
|
16
|
-
*/
|
|
17
|
-
export class SegmentTelemetry extends AbstractSegmentTelemetry {
|
|
18
|
-
private _analytics?: Analytics;
|
|
19
|
-
|
|
20
|
-
constructor({ apiKey, batchSize, getTags }: SegmentTelemetryOptions) {
|
|
21
|
-
super(getTags);
|
|
22
|
-
try {
|
|
23
|
-
invariant(apiKey, 'Missing API key.');
|
|
24
|
-
this._analytics = new Analytics({
|
|
25
|
-
writeKey: apiKey,
|
|
26
|
-
flushAt: batchSize,
|
|
27
|
-
});
|
|
28
|
-
} catch (err) {
|
|
29
|
-
log.catch('Failed to initialize telemetry', err);
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
identify(options: IdentifyParams): void {
|
|
34
|
-
if (!this._analytics) {
|
|
35
|
-
log('Analytics not initialized', { action: 'identify' });
|
|
36
|
-
return;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
try {
|
|
40
|
-
this._analytics.identify(options);
|
|
41
|
-
} catch (err) {
|
|
42
|
-
log.catch('Failed to identify', err);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
page(options: PageOptions): void {
|
|
47
|
-
if (!this._analytics) {
|
|
48
|
-
log('Analytics not initialized', { action: 'page' });
|
|
49
|
-
return;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
try {
|
|
53
|
-
this._analytics.page(this.createPageProps(options));
|
|
54
|
-
} catch (err) {
|
|
55
|
-
log.catch('Failed to track page', err);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
track(options: TrackOptions): void {
|
|
60
|
-
if (!this._analytics) {
|
|
61
|
-
log('Analytics not initialized', { action: 'track' });
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
log.info('sending event to telemetry', { options });
|
|
66
|
-
try {
|
|
67
|
-
this._analytics.track(this.createTrackProps(options));
|
|
68
|
-
} catch (err) {
|
|
69
|
-
log.catch('Failed to track action', err);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
async flush(): Promise<void> {
|
|
74
|
-
if (!this._analytics) {
|
|
75
|
-
log('Analytics not initialized', { action: 'flush' });
|
|
76
|
-
return;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
try {
|
|
80
|
-
await this._analytics.flush();
|
|
81
|
-
} catch (err) {
|
|
82
|
-
// are these errors worth capturing?
|
|
83
|
-
captureException(err);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
async close(): Promise<void> {
|
|
88
|
-
if (!this._analytics) {
|
|
89
|
-
return;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
await this._analytics.closeAndFlush();
|
|
93
|
-
}
|
|
94
|
-
}
|
package/src/segment/types.ts
DELETED
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Copyright 2022 DXOS.org
|
|
3
|
-
//
|
|
4
|
-
|
|
5
|
-
export type Tags = Record<string, string>;
|
|
6
|
-
|
|
7
|
-
export type SegmentTelemetryOptions = {
|
|
8
|
-
apiKey?: string;
|
|
9
|
-
batchSize?: number;
|
|
10
|
-
enable?: boolean;
|
|
11
|
-
getTags: () => Tags;
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
// Copied from @segment/analytics-node.
|
|
15
|
-
export type SegmentIdentityOptions =
|
|
16
|
-
| { userId: string; anonymousId?: string }
|
|
17
|
-
| { userId?: string; anonymousId: string };
|
|
18
|
-
|
|
19
|
-
// TODO(burdon): Should require one or the other.
|
|
20
|
-
export type IdentityOptions = { did?: string; installationId?: string };
|
|
21
|
-
|
|
22
|
-
export type CommonOptions = IdentityOptions & {
|
|
23
|
-
timestamp?: Date;
|
|
24
|
-
properties?: Record<string, unknown>;
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* Page views.
|
|
29
|
-
* https://segment.com/docs/connections/sources/catalog/libraries/server/node/#page
|
|
30
|
-
*/
|
|
31
|
-
export type PageOptions = CommonOptions & {
|
|
32
|
-
category?: string;
|
|
33
|
-
name?: string;
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* Track actions.
|
|
38
|
-
* https://segment.com/docs/connections/sources/catalog/libraries/server/node/#track
|
|
39
|
-
*/
|
|
40
|
-
export type TrackOptions = CommonOptions & {
|
|
41
|
-
event?: TelemetryEvent;
|
|
42
|
-
action: string;
|
|
43
|
-
};
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* Each event will be mapped to a different Postgres table via segment.
|
|
47
|
-
*/
|
|
48
|
-
export enum TelemetryEvent {
|
|
49
|
-
/**
|
|
50
|
-
* Use actions.
|
|
51
|
-
*/
|
|
52
|
-
ACTION = 'action',
|
|
53
|
-
/**
|
|
54
|
-
* High-volume technical metrics.
|
|
55
|
-
*/
|
|
56
|
-
METRICS = 'metrics',
|
|
57
|
-
}
|