@dxos/observability 0.3.11-main.0999ea0

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 (138) hide show
  1. package/LICENSE +8 -0
  2. package/README.md +26 -0
  3. package/dist/lib/browser/chunk-2J5YS65Q.mjs +81 -0
  4. package/dist/lib/browser/chunk-2J5YS65Q.mjs.map +7 -0
  5. package/dist/lib/browser/chunk-6KUJPLEH.mjs +293 -0
  6. package/dist/lib/browser/chunk-6KUJPLEH.mjs.map +7 -0
  7. package/dist/lib/browser/datadog/index.mjs +9 -0
  8. package/dist/lib/browser/datadog/index.mjs.map +7 -0
  9. package/dist/lib/browser/index.mjs +557 -0
  10. package/dist/lib/browser/index.mjs.map +7 -0
  11. package/dist/lib/browser/meta.json +1 -0
  12. package/dist/lib/browser/sentry/index.mjs +25 -0
  13. package/dist/lib/browser/sentry/index.mjs.map +7 -0
  14. package/dist/lib/node/chunk-FSAOBKO2.cjs +352 -0
  15. package/dist/lib/node/chunk-FSAOBKO2.cjs.map +7 -0
  16. package/dist/lib/node/chunk-VDBBIYH6.cjs +101 -0
  17. package/dist/lib/node/chunk-VDBBIYH6.cjs.map +7 -0
  18. package/dist/lib/node/datadog/index.cjs +31 -0
  19. package/dist/lib/node/datadog/index.cjs.map +7 -0
  20. package/dist/lib/node/index.cjs +630 -0
  21. package/dist/lib/node/index.cjs.map +7 -0
  22. package/dist/lib/node/meta.json +1 -0
  23. package/dist/lib/node/sentry/index.cjs +45 -0
  24. package/dist/lib/node/sentry/index.cjs.map +7 -0
  25. package/dist/types/src/cli-observability-secrets.json +7 -0
  26. package/dist/types/src/datadog/browser.d.ts +8 -0
  27. package/dist/types/src/datadog/browser.d.ts.map +1 -0
  28. package/dist/types/src/datadog/browser.js +22 -0
  29. package/dist/types/src/datadog/browser.js.map +1 -0
  30. package/dist/types/src/datadog/index.d.ts +3 -0
  31. package/dist/types/src/datadog/index.d.ts.map +1 -0
  32. package/dist/types/src/datadog/index.js +22 -0
  33. package/dist/types/src/datadog/index.js.map +1 -0
  34. package/dist/types/src/datadog/metrics.d.ts +16 -0
  35. package/dist/types/src/datadog/metrics.d.ts.map +1 -0
  36. package/dist/types/src/datadog/metrics.js +56 -0
  37. package/dist/types/src/datadog/metrics.js.map +1 -0
  38. package/dist/types/src/datadog/node.d.ts +7 -0
  39. package/dist/types/src/datadog/node.d.ts.map +1 -0
  40. package/dist/types/src/datadog/node.js +22 -0
  41. package/dist/types/src/datadog/node.js.map +1 -0
  42. package/dist/types/src/index.d.ts +2 -0
  43. package/dist/types/src/index.d.ts.map +1 -0
  44. package/dist/types/src/index.js +21 -0
  45. package/dist/types/src/index.js.map +1 -0
  46. package/dist/types/src/observability.d.ts +85 -0
  47. package/dist/types/src/observability.d.ts.map +1 -0
  48. package/dist/types/src/observability.js +352 -0
  49. package/dist/types/src/observability.js.map +1 -0
  50. package/dist/types/src/segment/browser.d.ts +9 -0
  51. package/dist/types/src/segment/browser.d.ts.map +1 -0
  52. package/dist/types/src/segment/browser.js +71 -0
  53. package/dist/types/src/segment/browser.js.map +1 -0
  54. package/dist/types/src/segment/index.d.ts +3 -0
  55. package/dist/types/src/segment/index.d.ts.map +1 -0
  56. package/dist/types/src/segment/index.js +22 -0
  57. package/dist/types/src/segment/index.js.map +1 -0
  58. package/dist/types/src/segment/node.d.ts +19 -0
  59. package/dist/types/src/segment/node.d.ts.map +1 -0
  60. package/dist/types/src/segment/node.js +88 -0
  61. package/dist/types/src/segment/node.js.map +1 -0
  62. package/dist/types/src/segment/types.d.ts +22 -0
  63. package/dist/types/src/segment/types.d.ts.map +1 -0
  64. package/dist/types/src/segment/types.js +6 -0
  65. package/dist/types/src/segment/types.js.map +1 -0
  66. package/dist/types/src/sentry/browser.d.ts +31 -0
  67. package/dist/types/src/sentry/browser.d.ts.map +1 -0
  68. package/dist/types/src/sentry/browser.js +112 -0
  69. package/dist/types/src/sentry/browser.js.map +1 -0
  70. package/dist/types/src/sentry/index.d.ts +4 -0
  71. package/dist/types/src/sentry/index.d.ts.map +1 -0
  72. package/dist/types/src/sentry/index.js +26 -0
  73. package/dist/types/src/sentry/index.js.map +1 -0
  74. package/dist/types/src/sentry/node.d.ts +32 -0
  75. package/dist/types/src/sentry/node.d.ts.map +1 -0
  76. package/dist/types/src/sentry/node.js +169 -0
  77. package/dist/types/src/sentry/node.js.map +1 -0
  78. package/dist/types/src/sentry/node.test.d.ts +2 -0
  79. package/dist/types/src/sentry/node.test.d.ts.map +1 -0
  80. package/dist/types/src/sentry/node.test.js +66 -0
  81. package/dist/types/src/sentry/node.test.js.map +1 -0
  82. package/dist/types/src/sentry/sentry.test.d.ts +2 -0
  83. package/dist/types/src/sentry/sentry.test.d.ts.map +1 -0
  84. package/dist/types/src/sentry/sentry.test.js +60 -0
  85. package/dist/types/src/sentry/sentry.test.js.map +1 -0
  86. package/dist/types/src/sentry/tracing.d.ts +5 -0
  87. package/dist/types/src/sentry/tracing.d.ts.map +1 -0
  88. package/dist/types/src/sentry/tracing.js +141 -0
  89. package/dist/types/src/sentry/tracing.js.map +1 -0
  90. package/dist/types/src/sentry/tracing.test.d.ts +2 -0
  91. package/dist/types/src/sentry/tracing.test.d.ts.map +1 -0
  92. package/dist/types/src/sentry/tracing.test.js +76 -0
  93. package/dist/types/src/sentry/tracing.test.js.map +1 -0
  94. package/dist/types/src/sentry/types.d.ts +18 -0
  95. package/dist/types/src/sentry/types.d.ts.map +1 -0
  96. package/dist/types/src/sentry/types.js +6 -0
  97. package/dist/types/src/sentry/types.js.map +1 -0
  98. package/dist/types/src/testing/index.d.ts +2 -0
  99. package/dist/types/src/testing/index.d.ts.map +1 -0
  100. package/dist/types/src/testing/index.js +21 -0
  101. package/dist/types/src/testing/index.js.map +1 -0
  102. package/dist/types/src/testing/testkit/browser.d.ts +2 -0
  103. package/dist/types/src/testing/testkit/browser.d.ts.map +1 -0
  104. package/dist/types/src/testing/testkit/browser.js +13 -0
  105. package/dist/types/src/testing/testkit/browser.js.map +1 -0
  106. package/dist/types/src/testing/testkit/index.d.ts +2 -0
  107. package/dist/types/src/testing/testkit/index.d.ts.map +1 -0
  108. package/dist/types/src/testing/testkit/index.js +12 -0
  109. package/dist/types/src/testing/testkit/index.js.map +1 -0
  110. package/dist/types/src/util.d.ts +19 -0
  111. package/dist/types/src/util.d.ts.map +1 -0
  112. package/dist/types/src/util.js +42 -0
  113. package/dist/types/src/util.js.map +1 -0
  114. package/package.json +94 -0
  115. package/src/cli-observability-secrets.json +7 -0
  116. package/src/datadog/browser.ts +21 -0
  117. package/src/datadog/index.ts +6 -0
  118. package/src/datadog/metrics.ts +49 -0
  119. package/src/datadog/node.ts +19 -0
  120. package/src/index.ts +5 -0
  121. package/src/observability.ts +442 -0
  122. package/src/segment/browser.ts +67 -0
  123. package/src/segment/index.ts +6 -0
  124. package/src/segment/node.ts +91 -0
  125. package/src/segment/types.ts +27 -0
  126. package/src/sentry/browser.ts +100 -0
  127. package/src/sentry/index.ts +9 -0
  128. package/src/sentry/node.test.ts +46 -0
  129. package/src/sentry/node.ts +153 -0
  130. package/src/sentry/sentry.test.ts +39 -0
  131. package/src/sentry/tracing.test.ts +62 -0
  132. package/src/sentry/tracing.ts +153 -0
  133. package/src/sentry/types.ts +22 -0
  134. package/src/testing/index.ts +5 -0
  135. package/src/testing/testkit/browser.ts +8 -0
  136. package/src/testing/testkit/index.ts +7 -0
  137. package/src/testing/testkit/shims.d.ts +5 -0
  138. package/src/util.ts +49 -0
@@ -0,0 +1,141 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracing.js","sourceRoot":"","sources":["../../../../src/sentry/tracing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=tracing.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracing.test.d.ts","sourceRoot":"","sources":["../../../../src/sentry/tracing.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,76 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,18 @@
1
+ import type { Event, Transport } from '@sentry/types';
2
+ export type InitOptions = {
3
+ enable?: boolean;
4
+ destination?: string;
5
+ installationId?: string;
6
+ release?: string;
7
+ environment?: string;
8
+ tracing?: boolean;
9
+ sampleRate?: number;
10
+ replay?: boolean;
11
+ replaySampleRate?: number;
12
+ replaySampleRateOnError?: number;
13
+ scrubFilenames?: boolean;
14
+ properties?: object;
15
+ transport?: () => Transport;
16
+ onError?: (event: Event) => void;
17
+ };
18
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/sentry/types.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAEtD,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,SAAS,CAAC;IAC5B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC,CAAC"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ //
3
+ // Copyright 2022 DXOS.org
4
+ //
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/sentry/types.ts"],"names":[],"mappings":";AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE"}
@@ -0,0 +1,2 @@
1
+ export * from './testkit';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/testing/index.ts"],"names":[],"mappings":"AAIA,cAAc,WAAW,CAAC"}
@@ -0,0 +1,21 @@
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
17
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
18
+ };
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ __exportStar(require("./testkit"), exports);
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/testing/index.ts"],"names":[],"mappings":";AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;;;;;;;;;;;;;;;;AAEF,4CAA0B"}
@@ -0,0 +1,2 @@
1
+ export declare const sentryTestkit: any;
2
+ //# sourceMappingURL=browser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../../../../src/testing/testkit/browser.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,aAAa,KAAU,CAAC"}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ //
3
+ // Copyright 2022 DXOS.org
4
+ //
5
+ var __importDefault = (this && this.__importDefault) || function (mod) {
6
+ return (mod && mod.__esModule) ? mod : { "default": mod };
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.sentryTestkit = void 0;
10
+ // eslint-disable-next-line no-restricted-imports
11
+ const browser_1 = __importDefault(require("sentry-testkit/dist/browser"));
12
+ exports.sentryTestkit = browser_1.default;
13
+ //# sourceMappingURL=browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.js","sourceRoot":"","sources":["../../../../../src/testing/testkit/browser.ts"],"names":[],"mappings":";AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;;;;;;AAEF,iDAAiD;AACjD,0EAAkD;AAErC,QAAA,aAAa,GAAG,iBAAO,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const sentryTestkit: typeof import("sentry-testkit");
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/testing/testkit/index.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,aAAa,iCAAU,CAAC"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ //
3
+ // Copyright 2022 DXOS.org
4
+ //
5
+ var __importDefault = (this && this.__importDefault) || function (mod) {
6
+ return (mod && mod.__esModule) ? mod : { "default": mod };
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.sentryTestkit = void 0;
10
+ const sentry_testkit_1 = __importDefault(require("sentry-testkit"));
11
+ exports.sentryTestkit = sentry_testkit_1.default;
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/testing/testkit/index.ts"],"names":[],"mappings":";AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;;;;;;AAEF,oEAAqC;AAExB,QAAA,aAAa,GAAG,wBAAO,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { type Space } from '@dxos/client-protocol';
2
+ export type MapSpacesOptions = {
3
+ verbose?: boolean;
4
+ truncateKeys?: boolean;
5
+ };
6
+ export declare const mapSpaces: (spaces: Space[], options?: MapSpacesOptions) => {
7
+ key: string;
8
+ open: boolean;
9
+ name: any;
10
+ members: number;
11
+ objects: number;
12
+ startup: number | undefined;
13
+ epoch: any;
14
+ startDataMutations: any;
15
+ currentDataMutations: number;
16
+ totalDataMutations: number;
17
+ progress: string;
18
+ }[];
19
+ //# sourceMappingURL=util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../src/util.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAEnD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,eAAO,MAAM,SAAS,WAAY,KAAK,EAAE,YAAW,gBAAgB;;;;;;;;;;;;GAqCnE,CAAC"}
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ //
3
+ // Copyright 2023 DXOS.org
4
+ //
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.mapSpaces = void 0;
7
+ const mapSpaces = (spaces, options = { verbose: false, truncateKeys: false }) => {
8
+ return spaces.map((space) => {
9
+ var _a, _b, _c, _d, _e, _f, _g, _h;
10
+ // TODO(burdon): Factor out.
11
+ // TODO(burdon): Agent needs to restart before `ready` is available.
12
+ const { open, ready } = (_a = space.internal.data.metrics) !== null && _a !== void 0 ? _a : {};
13
+ const startup = open && ready && ready.getTime() - open.getTime();
14
+ // TODO(burdon): Get feeds from client-services if verbose (factor out from devtools/diagnostics).
15
+ // const host = client.services.services.DevtoolsHost!;
16
+ const pipeline = space.internal.data.pipeline;
17
+ const startDataMutations = (_c = (_b = pipeline === null || pipeline === void 0 ? void 0 : pipeline.currentEpoch) === null || _b === void 0 ? void 0 : _b.subject.assertion.timeframe.totalMessages()) !== null && _c !== void 0 ? _c : 0;
18
+ const epoch = (_d = pipeline === null || pipeline === void 0 ? void 0 : pipeline.currentEpoch) === null || _d === void 0 ? void 0 : _d.subject.assertion.number;
19
+ // const appliedEpoch = pipeline?.appliedEpoch?.subject.assertion.number;
20
+ const currentDataMutations = (_f = (_e = pipeline === null || pipeline === void 0 ? void 0 : pipeline.currentDataTimeframe) === null || _e === void 0 ? void 0 : _e.totalMessages()) !== null && _f !== void 0 ? _f : 0;
21
+ const totalDataMutations = (_h = (_g = pipeline === null || pipeline === void 0 ? void 0 : pipeline.targetDataTimeframe) === null || _g === void 0 ? void 0 : _g.totalMessages()) !== null && _h !== void 0 ? _h : 0;
22
+ return {
23
+ // TODO(nf): truncate keys for DD?
24
+ key: space.key.truncate(),
25
+ open: space.isOpen,
26
+ name: space.properties.name,
27
+ members: space.members.get().length,
28
+ objects: space.db.query().objects.length,
29
+ startup,
30
+ epoch,
31
+ // appliedEpoch,
32
+ startDataMutations,
33
+ currentDataMutations,
34
+ totalDataMutations,
35
+ // TODO(burdon): Negative?
36
+ progress: (Math.min(Math.abs((currentDataMutations - startDataMutations) / (totalDataMutations - startDataMutations)), 1) *
37
+ 100).toFixed(0),
38
+ };
39
+ });
40
+ };
41
+ exports.mapSpaces = mapSpaces;
42
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../../src/util.ts"],"names":[],"mappings":";AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;;;AASK,MAAM,SAAS,GAAG,CAAC,MAAe,EAAE,UAA4B,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,EAAE;IAChH,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;;QAC1B,4BAA4B;QAC5B,oEAAoE;QACpE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAA,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,mCAAI,EAAE,CAAC;QAC1D,MAAM,OAAO,GAAG,IAAI,IAAI,KAAK,IAAI,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAElE,kGAAkG;QAClG,uDAAuD;QACvD,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC9C,MAAM,kBAAkB,GAAG,MAAA,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,YAAY,0CAAE,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,aAAa,EAAE,mCAAI,CAAC,CAAC;QACpG,MAAM,KAAK,GAAG,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,YAAY,0CAAE,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC;QAC/D,yEAAyE;QACzE,MAAM,oBAAoB,GAAG,MAAA,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,oBAAoB,0CAAE,aAAa,EAAE,mCAAI,CAAC,CAAC;QAClF,MAAM,kBAAkB,GAAG,MAAA,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,mBAAmB,0CAAE,aAAa,EAAE,mCAAI,CAAC,CAAC;QAE/E,OAAO;YACL,kCAAkC;YAClC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE;YACzB,IAAI,EAAE,KAAK,CAAC,MAAM;YAClB,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,IAAI;YAC3B,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM;YACnC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,MAAM;YACxC,OAAO;YACP,KAAK;YACL,gBAAgB;YAChB,kBAAkB;YAClB,oBAAoB;YACpB,kBAAkB;YAElB,0BAA0B;YAC1B,QAAQ,EAAE,CACR,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,oBAAoB,GAAG,kBAAkB,CAAC,GAAG,CAAC,kBAAkB,GAAG,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC9G,GAAG,CACJ,CAAC,OAAO,CAAC,CAAC,CAAC;SACb,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AArCW,QAAA,SAAS,aAqCpB"}
package/package.json ADDED
@@ -0,0 +1,94 @@
1
+ {
2
+ "name": "@dxos/observability",
3
+ "version": "0.3.11-main.0999ea0",
4
+ "description": "Provides a common interface for app and platform observability",
5
+ "homepage": "https://dxos.org",
6
+ "bugs": "https://github.com/dxos/dxos/issues",
7
+ "license": "MIT",
8
+ "author": "DXOS.org",
9
+ "exports": {
10
+ ".": {
11
+ "browser": "./dist/lib/browser/index.mjs",
12
+ "import": "./dist/lib/browser/index.mjs",
13
+ "require": "./dist/lib/node/index.cjs",
14
+ "node": "./dist/lib/node/index.cjs"
15
+ },
16
+ "./datadog": {
17
+ "browser": "./dist/lib/browser/datadog/index.mjs",
18
+ "import": "./dist/lib/browser/datadog/index.mjs",
19
+ "require": "./dist/lib/node/datadog/index.cjs",
20
+ "node": "./dist/lib/node/datadog/index.cjs"
21
+ },
22
+ "./segment": {
23
+ "browser": "./dist/lib/browser/segment/index.mjs",
24
+ "import": "./dist/lib/browser/segment/index.mjs",
25
+ "require": "./dist/lib/node/segment/index.cjs",
26
+ "node": "./dist/lib/node/segment/index.cjs"
27
+ },
28
+ "./sentry": {
29
+ "browser": "./dist/lib/browser/sentry/index.mjs",
30
+ "import": "./dist/lib/browser/sentry/index.mjs",
31
+ "require": "./dist/lib/node/sentry/index.cjs",
32
+ "node": "./dist/lib/node/sentry/index.cjs"
33
+ }
34
+ },
35
+ "browser": {
36
+ "./src/datadog/node.ts": "./src/datadog/browser.ts",
37
+ "./src/segment/node.ts": "./src/segment/browser.ts",
38
+ "./src/sentry/node.ts": "./src/sentry/browser.ts",
39
+ "./testing/testkit/index.ts": "./testing/testkit/browser.ts"
40
+ },
41
+ "types": "dist/types/src/index.d.ts",
42
+ "typesVersions": {
43
+ "*": {
44
+ "datadog": [
45
+ "dist/types/src/datadog/index.d.ts"
46
+ ],
47
+ "segment": [
48
+ "dist/types/src/segment/index.d.ts"
49
+ ],
50
+ "sentry": [
51
+ "dist/types/src/sentry/index.d.ts"
52
+ ]
53
+ }
54
+ },
55
+ "files": [
56
+ "dist",
57
+ "src"
58
+ ],
59
+ "dependencies": {
60
+ "@segment/snippet": "^4.15.3",
61
+ "@sentry/browser": "^7.98.0",
62
+ "@sentry/integrations": "7.98.0",
63
+ "@sentry/node": "^7.98.0",
64
+ "@sentry/tracing": "^7.98.0",
65
+ "analytics-node": "^6.2.0",
66
+ "datadog-metrics": "^0.11.1",
67
+ "debug": "^4.3.4",
68
+ "@dxos/async": "0.3.11-main.0999ea0",
69
+ "@dxos/client-services": "0.3.11-main.0999ea0",
70
+ "@dxos/config": "0.3.11-main.0999ea0",
71
+ "@dxos/client-protocol": "0.3.11-main.0999ea0",
72
+ "@dxos/debug": "0.3.11-main.0999ea0",
73
+ "@dxos/context": "0.3.11-main.0999ea0",
74
+ "@dxos/invariant": "0.3.11-main.0999ea0",
75
+ "@dxos/log": "0.3.11-main.0999ea0",
76
+ "@dxos/network-manager": "0.3.11-main.0999ea0",
77
+ "@dxos/node-std": "0.3.11-main.0999ea0",
78
+ "@dxos/protocols": "0.3.11-main.0999ea0",
79
+ "@dxos/react-client": "0.3.11-main.0999ea0",
80
+ "@dxos/util": "0.3.11-main.0999ea0"
81
+ },
82
+ "devDependencies": {
83
+ "@sentry/types": "^7.98.0",
84
+ "@types/analytics-node": "^3.1.9",
85
+ "@types/debug": "^4.1.10",
86
+ "sentry-testkit": "^5.0.5"
87
+ },
88
+ "publishConfig": {
89
+ "access": "public"
90
+ },
91
+ "scripts": {
92
+ "api-keys": "node ./scripts/inject_api_keys.js"
93
+ }
94
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "SENTRY_DESTINATION": "https://2647916221e643869965e78469479aa4@o4504012000067584.ingest.sentry.io/4504012027265029",
3
+ "TELEMETRY_API_KEY": "B00QG6PtJJrJ0VVFe0H5a6bcUUShKyZM",
4
+ "IPDATA_API_KEY": "73dfdecdf979c18f07d50cf841bbdd9e589f237256326ac8cca23786",
5
+ "DATADOG_API_KEY": null,
6
+ "DATADOG_APP_KEY": null
7
+ }
@@ -0,0 +1,21 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import { invariant } from '@dxos/invariant';
6
+ import { log } from '@dxos/log';
7
+
8
+ import { type DatadogOptions } from './metrics';
9
+
10
+ export const defaultOptions = ({ apiKey, config, host }: DatadogOptions) => {
11
+ const corsProxy = config.get('runtime.app.env.DX_DATADOG_PROXY');
12
+ invariant(corsProxy, 'need DX_DATADOG_PROXY for CORS proxy');
13
+ return {
14
+ apiKey,
15
+ host,
16
+ site: corsProxy,
17
+ onError: (err: any) => {
18
+ log.info('Datadog error', { err });
19
+ },
20
+ };
21
+ };
@@ -0,0 +1,6 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ export * from './node';
6
+ export * from './metrics';
@@ -0,0 +1,49 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import * as Datadog from 'datadog-metrics';
6
+ import debug from 'debug';
7
+
8
+ import { type Config } from '@dxos/client';
9
+ import { invariant } from '@dxos/invariant';
10
+ import { log } from '@dxos/log';
11
+
12
+ import { defaultOptions } from './node';
13
+ // import { tags as globalTags } from '../tags';
14
+
15
+ export type DatadogOptions = {
16
+ apiKey: string;
17
+ host?: string;
18
+ site?: String;
19
+ getTags: () => Map<string, string>;
20
+ // needed to read CORS proxy
21
+ config: Config;
22
+ };
23
+
24
+ debug.enable('metrics');
25
+
26
+ export class DatadogMetrics {
27
+ private _datadogmetrics?: any;
28
+ private _getTags: () => Map<string, string>;
29
+
30
+ constructor(options: DatadogOptions) {
31
+ this._getTags = options.getTags;
32
+ this._datadogmetrics = Datadog;
33
+
34
+ this._datadogmetrics.init(defaultOptions(options));
35
+ }
36
+
37
+ gauge(name: string, value: number, tags?: any) {
38
+ invariant(this._datadogmetrics, 'Datadog not initialized');
39
+ const mergedTags = Object.entries({ ...Object.fromEntries(this._getTags().entries()), ...tags }).map(
40
+ ([key, value]) => `${key}:${value}`,
41
+ );
42
+ log('datadog gauge', { name, value, tags: mergedTags });
43
+ this._datadogmetrics.gauge(name, value, mergedTags);
44
+ }
45
+
46
+ flush() {
47
+ this._datadogmetrics.flush();
48
+ }
49
+ }
@@ -0,0 +1,19 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import os from 'node:os';
6
+
7
+ import { log } from '@dxos/log';
8
+
9
+ import { type DatadogOptions } from './metrics';
10
+
11
+ export const defaultOptions = ({ apiKey, host }: DatadogOptions) => {
12
+ return {
13
+ apiKey,
14
+ host: host ?? os.hostname(),
15
+ onError: (err: any) => {
16
+ log.info('Datadog error', { err });
17
+ },
18
+ };
19
+ };
package/src/index.ts ADDED
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ export * from './observability';