@dxos/observability 0.3.11-main.cf49a01
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/LICENSE +8 -0
- package/README.md +26 -0
- package/dist/lib/browser/chunk-2J5YS65Q.mjs +81 -0
- package/dist/lib/browser/chunk-2J5YS65Q.mjs.map +7 -0
- package/dist/lib/browser/chunk-6KUJPLEH.mjs +293 -0
- package/dist/lib/browser/chunk-6KUJPLEH.mjs.map +7 -0
- package/dist/lib/browser/datadog/index.mjs +9 -0
- package/dist/lib/browser/datadog/index.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +557 -0
- package/dist/lib/browser/index.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -0
- package/dist/lib/browser/sentry/index.mjs +25 -0
- package/dist/lib/browser/sentry/index.mjs.map +7 -0
- package/dist/lib/node/chunk-FSAOBKO2.cjs +352 -0
- package/dist/lib/node/chunk-FSAOBKO2.cjs.map +7 -0
- package/dist/lib/node/chunk-VDBBIYH6.cjs +101 -0
- package/dist/lib/node/chunk-VDBBIYH6.cjs.map +7 -0
- package/dist/lib/node/datadog/index.cjs +31 -0
- package/dist/lib/node/datadog/index.cjs.map +7 -0
- package/dist/lib/node/index.cjs +630 -0
- package/dist/lib/node/index.cjs.map +7 -0
- package/dist/lib/node/meta.json +1 -0
- package/dist/lib/node/sentry/index.cjs +45 -0
- package/dist/lib/node/sentry/index.cjs.map +7 -0
- package/dist/types/src/cli-observability-secrets.json +7 -0
- package/dist/types/src/datadog/browser.d.ts +8 -0
- package/dist/types/src/datadog/browser.d.ts.map +1 -0
- package/dist/types/src/datadog/browser.js +22 -0
- package/dist/types/src/datadog/browser.js.map +1 -0
- package/dist/types/src/datadog/index.d.ts +3 -0
- package/dist/types/src/datadog/index.d.ts.map +1 -0
- package/dist/types/src/datadog/index.js +22 -0
- package/dist/types/src/datadog/index.js.map +1 -0
- package/dist/types/src/datadog/metrics.d.ts +16 -0
- package/dist/types/src/datadog/metrics.d.ts.map +1 -0
- package/dist/types/src/datadog/metrics.js +56 -0
- package/dist/types/src/datadog/metrics.js.map +1 -0
- package/dist/types/src/datadog/node.d.ts +7 -0
- package/dist/types/src/datadog/node.d.ts.map +1 -0
- package/dist/types/src/datadog/node.js +22 -0
- package/dist/types/src/datadog/node.js.map +1 -0
- package/dist/types/src/index.d.ts +2 -0
- package/dist/types/src/index.d.ts.map +1 -0
- package/dist/types/src/index.js +21 -0
- package/dist/types/src/index.js.map +1 -0
- package/dist/types/src/observability.d.ts +85 -0
- package/dist/types/src/observability.d.ts.map +1 -0
- package/dist/types/src/observability.js +352 -0
- package/dist/types/src/observability.js.map +1 -0
- package/dist/types/src/segment/browser.d.ts +9 -0
- package/dist/types/src/segment/browser.d.ts.map +1 -0
- package/dist/types/src/segment/browser.js +71 -0
- package/dist/types/src/segment/browser.js.map +1 -0
- package/dist/types/src/segment/index.d.ts +3 -0
- package/dist/types/src/segment/index.d.ts.map +1 -0
- package/dist/types/src/segment/index.js +22 -0
- package/dist/types/src/segment/index.js.map +1 -0
- package/dist/types/src/segment/node.d.ts +19 -0
- package/dist/types/src/segment/node.d.ts.map +1 -0
- package/dist/types/src/segment/node.js +88 -0
- package/dist/types/src/segment/node.js.map +1 -0
- package/dist/types/src/segment/types.d.ts +22 -0
- package/dist/types/src/segment/types.d.ts.map +1 -0
- package/dist/types/src/segment/types.js +6 -0
- package/dist/types/src/segment/types.js.map +1 -0
- package/dist/types/src/sentry/browser.d.ts +31 -0
- package/dist/types/src/sentry/browser.d.ts.map +1 -0
- package/dist/types/src/sentry/browser.js +112 -0
- package/dist/types/src/sentry/browser.js.map +1 -0
- package/dist/types/src/sentry/index.d.ts +4 -0
- package/dist/types/src/sentry/index.d.ts.map +1 -0
- package/dist/types/src/sentry/index.js +26 -0
- package/dist/types/src/sentry/index.js.map +1 -0
- package/dist/types/src/sentry/node.d.ts +32 -0
- package/dist/types/src/sentry/node.d.ts.map +1 -0
- package/dist/types/src/sentry/node.js +169 -0
- package/dist/types/src/sentry/node.js.map +1 -0
- package/dist/types/src/sentry/node.test.d.ts +2 -0
- package/dist/types/src/sentry/node.test.d.ts.map +1 -0
- package/dist/types/src/sentry/node.test.js +66 -0
- package/dist/types/src/sentry/node.test.js.map +1 -0
- package/dist/types/src/sentry/sentry.test.d.ts +2 -0
- package/dist/types/src/sentry/sentry.test.d.ts.map +1 -0
- package/dist/types/src/sentry/sentry.test.js +60 -0
- package/dist/types/src/sentry/sentry.test.js.map +1 -0
- package/dist/types/src/sentry/tracing.d.ts +5 -0
- package/dist/types/src/sentry/tracing.d.ts.map +1 -0
- package/dist/types/src/sentry/tracing.js +141 -0
- package/dist/types/src/sentry/tracing.js.map +1 -0
- package/dist/types/src/sentry/tracing.test.d.ts +2 -0
- package/dist/types/src/sentry/tracing.test.d.ts.map +1 -0
- package/dist/types/src/sentry/tracing.test.js +76 -0
- package/dist/types/src/sentry/tracing.test.js.map +1 -0
- package/dist/types/src/sentry/types.d.ts +18 -0
- package/dist/types/src/sentry/types.d.ts.map +1 -0
- package/dist/types/src/sentry/types.js +6 -0
- package/dist/types/src/sentry/types.js.map +1 -0
- package/dist/types/src/testing/index.d.ts +2 -0
- package/dist/types/src/testing/index.d.ts.map +1 -0
- package/dist/types/src/testing/index.js +21 -0
- package/dist/types/src/testing/index.js.map +1 -0
- package/dist/types/src/testing/testkit/browser.d.ts +2 -0
- package/dist/types/src/testing/testkit/browser.d.ts.map +1 -0
- package/dist/types/src/testing/testkit/browser.js +13 -0
- package/dist/types/src/testing/testkit/browser.js.map +1 -0
- package/dist/types/src/testing/testkit/index.d.ts +2 -0
- package/dist/types/src/testing/testkit/index.d.ts.map +1 -0
- package/dist/types/src/testing/testkit/index.js +12 -0
- package/dist/types/src/testing/testkit/index.js.map +1 -0
- package/dist/types/src/util.d.ts +19 -0
- package/dist/types/src/util.d.ts.map +1 -0
- package/dist/types/src/util.js +42 -0
- package/dist/types/src/util.js.map +1 -0
- package/package.json +94 -0
- package/src/cli-observability-secrets.json +7 -0
- package/src/datadog/browser.ts +21 -0
- package/src/datadog/index.ts +6 -0
- package/src/datadog/metrics.ts +49 -0
- package/src/datadog/node.ts +19 -0
- package/src/index.ts +5 -0
- package/src/observability.ts +442 -0
- package/src/segment/browser.ts +67 -0
- package/src/segment/index.ts +6 -0
- package/src/segment/node.ts +91 -0
- package/src/segment/types.ts +27 -0
- package/src/sentry/browser.ts +100 -0
- package/src/sentry/index.ts +9 -0
- package/src/sentry/node.test.ts +46 -0
- package/src/sentry/node.ts +153 -0
- package/src/sentry/sentry.test.ts +39 -0
- package/src/sentry/tracing.test.ts +62 -0
- package/src/sentry/tracing.ts +153 -0
- package/src/sentry/types.ts +22 -0
- package/src/testing/index.ts +5 -0
- package/src/testing/testkit/browser.ts +8 -0
- package/src/testing/testkit/index.ts +7 -0
- package/src/testing/testkit/shims.d.ts +5 -0
- 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 @@
|
|
|
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 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/sentry/types.ts"],"names":[],"mappings":";AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE"}
|
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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.cf49a01",
|
|
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.cf49a01",
|
|
69
|
+
"@dxos/client-services": "0.3.11-main.cf49a01",
|
|
70
|
+
"@dxos/client-protocol": "0.3.11-main.cf49a01",
|
|
71
|
+
"@dxos/config": "0.3.11-main.cf49a01",
|
|
72
|
+
"@dxos/invariant": "0.3.11-main.cf49a01",
|
|
73
|
+
"@dxos/debug": "0.3.11-main.cf49a01",
|
|
74
|
+
"@dxos/context": "0.3.11-main.cf49a01",
|
|
75
|
+
"@dxos/log": "0.3.11-main.cf49a01",
|
|
76
|
+
"@dxos/network-manager": "0.3.11-main.cf49a01",
|
|
77
|
+
"@dxos/node-std": "0.3.11-main.cf49a01",
|
|
78
|
+
"@dxos/protocols": "0.3.11-main.cf49a01",
|
|
79
|
+
"@dxos/react-client": "0.3.11-main.cf49a01",
|
|
80
|
+
"@dxos/util": "0.3.11-main.cf49a01"
|
|
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,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
|
+
};
|