@dxos/tracing 0.1.58-main.ffbb8a1 → 0.1.58-next.6d0af18

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.
@@ -426,7 +426,7 @@ var sanitizeClassName = (className) => {
426
426
 
427
427
  // packages/common/tracing/src/api.ts
428
428
  var resource = () => (constructor) => {
429
- const klass = class extends constructor {
429
+ const klass = (() => class extends constructor {
430
430
  constructor(...rest) {
431
431
  super(...rest);
432
432
  TRACE_PROCESSOR.traceResourceConstructor({
@@ -434,7 +434,7 @@ var resource = () => (constructor) => {
434
434
  instance: this
435
435
  });
436
436
  }
437
- };
437
+ })();
438
438
  Object.defineProperty(klass, "name", {
439
439
  value: constructor.name
440
440
  });
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
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 mark = (name: string) => {\n performance.mark(name);\n};\n\nexport type SpanOptions = {\n showInBrowserTimeline?: boolean;\n};\n\nconst span =\n ({ showInBrowserTimeline = false }: SpanOptions = {}) =>\n (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({\n parentCtx,\n methodName: propertyKey,\n instance: this,\n showInBrowserTimeline,\n });\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 mark,\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 showInBrowserTimeline: boolean;\n};\n\nexport class ResourceEntry {\n /**\n * Sometimes bundlers mangle class names: WebFile -> WebFile2.\n *\n * We use a heuristic to remove the suffix.\n */\n public readonly sanitizedClassName: string;\n\n constructor(public data: Resource, public instance: WeakRef<any>) {\n this.sanitizedClassName = sanitizeClassName(data.className);\n }\n\n getMetric(name: string): Metric | undefined {\n return this.data.metrics?.find((metric) => metric.name === name);\n }\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 = new ResourceEntry(\n {\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 new WeakRef(params.instance),\n );\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 findResourcesByClassName(className: string): ResourceEntry[] {\n const res: ResourceEntry[] = [];\n for (const entry of this.resources.values()) {\n if (entry.data.className === className || entry.sanitizedClassName === className) {\n res.push(entry);\n }\n }\n return res;\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 _showInBrowserTimeline: boolean;\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 this._showInBrowserTimeline = params.showInBrowserTimeline;\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 if (this._showInBrowserTimeline) {\n this._markInBrowserTimeline();\n }\n }\n\n markError(err: unknown) {\n this.endTs = performance.now();\n this.error = serializeError(err);\n this._traceProcessor._flushSpan(this);\n\n if (this._showInBrowserTimeline) {\n this._markInBrowserTimeline();\n }\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 private _markInBrowserTimeline() {\n const resource = this._traceProcessor.resources.get(this.resourceId!);\n const name = resource\n ? `${resource.sanitizedClassName}#${resource.data.instanceId}.${this.methodName}`\n : this.methodName;\n performance.measure(name, { start: this.startTs, end: this.endTs! });\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\nexport const sanitizeClassName = (className: string) => {\n const SANITIZE_REGEX = /[^_](\\d+)$/;\n const m = className.match(SANITIZE_REGEX);\n if (!m) {\n return className;\n } else {\n return className.slice(0, -m[1].length);\n }\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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",
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 // Wrapping class declaration into an IIFE so it doesn't capture the `klass` class name.\n const klass = (() =>\n 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 mark = (name: string) => {\n performance.mark(name);\n};\n\nexport type SpanOptions = {\n showInBrowserTimeline?: boolean;\n};\n\nconst span =\n ({ showInBrowserTimeline = false }: SpanOptions = {}) =>\n (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({\n parentCtx,\n methodName: propertyKey,\n instance: this,\n showInBrowserTimeline,\n });\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 mark,\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 showInBrowserTimeline: boolean;\n};\n\nexport class ResourceEntry {\n /**\n * Sometimes bundlers mangle class names: WebFile -> WebFile2.\n *\n * We use a heuristic to remove the suffix.\n */\n public readonly sanitizedClassName: string;\n\n constructor(public data: Resource, public instance: WeakRef<any>) {\n this.sanitizedClassName = sanitizeClassName(data.className);\n }\n\n getMetric(name: string): Metric | undefined {\n return this.data.metrics?.find((metric) => metric.name === name);\n }\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 = new ResourceEntry(\n {\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 new WeakRef(params.instance),\n );\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 findResourcesByClassName(className: string): ResourceEntry[] {\n const res: ResourceEntry[] = [];\n for (const entry of this.resources.values()) {\n if (entry.data.className === className || entry.sanitizedClassName === className) {\n res.push(entry);\n }\n }\n return res;\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 _showInBrowserTimeline: boolean;\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 this._showInBrowserTimeline = params.showInBrowserTimeline;\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 if (this._showInBrowserTimeline) {\n this._markInBrowserTimeline();\n }\n }\n\n markError(err: unknown) {\n this.endTs = performance.now();\n this.error = serializeError(err);\n this._traceProcessor._flushSpan(this);\n\n if (this._showInBrowserTimeline) {\n this._markInBrowserTimeline();\n }\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 private _markInBrowserTimeline() {\n const resource = this._traceProcessor.resources.get(this.resourceId!);\n const name = resource\n ? `${resource.sanitizedClassName}#${resource.data.instanceId}.${this.methodName}`\n : this.methodName;\n performance.measure(name, { start: this.startTs, end: this.endTs! });\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\nexport const sanitizeClassName = (className: string) => {\n const SANITIZE_REGEX = /[^_](\\d+)$/;\n const m = className.match(SANITIZE_REGEX);\n if (!m) {\n return className;\n } else {\n return className.slice(0, -m[1].length);\n }\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
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", "ResourceEntry", "constructor", "data", "instance", "sanitizedClassName", "sanitizeClassName", "className", "getMetric", "name", "metrics", "find", "metric", "MAX_RESOURCE_RECORDS", "MAX_SPAN_RECORDS", "MAX_LOG_RECORDS", "REFRESH_INTERVAL", "TraceProcessor", "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", "id", "_pushLog", "log", "addProcessor", "bind", "refreshInterval", "setInterval", "refresh", "unrefTimeout", "traceResourceConstructor", "params", "size", "tracingContext", "getTracingContext", "getPrototypeOf", "metricsProperties", "_assign", "instanceId", "getPrototypeSpecificInstanceId", "info", "getResourceInfo", "links", "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", "findResourcesByClassName", "runtimeSpan", "serialize", "_clearSpans", "_markSpanDirty", "dirtyResources", "add", "dirtySpans", "shift", "delete", "newLogs", "nextId", "_traceProcessor", "parentId", "endTs", "error", "_ctx", "methodName", "startTs", "_showInBrowserTimeline", "showInBrowserTimeline", "parentCtx", "derive", "attributes", "TRACE_SPAN_ATTRIBUTE", "getAttribute", "ctx", "markSuccess", "_markInBrowserTimeline", "markError", "serializeError", "undefined", "toFixed", "measure", "start", "end", "Error", "String", "TRACE_PROCESSOR", "globalThis", "value", "truncate", "toString", "a", "b", "SANITIZE_REGEX", "m", "match", "slice", "resource", "constructor", "klass", "rest", "TRACE_PROCESSOR", "traceResourceConstructor", "instance", "Object", "defineProperty", "value", "name", "info", "target", "propertyKey", "descriptor", "getTracingContext", "infoProperties", "mark", "performance", "span", "showInBrowserTimeline", "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":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":41308,"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":7995,"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":37034},"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","ResourceEntry","TRACE_PROCESSOR","TRACE_SPAN_ATTRIBUTE","TimeSeriesCounter","TimeUsageCounter","TraceProcessor","TraceSender","TracingSpan","UnaryCounter","getTracingContext","sanitizeClassName","symbolTracingContext","trace"],"entryPoint":"packages/common/tracing/src/index.ts","inputs":{"packages/common/tracing/src/api.ts":{"bytesInOutput":1532},"packages/common/tracing/src/symbols.ts":{"bytesInOutput":245},"packages/common/tracing/src/trace-processor.ts":{"bytesInOutput":9517},"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":17081}}}
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":41308,"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":8340,"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":37164},"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","ResourceEntry","TRACE_PROCESSOR","TRACE_SPAN_ATTRIBUTE","TimeSeriesCounter","TimeUsageCounter","TraceProcessor","TraceSender","TracingSpan","UnaryCounter","getTracingContext","sanitizeClassName","symbolTracingContext","trace"],"entryPoint":"packages/common/tracing/src/index.ts","inputs":{"packages/common/tracing/src/api.ts":{"bytesInOutput":1542},"packages/common/tracing/src/symbols.ts":{"bytesInOutput":245},"packages/common/tracing/src/trace-processor.ts":{"bytesInOutput":9517},"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":17091}}}
@@ -465,7 +465,7 @@ var sanitizeClassName = (className) => {
465
465
 
466
466
  // packages/common/tracing/src/api.ts
467
467
  var resource = () => (constructor) => {
468
- const klass = class extends constructor {
468
+ const klass = (() => class extends constructor {
469
469
  constructor(...rest) {
470
470
  super(...rest);
471
471
  TRACE_PROCESSOR.traceResourceConstructor({
@@ -473,7 +473,7 @@ var resource = () => (constructor) => {
473
473
  instance: this
474
474
  });
475
475
  }
476
- };
476
+ })();
477
477
  Object.defineProperty(klass, "name", {
478
478
  value: constructor.name
479
479
  });
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
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 mark = (name: string) => {\n performance.mark(name);\n};\n\nexport type SpanOptions = {\n showInBrowserTimeline?: boolean;\n};\n\nconst span =\n ({ showInBrowserTimeline = false }: SpanOptions = {}) =>\n (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({\n parentCtx,\n methodName: propertyKey,\n instance: this,\n showInBrowserTimeline,\n });\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 mark,\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 showInBrowserTimeline: boolean;\n};\n\nexport class ResourceEntry {\n /**\n * Sometimes bundlers mangle class names: WebFile -> WebFile2.\n *\n * We use a heuristic to remove the suffix.\n */\n public readonly sanitizedClassName: string;\n\n constructor(public data: Resource, public instance: WeakRef<any>) {\n this.sanitizedClassName = sanitizeClassName(data.className);\n }\n\n getMetric(name: string): Metric | undefined {\n return this.data.metrics?.find((metric) => metric.name === name);\n }\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 = new ResourceEntry(\n {\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 new WeakRef(params.instance),\n );\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 findResourcesByClassName(className: string): ResourceEntry[] {\n const res: ResourceEntry[] = [];\n for (const entry of this.resources.values()) {\n if (entry.data.className === className || entry.sanitizedClassName === className) {\n res.push(entry);\n }\n }\n return res;\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 _showInBrowserTimeline: boolean;\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 this._showInBrowserTimeline = params.showInBrowserTimeline;\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 if (this._showInBrowserTimeline) {\n this._markInBrowserTimeline();\n }\n }\n\n markError(err: unknown) {\n this.endTs = performance.now();\n this.error = serializeError(err);\n this._traceProcessor._flushSpan(this);\n\n if (this._showInBrowserTimeline) {\n this._markInBrowserTimeline();\n }\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 private _markInBrowserTimeline() {\n const resource = this._traceProcessor.resources.get(this.resourceId!);\n const name = resource\n ? `${resource.sanitizedClassName}#${resource.data.instanceId}.${this.methodName}`\n : this.methodName;\n performance.measure(name, { start: this.startTs, end: this.endTs! });\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\nexport const sanitizeClassName = (className: string) => {\n const SANITIZE_REGEX = /[^_](\\d+)$/;\n const m = className.match(SANITIZE_REGEX);\n if (!m) {\n return className;\n } else {\n return className.slice(0, -m[1].length);\n }\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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",
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 // Wrapping class declaration into an IIFE so it doesn't capture the `klass` class name.\n const klass = (() =>\n 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 mark = (name: string) => {\n performance.mark(name);\n};\n\nexport type SpanOptions = {\n showInBrowserTimeline?: boolean;\n};\n\nconst span =\n ({ showInBrowserTimeline = false }: SpanOptions = {}) =>\n (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({\n parentCtx,\n methodName: propertyKey,\n instance: this,\n showInBrowserTimeline,\n });\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 mark,\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 showInBrowserTimeline: boolean;\n};\n\nexport class ResourceEntry {\n /**\n * Sometimes bundlers mangle class names: WebFile -> WebFile2.\n *\n * We use a heuristic to remove the suffix.\n */\n public readonly sanitizedClassName: string;\n\n constructor(public data: Resource, public instance: WeakRef<any>) {\n this.sanitizedClassName = sanitizeClassName(data.className);\n }\n\n getMetric(name: string): Metric | undefined {\n return this.data.metrics?.find((metric) => metric.name === name);\n }\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 = new ResourceEntry(\n {\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 new WeakRef(params.instance),\n );\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 findResourcesByClassName(className: string): ResourceEntry[] {\n const res: ResourceEntry[] = [];\n for (const entry of this.resources.values()) {\n if (entry.data.className === className || entry.sanitizedClassName === className) {\n res.push(entry);\n }\n }\n return res;\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 _showInBrowserTimeline: boolean;\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 this._showInBrowserTimeline = params.showInBrowserTimeline;\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 if (this._showInBrowserTimeline) {\n this._markInBrowserTimeline();\n }\n }\n\n markError(err: unknown) {\n this.endTs = performance.now();\n this.error = serializeError(err);\n this._traceProcessor._flushSpan(this);\n\n if (this._showInBrowserTimeline) {\n this._markInBrowserTimeline();\n }\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 private _markInBrowserTimeline() {\n const resource = this._traceProcessor.resources.get(this.resourceId!);\n const name = resource\n ? `${resource.sanitizedClassName}#${resource.data.instanceId}.${this.methodName}`\n : this.methodName;\n performance.measure(name, { start: this.startTs, end: this.endTs! });\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\nexport const sanitizeClassName = (className: string) => {\n const SANITIZE_REGEX = /[^_](\\d+)$/;\n const m = className.match(SANITIZE_REGEX);\n if (!m) {\n return className;\n } else {\n return className.slice(0, -m[1].length);\n }\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
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", "ResourceEntry", "constructor", "data", "instance", "sanitizedClassName", "sanitizeClassName", "className", "getMetric", "name", "metrics", "find", "metric", "MAX_RESOURCE_RECORDS", "MAX_SPAN_RECORDS", "MAX_LOG_RECORDS", "REFRESH_INTERVAL", "TraceProcessor", "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", "id", "_pushLog", "log", "addProcessor", "bind", "refreshInterval", "setInterval", "refresh", "unrefTimeout", "traceResourceConstructor", "params", "size", "tracingContext", "getTracingContext", "getPrototypeOf", "metricsProperties", "_assign", "instanceId", "getPrototypeSpecificInstanceId", "info", "getResourceInfo", "links", "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", "findResourcesByClassName", "runtimeSpan", "serialize", "_clearSpans", "_markSpanDirty", "dirtyResources", "add", "dirtySpans", "shift", "delete", "newLogs", "nextId", "_traceProcessor", "parentId", "endTs", "error", "_ctx", "methodName", "startTs", "_showInBrowserTimeline", "showInBrowserTimeline", "parentCtx", "derive", "attributes", "TRACE_SPAN_ATTRIBUTE", "getAttribute", "ctx", "markSuccess", "_markInBrowserTimeline", "markError", "serializeError", "undefined", "toFixed", "measure", "start", "end", "Error", "String", "TRACE_PROCESSOR", "globalThis", "value", "truncate", "toString", "a", "b", "SANITIZE_REGEX", "m", "match", "slice", "resource", "constructor", "klass", "rest", "TRACE_PROCESSOR", "traceResourceConstructor", "instance", "Object", "defineProperty", "value", "name", "info", "target", "propertyKey", "descriptor", "getTracingContext", "infoProperties", "mark", "performance", "span", "showInBrowserTimeline", "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":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":41308,"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":7995,"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/node/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":37148},"packages/common/tracing/dist/lib/node/index.cjs":{"imports":[{"path":"@dxos/context","kind":"require-call","external":true},{"path":"@dxos/async","kind":"require-call","external":true},{"path":"@dxos/log","kind":"require-call","external":true},{"path":"@dxos/util","kind":"require-call","external":true},{"path":"@dxos/codec-protobuf","kind":"require-call","external":true}],"exports":[],"entryPoint":"packages/common/tracing/src/index.ts","inputs":{"packages/common/tracing/src/index.ts":{"bytesInOutput":659},"packages/common/tracing/src/api.ts":{"bytesInOutput":1553},"packages/common/tracing/src/symbols.ts":{"bytesInOutput":245},"packages/common/tracing/src/trace-processor.ts":{"bytesInOutput":9566},"packages/common/tracing/src/trace-sender.ts":{"bytesInOutput":2591},"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":18766}}}
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":41308,"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":8340,"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/node/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":37278},"packages/common/tracing/dist/lib/node/index.cjs":{"imports":[{"path":"@dxos/context","kind":"require-call","external":true},{"path":"@dxos/async","kind":"require-call","external":true},{"path":"@dxos/log","kind":"require-call","external":true},{"path":"@dxos/util","kind":"require-call","external":true},{"path":"@dxos/codec-protobuf","kind":"require-call","external":true}],"exports":[],"entryPoint":"packages/common/tracing/src/index.ts","inputs":{"packages/common/tracing/src/index.ts":{"bytesInOutput":659},"packages/common/tracing/src/api.ts":{"bytesInOutput":1563},"packages/common/tracing/src/symbols.ts":{"bytesInOutput":245},"packages/common/tracing/src/trace-processor.ts":{"bytesInOutput":9566},"packages/common/tracing/src/trace-sender.ts":{"bytesInOutput":2591},"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":18776}}}
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/api.ts"],"names":[],"mappings":"AAoCA,MAAM,MAAM,WAAW,GAAG;IACxB,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC,CAAC;AAmCF,MAAM,MAAM,cAAc,GAAG,EAAE,CAAC;AAMhC,eAAO,MAAM,KAAK;6CAjEW,GAAG,EAAE,KAAG,EAAE;sBAEZ,GAAG,EAAE;;yBAYJ,GAAG,eAAe,MAAM,eAAe,kBAAkB;iBAIjE,MAAM;uCASY,WAAW,cACtC,GAAG,eAAe,MAAM,gDAAgD,GAAG,KAAK,GAAG;mCA2BxD,GAAG,eAAe,MAAM,eAAe,kBAAkB;sBAMtE,GAAG,SAAS,GAAG,SAAQ,cAAc;CAY7D,CAAC"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/api.ts"],"names":[],"mappings":"AAsCA,MAAM,MAAM,WAAW,GAAG;IACxB,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC,CAAC;AAmCF,MAAM,MAAM,cAAc,GAAG,EAAE,CAAC;AAMhC,eAAO,MAAM,KAAK;6CAnEW,GAAG,EAAE,KAAG,EAAE;sBAIV,GAAG,EAAE;;yBAYN,GAAG,eAAe,MAAM,eAAe,kBAAkB;iBAIjE,MAAM;uCASY,WAAW,cACtC,GAAG,eAAe,MAAM,gDAAgD,GAAG,KAAK,GAAG;mCA2BxD,GAAG,eAAe,MAAM,eAAe,kBAAkB;sBAMtE,GAAG,SAAS,GAAG,SAAQ,cAAc;CAY7D,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/tracing",
3
- "version": "0.1.58-main.ffbb8a1",
3
+ "version": "0.1.58-next.6d0af18",
4
4
  "description": "Async utilities.",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -16,15 +16,15 @@
16
16
  "src"
17
17
  ],
18
18
  "dependencies": {
19
- "@dxos/async": "0.1.58-main.ffbb8a1",
20
- "@dxos/codec-protobuf": "0.1.58-main.ffbb8a1",
21
- "@dxos/context": "0.1.58-main.ffbb8a1",
22
- "@dxos/debug": "0.1.58-main.ffbb8a1",
23
- "@dxos/invariant": "0.1.58-main.ffbb8a1",
24
- "@dxos/log": "0.1.58-main.ffbb8a1",
25
- "@dxos/node-std": "0.1.58-main.ffbb8a1",
26
- "@dxos/protocols": "0.1.58-main.ffbb8a1",
27
- "@dxos/util": "0.1.58-main.ffbb8a1"
19
+ "@dxos/async": "0.1.58-next.6d0af18",
20
+ "@dxos/codec-protobuf": "0.1.58-next.6d0af18",
21
+ "@dxos/context": "0.1.58-next.6d0af18",
22
+ "@dxos/debug": "0.1.58-next.6d0af18",
23
+ "@dxos/invariant": "0.1.58-next.6d0af18",
24
+ "@dxos/log": "0.1.58-next.6d0af18",
25
+ "@dxos/node-std": "0.1.58-next.6d0af18",
26
+ "@dxos/protocols": "0.1.58-next.6d0af18",
27
+ "@dxos/util": "0.1.58-next.6d0af18"
28
28
  },
29
29
  "devDependencies": {},
30
30
  "publishConfig": {
package/src/api.ts CHANGED
@@ -13,12 +13,14 @@ import { TRACE_PROCESSOR } from './trace-processor';
13
13
  const resource =
14
14
  () =>
15
15
  <T extends { new (...args: any[]): {} }>(constructor: T) => {
16
- const klass = class extends constructor {
17
- constructor(...rest: any[]) {
18
- super(...rest);
19
- TRACE_PROCESSOR.traceResourceConstructor({ constructor, instance: this });
20
- }
21
- };
16
+ // Wrapping class declaration into an IIFE so it doesn't capture the `klass` class name.
17
+ const klass = (() =>
18
+ class extends constructor {
19
+ constructor(...rest: any[]) {
20
+ super(...rest);
21
+ TRACE_PROCESSOR.traceResourceConstructor({ constructor, instance: this });
22
+ }
23
+ })();
22
24
  Object.defineProperty(klass, 'name', { value: constructor.name });
23
25
  return klass;
24
26
  };
@@ -16,7 +16,7 @@ class FeedStore {
16
16
  private readonly _feeds = new Map<string, Feed>();
17
17
 
18
18
  @trace.info()
19
- get storageType() {
19
+ get dataStore() {
20
20
  return this._storage.type;
21
21
  }
22
22