@dxos/tracing 0.1.56-main.c19b7cd → 0.1.56-main.c277f68
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/browser/index.mjs +307 -33
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node/index.cjs +311 -33
- package/dist/lib/node/index.cjs.map +4 -4
- package/dist/lib/node/meta.json +1 -1
- package/dist/types/src/api.d.ts +1 -0
- package/dist/types/src/api.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +1 -0
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/metrics/base.d.ts +7 -0
- package/dist/types/src/metrics/base.d.ts.map +1 -0
- package/dist/types/src/metrics/index.d.ts +5 -0
- package/dist/types/src/metrics/index.d.ts.map +1 -0
- package/dist/types/src/metrics/time-series-counter.d.ts +15 -0
- package/dist/types/src/metrics/time-series-counter.d.ts.map +1 -0
- package/dist/types/src/metrics/time-usage-counter.d.ts +15 -0
- package/dist/types/src/metrics/time-usage-counter.d.ts.map +1 -0
- package/dist/types/src/metrics/unary-counter.d.ts +12 -0
- package/dist/types/src/metrics/unary-counter.d.ts.map +1 -0
- package/dist/types/src/symbols.d.ts +1 -0
- package/dist/types/src/symbols.d.ts.map +1 -1
- package/dist/types/src/trace-processor.d.ts +10 -1
- package/dist/types/src/trace-processor.d.ts.map +1 -1
- package/dist/types/src/trace-sender.d.ts.map +1 -1
- package/package.json +10 -9
- package/src/api.ts +17 -1
- package/src/index.ts +1 -0
- package/src/metrics/base.ts +26 -0
- package/src/metrics/index.ts +8 -0
- package/src/metrics/time-series-counter.ts +52 -0
- package/src/metrics/time-usage-counter.ts +62 -0
- package/src/metrics/unary-counter.ts +31 -0
- package/src/symbols.ts +4 -2
- package/src/trace-processor.ts +158 -2
- package/src/trace-sender.ts +28 -18
package/dist/lib/node/index.cjs
CHANGED
|
@@ -20,11 +20,15 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
20
20
|
// packages/common/tracing/src/index.ts
|
|
21
21
|
var src_exports = {};
|
|
22
22
|
__export(src_exports, {
|
|
23
|
+
BaseCounter: () => BaseCounter,
|
|
23
24
|
TRACE_PROCESSOR: () => TRACE_PROCESSOR,
|
|
24
25
|
TRACE_SPAN_ATTRIBUTE: () => TRACE_SPAN_ATTRIBUTE,
|
|
26
|
+
TimeSeriesCounter: () => TimeSeriesCounter,
|
|
27
|
+
TimeUsageCounter: () => TimeUsageCounter,
|
|
25
28
|
TraceProcessor: () => TraceProcessor,
|
|
26
29
|
TraceSender: () => TraceSender,
|
|
27
30
|
TracingSpan: () => TracingSpan,
|
|
31
|
+
UnaryCounter: () => UnaryCounter,
|
|
28
32
|
getTracingContext: () => getTracingContext,
|
|
29
33
|
symbolTracingContext: () => symbolTracingContext,
|
|
30
34
|
trace: () => trace
|
|
@@ -35,40 +39,34 @@ module.exports = __toCommonJS(src_exports);
|
|
|
35
39
|
var import_context = require("@dxos/context");
|
|
36
40
|
|
|
37
41
|
// packages/common/tracing/src/symbols.ts
|
|
38
|
-
var symbolTracingContext = Symbol("dxos.tracing
|
|
42
|
+
var symbolTracingContext = Symbol("dxos.tracing.context");
|
|
39
43
|
var getTracingContext = (target) => {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
44
|
+
return target[symbolTracingContext] ??= {
|
|
45
|
+
infoProperties: {},
|
|
46
|
+
metricsProperties: {}
|
|
43
47
|
};
|
|
44
48
|
};
|
|
45
49
|
var TRACE_SPAN_ATTRIBUTE = "dxos.trace-span";
|
|
46
50
|
|
|
47
51
|
// packages/common/tracing/src/trace-processor.ts
|
|
52
|
+
var import_async = require("@dxos/async");
|
|
53
|
+
var import_log = require("@dxos/log");
|
|
48
54
|
var import_util = require("@dxos/util");
|
|
49
55
|
|
|
50
56
|
// packages/common/tracing/src/trace-sender.ts
|
|
51
57
|
var import_codec_protobuf = require("@dxos/codec-protobuf");
|
|
52
|
-
var FLUSH_INTERVAL = 1e3;
|
|
53
58
|
var TraceSender = class {
|
|
54
59
|
constructor(_traceProcessor) {
|
|
55
60
|
this._traceProcessor = _traceProcessor;
|
|
56
61
|
}
|
|
57
62
|
streamTrace(request) {
|
|
58
63
|
return new import_codec_protobuf.Stream(({ ctx, next }) => {
|
|
59
|
-
const
|
|
60
|
-
dirtyResources: /* @__PURE__ */ new Set(),
|
|
61
|
-
dirtySpans: /* @__PURE__ */ new Set()
|
|
62
|
-
};
|
|
63
|
-
this._traceProcessor.subscriptions.add(subscription);
|
|
64
|
-
ctx.onDispose(() => {
|
|
65
|
-
this._traceProcessor.subscriptions.delete(subscription);
|
|
66
|
-
});
|
|
67
|
-
const flushEvents = (resources, spans) => {
|
|
64
|
+
const flushEvents = (resources, spans, logs) => {
|
|
68
65
|
const event = {
|
|
69
66
|
resourceAdded: [],
|
|
70
67
|
resourceRemoved: [],
|
|
71
|
-
spanAdded: []
|
|
68
|
+
spanAdded: [],
|
|
69
|
+
logAdded: []
|
|
72
70
|
};
|
|
73
71
|
if (resources) {
|
|
74
72
|
for (const id of resources) {
|
|
@@ -106,26 +104,50 @@ var TraceSender = class {
|
|
|
106
104
|
});
|
|
107
105
|
}
|
|
108
106
|
}
|
|
107
|
+
if (logs) {
|
|
108
|
+
for (const log2 of logs) {
|
|
109
|
+
event.logAdded.push({
|
|
110
|
+
log: log2
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
} else {
|
|
114
|
+
for (const log2 of this._traceProcessor.logs) {
|
|
115
|
+
event.logAdded.push({
|
|
116
|
+
log: log2
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
}
|
|
109
120
|
if (event.resourceAdded.length > 0 || event.resourceRemoved.length > 0 || event.spanAdded.length > 0) {
|
|
110
121
|
next(event);
|
|
111
122
|
}
|
|
112
123
|
};
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
flushEvents(subscription.dirtyResources, subscription.dirtySpans);
|
|
124
|
+
const flush = () => {
|
|
125
|
+
flushEvents(subscription.dirtyResources, subscription.dirtySpans, subscription.newLogs);
|
|
116
126
|
subscription.dirtyResources.clear();
|
|
117
127
|
subscription.dirtySpans.clear();
|
|
118
|
-
|
|
128
|
+
subscription.newLogs.length = 0;
|
|
129
|
+
};
|
|
130
|
+
const subscription = {
|
|
131
|
+
flush,
|
|
132
|
+
dirtyResources: /* @__PURE__ */ new Set(),
|
|
133
|
+
dirtySpans: /* @__PURE__ */ new Set(),
|
|
134
|
+
newLogs: []
|
|
135
|
+
};
|
|
136
|
+
this._traceProcessor.subscriptions.add(subscription);
|
|
119
137
|
ctx.onDispose(() => {
|
|
120
|
-
|
|
138
|
+
this._traceProcessor.subscriptions.delete(subscription);
|
|
121
139
|
});
|
|
140
|
+
flushEvents(null, null, null);
|
|
122
141
|
});
|
|
123
142
|
}
|
|
124
143
|
};
|
|
125
144
|
|
|
126
145
|
// packages/common/tracing/src/trace-processor.ts
|
|
146
|
+
var __dxlog_file = "/home/runner/work/dxos/dxos/packages/common/tracing/src/trace-processor.ts";
|
|
127
147
|
var MAX_RESOURCE_RECORDS = 500;
|
|
128
148
|
var MAX_SPAN_RECORDS = 1e3;
|
|
149
|
+
var MAX_LOG_RECORDS = 1e3;
|
|
150
|
+
var REFRESH_INTERVAL = 1e3;
|
|
129
151
|
var TraceProcessor = class {
|
|
130
152
|
constructor() {
|
|
131
153
|
this.resources = /* @__PURE__ */ new Map();
|
|
@@ -133,17 +155,62 @@ var TraceProcessor = class {
|
|
|
133
155
|
this.resourceIdList = [];
|
|
134
156
|
this.spans = /* @__PURE__ */ new Map();
|
|
135
157
|
this.spanIdList = [];
|
|
158
|
+
this.logs = [];
|
|
136
159
|
this.subscriptions = /* @__PURE__ */ new Set();
|
|
160
|
+
this._logProcessor = (config, entry) => {
|
|
161
|
+
switch (entry.level) {
|
|
162
|
+
case import_log.LogLevel.ERROR:
|
|
163
|
+
case import_log.LogLevel.WARN:
|
|
164
|
+
case import_log.LogLevel.TRACE: {
|
|
165
|
+
const scope = entry.meta?.S;
|
|
166
|
+
const resource2 = this.resourceInstanceIndex.get(scope);
|
|
167
|
+
if (!resource2) {
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
const context = (0, import_log.getContextFromEntry)(entry) ?? {};
|
|
171
|
+
for (const key of Object.keys(context)) {
|
|
172
|
+
context[key] = sanitizeValue(context[key]);
|
|
173
|
+
}
|
|
174
|
+
const entryToPush = {
|
|
175
|
+
level: entry.level,
|
|
176
|
+
message: entry.message,
|
|
177
|
+
context,
|
|
178
|
+
timestamp: /* @__PURE__ */ new Date(),
|
|
179
|
+
meta: {
|
|
180
|
+
file: entry.meta?.F ?? "",
|
|
181
|
+
line: entry.meta?.L ?? 0,
|
|
182
|
+
resourceId: resource2.data.id
|
|
183
|
+
}
|
|
184
|
+
};
|
|
185
|
+
this._pushLog(entryToPush);
|
|
186
|
+
break;
|
|
187
|
+
}
|
|
188
|
+
default:
|
|
189
|
+
}
|
|
190
|
+
};
|
|
191
|
+
import_log.log.addProcessor(this._logProcessor.bind(this), void 0, {
|
|
192
|
+
F: __dxlog_file,
|
|
193
|
+
L: 61,
|
|
194
|
+
S: this,
|
|
195
|
+
C: (f, a) => f(...a)
|
|
196
|
+
});
|
|
197
|
+
const refreshInterval = setInterval(this.refresh.bind(this), REFRESH_INTERVAL);
|
|
198
|
+
(0, import_async.unrefTimeout)(refreshInterval);
|
|
137
199
|
}
|
|
138
200
|
traceResourceConstructor(params) {
|
|
139
201
|
const id = this.resources.size;
|
|
202
|
+
const tracingContext = getTracingContext(Object.getPrototypeOf(params.instance));
|
|
203
|
+
for (const key of Object.keys(tracingContext.metricsProperties)) {
|
|
204
|
+
params.instance[key]._assign(params.instance, key);
|
|
205
|
+
}
|
|
140
206
|
const entry = {
|
|
141
207
|
data: {
|
|
142
208
|
id,
|
|
143
209
|
className: params.constructor.name,
|
|
144
210
|
instanceId: (0, import_util.getPrototypeSpecificInstanceId)(params.instance),
|
|
145
211
|
info: this.getResourceInfo(params.instance),
|
|
146
|
-
links: []
|
|
212
|
+
links: [],
|
|
213
|
+
metrics: this.getResourceMetrics(params.instance)
|
|
147
214
|
},
|
|
148
215
|
instance: new WeakRef(params.instance)
|
|
149
216
|
};
|
|
@@ -160,13 +227,21 @@ var TraceProcessor = class {
|
|
|
160
227
|
const tracingContext = getTracingContext(Object.getPrototypeOf(instance));
|
|
161
228
|
for (const [key, _opts] of Object.entries(tracingContext.infoProperties)) {
|
|
162
229
|
try {
|
|
163
|
-
res[key] = typeof instance[key] === "function" ? instance[key]() : instance[key];
|
|
230
|
+
res[key] = sanitizeValue(typeof instance[key] === "function" ? instance[key]() : instance[key]);
|
|
164
231
|
} catch (err) {
|
|
165
232
|
res[key] = err.message;
|
|
166
233
|
}
|
|
167
234
|
}
|
|
168
235
|
return res;
|
|
169
236
|
}
|
|
237
|
+
getResourceMetrics(instance) {
|
|
238
|
+
const res = [];
|
|
239
|
+
const tracingContext = getTracingContext(Object.getPrototypeOf(instance));
|
|
240
|
+
for (const [key, _opts] of Object.entries(tracingContext.metricsProperties)) {
|
|
241
|
+
res.push(instance[key].getData());
|
|
242
|
+
}
|
|
243
|
+
return res;
|
|
244
|
+
}
|
|
170
245
|
traceSpan(params) {
|
|
171
246
|
const span2 = new TracingSpan(this, params);
|
|
172
247
|
this._flushSpan(span2);
|
|
@@ -181,6 +256,30 @@ var TraceProcessor = class {
|
|
|
181
256
|
createTraceSender() {
|
|
182
257
|
return new TraceSender(this);
|
|
183
258
|
}
|
|
259
|
+
refresh() {
|
|
260
|
+
for (const resource2 of this.resources.values()) {
|
|
261
|
+
const instance = resource2.instance.deref();
|
|
262
|
+
if (!instance) {
|
|
263
|
+
continue;
|
|
264
|
+
}
|
|
265
|
+
const tracingContext = getTracingContext(Object.getPrototypeOf(instance));
|
|
266
|
+
const time = performance.now();
|
|
267
|
+
for (const key of Object.keys(tracingContext.metricsProperties)) {
|
|
268
|
+
instance[key]._tick?.(time);
|
|
269
|
+
}
|
|
270
|
+
let _changed = false;
|
|
271
|
+
const oldInfo = resource2.data.info;
|
|
272
|
+
resource2.data.info = this.getResourceInfo(instance);
|
|
273
|
+
_changed ||= !areEqualShallow(oldInfo, resource2.data.info);
|
|
274
|
+
const oldMetrics = resource2.data.metrics;
|
|
275
|
+
resource2.data.metrics = this.getResourceMetrics(instance);
|
|
276
|
+
_changed ||= !areEqualShallow(oldMetrics, resource2.data.metrics);
|
|
277
|
+
this._markResourceDirty(resource2.data.id);
|
|
278
|
+
}
|
|
279
|
+
for (const subscription of this.subscriptions) {
|
|
280
|
+
subscription.flush();
|
|
281
|
+
}
|
|
282
|
+
}
|
|
184
283
|
/**
|
|
185
284
|
* @internal
|
|
186
285
|
*/
|
|
@@ -215,8 +314,20 @@ var TraceProcessor = class {
|
|
|
215
314
|
this.spans.delete(id);
|
|
216
315
|
}
|
|
217
316
|
}
|
|
317
|
+
_pushLog(log1) {
|
|
318
|
+
this.logs.push(log1);
|
|
319
|
+
if (this.logs.length > MAX_LOG_RECORDS) {
|
|
320
|
+
this.logs.shift();
|
|
321
|
+
}
|
|
322
|
+
for (const subscription of this.subscriptions) {
|
|
323
|
+
subscription.newLogs.push(log1);
|
|
324
|
+
}
|
|
325
|
+
}
|
|
218
326
|
};
|
|
219
|
-
var
|
|
327
|
+
var TracingSpan = class _TracingSpan {
|
|
328
|
+
static {
|
|
329
|
+
this.nextId = 0;
|
|
330
|
+
}
|
|
220
331
|
constructor(_traceProcessor, params) {
|
|
221
332
|
this._traceProcessor = _traceProcessor;
|
|
222
333
|
this.parentId = null;
|
|
@@ -253,20 +364,17 @@ var _TracingSpan = class {
|
|
|
253
364
|
this._traceProcessor._flushSpan(this);
|
|
254
365
|
}
|
|
255
366
|
serialize() {
|
|
256
|
-
var _a2, _b, _c, _d, _e;
|
|
257
367
|
return {
|
|
258
368
|
id: this.id,
|
|
259
|
-
resourceId:
|
|
369
|
+
resourceId: this.resourceId ?? void 0,
|
|
260
370
|
methodName: this.methodName,
|
|
261
|
-
parentId:
|
|
371
|
+
parentId: this.parentId ?? void 0,
|
|
262
372
|
startTs: this.startTs.toFixed(3),
|
|
263
|
-
endTs:
|
|
264
|
-
error:
|
|
373
|
+
endTs: this.endTs?.toFixed(3) ?? void 0,
|
|
374
|
+
error: this.error ?? void 0
|
|
265
375
|
};
|
|
266
376
|
}
|
|
267
377
|
};
|
|
268
|
-
var TracingSpan = _TracingSpan;
|
|
269
|
-
TracingSpan.nextId = 0;
|
|
270
378
|
var serializeError = (err) => {
|
|
271
379
|
if (err instanceof Error) {
|
|
272
380
|
return {
|
|
@@ -278,12 +386,44 @@ var serializeError = (err) => {
|
|
|
278
386
|
message: String(err)
|
|
279
387
|
};
|
|
280
388
|
};
|
|
281
|
-
var
|
|
282
|
-
var
|
|
389
|
+
var TRACE_PROCESSOR = globalThis.TRACE_PROCESSOR ??= new TraceProcessor();
|
|
390
|
+
var sanitizeValue = (value) => {
|
|
391
|
+
switch (typeof value) {
|
|
392
|
+
case "string":
|
|
393
|
+
case "number":
|
|
394
|
+
case "boolean":
|
|
395
|
+
case "undefined":
|
|
396
|
+
return value;
|
|
397
|
+
break;
|
|
398
|
+
case "object":
|
|
399
|
+
case "function":
|
|
400
|
+
if (value === null) {
|
|
401
|
+
return value;
|
|
402
|
+
break;
|
|
403
|
+
}
|
|
404
|
+
if (typeof value.truncate === "function") {
|
|
405
|
+
return value.truncate();
|
|
406
|
+
}
|
|
407
|
+
return value.toString();
|
|
408
|
+
}
|
|
409
|
+
};
|
|
410
|
+
var areEqualShallow = (a, b) => {
|
|
411
|
+
for (const key in a) {
|
|
412
|
+
if (!(key in b) || a[key] !== b[key]) {
|
|
413
|
+
return false;
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
for (const key in b) {
|
|
417
|
+
if (!(key in a) || a[key] !== b[key]) {
|
|
418
|
+
return false;
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
return true;
|
|
422
|
+
};
|
|
283
423
|
|
|
284
424
|
// packages/common/tracing/src/api.ts
|
|
285
425
|
var resource = () => (constructor) => {
|
|
286
|
-
|
|
426
|
+
const klass = class extends constructor {
|
|
287
427
|
constructor(...rest) {
|
|
288
428
|
super(...rest);
|
|
289
429
|
TRACE_PROCESSOR.traceResourceConstructor({
|
|
@@ -292,6 +432,10 @@ var resource = () => (constructor) => {
|
|
|
292
432
|
});
|
|
293
433
|
}
|
|
294
434
|
};
|
|
435
|
+
Object.defineProperty(klass, "name", {
|
|
436
|
+
value: constructor.name
|
|
437
|
+
});
|
|
438
|
+
return klass;
|
|
295
439
|
};
|
|
296
440
|
var info = () => (target, propertyKey, descriptor) => {
|
|
297
441
|
getTracingContext(target).infoProperties[propertyKey] = {};
|
|
@@ -319,6 +463,9 @@ var span = () => (target, propertyKey, descriptor) => {
|
|
|
319
463
|
}
|
|
320
464
|
};
|
|
321
465
|
};
|
|
466
|
+
var metricsCounter = () => (target, propertyKey, descriptor) => {
|
|
467
|
+
getTracingContext(target).metricsProperties[propertyKey] = {};
|
|
468
|
+
};
|
|
322
469
|
var addLink = (parent, child, opts = {}) => {
|
|
323
470
|
TRACE_PROCESSOR.addLink(parent, child, opts);
|
|
324
471
|
};
|
|
@@ -326,15 +473,146 @@ var trace = {
|
|
|
326
473
|
resource,
|
|
327
474
|
info,
|
|
328
475
|
span,
|
|
476
|
+
metricsCounter,
|
|
329
477
|
addLink
|
|
330
478
|
};
|
|
479
|
+
|
|
480
|
+
// packages/common/tracing/src/metrics/base.ts
|
|
481
|
+
var BaseCounter = class {
|
|
482
|
+
/**
|
|
483
|
+
* @internal
|
|
484
|
+
*/
|
|
485
|
+
_assign(instance, name) {
|
|
486
|
+
this._instance = instance;
|
|
487
|
+
this.name = name;
|
|
488
|
+
}
|
|
489
|
+
_tick(time) {
|
|
490
|
+
}
|
|
491
|
+
};
|
|
492
|
+
|
|
493
|
+
// packages/common/tracing/src/metrics/unary-counter.ts
|
|
494
|
+
var UnaryCounter = class extends BaseCounter {
|
|
495
|
+
constructor({ units } = {}) {
|
|
496
|
+
super();
|
|
497
|
+
this.value = 0;
|
|
498
|
+
this.units = units;
|
|
499
|
+
}
|
|
500
|
+
inc(by = 1) {
|
|
501
|
+
this.value += by;
|
|
502
|
+
}
|
|
503
|
+
getData() {
|
|
504
|
+
return {
|
|
505
|
+
name: this.name,
|
|
506
|
+
counter: {
|
|
507
|
+
value: this.value,
|
|
508
|
+
units: this.units
|
|
509
|
+
}
|
|
510
|
+
};
|
|
511
|
+
}
|
|
512
|
+
};
|
|
513
|
+
|
|
514
|
+
// packages/common/tracing/src/metrics/time-series-counter.ts
|
|
515
|
+
var MAX_BUCKETS = 60;
|
|
516
|
+
var TimeSeriesCounter = class extends BaseCounter {
|
|
517
|
+
constructor({ units } = {}) {
|
|
518
|
+
super();
|
|
519
|
+
this._currentValue = 0;
|
|
520
|
+
this._totalValue = 0;
|
|
521
|
+
this._buckets = [];
|
|
522
|
+
this.units = units;
|
|
523
|
+
}
|
|
524
|
+
inc(by = 1) {
|
|
525
|
+
this._currentValue += by;
|
|
526
|
+
this._totalValue += by;
|
|
527
|
+
}
|
|
528
|
+
_tick(time) {
|
|
529
|
+
this._buckets.push(this._currentValue);
|
|
530
|
+
if (this._buckets.length > MAX_BUCKETS) {
|
|
531
|
+
this._buckets.shift();
|
|
532
|
+
}
|
|
533
|
+
this._currentValue = 0;
|
|
534
|
+
}
|
|
535
|
+
getData() {
|
|
536
|
+
return {
|
|
537
|
+
name: this.name,
|
|
538
|
+
timeSeries: {
|
|
539
|
+
tracks: [
|
|
540
|
+
{
|
|
541
|
+
name: this.name,
|
|
542
|
+
units: this.units,
|
|
543
|
+
points: this._buckets.map((value, index) => ({
|
|
544
|
+
value
|
|
545
|
+
})),
|
|
546
|
+
total: this._totalValue
|
|
547
|
+
}
|
|
548
|
+
]
|
|
549
|
+
}
|
|
550
|
+
};
|
|
551
|
+
}
|
|
552
|
+
};
|
|
553
|
+
|
|
554
|
+
// packages/common/tracing/src/metrics/time-usage-counter.ts
|
|
555
|
+
var MAX_BUCKETS2 = 60;
|
|
556
|
+
var TimeUsageCounter = class extends BaseCounter {
|
|
557
|
+
constructor() {
|
|
558
|
+
super(...arguments);
|
|
559
|
+
this._currentValue = 0;
|
|
560
|
+
this._totalValue = 0;
|
|
561
|
+
this._buckets = [];
|
|
562
|
+
this._lastTickTime = performance.now();
|
|
563
|
+
}
|
|
564
|
+
record(time) {
|
|
565
|
+
this._currentValue += time;
|
|
566
|
+
this._totalValue += time;
|
|
567
|
+
}
|
|
568
|
+
beginRecording() {
|
|
569
|
+
const start = performance.now();
|
|
570
|
+
return {
|
|
571
|
+
end: () => {
|
|
572
|
+
const end = performance.now();
|
|
573
|
+
this.record(end - start);
|
|
574
|
+
}
|
|
575
|
+
};
|
|
576
|
+
}
|
|
577
|
+
_tick(time) {
|
|
578
|
+
const delta = time - this._lastTickTime;
|
|
579
|
+
this._lastTickTime = time;
|
|
580
|
+
const percentage = this._currentValue / delta * 100;
|
|
581
|
+
this._buckets.push(percentage);
|
|
582
|
+
if (this._buckets.length > MAX_BUCKETS2) {
|
|
583
|
+
this._buckets.shift();
|
|
584
|
+
}
|
|
585
|
+
this._currentValue = 0;
|
|
586
|
+
}
|
|
587
|
+
getData() {
|
|
588
|
+
return {
|
|
589
|
+
name: this.name,
|
|
590
|
+
timeSeries: {
|
|
591
|
+
tracks: [
|
|
592
|
+
{
|
|
593
|
+
name: this.name,
|
|
594
|
+
units: "%",
|
|
595
|
+
points: this._buckets.map((value, index) => ({
|
|
596
|
+
value
|
|
597
|
+
})),
|
|
598
|
+
total: this._totalValue
|
|
599
|
+
}
|
|
600
|
+
]
|
|
601
|
+
}
|
|
602
|
+
};
|
|
603
|
+
}
|
|
604
|
+
};
|
|
331
605
|
// Annotate the CommonJS export names for ESM import in node:
|
|
332
606
|
0 && (module.exports = {
|
|
607
|
+
BaseCounter,
|
|
333
608
|
TRACE_PROCESSOR,
|
|
334
609
|
TRACE_SPAN_ATTRIBUTE,
|
|
610
|
+
TimeSeriesCounter,
|
|
611
|
+
TimeUsageCounter,
|
|
335
612
|
TraceProcessor,
|
|
336
613
|
TraceSender,
|
|
337
614
|
TracingSpan,
|
|
615
|
+
UnaryCounter,
|
|
338
616
|
getTracingContext,
|
|
339
617
|
symbolTracingContext,
|
|
340
618
|
trace
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../src/index.ts", "../../../src/api.ts", "../../../src/symbols.ts", "../../../src/trace-processor.ts", "../../../src/trace-sender.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nexport * from './api';\nexport * from './symbols';\nexport * from './trace-processor';\nexport * from './trace-sender';\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Context } from '@dxos/context';\n\nimport { getTracingContext } from './symbols';\nimport { TRACE_PROCESSOR } from './trace-processor';\n\nconst resource =\n () =>\n <T extends { new (...args: any[]): {} }>(constructor: T) => {\n return class extends constructor {\n constructor(...rest: any[]) {\n super(...rest);\n TRACE_PROCESSOR.traceResourceConstructor({ constructor, instance: this });\n }\n };\n };\n\nconst info = () => (target: any, propertyKey: string, descriptor?: PropertyDescriptor) => {\n getTracingContext(target).infoProperties[propertyKey] = {};\n};\n\nconst span = () => (target: any, propertyKey: string, descriptor: TypedPropertyDescriptor<(...args: any) => any>) => {\n const method = descriptor.value!;\n\n descriptor.value = async function (this: any, ...args: any) {\n const parentCtx = args[0] instanceof Context ? args[0] : null;\n const span = TRACE_PROCESSOR.traceSpan({ parentCtx, methodName: propertyKey, instance: this });\n\n const callArgs = span.ctx ? [span.ctx, ...args.slice(1)] : args;\n try {\n return await method.apply(this, callArgs);\n } catch (err) {\n span.markError(err);\n throw err;\n } finally {\n span.markSuccess();\n }\n };\n};\n\nexport type AddLinkOptions = {};\n\nconst addLink = (parent: any, child: any, opts: AddLinkOptions = {}) => {\n TRACE_PROCESSOR.addLink(parent, child, opts);\n};\n\nexport const trace = {\n resource,\n info,\n span,\n\n addLink,\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nexport const symbolTracingContext = Symbol('dxos.tracing-context');\n\nexport type TracingContext = {\n infoProperties: Record<string, {}>;\n};\n\nexport const getTracingContext = (target: any): TracingContext => {\n return (target[symbolTracingContext] ??= {\n infoProperties: {},\n });\n};\n\nexport const TRACE_SPAN_ATTRIBUTE = 'dxos.trace-span';\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Context } from '@dxos/context';\nimport { Error as SerializedError } from '@dxos/protocols/proto/dxos/error';\nimport { Resource, Span } from '@dxos/protocols/proto/dxos/tracing';\nimport { getPrototypeSpecificInstanceId } from '@dxos/util';\n\nimport type { AddLinkOptions } from './api';\nimport { TRACE_SPAN_ATTRIBUTE, getTracingContext } from './symbols';\nimport { TraceSender } from './trace-sender';\n\nexport type TraceResourceConstructorParams = {\n constructor: { new (...args: any[]): {} };\n instance: any;\n};\n\nexport type TraceSpanParams = {\n instance: any;\n methodName: string;\n parentCtx: Context | null;\n};\n\nexport type ResourceEntry = {\n data: Resource;\n instance: WeakRef<any>;\n};\n\nexport type TraceSubscription = {\n dirtyResources: Set<number>;\n dirtySpans: Set<number>;\n};\n\nconst MAX_RESOURCE_RECORDS = 500;\nconst MAX_SPAN_RECORDS = 1_000;\n\nexport class TraceProcessor {\n resources = new Map<number, ResourceEntry>();\n resourceInstanceIndex = new WeakMap<any, ResourceEntry>();\n resourceIdList: number[] = [];\n\n spans = new Map<number, Span>();\n spanIdList: number[] = [];\n\n subscriptions: Set<TraceSubscription> = new Set();\n\n traceResourceConstructor(params: TraceResourceConstructorParams) {\n const id = this.resources.size;\n const entry: ResourceEntry = {\n data: {\n id,\n className: params.constructor.name,\n instanceId: getPrototypeSpecificInstanceId(params.instance),\n info: this.getResourceInfo(params.instance),\n links: [],\n },\n instance: new WeakRef(params.instance),\n };\n this.resources.set(id, entry);\n this.resourceInstanceIndex.set(params.instance, entry);\n this.resourceIdList.push(id);\n if (this.resourceIdList.length > MAX_RESOURCE_RECORDS) {\n this._clearResources();\n }\n this._markResourceDirty(id);\n }\n\n getResourceInfo(instance: any): Record<string, any> {\n const res: Record<string, any> = {};\n const tracingContext = getTracingContext(Object.getPrototypeOf(instance));\n\n for (const [key, _opts] of Object.entries(tracingContext.infoProperties)) {\n try {\n res[key] = typeof instance[key] === 'function' ? instance[key]() : instance[key];\n } catch (err: any) {\n res[key] = err.message;\n }\n }\n\n return res;\n }\n\n traceSpan(params: TraceSpanParams): TracingSpan {\n const span = new TracingSpan(this, params);\n this._flushSpan(span);\n return span;\n }\n\n addLink(parent: any, child: any, opts: AddLinkOptions) {}\n\n getResourceId(instance: any): number | null {\n const entry = this.resourceInstanceIndex.get(instance);\n return entry ? entry.data.id : null;\n }\n\n createTraceSender() {\n return new TraceSender(this);\n }\n\n /**\n * @internal\n */\n _flushSpan(runtimeSpan: TracingSpan) {\n const span = runtimeSpan.serialize();\n this.spans.set(span.id, span);\n this.spanIdList.push(span.id);\n if (this.spanIdList.length > MAX_SPAN_RECORDS) {\n this._clearSpans();\n }\n this._markSpanDirty(span.id);\n }\n\n private _markResourceDirty(id: number) {\n for (const subscription of this.subscriptions) {\n subscription.dirtyResources.add(id);\n }\n }\n\n private _markSpanDirty(id: number) {\n for (const subscription of this.subscriptions) {\n subscription.dirtySpans.add(id);\n }\n }\n\n private _clearResources() {\n // TODO(dmaretskyi): Use FinalizationRegistry to delete finalized resources first.\n while (this.resourceIdList.length > MAX_RESOURCE_RECORDS) {\n const id = this.resourceIdList.shift()!;\n this.resources.delete(id);\n }\n }\n\n private _clearSpans() {\n while (this.spanIdList.length > MAX_SPAN_RECORDS) {\n const id = this.spanIdList.shift()!;\n this.spans.delete(id);\n }\n }\n}\n\nexport class TracingSpan {\n static nextId = 0;\n\n readonly id: number;\n readonly parentId: number | null = null;\n readonly methodName: string;\n readonly resourceId: number | null = null;\n startTs: number;\n endTs: number | null = null;\n error: SerializedError | null = null;\n\n private readonly _ctx: Context | null = null;\n\n constructor(private _traceProcessor: TraceProcessor, params: TraceSpanParams) {\n this.id = TracingSpan.nextId++;\n this.methodName = params.methodName;\n this.resourceId = _traceProcessor.getResourceId(params.instance);\n this.startTs = performance.now();\n\n if (params.parentCtx) {\n this._ctx = params.parentCtx.derive({\n attributes: {\n [TRACE_SPAN_ATTRIBUTE]: this.id,\n },\n });\n const parentId = params.parentCtx.getAttribute(TRACE_SPAN_ATTRIBUTE);\n if (typeof parentId === 'number') {\n this.parentId = parentId;\n }\n }\n }\n\n get ctx(): Context | null {\n return this._ctx;\n }\n\n markSuccess() {\n this.endTs = performance.now();\n this._traceProcessor._flushSpan(this);\n }\n\n markError(err: unknown) {\n this.endTs = performance.now();\n this.error = serializeError(err);\n this._traceProcessor._flushSpan(this);\n }\n\n serialize(): Span {\n return {\n id: this.id,\n resourceId: this.resourceId ?? undefined,\n methodName: this.methodName,\n parentId: this.parentId ?? undefined,\n startTs: this.startTs.toFixed(3),\n endTs: this.endTs?.toFixed(3) ?? undefined,\n error: this.error ?? undefined,\n };\n }\n}\n\nconst serializeError = (err: unknown): SerializedError => {\n if (err instanceof Error) {\n return {\n name: err.name,\n message: err.message,\n };\n }\n\n return {\n message: String(err),\n };\n};\n\nexport const TRACE_PROCESSOR: TraceProcessor = ((globalThis as any).TRACE_PROCESSOR ??= new TraceProcessor());\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Stream } from '@dxos/codec-protobuf';\nimport { StreamTraceEvent, TracingService } from '@dxos/protocols/proto/dxos/tracing';\n\nimport { TraceProcessor, TraceSubscription } from './trace-processor';\n\nconst FLUSH_INTERVAL = 1_000;\n\nexport class TraceSender implements TracingService {\n constructor(private _traceProcessor: TraceProcessor) {}\n\n streamTrace(request: void): Stream<StreamTraceEvent> {\n return new Stream(({ ctx, next }) => {\n const subscription: TraceSubscription = {\n dirtyResources: new Set(),\n dirtySpans: new Set(),\n };\n this._traceProcessor.subscriptions.add(subscription);\n ctx.onDispose(() => {\n this._traceProcessor.subscriptions.delete(subscription);\n });\n\n const flushEvents = (resources: Set<number> | null, spans: Set<number> | null) => {\n const event: StreamTraceEvent = {\n resourceAdded: [],\n resourceRemoved: [],\n spanAdded: [],\n };\n\n if (resources) {\n for (const id of resources) {\n const entry = this._traceProcessor.resources.get(id);\n if (entry) {\n event.resourceAdded!.push({ resource: entry.data });\n } else {\n event.resourceRemoved!.push({ id });\n }\n }\n } else {\n for (const entry of this._traceProcessor.resources.values()) {\n event.resourceAdded!.push({ resource: entry.data });\n }\n }\n\n if (spans) {\n for (const id of spans) {\n const span = this._traceProcessor.spans.get(id);\n if (span) {\n event.spanAdded!.push({ span });\n }\n }\n } else {\n for (const span of this._traceProcessor.spans.values()) {\n event.spanAdded!.push({ span });\n }\n }\n\n if (event.resourceAdded!.length > 0 || event.resourceRemoved!.length > 0 || event.spanAdded!.length > 0) {\n next(event);\n }\n };\n\n flushEvents(null, null);\n\n const timer = setInterval(() => {\n flushEvents(subscription.dirtyResources, subscription.dirtySpans);\n subscription.dirtyResources.clear();\n subscription.dirtySpans.clear();\n }, FLUSH_INTERVAL);\n ctx.onDispose(() => {\n clearInterval(timer);\n });\n });\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["symbolTracingContext", "Symbol", "getTracingContext", "target", "
|
|
3
|
+
"sources": ["../../../src/index.ts", "../../../src/api.ts", "../../../src/symbols.ts", "../../../src/trace-processor.ts", "../../../src/trace-sender.ts", "../../../src/metrics/base.ts", "../../../src/metrics/unary-counter.ts", "../../../src/metrics/time-series-counter.ts", "../../../src/metrics/time-usage-counter.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nexport * from './api';\nexport * from './symbols';\nexport * from './trace-processor';\nexport * from './trace-sender';\nexport * from './metrics';\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Context } from '@dxos/context';\n\nimport { getTracingContext } from './symbols';\nimport { TRACE_PROCESSOR } from './trace-processor';\n\n/**\n * Annotates a class as a tracked resource.\n */\nconst resource =\n () =>\n <T extends { new (...args: any[]): {} }>(constructor: T) => {\n const klass = class extends constructor {\n constructor(...rest: any[]) {\n super(...rest);\n TRACE_PROCESSOR.traceResourceConstructor({ constructor, instance: this });\n }\n };\n Object.defineProperty(klass, 'name', { value: constructor.name });\n return klass;\n };\n\n/**\n * Marks a property or a method to be included in the resource info section.\n */\nconst info = () => (target: any, propertyKey: string, descriptor?: PropertyDescriptor) => {\n getTracingContext(target).infoProperties[propertyKey] = {};\n};\n\nconst span = () => (target: any, propertyKey: string, descriptor: TypedPropertyDescriptor<(...args: any) => any>) => {\n const method = descriptor.value!;\n\n descriptor.value = async function (this: any, ...args: any) {\n const parentCtx = args[0] instanceof Context ? args[0] : null;\n const span = TRACE_PROCESSOR.traceSpan({ parentCtx, methodName: propertyKey, instance: this });\n\n const callArgs = span.ctx ? [span.ctx, ...args.slice(1)] : args;\n try {\n return await method.apply(this, callArgs);\n } catch (err) {\n span.markError(err);\n throw err;\n } finally {\n span.markSuccess();\n }\n };\n};\n\n/**\n * Attaches metrics counter to the resource.\n */\nconst metricsCounter = () => (target: any, propertyKey: string, descriptor?: PropertyDescriptor) => {\n getTracingContext(target).metricsProperties[propertyKey] = {};\n};\n\nexport type AddLinkOptions = {};\n\nconst addLink = (parent: any, child: any, opts: AddLinkOptions = {}) => {\n TRACE_PROCESSOR.addLink(parent, child, opts);\n};\n\nexport const trace = {\n resource,\n info,\n span,\n metricsCounter,\n\n addLink,\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nexport const symbolTracingContext = Symbol('dxos.tracing.context');\n\nexport type TracingContext = {\n infoProperties: Record<string, {}>;\n metricsProperties: Record<string, {}>;\n};\n\nexport const getTracingContext = (target: any): TracingContext => {\n return ((target[symbolTracingContext] as TracingContext | undefined) ??= {\n infoProperties: {},\n metricsProperties: {},\n });\n};\n\nexport const TRACE_SPAN_ATTRIBUTE = 'dxos.trace-span';\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { unrefTimeout } from '@dxos/async';\nimport { Context } from '@dxos/context';\nimport { LogLevel, LogProcessor, getContextFromEntry, log } from '@dxos/log';\nimport { LogEntry } from '@dxos/protocols/proto/dxos/client/services';\nimport { Error as SerializedError } from '@dxos/protocols/proto/dxos/error';\nimport { Metric, Resource, Span } from '@dxos/protocols/proto/dxos/tracing';\nimport { getPrototypeSpecificInstanceId } from '@dxos/util';\n\nimport type { AddLinkOptions } from './api';\nimport { BaseCounter } from './metrics';\nimport { TRACE_SPAN_ATTRIBUTE, getTracingContext } from './symbols';\nimport { TraceSender } from './trace-sender';\n\nexport type TraceResourceConstructorParams = {\n constructor: { new (...args: any[]): {} };\n instance: any;\n};\n\nexport type TraceSpanParams = {\n instance: any;\n methodName: string;\n parentCtx: Context | null;\n};\n\nexport type ResourceEntry = {\n data: Resource;\n instance: WeakRef<any>;\n};\n\nexport type TraceSubscription = {\n flush: () => void;\n\n dirtyResources: Set<number>;\n dirtySpans: Set<number>;\n newLogs: LogEntry[];\n};\n\nconst MAX_RESOURCE_RECORDS = 500;\nconst MAX_SPAN_RECORDS = 1_000;\nconst MAX_LOG_RECORDS = 1_000;\n\nconst REFRESH_INTERVAL = 1_000;\n\nexport class TraceProcessor {\n resources = new Map<number, ResourceEntry>();\n resourceInstanceIndex = new WeakMap<any, ResourceEntry>();\n resourceIdList: number[] = [];\n\n spans = new Map<number, Span>();\n spanIdList: number[] = [];\n\n logs: LogEntry[] = [];\n\n subscriptions: Set<TraceSubscription> = new Set();\n\n constructor() {\n log.addProcessor(this._logProcessor.bind(this));\n\n const refreshInterval = setInterval(this.refresh.bind(this), REFRESH_INTERVAL);\n unrefTimeout(refreshInterval);\n }\n\n traceResourceConstructor(params: TraceResourceConstructorParams) {\n const id = this.resources.size;\n\n // init metrics counters.\n const tracingContext = getTracingContext(Object.getPrototypeOf(params.instance));\n for (const key of Object.keys(tracingContext.metricsProperties)) {\n (params.instance[key] as BaseCounter)._assign(params.instance, key);\n }\n\n const entry: ResourceEntry = {\n data: {\n id,\n className: params.constructor.name,\n instanceId: getPrototypeSpecificInstanceId(params.instance),\n info: this.getResourceInfo(params.instance),\n links: [],\n metrics: this.getResourceMetrics(params.instance),\n },\n instance: new WeakRef(params.instance),\n };\n this.resources.set(id, entry);\n this.resourceInstanceIndex.set(params.instance, entry);\n this.resourceIdList.push(id);\n if (this.resourceIdList.length > MAX_RESOURCE_RECORDS) {\n this._clearResources();\n }\n this._markResourceDirty(id);\n }\n\n getResourceInfo(instance: any): Record<string, any> {\n const res: Record<string, any> = {};\n const tracingContext = getTracingContext(Object.getPrototypeOf(instance));\n\n for (const [key, _opts] of Object.entries(tracingContext.infoProperties)) {\n try {\n res[key] = sanitizeValue(typeof instance[key] === 'function' ? instance[key]() : instance[key]);\n } catch (err: any) {\n res[key] = err.message;\n }\n }\n\n return res;\n }\n\n getResourceMetrics(instance: any): Metric[] {\n const res: Metric[] = [];\n const tracingContext = getTracingContext(Object.getPrototypeOf(instance));\n\n for (const [key, _opts] of Object.entries(tracingContext.metricsProperties)) {\n res.push(instance[key].getData());\n }\n\n return res;\n }\n\n traceSpan(params: TraceSpanParams): TracingSpan {\n const span = new TracingSpan(this, params);\n this._flushSpan(span);\n return span;\n }\n\n addLink(parent: any, child: any, opts: AddLinkOptions) {}\n\n getResourceId(instance: any): number | null {\n const entry = this.resourceInstanceIndex.get(instance);\n return entry ? entry.data.id : null;\n }\n\n createTraceSender() {\n return new TraceSender(this);\n }\n\n refresh() {\n for (const resource of this.resources.values()) {\n const instance = resource.instance.deref();\n if (!instance) {\n continue;\n }\n\n const tracingContext = getTracingContext(Object.getPrototypeOf(instance));\n const time = performance.now();\n for (const key of Object.keys(tracingContext.metricsProperties)) {\n (instance[key] as BaseCounter)._tick?.(time);\n }\n\n let _changed = false;\n\n const oldInfo = resource.data.info;\n resource.data.info = this.getResourceInfo(instance);\n _changed ||= !areEqualShallow(oldInfo, resource.data.info);\n\n const oldMetrics = resource.data.metrics;\n resource.data.metrics = this.getResourceMetrics(instance);\n _changed ||= !areEqualShallow(oldMetrics, resource.data.metrics);\n\n // TODO(dmaretskyi): Test if works and enable.\n // if (changed) {\n this._markResourceDirty(resource.data.id);\n // }\n }\n\n for (const subscription of this.subscriptions) {\n subscription.flush();\n }\n }\n\n /**\n * @internal\n */\n _flushSpan(runtimeSpan: TracingSpan) {\n const span = runtimeSpan.serialize();\n this.spans.set(span.id, span);\n this.spanIdList.push(span.id);\n if (this.spanIdList.length > MAX_SPAN_RECORDS) {\n this._clearSpans();\n }\n this._markSpanDirty(span.id);\n }\n\n private _markResourceDirty(id: number) {\n for (const subscription of this.subscriptions) {\n subscription.dirtyResources.add(id);\n }\n }\n\n private _markSpanDirty(id: number) {\n for (const subscription of this.subscriptions) {\n subscription.dirtySpans.add(id);\n }\n }\n\n private _clearResources() {\n // TODO(dmaretskyi): Use FinalizationRegistry to delete finalized resources first.\n while (this.resourceIdList.length > MAX_RESOURCE_RECORDS) {\n const id = this.resourceIdList.shift()!;\n this.resources.delete(id);\n }\n }\n\n private _clearSpans() {\n while (this.spanIdList.length > MAX_SPAN_RECORDS) {\n const id = this.spanIdList.shift()!;\n this.spans.delete(id);\n }\n }\n\n private _pushLog(log: LogEntry) {\n this.logs.push(log);\n if (this.logs.length > MAX_LOG_RECORDS) {\n this.logs.shift();\n }\n\n for (const subscription of this.subscriptions) {\n subscription.newLogs.push(log);\n }\n }\n\n private _logProcessor: LogProcessor = (config, entry) => {\n switch (entry.level) {\n case LogLevel.ERROR:\n case LogLevel.WARN:\n case LogLevel.TRACE: {\n const scope = entry.meta?.S;\n const resource = this.resourceInstanceIndex.get(scope);\n if (!resource) {\n return;\n }\n\n const context = getContextFromEntry(entry) ?? {};\n\n for (const key of Object.keys(context)) {\n context[key] = sanitizeValue(context[key]);\n }\n\n const entryToPush: LogEntry = {\n level: entry.level,\n message: entry.message,\n context,\n timestamp: new Date(),\n meta: {\n file: entry.meta?.F ?? '',\n line: entry.meta?.L ?? 0,\n resourceId: resource.data.id,\n },\n };\n this._pushLog(entryToPush);\n break;\n }\n default:\n }\n };\n}\n\nexport class TracingSpan {\n static nextId = 0;\n\n readonly id: number;\n readonly parentId: number | null = null;\n readonly methodName: string;\n readonly resourceId: number | null = null;\n startTs: number;\n endTs: number | null = null;\n error: SerializedError | null = null;\n\n private readonly _ctx: Context | null = null;\n\n constructor(private _traceProcessor: TraceProcessor, params: TraceSpanParams) {\n this.id = TracingSpan.nextId++;\n this.methodName = params.methodName;\n this.resourceId = _traceProcessor.getResourceId(params.instance);\n this.startTs = performance.now();\n\n if (params.parentCtx) {\n this._ctx = params.parentCtx.derive({\n attributes: {\n [TRACE_SPAN_ATTRIBUTE]: this.id,\n },\n });\n const parentId = params.parentCtx.getAttribute(TRACE_SPAN_ATTRIBUTE);\n if (typeof parentId === 'number') {\n this.parentId = parentId;\n }\n }\n }\n\n get ctx(): Context | null {\n return this._ctx;\n }\n\n markSuccess() {\n this.endTs = performance.now();\n this._traceProcessor._flushSpan(this);\n }\n\n markError(err: unknown) {\n this.endTs = performance.now();\n this.error = serializeError(err);\n this._traceProcessor._flushSpan(this);\n }\n\n serialize(): Span {\n return {\n id: this.id,\n resourceId: this.resourceId ?? undefined,\n methodName: this.methodName,\n parentId: this.parentId ?? undefined,\n startTs: this.startTs.toFixed(3),\n endTs: this.endTs?.toFixed(3) ?? undefined,\n error: this.error ?? undefined,\n };\n }\n}\n\nconst serializeError = (err: unknown): SerializedError => {\n if (err instanceof Error) {\n return {\n name: err.name,\n message: err.message,\n };\n }\n\n return {\n message: String(err),\n };\n};\n\nexport const TRACE_PROCESSOR: TraceProcessor = ((globalThis as any).TRACE_PROCESSOR ??= new TraceProcessor());\n\nconst sanitizeValue = (value: any) => {\n switch (typeof value) {\n case 'string':\n case 'number':\n case 'boolean':\n case 'undefined':\n return value;\n break;\n case 'object':\n case 'function':\n if (value === null) {\n return value;\n break;\n }\n\n // TODO(dmaretskyi): Expose trait.\n if (typeof value.truncate === 'function') {\n return value.truncate();\n }\n\n return value.toString();\n }\n};\n\nconst areEqualShallow = (a: any, b: any) => {\n for (const key in a) {\n if (!(key in b) || a[key] !== b[key]) {\n return false;\n }\n }\n for (const key in b) {\n if (!(key in a) || a[key] !== b[key]) {\n return false;\n }\n }\n return true;\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Stream } from '@dxos/codec-protobuf';\nimport { LogEntry } from '@dxos/protocols/proto/dxos/client/services';\nimport { StreamTraceEvent, TracingService } from '@dxos/protocols/proto/dxos/tracing';\n\nimport { TraceProcessor, TraceSubscription } from './trace-processor';\n\nexport class TraceSender implements TracingService {\n constructor(private _traceProcessor: TraceProcessor) {}\n\n streamTrace(request: void): Stream<StreamTraceEvent> {\n return new Stream(({ ctx, next }) => {\n const flushEvents = (resources: Set<number> | null, spans: Set<number> | null, logs: LogEntry[] | null) => {\n const event: StreamTraceEvent = {\n resourceAdded: [],\n resourceRemoved: [],\n spanAdded: [],\n logAdded: [],\n };\n\n if (resources) {\n for (const id of resources) {\n const entry = this._traceProcessor.resources.get(id);\n if (entry) {\n event.resourceAdded!.push({ resource: entry.data });\n } else {\n event.resourceRemoved!.push({ id });\n }\n }\n } else {\n for (const entry of this._traceProcessor.resources.values()) {\n event.resourceAdded!.push({ resource: entry.data });\n }\n }\n\n if (spans) {\n for (const id of spans) {\n const span = this._traceProcessor.spans.get(id);\n if (span) {\n event.spanAdded!.push({ span });\n }\n }\n } else {\n for (const span of this._traceProcessor.spans.values()) {\n event.spanAdded!.push({ span });\n }\n }\n\n if (logs) {\n for (const log of logs) {\n event.logAdded!.push({ log });\n }\n } else {\n for (const log of this._traceProcessor.logs) {\n event.logAdded!.push({ log });\n }\n }\n\n if (event.resourceAdded!.length > 0 || event.resourceRemoved!.length > 0 || event.spanAdded!.length > 0) {\n next(event);\n }\n };\n\n const flush = () => {\n flushEvents(subscription.dirtyResources, subscription.dirtySpans, subscription.newLogs);\n subscription.dirtyResources.clear();\n subscription.dirtySpans.clear();\n subscription.newLogs.length = 0;\n };\n\n const subscription: TraceSubscription = {\n flush,\n dirtyResources: new Set(),\n dirtySpans: new Set(),\n newLogs: [],\n };\n this._traceProcessor.subscriptions.add(subscription);\n ctx.onDispose(() => {\n this._traceProcessor.subscriptions.delete(subscription);\n });\n\n flushEvents(null, null, null);\n });\n }\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Metric } from '@dxos/protocols/proto/dxos/tracing';\n\nexport abstract class BaseCounter {\n /**\n * @internal\n */\n _instance: any;\n\n name?: string;\n\n /**\n * @internal\n */\n _assign(instance: any, name: string) {\n this._instance = instance;\n this.name = name;\n }\n\n abstract getData(): Metric;\n\n _tick(time: number): void {}\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Metric } from '@dxos/protocols/proto/dxos/tracing';\n\nimport { BaseCounter } from './base';\n\nexport class UnaryCounter extends BaseCounter {\n value = 0;\n units?: string;\n\n constructor({ units }: { units?: string } = {}) {\n super();\n this.units = units;\n }\n\n inc(by = 1) {\n this.value += by;\n }\n\n getData(): Metric {\n return {\n name: this.name!,\n counter: {\n value: this.value,\n units: this.units,\n },\n };\n }\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Metric } from '@dxos/protocols/proto/dxos/tracing';\n\nimport { BaseCounter } from './base';\n\nconst MAX_BUCKETS = 60;\n\nexport class TimeSeriesCounter extends BaseCounter {\n private _currentValue = 0;\n private _totalValue = 0;\n private _buckets: number[] = [];\n units?: string;\n\n constructor({ units }: { units?: string } = {}) {\n super();\n this.units = units;\n }\n\n inc(by = 1) {\n this._currentValue += by;\n this._totalValue += by;\n }\n\n override _tick(time: number): void {\n this._buckets.push(this._currentValue);\n if (this._buckets.length > MAX_BUCKETS) {\n this._buckets.shift();\n }\n this._currentValue = 0;\n }\n\n override getData(): Metric {\n return {\n name: this.name!,\n timeSeries: {\n tracks: [\n {\n name: this.name!,\n units: this.units,\n points: this._buckets.map((value, index) => ({\n value,\n })),\n total: this._totalValue,\n },\n ],\n },\n };\n }\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Metric } from '@dxos/protocols/proto/dxos/tracing';\n\nimport { BaseCounter } from './base';\n\nconst MAX_BUCKETS = 60;\n\nexport class TimeUsageCounter extends BaseCounter {\n private _currentValue = 0;\n private _totalValue = 0;\n private _buckets: number[] = [];\n\n private _lastTickTime = performance.now();\n\n record(time: number) {\n this._currentValue += time;\n this._totalValue += time;\n }\n\n beginRecording(): { end: () => void } {\n const start = performance.now();\n return {\n end: () => {\n const end = performance.now();\n this.record(end - start);\n },\n };\n }\n\n override _tick(time: number): void {\n const delta = time - this._lastTickTime;\n this._lastTickTime = time;\n\n const percentage = (this._currentValue / delta) * 100;\n this._buckets.push(percentage);\n if (this._buckets.length > MAX_BUCKETS) {\n this._buckets.shift();\n }\n this._currentValue = 0;\n }\n\n override getData(): Metric {\n return {\n name: this.name!,\n timeSeries: {\n tracks: [\n {\n name: this.name!,\n units: '%',\n points: this._buckets.map((value, index) => ({\n value,\n })),\n total: this._totalValue,\n },\n ],\n },\n };\n }\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;;;;;;;ACIA,qBAAwB;;;ACAjB,IAAMA,uBAAuBC,OAAO,sBAAA;AAOpC,IAAMC,oBAAoB,CAACC,WAAAA;AAChC,SAASA,OAAOH,oBAAAA,MAAyD;IACvEI,gBAAgB,CAAC;IACjBC,mBAAmB,CAAC;EACtB;AACF;AAEO,IAAMC,uBAAuB;;;ACdpC,mBAA6B;AAE7B,iBAAiE;AAIjE,kBAA+C;;;ACN/C,4BAAuB;AAMhB,IAAMC,cAAN,MAAMA;EACXC,YAAoBC,iBAAiC;2BAAjCA;EAAkC;EAEtDC,YAAYC,SAAyC;AACnD,WAAO,IAAIC,6BAAO,CAAC,EAAEC,KAAKC,KAAI,MAAE;AAC9B,YAAMC,cAAc,CAACC,WAA+BC,OAA2BC,SAAAA;AAC7E,cAAMC,QAA0B;UAC9BC,eAAe,CAAA;UACfC,iBAAiB,CAAA;UACjBC,WAAW,CAAA;UACXC,UAAU,CAAA;QACZ;AAEA,YAAIP,WAAW;AACb,qBAAWQ,MAAMR,WAAW;AAC1B,kBAAMS,QAAQ,KAAKhB,gBAAgBO,UAAUU,IAAIF,EAAAA;AACjD,gBAAIC,OAAO;AACTN,oBAAMC,cAAeO,KAAK;gBAAEC,UAAUH,MAAMI;cAAK,CAAA;YACnD,OAAO;AACLV,oBAAME,gBAAiBM,KAAK;gBAAEH;cAAG,CAAA;YACnC;UACF;QACF,OAAO;AACL,qBAAWC,SAAS,KAAKhB,gBAAgBO,UAAUc,OAAM,GAAI;AAC3DX,kBAAMC,cAAeO,KAAK;cAAEC,UAAUH,MAAMI;YAAK,CAAA;UACnD;QACF;AAEA,YAAIZ,OAAO;AACT,qBAAWO,MAAMP,OAAO;AACtB,kBAAMc,QAAO,KAAKtB,gBAAgBQ,MAAMS,IAAIF,EAAAA;AAC5C,gBAAIO,OAAM;AACRZ,oBAAMG,UAAWK,KAAK;gBAAEI,MAAAA;cAAK,CAAA;YAC/B;UACF;QACF,OAAO;AACL,qBAAWA,SAAQ,KAAKtB,gBAAgBQ,MAAMa,OAAM,GAAI;AACtDX,kBAAMG,UAAWK,KAAK;cAAEI,MAAAA;YAAK,CAAA;UAC/B;QACF;AAEA,YAAIb,MAAM;AACR,qBAAWc,QAAOd,MAAM;AACtBC,kBAAMI,SAAUI,KAAK;cAAEK,KAAAA;YAAI,CAAA;UAC7B;QACF,OAAO;AACL,qBAAWA,QAAO,KAAKvB,gBAAgBS,MAAM;AAC3CC,kBAAMI,SAAUI,KAAK;cAAEK,KAAAA;YAAI,CAAA;UAC7B;QACF;AAEA,YAAIb,MAAMC,cAAea,SAAS,KAAKd,MAAME,gBAAiBY,SAAS,KAAKd,MAAMG,UAAWW,SAAS,GAAG;AACvGnB,eAAKK,KAAAA;QACP;MACF;AAEA,YAAMe,QAAQ,MAAA;AACZnB,oBAAYoB,aAAaC,gBAAgBD,aAAaE,YAAYF,aAAaG,OAAO;AACtFH,qBAAaC,eAAeG,MAAK;AACjCJ,qBAAaE,WAAWE,MAAK;AAC7BJ,qBAAaG,QAAQL,SAAS;MAChC;AAEA,YAAME,eAAkC;QACtCD;QACAE,gBAAgB,oBAAII,IAAAA;QACpBH,YAAY,oBAAIG,IAAAA;QAChBF,SAAS,CAAA;MACX;AACA,WAAK7B,gBAAgBgC,cAAcC,IAAIP,YAAAA;AACvCtB,UAAI8B,UAAU,MAAA;AACZ,aAAKlC,gBAAgBgC,cAAcG,OAAOT,YAAAA;MAC5C,CAAA;AAEApB,kBAAY,MAAM,MAAM,IAAA;IAC1B,CAAA;EACF;AACF;;;;AD9CA,IAAM8B,uBAAuB;AAC7B,IAAMC,mBAAmB;AACzB,IAAMC,kBAAkB;AAExB,IAAMC,mBAAmB;AAElB,IAAMC,iBAAN,MAAMA;EAYXC,cAAc;AAXdC,qBAAY,oBAAIC,IAAAA;AAChBC,iCAAwB,oBAAIC,QAAAA;AAC5BC,0BAA2B,CAAA;AAE3BC,iBAAQ,oBAAIJ,IAAAA;AACZK,sBAAuB,CAAA;AAEvBC,gBAAmB,CAAA;AAEnBC,yBAAwC,oBAAIC,IAAAA;AAsKpCC,yBAA8B,CAACC,QAAQC,UAAAA;AAC7C,cAAQA,MAAMC,OAAK;QACjB,KAAKC,oBAASC;QACd,KAAKD,oBAASE;QACd,KAAKF,oBAASG,OAAO;AACnB,gBAAMC,QAAQN,MAAMO,MAAMC;AAC1B,gBAAMC,YAAW,KAAKnB,sBAAsBoB,IAAIJ,KAAAA;AAChD,cAAI,CAACG,WAAU;AACb;UACF;AAEA,gBAAME,cAAUC,gCAAoBZ,KAAAA,KAAU,CAAC;AAE/C,qBAAWa,OAAOC,OAAOC,KAAKJ,OAAAA,GAAU;AACtCA,oBAAQE,GAAAA,IAAOG,cAAcL,QAAQE,GAAAA,CAAI;UAC3C;AAEA,gBAAMI,cAAwB;YAC5BhB,OAAOD,MAAMC;YACbiB,SAASlB,MAAMkB;YACfP;YACAQ,WAAW,oBAAIC,KAAAA;YACfb,MAAM;cACJc,MAAMrB,MAAMO,MAAMe,KAAK;cACvBC,MAAMvB,MAAMO,MAAMiB,KAAK;cACvBC,YAAYhB,UAASiB,KAAKC;YAC5B;UACF;AACA,eAAKC,SAASX,WAAAA;AACd;QACF;QACA;MACF;IACF;AApMEY,mBAAIC,aAAa,KAAKhC,cAAciC,KAAK,IAAI,GAAA,QAAA;;;;;;AAE7C,UAAMC,kBAAkBC,YAAY,KAAKC,QAAQH,KAAK,IAAI,GAAG9C,gBAAAA;AAC7DkD,mCAAaH,eAAAA;EACf;EAEAI,yBAAyBC,QAAwC;AAC/D,UAAMV,KAAK,KAAKvC,UAAUkD;AAG1B,UAAMC,iBAAiBC,kBAAkB1B,OAAO2B,eAAeJ,OAAOK,QAAQ,CAAA;AAC9E,eAAW7B,OAAOC,OAAOC,KAAKwB,eAAeI,iBAAiB,GAAG;AAC9DN,aAAOK,SAAS7B,GAAAA,EAAqB+B,QAAQP,OAAOK,UAAU7B,GAAAA;IACjE;AAEA,UAAMb,QAAuB;MAC3B0B,MAAM;QACJC;QACAkB,WAAWR,OAAOlD,YAAY2D;QAC9BC,gBAAYC,4CAA+BX,OAAOK,QAAQ;QAC1DO,MAAM,KAAKC,gBAAgBb,OAAOK,QAAQ;QAC1CS,OAAO,CAAA;QACPC,SAAS,KAAKC,mBAAmBhB,OAAOK,QAAQ;MAClD;MACAA,UAAU,IAAIY,QAAQjB,OAAOK,QAAQ;IACvC;AACA,SAAKtD,UAAUmE,IAAI5B,IAAI3B,KAAAA;AACvB,SAAKV,sBAAsBiE,IAAIlB,OAAOK,UAAU1C,KAAAA;AAChD,SAAKR,eAAegE,KAAK7B,EAAAA;AACzB,QAAI,KAAKnC,eAAeiE,SAAS3E,sBAAsB;AACrD,WAAK4E,gBAAe;IACtB;AACA,SAAKC,mBAAmBhC,EAAAA;EAC1B;EAEAuB,gBAAgBR,UAAoC;AAClD,UAAMkB,MAA2B,CAAC;AAClC,UAAMrB,iBAAiBC,kBAAkB1B,OAAO2B,eAAeC,QAAAA,CAAAA;AAE/D,eAAW,CAAC7B,KAAKgD,KAAAA,KAAU/C,OAAOgD,QAAQvB,eAAewB,cAAc,GAAG;AACxE,UAAI;AACFH,YAAI/C,GAAAA,IAAOG,cAAc,OAAO0B,SAAS7B,GAAAA,MAAS,aAAa6B,SAAS7B,GAAAA,EAAI,IAAK6B,SAAS7B,GAAAA,CAAI;MAChG,SAASmD,KAAU;AACjBJ,YAAI/C,GAAAA,IAAOmD,IAAI9C;MACjB;IACF;AAEA,WAAO0C;EACT;EAEAP,mBAAmBX,UAAyB;AAC1C,UAAMkB,MAAgB,CAAA;AACtB,UAAMrB,iBAAiBC,kBAAkB1B,OAAO2B,eAAeC,QAAAA,CAAAA;AAE/D,eAAW,CAAC7B,KAAKgD,KAAAA,KAAU/C,OAAOgD,QAAQvB,eAAeI,iBAAiB,GAAG;AAC3EiB,UAAIJ,KAAKd,SAAS7B,GAAAA,EAAKoD,QAAO,CAAA;IAChC;AAEA,WAAOL;EACT;EAEAM,UAAU7B,QAAsC;AAC9C,UAAM8B,QAAO,IAAIC,YAAY,MAAM/B,MAAAA;AACnC,SAAKgC,WAAWF,KAAAA;AAChB,WAAOA;EACT;EAEAG,QAAQC,QAAaC,OAAYC,MAAsB;EAAC;EAExDC,cAAchC,UAA8B;AAC1C,UAAM1C,QAAQ,KAAKV,sBAAsBoB,IAAIgC,QAAAA;AAC7C,WAAO1C,QAAQA,MAAM0B,KAAKC,KAAK;EACjC;EAEAgD,oBAAoB;AAClB,WAAO,IAAIC,YAAY,IAAI;EAC7B;EAEA1C,UAAU;AACR,eAAWzB,aAAY,KAAKrB,UAAUyF,OAAM,GAAI;AAC9C,YAAMnC,WAAWjC,UAASiC,SAASoC,MAAK;AACxC,UAAI,CAACpC,UAAU;AACb;MACF;AAEA,YAAMH,iBAAiBC,kBAAkB1B,OAAO2B,eAAeC,QAAAA,CAAAA;AAC/D,YAAMqC,OAAOC,YAAYC,IAAG;AAC5B,iBAAWpE,OAAOC,OAAOC,KAAKwB,eAAeI,iBAAiB,GAAG;AAC9DD,iBAAS7B,GAAAA,EAAqBqE,QAAQH,IAAAA;MACzC;AAEA,UAAII,WAAW;AAEf,YAAMC,UAAU3E,UAASiB,KAAKuB;AAC9BxC,MAAAA,UAASiB,KAAKuB,OAAO,KAAKC,gBAAgBR,QAAAA;AAC1CyC,mBAAa,CAACE,gBAAgBD,SAAS3E,UAASiB,KAAKuB,IAAI;AAEzD,YAAMqC,aAAa7E,UAASiB,KAAK0B;AACjC3C,MAAAA,UAASiB,KAAK0B,UAAU,KAAKC,mBAAmBX,QAAAA;AAChDyC,mBAAa,CAACE,gBAAgBC,YAAY7E,UAASiB,KAAK0B,OAAO;AAI/D,WAAKO,mBAAmBlD,UAASiB,KAAKC,EAAE;IAE1C;AAEA,eAAW4D,gBAAgB,KAAK3F,eAAe;AAC7C2F,mBAAaC,MAAK;IACpB;EACF;;;;EAKAnB,WAAWoB,aAA0B;AACnC,UAAMtB,QAAOsB,YAAYC,UAAS;AAClC,SAAKjG,MAAM8D,IAAIY,MAAKxC,IAAIwC,KAAAA;AACxB,SAAKzE,WAAW8D,KAAKW,MAAKxC,EAAE;AAC5B,QAAI,KAAKjC,WAAW+D,SAAS1E,kBAAkB;AAC7C,WAAK4G,YAAW;IAClB;AACA,SAAKC,eAAezB,MAAKxC,EAAE;EAC7B;EAEQgC,mBAAmBhC,IAAY;AACrC,eAAW4D,gBAAgB,KAAK3F,eAAe;AAC7C2F,mBAAaM,eAAeC,IAAInE,EAAAA;IAClC;EACF;EAEQiE,eAAejE,IAAY;AACjC,eAAW4D,gBAAgB,KAAK3F,eAAe;AAC7C2F,mBAAaQ,WAAWD,IAAInE,EAAAA;IAC9B;EACF;EAEQ+B,kBAAkB;AAExB,WAAO,KAAKlE,eAAeiE,SAAS3E,sBAAsB;AACxD,YAAM6C,KAAK,KAAKnC,eAAewG,MAAK;AACpC,WAAK5G,UAAU6G,OAAOtE,EAAAA;IACxB;EACF;EAEQgE,cAAc;AACpB,WAAO,KAAKjG,WAAW+D,SAAS1E,kBAAkB;AAChD,YAAM4C,KAAK,KAAKjC,WAAWsG,MAAK;AAChC,WAAKvG,MAAMwG,OAAOtE,EAAAA;IACpB;EACF;EAEQC,SAASC,MAAe;AAC9B,SAAKlC,KAAK6D,KAAK3B,IAAAA;AACf,QAAI,KAAKlC,KAAK8D,SAASzE,iBAAiB;AACtC,WAAKW,KAAKqG,MAAK;IACjB;AAEA,eAAWT,gBAAgB,KAAK3F,eAAe;AAC7C2F,mBAAaW,QAAQ1C,KAAK3B,IAAAA;IAC5B;EACF;AAoCF;AAEO,IAAMuC,cAAN,MAAMA,aAAAA;EACX;SAAO+B,SAAS;;EAYhBhH,YAAoBiH,iBAAiC/D,QAAyB;2BAA1D+D;SATXC,WAA0B;SAE1B5E,aAA4B;SAErC6E,QAAuB;SACvBC,QAAgC;SAEfC,OAAuB;AAGtC,SAAK7E,KAAKyC,aAAY+B;AACtB,SAAKM,aAAapE,OAAOoE;AACzB,SAAKhF,aAAa2E,gBAAgB1B,cAAcrC,OAAOK,QAAQ;AAC/D,SAAKgE,UAAU1B,YAAYC,IAAG;AAE9B,QAAI5C,OAAOsE,WAAW;AACpB,WAAKH,OAAOnE,OAAOsE,UAAUC,OAAO;QAClCC,YAAY;UACV,CAACC,oBAAAA,GAAuB,KAAKnF;QAC/B;MACF,CAAA;AACA,YAAM0E,WAAWhE,OAAOsE,UAAUI,aAAaD,oBAAAA;AAC/C,UAAI,OAAOT,aAAa,UAAU;AAChC,aAAKA,WAAWA;MAClB;IACF;EACF;EAEA,IAAIW,MAAsB;AACxB,WAAO,KAAKR;EACd;EAEAS,cAAc;AACZ,SAAKX,QAAQtB,YAAYC,IAAG;AAC5B,SAAKmB,gBAAgB/B,WAAW,IAAI;EACtC;EAEA6C,UAAUlD,KAAc;AACtB,SAAKsC,QAAQtB,YAAYC,IAAG;AAC5B,SAAKsB,QAAQY,eAAenD,GAAAA;AAC5B,SAAKoC,gBAAgB/B,WAAW,IAAI;EACtC;EAEAqB,YAAkB;AAChB,WAAO;MACL/D,IAAI,KAAKA;MACTF,YAAY,KAAKA,cAAc2F;MAC/BX,YAAY,KAAKA;MACjBJ,UAAU,KAAKA,YAAYe;MAC3BV,SAAS,KAAKA,QAAQW,QAAQ,CAAA;MAC9Bf,OAAO,KAAKA,OAAOe,QAAQ,CAAA,KAAMD;MACjCb,OAAO,KAAKA,SAASa;IACvB;EACF;AACF;AAEA,IAAMD,iBAAiB,CAACnD,QAAAA;AACtB,MAAIA,eAAesD,OAAO;AACxB,WAAO;MACLxE,MAAMkB,IAAIlB;MACV5B,SAAS8C,IAAI9C;IACf;EACF;AAEA,SAAO;IACLA,SAASqG,OAAOvD,GAAAA;EAClB;AACF;AAEO,IAAMwD,kBAAoCC,WAAmBD,oBAAoB,IAAItI,eAAAA;AAE5F,IAAM8B,gBAAgB,CAAC0G,UAAAA;AACrB,UAAQ,OAAOA,OAAAA;IACb,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;AACH,aAAOA;AACP;IACF,KAAK;IACL,KAAK;AACH,UAAIA,UAAU,MAAM;AAClB,eAAOA;AACP;MACF;AAGA,UAAI,OAAOA,MAAMC,aAAa,YAAY;AACxC,eAAOD,MAAMC,SAAQ;MACvB;AAEA,aAAOD,MAAME,SAAQ;EACzB;AACF;AAEA,IAAMvC,kBAAkB,CAACwC,GAAQC,MAAAA;AAC/B,aAAWjH,OAAOgH,GAAG;AACnB,QAAI,EAAEhH,OAAOiH,MAAMD,EAAEhH,GAAAA,MAASiH,EAAEjH,GAAAA,GAAM;AACpC,aAAO;IACT;EACF;AACA,aAAWA,OAAOiH,GAAG;AACnB,QAAI,EAAEjH,OAAOgH,MAAMA,EAAEhH,GAAAA,MAASiH,EAAEjH,GAAAA,GAAM;AACpC,aAAO;IACT;EACF;AACA,SAAO;AACT;;;AFtWA,IAAMkH,WACJ,MACA,CAAyCC,gBAAAA;AACvC,QAAMC,QAAQ,cAAcD,YAAAA;IAC1BA,eAAeE,MAAa;AAC1B,YAAK,GAAIA,IAAAA;AACTC,sBAAgBC,yBAAyB;QAAEJ;QAAaK,UAAU;MAAK,CAAA;IACzE;EACF;AACAC,SAAOC,eAAeN,OAAO,QAAQ;IAAEO,OAAOR,YAAYS;EAAK,CAAA;AAC/D,SAAOR;AACT;AAKF,IAAMS,OAAO,MAAM,CAACC,QAAaC,aAAqBC,eAAAA;AACpDC,oBAAkBH,MAAAA,EAAQI,eAAeH,WAAAA,IAAe,CAAC;AAC3D;AAEA,IAAMI,OAAO,MAAM,CAACL,QAAaC,aAAqBC,eAAAA;AACpD,QAAMI,SAASJ,WAAWL;AAE1BK,aAAWL,QAAQ,kBAA8BU,MAAS;AACxD,UAAMC,YAAYD,KAAK,CAAA,aAAcE,yBAAUF,KAAK,CAAA,IAAK;AACzD,UAAMF,QAAOb,gBAAgBkB,UAAU;MAAEF;MAAWG,YAAYV;MAAaP,UAAU;IAAK,CAAA;AAE5F,UAAMkB,WAAWP,MAAKQ,MAAM;MAACR,MAAKQ;SAAQN,KAAKO,MAAM,CAAA;QAAMP;AAC3D,QAAI;AACF,aAAO,MAAMD,OAAOS,MAAM,MAAMH,QAAAA;IAClC,SAASI,KAAK;AACZX,MAAAA,MAAKY,UAAUD,GAAAA;AACf,YAAMA;IACR,UAAA;AACEX,MAAAA,MAAKa,YAAW;IAClB;EACF;AACF;AAKA,IAAMC,iBAAiB,MAAM,CAACnB,QAAaC,aAAqBC,eAAAA;AAC9DC,oBAAkBH,MAAAA,EAAQoB,kBAAkBnB,WAAAA,IAAe,CAAC;AAC9D;AAIA,IAAMoB,UAAU,CAACC,QAAaC,OAAYC,OAAuB,CAAC,MAAC;AACjEhC,kBAAgB6B,QAAQC,QAAQC,OAAOC,IAAAA;AACzC;AAEO,IAAMC,QAAQ;EACnBrC;EACAW;EACAM;EACAc;EAEAE;AACF;;;AIjEO,IAAeK,cAAf,MAAeA;;;;EAWpBC,QAAQC,UAAeC,MAAc;AACnC,SAAKC,YAAYF;AACjB,SAAKC,OAAOA;EACd;EAIAE,MAAMC,MAAoB;EAAC;AAC7B;;;ACjBO,IAAMC,eAAN,cAA2BC,YAAAA;EAIhCC,YAAY,EAAEC,MAAK,IAAyB,CAAC,GAAG;AAC9C,UAAK;AAJPC,iBAAQ;AAKN,SAAKD,QAAQA;EACf;EAEAE,IAAIC,KAAK,GAAG;AACV,SAAKF,SAASE;EAChB;EAEAC,UAAkB;AAChB,WAAO;MACLC,MAAM,KAAKA;MACXC,SAAS;QACPL,OAAO,KAAKA;QACZD,OAAO,KAAKA;MACd;IACF;EACF;AACF;;;ACtBA,IAAMO,cAAc;AAEb,IAAMC,oBAAN,cAAgCC,YAAAA;EAMrCC,YAAY,EAAEC,MAAK,IAAyB,CAAC,GAAG;AAC9C,UAAK;AANCC,yBAAgB;AAChBC,uBAAc;AACdC,oBAAqB,CAAA;AAK3B,SAAKH,QAAQA;EACf;EAEAI,IAAIC,KAAK,GAAG;AACV,SAAKJ,iBAAiBI;AACtB,SAAKH,eAAeG;EACtB;EAESC,MAAMC,MAAoB;AACjC,SAAKJ,SAASK,KAAK,KAAKP,aAAa;AACrC,QAAI,KAAKE,SAASM,SAASb,aAAa;AACtC,WAAKO,SAASO,MAAK;IACrB;AACA,SAAKT,gBAAgB;EACvB;EAESU,UAAkB;AACzB,WAAO;MACLC,MAAM,KAAKA;MACXC,YAAY;QACVC,QAAQ;UACN;YACEF,MAAM,KAAKA;YACXZ,OAAO,KAAKA;YACZe,QAAQ,KAAKZ,SAASa,IAAI,CAACC,OAAOC,WAAW;cAC3CD;YACF,EAAA;YACAE,OAAO,KAAKjB;UACd;;MAEJ;IACF;EACF;AACF;;;AC3CA,IAAMkB,eAAc;AAEb,IAAMC,mBAAN,cAA+BC,YAAAA;EAA/B;;AACGC,yBAAgB;AAChBC,uBAAc;AACdC,oBAAqB,CAAA;AAErBC,yBAAgBC,YAAYC,IAAG;;EAEvCC,OAAOC,MAAc;AACnB,SAAKP,iBAAiBO;AACtB,SAAKN,eAAeM;EACtB;EAEAC,iBAAsC;AACpC,UAAMC,QAAQL,YAAYC,IAAG;AAC7B,WAAO;MACLK,KAAK,MAAA;AACH,cAAMA,MAAMN,YAAYC,IAAG;AAC3B,aAAKC,OAAOI,MAAMD,KAAAA;MACpB;IACF;EACF;EAESE,MAAMJ,MAAoB;AACjC,UAAMK,QAAQL,OAAO,KAAKJ;AAC1B,SAAKA,gBAAgBI;AAErB,UAAMM,aAAc,KAAKb,gBAAgBY,QAAS;AAClD,SAAKV,SAASY,KAAKD,UAAAA;AACnB,QAAI,KAAKX,SAASa,SAASlB,cAAa;AACtC,WAAKK,SAASc,MAAK;IACrB;AACA,SAAKhB,gBAAgB;EACvB;EAESiB,UAAkB;AACzB,WAAO;MACLC,MAAM,KAAKA;MACXC,YAAY;QACVC,QAAQ;UACN;YACEF,MAAM,KAAKA;YACXG,OAAO;YACPC,QAAQ,KAAKpB,SAASqB,IAAI,CAACC,OAAOC,WAAW;cAC3CD;YACF,EAAA;YACAE,OAAO,KAAKzB;UACd;;MAEJ;IACF;EACF;AACF;",
|
|
6
|
+
"names": ["symbolTracingContext", "Symbol", "getTracingContext", "target", "infoProperties", "metricsProperties", "TRACE_SPAN_ATTRIBUTE", "TraceSender", "constructor", "_traceProcessor", "streamTrace", "request", "Stream", "ctx", "next", "flushEvents", "resources", "spans", "logs", "event", "resourceAdded", "resourceRemoved", "spanAdded", "logAdded", "id", "entry", "get", "push", "resource", "data", "values", "span", "log", "length", "flush", "subscription", "dirtyResources", "dirtySpans", "newLogs", "clear", "Set", "subscriptions", "add", "onDispose", "delete", "MAX_RESOURCE_RECORDS", "MAX_SPAN_RECORDS", "MAX_LOG_RECORDS", "REFRESH_INTERVAL", "TraceProcessor", "constructor", "resources", "Map", "resourceInstanceIndex", "WeakMap", "resourceIdList", "spans", "spanIdList", "logs", "subscriptions", "Set", "_logProcessor", "config", "entry", "level", "LogLevel", "ERROR", "WARN", "TRACE", "scope", "meta", "S", "resource", "get", "context", "getContextFromEntry", "key", "Object", "keys", "sanitizeValue", "entryToPush", "message", "timestamp", "Date", "file", "F", "line", "L", "resourceId", "data", "id", "_pushLog", "log", "addProcessor", "bind", "refreshInterval", "setInterval", "refresh", "unrefTimeout", "traceResourceConstructor", "params", "size", "tracingContext", "getTracingContext", "getPrototypeOf", "instance", "metricsProperties", "_assign", "className", "name", "instanceId", "getPrototypeSpecificInstanceId", "info", "getResourceInfo", "links", "metrics", "getResourceMetrics", "WeakRef", "set", "push", "length", "_clearResources", "_markResourceDirty", "res", "_opts", "entries", "infoProperties", "err", "getData", "traceSpan", "span", "TracingSpan", "_flushSpan", "addLink", "parent", "child", "opts", "getResourceId", "createTraceSender", "TraceSender", "values", "deref", "time", "performance", "now", "_tick", "_changed", "oldInfo", "areEqualShallow", "oldMetrics", "subscription", "flush", "runtimeSpan", "serialize", "_clearSpans", "_markSpanDirty", "dirtyResources", "add", "dirtySpans", "shift", "delete", "newLogs", "nextId", "_traceProcessor", "parentId", "endTs", "error", "_ctx", "methodName", "startTs", "parentCtx", "derive", "attributes", "TRACE_SPAN_ATTRIBUTE", "getAttribute", "ctx", "markSuccess", "markError", "serializeError", "undefined", "toFixed", "Error", "String", "TRACE_PROCESSOR", "globalThis", "value", "truncate", "toString", "a", "b", "resource", "constructor", "klass", "rest", "TRACE_PROCESSOR", "traceResourceConstructor", "instance", "Object", "defineProperty", "value", "name", "info", "target", "propertyKey", "descriptor", "getTracingContext", "infoProperties", "span", "method", "args", "parentCtx", "Context", "traceSpan", "methodName", "callArgs", "ctx", "slice", "apply", "err", "markError", "markSuccess", "metricsCounter", "metricsProperties", "addLink", "parent", "child", "opts", "trace", "BaseCounter", "_assign", "instance", "name", "_instance", "_tick", "time", "UnaryCounter", "BaseCounter", "constructor", "units", "value", "inc", "by", "getData", "name", "counter", "MAX_BUCKETS", "TimeSeriesCounter", "BaseCounter", "constructor", "units", "_currentValue", "_totalValue", "_buckets", "inc", "by", "_tick", "time", "push", "length", "shift", "getData", "name", "timeSeries", "tracks", "points", "map", "value", "index", "total", "MAX_BUCKETS", "TimeUsageCounter", "BaseCounter", "_currentValue", "_totalValue", "_buckets", "_lastTickTime", "performance", "now", "record", "time", "beginRecording", "start", "end", "_tick", "delta", "percentage", "push", "length", "shift", "getData", "name", "timeSeries", "tracks", "units", "points", "map", "value", "index", "total"]
|
|
7
7
|
}
|