@dxos/observability 0.5.5 → 0.5.6-main.1a02a59

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/dist/lib/browser/chunk-3LKCQYWD.mjs +159 -0
  2. package/dist/lib/browser/chunk-3LKCQYWD.mjs.map +7 -0
  3. package/dist/lib/browser/{chunk-5E3CR23D.mjs → chunk-64DLKIEF.mjs} +6 -9
  4. package/dist/lib/browser/chunk-64DLKIEF.mjs.map +7 -0
  5. package/dist/lib/browser/chunk-KDP3SESE.mjs +1 -0
  6. package/dist/lib/browser/index.mjs +2 -2
  7. package/dist/lib/browser/meta.json +1 -1
  8. package/dist/lib/browser/observability-ISNTBWXN.mjs +8 -0
  9. package/dist/lib/browser/observability-ISNTBWXN.mjs.map +7 -0
  10. package/dist/lib/browser/segment/index.mjs +2 -1
  11. package/dist/lib/browser/segment/index.mjs.map +1 -1
  12. package/dist/lib/browser/sentry/index.mjs +2 -7
  13. package/dist/lib/node/chunk-GIYJMZEQ.cjs +2 -0
  14. package/dist/lib/node/chunk-GIYJMZEQ.cjs.map +7 -0
  15. package/dist/lib/node/chunk-HKBUNAUG.cjs +161 -0
  16. package/dist/lib/node/chunk-HKBUNAUG.cjs.map +7 -0
  17. package/dist/lib/node/{chunk-NFII7GBC.cjs → chunk-JK37YWUB.cjs} +12 -15
  18. package/dist/lib/node/chunk-JK37YWUB.cjs.map +7 -0
  19. package/dist/lib/node/index.cjs +16 -16
  20. package/dist/lib/node/index.cjs.map +1 -1
  21. package/dist/lib/node/meta.json +1 -1
  22. package/dist/lib/node/{observability-6KNNVT6F.cjs → observability-VXJOCKID.cjs} +7 -7
  23. package/dist/lib/node/{observability-6KNNVT6F.cjs.map → observability-VXJOCKID.cjs.map} +2 -2
  24. package/dist/lib/node/segment/index.cjs +3 -2
  25. package/dist/lib/node/segment/index.cjs.map +1 -1
  26. package/dist/lib/node/sentry/index.cjs +11 -12
  27. package/dist/lib/node/sentry/index.cjs.map +2 -2
  28. package/dist/types/src/observability.d.ts.map +1 -1
  29. package/dist/types/src/observability.js +1 -5
  30. package/dist/types/src/observability.js.map +1 -1
  31. package/dist/types/src/sentry/browser.d.ts +1 -2
  32. package/dist/types/src/sentry/browser.d.ts.map +1 -1
  33. package/dist/types/src/sentry/browser.js +7 -19
  34. package/dist/types/src/sentry/browser.js.map +1 -1
  35. package/dist/types/src/sentry/index.d.ts +0 -1
  36. package/dist/types/src/sentry/index.d.ts.map +1 -1
  37. package/dist/types/src/sentry/index.js +0 -4
  38. package/dist/types/src/sentry/index.js.map +1 -1
  39. package/dist/types/src/sentry/node.d.ts.map +1 -1
  40. package/dist/types/src/sentry/node.js +6 -28
  41. package/dist/types/src/sentry/node.js.map +1 -1
  42. package/dist/types/src/sentry/sentry-log-processor.d.ts.map +1 -1
  43. package/dist/types/src/sentry/sentry-log-processor.js +7 -5
  44. package/dist/types/src/sentry/sentry-log-processor.js.map +1 -1
  45. package/package.json +18 -19
  46. package/src/observability.ts +1 -4
  47. package/src/sentry/browser.ts +12 -7
  48. package/src/sentry/index.ts +0 -3
  49. package/src/sentry/node.ts +10 -7
  50. package/src/sentry/sentry-log-processor.ts +3 -2
  51. package/dist/lib/browser/chunk-5E3CR23D.mjs.map +0 -7
  52. package/dist/lib/browser/chunk-I72ZJDDP.mjs +0 -328
  53. package/dist/lib/browser/chunk-I72ZJDDP.mjs.map +0 -7
  54. package/dist/lib/browser/observability-SGYNJETW.mjs +0 -8
  55. package/dist/lib/node/chunk-2F4DCY4M.cjs +0 -345
  56. package/dist/lib/node/chunk-2F4DCY4M.cjs.map +0 -7
  57. package/dist/lib/node/chunk-NFII7GBC.cjs.map +0 -7
  58. package/dist/types/src/sentry/tracing.d.ts +0 -5
  59. package/dist/types/src/sentry/tracing.d.ts.map +0 -1
  60. package/dist/types/src/sentry/tracing.js +0 -141
  61. package/dist/types/src/sentry/tracing.js.map +0 -1
  62. package/dist/types/src/sentry/tracing.test.d.ts +0 -2
  63. package/dist/types/src/sentry/tracing.test.d.ts.map +0 -1
  64. package/dist/types/src/sentry/tracing.test.js +0 -76
  65. package/dist/types/src/sentry/tracing.test.js.map +0 -1
  66. package/src/sentry/tracing.test.ts +0 -62
  67. package/src/sentry/tracing.ts +0 -153
  68. /package/dist/lib/browser/{observability-SGYNJETW.mjs.map → chunk-KDP3SESE.mjs.map} +0 -0
@@ -1,141 +0,0 @@
1
- "use strict";
2
- //
3
- // Copyright 2023 DXOS.org
4
- //
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.SENTRY_PROCESSOR = exports.finish = exports.configureTracing = void 0;
7
- // NOTE: Browser only API. There is no node polyfill.
8
- const browser_1 = require("@sentry/browser");
9
- const async_1 = require("@dxos/async");
10
- const context_1 = require("@dxos/context");
11
- const invariant_1 = require("@dxos/invariant");
12
- const log_1 = require("@dxos/log");
13
- const REPORT_SPANS = false;
14
- let TX;
15
- const SPAN_MAP = new Map();
16
- const SENTRY_INITIALIZED = new async_1.Trigger();
17
- const ctx = new context_1.Context({ onError: (err) => log_1.log.warn('Unhandled error in Sentry context', err) });
18
- ctx.maxSafeDisposeCallbacks = 10000;
19
- let tracingConfigured = false;
20
- const configureTracing = () => {
21
- tracingConfigured = true;
22
- (0, async_1.runInContext)(ctx, () => {
23
- // Configure root transaction.
24
- TX = (0, browser_1.getCurrentHub)().startTransaction({
25
- name: 'DXOS Core Tracing',
26
- op: 'dxos',
27
- });
28
- (0, invariant_1.invariant)(TX, 'Failed to create trace');
29
- if (typeof window !== 'undefined') {
30
- window.addEventListener('beforeunload', () => {
31
- (0, exports.finish)();
32
- });
33
- }
34
- if (typeof process !== 'undefined') {
35
- process.on('exit', () => {
36
- (0, exports.finish)();
37
- });
38
- }
39
- SENTRY_INITIALIZED.wake();
40
- });
41
- };
42
- exports.configureTracing = configureTracing;
43
- const finish = () => {
44
- for (const span of Array.from(SPAN_MAP.values()).reverse()) {
45
- try {
46
- span.finish();
47
- }
48
- catch (err) {
49
- log_1.log.warn('Failed to finish span', err);
50
- }
51
- }
52
- TX.finish();
53
- };
54
- exports.finish = finish;
55
- const SENTRY_PROCESSOR = (config, entry) => {
56
- if (!tracingConfigured) {
57
- return;
58
- }
59
- const { message, level, error } = entry;
60
- const context = (0, log_1.getContextFromEntry)(entry);
61
- if (level !== log_1.LogLevel.TRACE) {
62
- return;
63
- }
64
- // NOTE: Make sure `entry` is not captured in this closure to avoid a memory leak.
65
- (0, async_1.scheduleMicroTask)(ctx, async () => {
66
- var _a;
67
- await SENTRY_INITIALIZED.wait();
68
- if (REPORT_SPANS && (context === null || context === void 0 ? void 0 : context.span)) {
69
- switch (context.span.command) {
70
- case 'begin': {
71
- const id = context.span.id;
72
- if (!id || SPAN_MAP.has(id)) {
73
- log_1.log.warn('Cannot begin span', id);
74
- return;
75
- }
76
- let parentSpan = TX;
77
- if (context.span.parent) {
78
- parentSpan = (_a = SPAN_MAP.get(context.span.parent)) !== null && _a !== void 0 ? _a : TX;
79
- }
80
- let logContext;
81
- try {
82
- logContext = JSON.stringify({ ...context, message, level, error });
83
- }
84
- catch (err) {
85
- logContext = JSON.stringify(context);
86
- }
87
- const span = parentSpan.startChild({
88
- op: message,
89
- data: {
90
- ...context.span.data,
91
- '@dxos/log': logContext,
92
- },
93
- });
94
- SPAN_MAP.set(context.span.id, span);
95
- break;
96
- }
97
- case 'end': {
98
- const span = SPAN_MAP.get(context.span.id);
99
- if (span) {
100
- span.setStatus(getSpanStatus(context.span.status));
101
- context.span.data && Object.entries(context.span.data).forEach(([key, value]) => span.setData(key, value));
102
- span.finish();
103
- SPAN_MAP.delete(context.span.id);
104
- }
105
- else {
106
- log_1.log.warn('Cannot end span', context.span.id);
107
- }
108
- break;
109
- }
110
- case 'update': {
111
- const span = SPAN_MAP.get(context.span.id);
112
- if (span) {
113
- context.span.data && Object.entries(context.span.data).forEach(([key, value]) => span.setData(key, value));
114
- }
115
- else {
116
- log_1.log.warn('Cannot update span', context.span.id);
117
- }
118
- break;
119
- }
120
- default: {
121
- log_1.log.warn('Unknown span command', context.span.command);
122
- }
123
- }
124
- }
125
- });
126
- };
127
- exports.SENTRY_PROCESSOR = SENTRY_PROCESSOR;
128
- log_1.log.runtimeConfig.processors.push(exports.SENTRY_PROCESSOR);
129
- /**
130
- * @see https://develop.sentry.dev/sdk/event-payloads/span/#:~:text=this%20value%20explicitly.-,status,-Optional.%20Describes%20the
131
- */
132
- const getSpanStatus = (status) => {
133
- switch (status) {
134
- case 'ok':
135
- return 'ok';
136
- case 'error':
137
- return 'not_found';
138
- }
139
- return status !== null && status !== void 0 ? status : 'ok';
140
- };
141
- //# sourceMappingURL=tracing.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tracing.js","sourceRoot":"","sources":["../../../../src/sentry/tracing.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=tracing.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tracing.test.d.ts","sourceRoot":"","sources":["../../../../src/sentry/tracing.test.ts"],"names":[],"mappings":""}
@@ -1,76 +0,0 @@
1
- "use strict";
2
- //
3
- // Copyright 2022 DXOS.org
4
- //
5
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
- if (k2 === undefined) k2 = k;
7
- var desc = Object.getOwnPropertyDescriptor(m, k);
8
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
- desc = { enumerable: true, get: function() { return m[k]; } };
10
- }
11
- Object.defineProperty(o, k2, desc);
12
- }) : (function(o, m, k, k2) {
13
- if (k2 === undefined) k2 = k;
14
- o[k2] = m[k];
15
- }));
16
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
- Object.defineProperty(o, "default", { enumerable: true, value: v });
18
- }) : function(o, v) {
19
- o["default"] = v;
20
- });
21
- var __importStar = (this && this.__importStar) || function (mod) {
22
- if (mod && mod.__esModule) return mod;
23
- var result = {};
24
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
25
- __setModuleDefault(result, mod);
26
- return result;
27
- };
28
- Object.defineProperty(exports, "__esModule", { value: true });
29
- // @dxos/test platform=browser
30
- const chai_1 = require("chai");
31
- const async_1 = require("@dxos/async");
32
- const log_1 = require("@dxos/log");
33
- const test_1 = require("@dxos/test");
34
- const Sentry = __importStar(require("./browser"));
35
- const Tracing = __importStar(require("./tracing"));
36
- const testing_1 = require("../testing");
37
- const { testkit, sentryTransport } = (0, testing_1.sentryTestkit)();
38
- // TODO(burdon): https://example.com?
39
- const MOCK_DESTINATION = 'https://acacaeaccacacacabcaacdacdacadaca@sentry.io/000001';
40
- (0, test_1.describe)('Logger tracing', () => {
41
- (0, test_1.beforeAll)(() => {
42
- Sentry.init({
43
- destination: MOCK_DESTINATION,
44
- release: 'test',
45
- scrubFilenames: true,
46
- tracing: true,
47
- transport: sentryTransport,
48
- });
49
- Tracing.configureTracing();
50
- });
51
- (0, test_1.afterAll)(() => {
52
- Tracing.finish();
53
- });
54
- (0, test_1.test)('begin and end span', async () => {
55
- log_1.log.trace('test.trace', {
56
- span: {
57
- command: 'begin',
58
- id: 'test',
59
- },
60
- });
61
- log_1.log.trace('test.trace', {
62
- span: {
63
- command: 'end',
64
- id: 'test',
65
- status: 'error',
66
- },
67
- error: new Error('test'),
68
- });
69
- // Sleep to allow Sentry tracing to flush.
70
- await (0, async_1.sleep)(10);
71
- Tracing.finish();
72
- (0, chai_1.expect)(testkit.transactions().length).to.eq(1);
73
- (0, chai_1.expect)(testkit.transactions()[0].spans[0].op).to.eq('test.trace');
74
- });
75
- });
76
- //# sourceMappingURL=tracing.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tracing.test.js","sourceRoot":"","sources":["../../../../src/sentry/tracing.test.ts"],"names":[],"mappings":";AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;AAEF,8BAA8B;AAE9B,+BAA8B;AAE9B,uCAAoC;AACpC,mCAAgC;AAChC,qCAAiE;AAEjE,kDAAoC;AACpC,mDAAqC;AACrC,wCAA2C;AAE3C,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,IAAA,uBAAa,GAAE,CAAC;AAErD,qCAAqC;AACrC,MAAM,gBAAgB,GAAG,2DAA2D,CAAC;AAErF,IAAA,eAAQ,EAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,IAAA,gBAAS,EAAC,GAAG,EAAE;QACb,MAAM,CAAC,IAAI,CAAC;YACV,WAAW,EAAE,gBAAgB;YAC7B,OAAO,EAAE,MAAM;YACf,cAAc,EAAE,IAAI;YACpB,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,eAAe;SAC3B,CAAC,CAAC;QAEH,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,IAAA,eAAQ,EAAC,GAAG,EAAE;QACZ,OAAO,CAAC,MAAM,EAAE,CAAC;IACnB,CAAC,CAAC,CAAC;IAEH,IAAA,WAAI,EAAC,oBAAoB,EAAE,KAAK,IAAI,EAAE;QACpC,SAAG,CAAC,KAAK,CAAC,YAAY,EAAE;YACtB,IAAI,EAAE;gBACJ,OAAO,EAAE,OAAO;gBAChB,EAAE,EAAE,MAAM;aACX;SACF,CAAC,CAAC;QAEH,SAAG,CAAC,KAAK,CAAC,YAAY,EAAE;YACtB,IAAI,EAAE;gBACJ,OAAO,EAAE,KAAK;gBACd,EAAE,EAAE,MAAM;gBACV,MAAM,EAAE,OAAO;aAChB;YACD,KAAK,EAAE,IAAI,KAAK,CAAC,MAAM,CAAC;SACzB,CAAC,CAAC;QACH,0CAA0C;QAC1C,MAAM,IAAA,aAAK,EAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,MAAM,EAAE,CAAC;QAEjB,IAAA,aAAM,EAAC,OAAO,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/C,IAAA,aAAM,EAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,62 +0,0 @@
1
- //
2
- // Copyright 2022 DXOS.org
3
- //
4
-
5
- // @dxos/test platform=browser
6
-
7
- import { expect } from 'chai';
8
-
9
- import { sleep } from '@dxos/async';
10
- import { log } from '@dxos/log';
11
- import { afterAll, beforeAll, describe, test } from '@dxos/test';
12
-
13
- import * as Sentry from './browser';
14
- import * as Tracing from './tracing';
15
- import { sentryTestkit } from '../testing';
16
-
17
- const { testkit, sentryTransport } = sentryTestkit();
18
-
19
- // TODO(burdon): https://example.com?
20
- const MOCK_DESTINATION = 'https://acacaeaccacacacabcaacdacdacadaca@sentry.io/000001';
21
-
22
- describe('Logger tracing', () => {
23
- beforeAll(() => {
24
- Sentry.init({
25
- destination: MOCK_DESTINATION,
26
- release: 'test',
27
- scrubFilenames: true,
28
- tracing: true,
29
- transport: sentryTransport,
30
- });
31
-
32
- Tracing.configureTracing();
33
- });
34
-
35
- afterAll(() => {
36
- Tracing.finish();
37
- });
38
-
39
- test('begin and end span', async () => {
40
- log.trace('test.trace', {
41
- span: {
42
- command: 'begin',
43
- id: 'test',
44
- },
45
- });
46
-
47
- log.trace('test.trace', {
48
- span: {
49
- command: 'end',
50
- id: 'test',
51
- status: 'error',
52
- },
53
- error: new Error('test'),
54
- });
55
- // Sleep to allow Sentry tracing to flush.
56
- await sleep(10);
57
- Tracing.finish();
58
-
59
- expect(testkit.transactions().length).to.eq(1);
60
- expect(testkit.transactions()[0].spans[0].op).to.eq('test.trace');
61
- });
62
- });
@@ -1,153 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- // NOTE: Browser only API. There is no node polyfill.
6
-
7
- import { getCurrentHub } from '@sentry/browser';
8
- import { type Transaction, type Span } from '@sentry/types';
9
-
10
- import { runInContext, scheduleMicroTask, Trigger } from '@dxos/async';
11
- import { Context } from '@dxos/context';
12
- import { invariant } from '@dxos/invariant';
13
- import { getContextFromEntry, log, LogLevel, type LogProcessor } from '@dxos/log';
14
-
15
- const REPORT_SPANS = false;
16
-
17
- let TX!: Transaction;
18
- const SPAN_MAP = new Map<string, Span>();
19
- const SENTRY_INITIALIZED = new Trigger();
20
- const ctx = new Context({ onError: (err) => log.warn('Unhandled error in Sentry context', err) });
21
- ctx.maxSafeDisposeCallbacks = 10_000;
22
-
23
- let tracingConfigured = false;
24
-
25
- export const configureTracing = () => {
26
- tracingConfigured = true;
27
- runInContext(ctx, () => {
28
- // Configure root transaction.
29
- TX = getCurrentHub().startTransaction({
30
- name: 'DXOS Core Tracing',
31
- op: 'dxos',
32
- });
33
- invariant(TX, 'Failed to create trace');
34
- if (typeof window !== 'undefined') {
35
- window.addEventListener('beforeunload', () => {
36
- finish();
37
- });
38
- }
39
- if (typeof process !== 'undefined') {
40
- process.on('exit', () => {
41
- finish();
42
- });
43
- }
44
-
45
- SENTRY_INITIALIZED.wake();
46
- });
47
- };
48
-
49
- export const finish = () => {
50
- for (const span of Array.from(SPAN_MAP.values()).reverse()) {
51
- try {
52
- span.finish();
53
- } catch (err) {
54
- log.warn('Failed to finish span', err);
55
- }
56
- }
57
- TX.finish();
58
- };
59
-
60
- export const SENTRY_PROCESSOR: LogProcessor = (config, entry) => {
61
- if (!tracingConfigured) {
62
- return;
63
- }
64
-
65
- const { message, level, error } = entry;
66
- const context = getContextFromEntry(entry);
67
-
68
- if (level !== LogLevel.TRACE) {
69
- return;
70
- }
71
-
72
- // NOTE: Make sure `entry` is not captured in this closure to avoid a memory leak.
73
- scheduleMicroTask(ctx, async () => {
74
- await SENTRY_INITIALIZED.wait();
75
-
76
- if (REPORT_SPANS && context?.span) {
77
- switch (context.span.command) {
78
- case 'begin': {
79
- const id = context.span.id;
80
-
81
- if (!id || SPAN_MAP.has(id)) {
82
- log.warn('Cannot begin span', id);
83
- return;
84
- }
85
-
86
- let parentSpan: Span = TX;
87
- if (context.span.parent) {
88
- parentSpan = SPAN_MAP.get(context.span.parent) ?? TX;
89
- }
90
-
91
- let logContext: string;
92
- try {
93
- logContext = JSON.stringify({ ...context, message, level, error });
94
- } catch (err) {
95
- logContext = JSON.stringify(context);
96
- }
97
-
98
- const span = parentSpan.startChild({
99
- op: message,
100
- data: {
101
- ...context.span.data,
102
- '@dxos/log': logContext,
103
- },
104
- });
105
- SPAN_MAP.set(context.span.id, span);
106
- break;
107
- }
108
-
109
- case 'end': {
110
- const span = SPAN_MAP.get(context.span.id);
111
- if (span) {
112
- span.setStatus(getSpanStatus(context.span.status));
113
- context.span.data && Object.entries(context.span.data).forEach(([key, value]) => span.setData(key, value));
114
- span.finish();
115
- SPAN_MAP.delete(context.span.id);
116
- } else {
117
- log.warn('Cannot end span', context.span.id);
118
- }
119
- break;
120
- }
121
-
122
- case 'update': {
123
- const span = SPAN_MAP.get(context.span.id);
124
- if (span) {
125
- context.span.data && Object.entries(context.span.data).forEach(([key, value]) => span.setData(key, value));
126
- } else {
127
- log.warn('Cannot update span', context.span.id);
128
- }
129
- break;
130
- }
131
-
132
- default: {
133
- log.warn('Unknown span command', context.span.command);
134
- }
135
- }
136
- }
137
- });
138
- };
139
-
140
- log.runtimeConfig.processors.push(SENTRY_PROCESSOR);
141
-
142
- /**
143
- * @see https://develop.sentry.dev/sdk/event-payloads/span/#:~:text=this%20value%20explicitly.-,status,-Optional.%20Describes%20the
144
- */
145
- const getSpanStatus = (status?: 'ok' | 'error') => {
146
- switch (status) {
147
- case 'ok':
148
- return 'ok';
149
- case 'error':
150
- return 'not_found';
151
- }
152
- return status ?? 'ok';
153
- };