@dxos/tracing 0.1.56-main.ad054df → 0.1.56-main.b78d3e3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/dist/lib/browser/index.mjs +307 -33
  2. package/dist/lib/browser/index.mjs.map +4 -4
  3. package/dist/lib/browser/meta.json +1 -1
  4. package/dist/lib/node/index.cjs +311 -33
  5. package/dist/lib/node/index.cjs.map +4 -4
  6. package/dist/lib/node/meta.json +1 -1
  7. package/dist/types/src/api.d.ts +1 -0
  8. package/dist/types/src/api.d.ts.map +1 -1
  9. package/dist/types/src/index.d.ts +1 -0
  10. package/dist/types/src/index.d.ts.map +1 -1
  11. package/dist/types/src/metrics/base.d.ts +7 -0
  12. package/dist/types/src/metrics/base.d.ts.map +1 -0
  13. package/dist/types/src/metrics/index.d.ts +5 -0
  14. package/dist/types/src/metrics/index.d.ts.map +1 -0
  15. package/dist/types/src/metrics/time-series-counter.d.ts +15 -0
  16. package/dist/types/src/metrics/time-series-counter.d.ts.map +1 -0
  17. package/dist/types/src/metrics/time-usage-counter.d.ts +15 -0
  18. package/dist/types/src/metrics/time-usage-counter.d.ts.map +1 -0
  19. package/dist/types/src/metrics/unary-counter.d.ts +12 -0
  20. package/dist/types/src/metrics/unary-counter.d.ts.map +1 -0
  21. package/dist/types/src/symbols.d.ts +1 -0
  22. package/dist/types/src/symbols.d.ts.map +1 -1
  23. package/dist/types/src/trace-processor.d.ts +10 -1
  24. package/dist/types/src/trace-processor.d.ts.map +1 -1
  25. package/dist/types/src/trace-sender.d.ts.map +1 -1
  26. package/package.json +10 -9
  27. package/src/api.ts +17 -1
  28. package/src/index.ts +1 -0
  29. package/src/metrics/base.ts +26 -0
  30. package/src/metrics/index.ts +8 -0
  31. package/src/metrics/time-series-counter.ts +52 -0
  32. package/src/metrics/time-usage-counter.ts +62 -0
  33. package/src/metrics/unary-counter.ts +31 -0
  34. package/src/symbols.ts +4 -2
  35. package/src/trace-processor.ts +158 -2
  36. package/src/trace-sender.ts +28 -18
@@ -2,40 +2,34 @@
2
2
  import { Context } from "@dxos/context";
3
3
 
4
4
  // packages/common/tracing/src/symbols.ts
5
- var symbolTracingContext = Symbol("dxos.tracing-context");
5
+ var symbolTracingContext = Symbol("dxos.tracing.context");
6
6
  var getTracingContext = (target) => {
7
- var _a2;
8
- return (_a2 = target[symbolTracingContext]) != null ? _a2 : target[symbolTracingContext] = {
9
- infoProperties: {}
7
+ return target[symbolTracingContext] ??= {
8
+ infoProperties: {},
9
+ metricsProperties: {}
10
10
  };
11
11
  };
12
12
  var TRACE_SPAN_ATTRIBUTE = "dxos.trace-span";
13
13
 
14
14
  // packages/common/tracing/src/trace-processor.ts
15
+ import { unrefTimeout } from "@dxos/async";
16
+ import { LogLevel, getContextFromEntry, log } from "@dxos/log";
15
17
  import { getPrototypeSpecificInstanceId } from "@dxos/util";
16
18
 
17
19
  // packages/common/tracing/src/trace-sender.ts
18
20
  import { Stream } from "@dxos/codec-protobuf";
19
- var FLUSH_INTERVAL = 1e3;
20
21
  var TraceSender = class {
21
22
  constructor(_traceProcessor) {
22
23
  this._traceProcessor = _traceProcessor;
23
24
  }
24
25
  streamTrace(request) {
25
26
  return new Stream(({ ctx, next }) => {
26
- const subscription = {
27
- dirtyResources: /* @__PURE__ */ new Set(),
28
- dirtySpans: /* @__PURE__ */ new Set()
29
- };
30
- this._traceProcessor.subscriptions.add(subscription);
31
- ctx.onDispose(() => {
32
- this._traceProcessor.subscriptions.delete(subscription);
33
- });
34
- const flushEvents = (resources, spans) => {
27
+ const flushEvents = (resources, spans, logs) => {
35
28
  const event = {
36
29
  resourceAdded: [],
37
30
  resourceRemoved: [],
38
- spanAdded: []
31
+ spanAdded: [],
32
+ logAdded: []
39
33
  };
40
34
  if (resources) {
41
35
  for (const id of resources) {
@@ -73,26 +67,50 @@ var TraceSender = class {
73
67
  });
74
68
  }
75
69
  }
70
+ if (logs) {
71
+ for (const log2 of logs) {
72
+ event.logAdded.push({
73
+ log: log2
74
+ });
75
+ }
76
+ } else {
77
+ for (const log2 of this._traceProcessor.logs) {
78
+ event.logAdded.push({
79
+ log: log2
80
+ });
81
+ }
82
+ }
76
83
  if (event.resourceAdded.length > 0 || event.resourceRemoved.length > 0 || event.spanAdded.length > 0) {
77
84
  next(event);
78
85
  }
79
86
  };
80
- flushEvents(null, null);
81
- const timer = setInterval(() => {
82
- flushEvents(subscription.dirtyResources, subscription.dirtySpans);
87
+ const flush = () => {
88
+ flushEvents(subscription.dirtyResources, subscription.dirtySpans, subscription.newLogs);
83
89
  subscription.dirtyResources.clear();
84
90
  subscription.dirtySpans.clear();
85
- }, FLUSH_INTERVAL);
91
+ subscription.newLogs.length = 0;
92
+ };
93
+ const subscription = {
94
+ flush,
95
+ dirtyResources: /* @__PURE__ */ new Set(),
96
+ dirtySpans: /* @__PURE__ */ new Set(),
97
+ newLogs: []
98
+ };
99
+ this._traceProcessor.subscriptions.add(subscription);
86
100
  ctx.onDispose(() => {
87
- clearInterval(timer);
101
+ this._traceProcessor.subscriptions.delete(subscription);
88
102
  });
103
+ flushEvents(null, null, null);
89
104
  });
90
105
  }
91
106
  };
92
107
 
93
108
  // packages/common/tracing/src/trace-processor.ts
109
+ var __dxlog_file = "/home/runner/work/dxos/dxos/packages/common/tracing/src/trace-processor.ts";
94
110
  var MAX_RESOURCE_RECORDS = 500;
95
111
  var MAX_SPAN_RECORDS = 1e3;
112
+ var MAX_LOG_RECORDS = 1e3;
113
+ var REFRESH_INTERVAL = 1e3;
96
114
  var TraceProcessor = class {
97
115
  constructor() {
98
116
  this.resources = /* @__PURE__ */ new Map();
@@ -100,17 +118,62 @@ var TraceProcessor = class {
100
118
  this.resourceIdList = [];
101
119
  this.spans = /* @__PURE__ */ new Map();
102
120
  this.spanIdList = [];
121
+ this.logs = [];
103
122
  this.subscriptions = /* @__PURE__ */ new Set();
123
+ this._logProcessor = (config, entry) => {
124
+ switch (entry.level) {
125
+ case LogLevel.ERROR:
126
+ case LogLevel.WARN:
127
+ case LogLevel.TRACE: {
128
+ const scope = entry.meta?.S;
129
+ const resource2 = this.resourceInstanceIndex.get(scope);
130
+ if (!resource2) {
131
+ return;
132
+ }
133
+ const context = getContextFromEntry(entry) ?? {};
134
+ for (const key of Object.keys(context)) {
135
+ context[key] = sanitizeValue(context[key]);
136
+ }
137
+ const entryToPush = {
138
+ level: entry.level,
139
+ message: entry.message,
140
+ context,
141
+ timestamp: /* @__PURE__ */ new Date(),
142
+ meta: {
143
+ file: entry.meta?.F ?? "",
144
+ line: entry.meta?.L ?? 0,
145
+ resourceId: resource2.data.id
146
+ }
147
+ };
148
+ this._pushLog(entryToPush);
149
+ break;
150
+ }
151
+ default:
152
+ }
153
+ };
154
+ log.addProcessor(this._logProcessor.bind(this), void 0, {
155
+ F: __dxlog_file,
156
+ L: 61,
157
+ S: this,
158
+ C: (f, a) => f(...a)
159
+ });
160
+ const refreshInterval = setInterval(this.refresh.bind(this), REFRESH_INTERVAL);
161
+ unrefTimeout(refreshInterval);
104
162
  }
105
163
  traceResourceConstructor(params) {
106
164
  const id = this.resources.size;
165
+ const tracingContext = getTracingContext(Object.getPrototypeOf(params.instance));
166
+ for (const key of Object.keys(tracingContext.metricsProperties)) {
167
+ params.instance[key]._assign(params.instance, key);
168
+ }
107
169
  const entry = {
108
170
  data: {
109
171
  id,
110
172
  className: params.constructor.name,
111
173
  instanceId: getPrototypeSpecificInstanceId(params.instance),
112
174
  info: this.getResourceInfo(params.instance),
113
- links: []
175
+ links: [],
176
+ metrics: this.getResourceMetrics(params.instance)
114
177
  },
115
178
  instance: new WeakRef(params.instance)
116
179
  };
@@ -127,13 +190,21 @@ var TraceProcessor = class {
127
190
  const tracingContext = getTracingContext(Object.getPrototypeOf(instance));
128
191
  for (const [key, _opts] of Object.entries(tracingContext.infoProperties)) {
129
192
  try {
130
- res[key] = typeof instance[key] === "function" ? instance[key]() : instance[key];
193
+ res[key] = sanitizeValue(typeof instance[key] === "function" ? instance[key]() : instance[key]);
131
194
  } catch (err) {
132
195
  res[key] = err.message;
133
196
  }
134
197
  }
135
198
  return res;
136
199
  }
200
+ getResourceMetrics(instance) {
201
+ const res = [];
202
+ const tracingContext = getTracingContext(Object.getPrototypeOf(instance));
203
+ for (const [key, _opts] of Object.entries(tracingContext.metricsProperties)) {
204
+ res.push(instance[key].getData());
205
+ }
206
+ return res;
207
+ }
137
208
  traceSpan(params) {
138
209
  const span2 = new TracingSpan(this, params);
139
210
  this._flushSpan(span2);
@@ -148,6 +219,30 @@ var TraceProcessor = class {
148
219
  createTraceSender() {
149
220
  return new TraceSender(this);
150
221
  }
222
+ refresh() {
223
+ for (const resource2 of this.resources.values()) {
224
+ const instance = resource2.instance.deref();
225
+ if (!instance) {
226
+ continue;
227
+ }
228
+ const tracingContext = getTracingContext(Object.getPrototypeOf(instance));
229
+ const time = performance.now();
230
+ for (const key of Object.keys(tracingContext.metricsProperties)) {
231
+ instance[key]._tick?.(time);
232
+ }
233
+ let _changed = false;
234
+ const oldInfo = resource2.data.info;
235
+ resource2.data.info = this.getResourceInfo(instance);
236
+ _changed ||= !areEqualShallow(oldInfo, resource2.data.info);
237
+ const oldMetrics = resource2.data.metrics;
238
+ resource2.data.metrics = this.getResourceMetrics(instance);
239
+ _changed ||= !areEqualShallow(oldMetrics, resource2.data.metrics);
240
+ this._markResourceDirty(resource2.data.id);
241
+ }
242
+ for (const subscription of this.subscriptions) {
243
+ subscription.flush();
244
+ }
245
+ }
151
246
  /**
152
247
  * @internal
153
248
  */
@@ -182,8 +277,20 @@ var TraceProcessor = class {
182
277
  this.spans.delete(id);
183
278
  }
184
279
  }
280
+ _pushLog(log1) {
281
+ this.logs.push(log1);
282
+ if (this.logs.length > MAX_LOG_RECORDS) {
283
+ this.logs.shift();
284
+ }
285
+ for (const subscription of this.subscriptions) {
286
+ subscription.newLogs.push(log1);
287
+ }
288
+ }
185
289
  };
186
- var _TracingSpan = class {
290
+ var TracingSpan = class _TracingSpan {
291
+ static {
292
+ this.nextId = 0;
293
+ }
187
294
  constructor(_traceProcessor, params) {
188
295
  this._traceProcessor = _traceProcessor;
189
296
  this.parentId = null;
@@ -220,20 +327,17 @@ var _TracingSpan = class {
220
327
  this._traceProcessor._flushSpan(this);
221
328
  }
222
329
  serialize() {
223
- var _a2, _b, _c, _d, _e;
224
330
  return {
225
331
  id: this.id,
226
- resourceId: (_a2 = this.resourceId) != null ? _a2 : void 0,
332
+ resourceId: this.resourceId ?? void 0,
227
333
  methodName: this.methodName,
228
- parentId: (_b = this.parentId) != null ? _b : void 0,
334
+ parentId: this.parentId ?? void 0,
229
335
  startTs: this.startTs.toFixed(3),
230
- endTs: (_d = (_c = this.endTs) == null ? void 0 : _c.toFixed(3)) != null ? _d : void 0,
231
- error: (_e = this.error) != null ? _e : void 0
336
+ endTs: this.endTs?.toFixed(3) ?? void 0,
337
+ error: this.error ?? void 0
232
338
  };
233
339
  }
234
340
  };
235
- var TracingSpan = _TracingSpan;
236
- TracingSpan.nextId = 0;
237
341
  var serializeError = (err) => {
238
342
  if (err instanceof Error) {
239
343
  return {
@@ -245,12 +349,44 @@ var serializeError = (err) => {
245
349
  message: String(err)
246
350
  };
247
351
  };
248
- var _a;
249
- var TRACE_PROCESSOR = (_a = globalThis.TRACE_PROCESSOR) != null ? _a : globalThis.TRACE_PROCESSOR = new TraceProcessor();
352
+ var TRACE_PROCESSOR = globalThis.TRACE_PROCESSOR ??= new TraceProcessor();
353
+ var sanitizeValue = (value) => {
354
+ switch (typeof value) {
355
+ case "string":
356
+ case "number":
357
+ case "boolean":
358
+ case "undefined":
359
+ return value;
360
+ break;
361
+ case "object":
362
+ case "function":
363
+ if (value === null) {
364
+ return value;
365
+ break;
366
+ }
367
+ if (typeof value.truncate === "function") {
368
+ return value.truncate();
369
+ }
370
+ return value.toString();
371
+ }
372
+ };
373
+ var areEqualShallow = (a, b) => {
374
+ for (const key in a) {
375
+ if (!(key in b) || a[key] !== b[key]) {
376
+ return false;
377
+ }
378
+ }
379
+ for (const key in b) {
380
+ if (!(key in a) || a[key] !== b[key]) {
381
+ return false;
382
+ }
383
+ }
384
+ return true;
385
+ };
250
386
 
251
387
  // packages/common/tracing/src/api.ts
252
388
  var resource = () => (constructor) => {
253
- return class extends constructor {
389
+ const klass = class extends constructor {
254
390
  constructor(...rest) {
255
391
  super(...rest);
256
392
  TRACE_PROCESSOR.traceResourceConstructor({
@@ -259,6 +395,10 @@ var resource = () => (constructor) => {
259
395
  });
260
396
  }
261
397
  };
398
+ Object.defineProperty(klass, "name", {
399
+ value: constructor.name
400
+ });
401
+ return klass;
262
402
  };
263
403
  var info = () => (target, propertyKey, descriptor) => {
264
404
  getTracingContext(target).infoProperties[propertyKey] = {};
@@ -286,6 +426,9 @@ var span = () => (target, propertyKey, descriptor) => {
286
426
  }
287
427
  };
288
428
  };
429
+ var metricsCounter = () => (target, propertyKey, descriptor) => {
430
+ getTracingContext(target).metricsProperties[propertyKey] = {};
431
+ };
289
432
  var addLink = (parent, child, opts = {}) => {
290
433
  TRACE_PROCESSOR.addLink(parent, child, opts);
291
434
  };
@@ -293,14 +436,145 @@ var trace = {
293
436
  resource,
294
437
  info,
295
438
  span,
439
+ metricsCounter,
296
440
  addLink
297
441
  };
442
+
443
+ // packages/common/tracing/src/metrics/base.ts
444
+ var BaseCounter = class {
445
+ /**
446
+ * @internal
447
+ */
448
+ _assign(instance, name) {
449
+ this._instance = instance;
450
+ this.name = name;
451
+ }
452
+ _tick(time) {
453
+ }
454
+ };
455
+
456
+ // packages/common/tracing/src/metrics/unary-counter.ts
457
+ var UnaryCounter = class extends BaseCounter {
458
+ constructor({ units } = {}) {
459
+ super();
460
+ this.value = 0;
461
+ this.units = units;
462
+ }
463
+ inc(by = 1) {
464
+ this.value += by;
465
+ }
466
+ getData() {
467
+ return {
468
+ name: this.name,
469
+ counter: {
470
+ value: this.value,
471
+ units: this.units
472
+ }
473
+ };
474
+ }
475
+ };
476
+
477
+ // packages/common/tracing/src/metrics/time-series-counter.ts
478
+ var MAX_BUCKETS = 60;
479
+ var TimeSeriesCounter = class extends BaseCounter {
480
+ constructor({ units } = {}) {
481
+ super();
482
+ this._currentValue = 0;
483
+ this._totalValue = 0;
484
+ this._buckets = [];
485
+ this.units = units;
486
+ }
487
+ inc(by = 1) {
488
+ this._currentValue += by;
489
+ this._totalValue += by;
490
+ }
491
+ _tick(time) {
492
+ this._buckets.push(this._currentValue);
493
+ if (this._buckets.length > MAX_BUCKETS) {
494
+ this._buckets.shift();
495
+ }
496
+ this._currentValue = 0;
497
+ }
498
+ getData() {
499
+ return {
500
+ name: this.name,
501
+ timeSeries: {
502
+ tracks: [
503
+ {
504
+ name: this.name,
505
+ units: this.units,
506
+ points: this._buckets.map((value, index) => ({
507
+ value
508
+ })),
509
+ total: this._totalValue
510
+ }
511
+ ]
512
+ }
513
+ };
514
+ }
515
+ };
516
+
517
+ // packages/common/tracing/src/metrics/time-usage-counter.ts
518
+ var MAX_BUCKETS2 = 60;
519
+ var TimeUsageCounter = class extends BaseCounter {
520
+ constructor() {
521
+ super(...arguments);
522
+ this._currentValue = 0;
523
+ this._totalValue = 0;
524
+ this._buckets = [];
525
+ this._lastTickTime = performance.now();
526
+ }
527
+ record(time) {
528
+ this._currentValue += time;
529
+ this._totalValue += time;
530
+ }
531
+ beginRecording() {
532
+ const start = performance.now();
533
+ return {
534
+ end: () => {
535
+ const end = performance.now();
536
+ this.record(end - start);
537
+ }
538
+ };
539
+ }
540
+ _tick(time) {
541
+ const delta = time - this._lastTickTime;
542
+ this._lastTickTime = time;
543
+ const percentage = this._currentValue / delta * 100;
544
+ this._buckets.push(percentage);
545
+ if (this._buckets.length > MAX_BUCKETS2) {
546
+ this._buckets.shift();
547
+ }
548
+ this._currentValue = 0;
549
+ }
550
+ getData() {
551
+ return {
552
+ name: this.name,
553
+ timeSeries: {
554
+ tracks: [
555
+ {
556
+ name: this.name,
557
+ units: "%",
558
+ points: this._buckets.map((value, index) => ({
559
+ value
560
+ })),
561
+ total: this._totalValue
562
+ }
563
+ ]
564
+ }
565
+ };
566
+ }
567
+ };
298
568
  export {
569
+ BaseCounter,
299
570
  TRACE_PROCESSOR,
300
571
  TRACE_SPAN_ATTRIBUTE,
572
+ TimeSeriesCounter,
573
+ TimeUsageCounter,
301
574
  TraceProcessor,
302
575
  TraceSender,
303
576
  TracingSpan,
577
+ UnaryCounter,
304
578
  getTracingContext,
305
579
  symbolTracingContext,
306
580
  trace
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../src/api.ts", "../../../src/symbols.ts", "../../../src/trace-processor.ts", "../../../src/trace-sender.ts"],
4
- "sourcesContent": ["//\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": ["Context", "symbolTracingContext", "Symbol", "getTracingContext", "target", "_a", "infoProperties", "TRACE_SPAN_ATTRIBUTE", "getPrototypeSpecificInstanceId", "Stream", "FLUSH_INTERVAL", "TraceSender", "constructor", "_traceProcessor", "streamTrace", "request", "Stream", "ctx", "next", "subscription", "dirtyResources", "Set", "dirtySpans", "subscriptions", "add", "onDispose", "delete", "flushEvents", "resources", "spans", "event", "resourceAdded", "resourceRemoved", "spanAdded", "id", "entry", "get", "push", "resource", "data", "values", "span", "length", "timer", "setInterval", "clear", "clearInterval", "MAX_RESOURCE_RECORDS", "MAX_SPAN_RECORDS", "TraceProcessor", "resources", "Map", "resourceInstanceIndex", "WeakMap", "resourceIdList", "spans", "spanIdList", "subscriptions", "Set", "traceResourceConstructor", "params", "id", "size", "entry", "data", "className", "constructor", "name", "instanceId", "getPrototypeSpecificInstanceId", "instance", "info", "getResourceInfo", "links", "WeakRef", "set", "push", "length", "_clearResources", "_markResourceDirty", "res", "tracingContext", "getTracingContext", "Object", "getPrototypeOf", "key", "_opts", "entries", "infoProperties", "err", "message", "traceSpan", "span", "TracingSpan", "_flushSpan", "addLink", "parent", "child", "opts", "getResourceId", "get", "createTraceSender", "TraceSender", "runtimeSpan", "serialize", "_clearSpans", "_markSpanDirty", "subscription", "dirtyResources", "add", "dirtySpans", "shift", "delete", "_traceProcessor", "parentId", "resourceId", "endTs", "error", "_ctx", "nextId", "methodName", "startTs", "performance", "now", "parentCtx", "derive", "attributes", "TRACE_SPAN_ATTRIBUTE", "getAttribute", "ctx", "markSuccess", "markError", "serializeError", "_a", "undefined", "toFixed", "Error", "String", "TRACE_PROCESSOR", "globalThis", "resource", "constructor", "rest", "TRACE_PROCESSOR", "traceResourceConstructor", "instance", "info", "target", "propertyKey", "descriptor", "getTracingContext", "infoProperties", "span", "method", "value", "args", "parentCtx", "Context", "traceSpan", "methodName", "callArgs", "ctx", "slice", "apply", "err", "markError", "markSuccess", "addLink", "parent", "child", "opts", "trace"]
3
+ "sources": ["../../../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\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": "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",
6
+ "names": ["Context", "symbolTracingContext", "Symbol", "getTracingContext", "target", "infoProperties", "metricsProperties", "TRACE_SPAN_ATTRIBUTE", "unrefTimeout", "LogLevel", "getContextFromEntry", "log", "getPrototypeSpecificInstanceId", "Stream", "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
  }
@@ -1 +1 @@
1
- {"inputs":{"packages/common/tracing/src/symbols.ts":{"bytes":1464,"imports":[]},"packages/common/tracing/src/trace-sender.ts":{"bytes":9080,"imports":[{"path":"@dxos/codec-protobuf","kind":"import-statement","external":true}]},"packages/common/tracing/src/trace-processor.ts":{"bytes":20068,"imports":[{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/common/tracing/src/symbols.ts","kind":"import-statement","original":"./symbols"},{"path":"packages/common/tracing/src/trace-sender.ts","kind":"import-statement","original":"./trace-sender"}]},"packages/common/tracing/src/api.ts":{"bytes":5722,"imports":[{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"packages/common/tracing/src/symbols.ts","kind":"import-statement","original":"./symbols"},{"path":"packages/common/tracing/src/trace-processor.ts","kind":"import-statement","original":"./trace-processor"}]},"packages/common/tracing/src/index.ts":{"bytes":744,"imports":[{"path":"packages/common/tracing/src/api.ts","kind":"import-statement","original":"./api"},{"path":"packages/common/tracing/src/symbols.ts","kind":"import-statement","original":"./symbols"},{"path":"packages/common/tracing/src/trace-processor.ts","kind":"import-statement","original":"./trace-processor"},{"path":"packages/common/tracing/src/trace-sender.ts","kind":"import-statement","original":"./trace-sender"}]}},"outputs":{"packages/common/tracing/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":18452},"packages/common/tracing/dist/lib/browser/index.mjs":{"imports":[{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/codec-protobuf","kind":"import-statement","external":true}],"exports":["TRACE_PROCESSOR","TRACE_SPAN_ATTRIBUTE","TraceProcessor","TraceSender","TracingSpan","getTracingContext","symbolTracingContext","trace"],"entryPoint":"packages/common/tracing/src/index.ts","inputs":{"packages/common/tracing/src/api.ts":{"bytesInOutput":1155},"packages/common/tracing/src/symbols.ts":{"bytesInOutput":280},"packages/common/tracing/src/trace-processor.ts":{"bytesInOutput":4530},"packages/common/tracing/src/trace-sender.ts":{"bytesInOutput":2229},"packages/common/tracing/src/index.ts":{"bytesInOutput":0}},"bytes":8655}}}
1
+ {"inputs":{"packages/common/tracing/src/symbols.ts":{"bytes":1683,"imports":[],"format":"esm"},"packages/common/tracing/src/trace-sender.ts":{"bytes":10346,"imports":[{"path":"@dxos/codec-protobuf","kind":"import-statement","external":true}],"format":"esm"},"packages/common/tracing/src/trace-processor.ts":{"bytes":35515,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/common/tracing/src/symbols.ts","kind":"import-statement","original":"./symbols"},{"path":"packages/common/tracing/src/trace-sender.ts","kind":"import-statement","original":"./trace-sender"}],"format":"esm"},"packages/common/tracing/src/api.ts":{"bytes":7250,"imports":[{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"packages/common/tracing/src/symbols.ts","kind":"import-statement","original":"./symbols"},{"path":"packages/common/tracing/src/trace-processor.ts","kind":"import-statement","original":"./trace-processor"}],"format":"esm"},"packages/common/tracing/src/metrics/base.ts":{"bytes":1442,"imports":[],"format":"esm"},"packages/common/tracing/src/metrics/unary-counter.ts":{"bytes":2120,"imports":[{"path":"packages/common/tracing/src/metrics/base.ts","kind":"import-statement","original":"./base"}],"format":"esm"},"packages/common/tracing/src/metrics/time-series-counter.ts":{"bytes":4264,"imports":[{"path":"packages/common/tracing/src/metrics/base.ts","kind":"import-statement","original":"./base"}],"format":"esm"},"packages/common/tracing/src/metrics/time-usage-counter.ts":{"bytes":5245,"imports":[{"path":"packages/common/tracing/src/metrics/base.ts","kind":"import-statement","original":"./base"}],"format":"esm"},"packages/common/tracing/src/metrics/index.ts":{"bytes":797,"imports":[{"path":"packages/common/tracing/src/metrics/base.ts","kind":"import-statement","original":"./base"},{"path":"packages/common/tracing/src/metrics/unary-counter.ts","kind":"import-statement","original":"./unary-counter"},{"path":"packages/common/tracing/src/metrics/time-series-counter.ts","kind":"import-statement","original":"./time-series-counter"},{"path":"packages/common/tracing/src/metrics/time-usage-counter.ts","kind":"import-statement","original":"./time-usage-counter"}],"format":"esm"},"packages/common/tracing/src/index.ts":{"bytes":831,"imports":[{"path":"packages/common/tracing/src/api.ts","kind":"import-statement","original":"./api"},{"path":"packages/common/tracing/src/symbols.ts","kind":"import-statement","original":"./symbols"},{"path":"packages/common/tracing/src/trace-processor.ts","kind":"import-statement","original":"./trace-processor"},{"path":"packages/common/tracing/src/trace-sender.ts","kind":"import-statement","original":"./trace-sender"},{"path":"packages/common/tracing/src/metrics/index.ts","kind":"import-statement","original":"./metrics"}],"format":"esm"}},"outputs":{"packages/common/tracing/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":33705},"packages/common/tracing/dist/lib/browser/index.mjs":{"imports":[{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/codec-protobuf","kind":"import-statement","external":true}],"exports":["BaseCounter","TRACE_PROCESSOR","TRACE_SPAN_ATTRIBUTE","TimeSeriesCounter","TimeUsageCounter","TraceProcessor","TraceSender","TracingSpan","UnaryCounter","getTracingContext","symbolTracingContext","trace"],"entryPoint":"packages/common/tracing/src/index.ts","inputs":{"packages/common/tracing/src/api.ts":{"bytesInOutput":1405},"packages/common/tracing/src/symbols.ts":{"bytesInOutput":245},"packages/common/tracing/src/trace-processor.ts":{"bytesInOutput":8233},"packages/common/tracing/src/trace-sender.ts":{"bytesInOutput":2555},"packages/common/tracing/src/index.ts":{"bytesInOutput":0},"packages/common/tracing/src/metrics/base.ts":{"bytesInOutput":159},"packages/common/tracing/src/metrics/index.ts":{"bytesInOutput":0},"packages/common/tracing/src/metrics/unary-counter.ts":{"bytesInOutput":324},"packages/common/tracing/src/metrics/time-series-counter.ts":{"bytesInOutput":812},"packages/common/tracing/src/metrics/time-usage-counter.ts":{"bytesInOutput":1136}},"bytes":15632}}}