@dxos/tracing 0.5.3-main.bc67fdb → 0.5.3-main.bfb5bca

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.
@@ -41,6 +41,10 @@ var DiagnosticsManager = class {
41
41
  constructor() {
42
42
  this.instanceId = createId();
43
43
  this.registry = /* @__PURE__ */ new Map();
44
+ this._instanceTag = null;
45
+ }
46
+ setInstanceTag(tag) {
47
+ this._instanceTag = tag;
44
48
  }
45
49
  registerDiagnostic(params) {
46
50
  const impl = new TraceDiagnosticImpl(params.id, params.fetch, params.name ?? params.id, () => {
@@ -55,13 +59,14 @@ var DiagnosticsManager = class {
55
59
  return Array.from(this.registry.values()).map((diagnostic2) => ({
56
60
  id: diagnostic2.id,
57
61
  instanceId: this.instanceId,
62
+ instanceTag: this._instanceTag,
58
63
  name: diagnostic2.name
59
64
  }));
60
65
  }
61
66
  async fetch(request) {
62
67
  invariant(request.instanceId === this.instanceId, "Invalid instance id", {
63
68
  F: __dxlog_file,
64
- L: 68,
69
+ L: 76,
65
70
  S: this,
66
71
  A: [
67
72
  "request.instanceId === this.instanceId",
@@ -72,7 +77,7 @@ var DiagnosticsManager = class {
72
77
  const diagnostic2 = this.registry.get(id);
73
78
  invariant(diagnostic2, "Diagnostic not found", {
74
79
  F: __dxlog_file,
75
- L: 71,
80
+ L: 79,
76
81
  S: this,
77
82
  A: [
78
83
  "diagnostic",
@@ -325,6 +330,7 @@ var TraceProcessor = class {
325
330
  this.spans = /* @__PURE__ */ new Map();
326
331
  this.spanIdList = [];
327
332
  this.logs = [];
333
+ this._instanceTag = null;
328
334
  this._logProcessor = (config, entry) => {
329
335
  switch (entry.level) {
330
336
  case LogLevel.ERROR:
@@ -358,7 +364,7 @@ var TraceProcessor = class {
358
364
  };
359
365
  log.addProcessor(this._logProcessor.bind(this), void 0, {
360
366
  F: __dxlog_file2,
361
- L: 92,
367
+ L: 94,
362
368
  S: this,
363
369
  C: (f, a) => f(...a)
364
370
  });
@@ -367,6 +373,10 @@ var TraceProcessor = class {
367
373
  this.diagnosticsChannel.serve(this.diagnostics);
368
374
  this.diagnosticsChannel.unref();
369
375
  }
376
+ setInstanceTag(tag) {
377
+ this._instanceTag = tag;
378
+ this.diagnostics.setInstanceTag(tag);
379
+ }
370
380
  /**
371
381
  * @internal
372
382
  */
@@ -737,13 +747,13 @@ var diagnostic = (params) => {
737
747
  return TRACE_PROCESSOR.diagnostics.registerDiagnostic(params);
738
748
  };
739
749
  var trace = {
740
- resource,
750
+ addLink,
751
+ diagnostic,
741
752
  info,
742
753
  mark,
743
- span,
744
754
  metricsCounter,
745
- addLink,
746
- diagnostic
755
+ resource,
756
+ span
747
757
  };
748
758
 
749
759
  // packages/common/tracing/src/metrics/base.ts
@@ -912,12 +922,15 @@ trace.diagnostic({
912
922
  });
913
923
  export {
914
924
  BaseCounter,
925
+ DIAGNOSTICS_TIMEOUT,
926
+ DiagnosticsManager,
915
927
  MapCounter,
916
928
  ResourceEntry,
917
929
  TRACE_PROCESSOR,
918
930
  TRACE_SPAN_ATTRIBUTE,
919
931
  TimeSeriesCounter,
920
932
  TimeUsageCounter,
933
+ TraceDiagnosticImpl,
921
934
  TraceProcessor,
922
935
  TraceSender,
923
936
  TracingSpan,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/api.ts", "../../../src/symbols.ts", "../../../src/trace-processor.ts", "../../../src/diagnostic.ts", "../../../src/util.ts", "../../../src/diagnostics-channel.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", "../../../src/metrics/map-counter.ts", "../../../src/index.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Context } from '@dxos/context';\nimport { type MaybePromise } from '@dxos/util';\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 (options?: { annotation?: symbol }) =>\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.createTraceResource({ constructor, annotation: options?.annotation, instance: this });\n }\n })();\n Object.defineProperty(klass, 'name', { value: constructor.name });\n return klass;\n };\n\nexport type InfoOptions = {\n /**\n * Value is of enum type and should be converted to string.\n *\n * Example:\n *\n * ```ts\n * @trace.info({ enum: SpaceState })\n * get state(): SpaceState { ... }\n * ```\n */\n enum?: Record<string, any>;\n\n /**\n * Max depth of the object to be included in the resource info section.\n *\n * null means no limit (a limit of 8 nested objects is still imposed).\n *\n * Default: 0 - objects will be stringified with toString.\n */\n depth?: number | null;\n};\n\n/**\n * Marks a property or a method to be included in the resource info section.\n */\nconst info =\n (opts: InfoOptions = {}) =>\n (target: any, propertyKey: string, descriptor?: PropertyDescriptor) => {\n getTracingContext(target).infoProperties[propertyKey] = { options: opts };\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 type TraceDiagnosticParams<T> = {\n /**\n * Unique ID.\n */\n id: string;\n\n /**\n * Human-readable name.\n * @defaults Defaults to `id`\n */\n name?: string;\n\n /**\n * Function that will be called to fetch the diagnostic data.\n */\n fetch: () => MaybePromise<T>;\n};\n\nexport interface TraceDiagnostic {\n id: string;\n unregister(): void;\n}\n\n/**\n * Register a diagnostic that could be queried.\n */\nconst diagnostic = <T>(params: TraceDiagnosticParams<T>): TraceDiagnostic => {\n return TRACE_PROCESSOR.diagnostics.registerDiagnostic(params);\n};\n\nexport const trace = {\n resource,\n info,\n mark,\n span,\n metricsCounter,\n\n addLink,\n\n diagnostic,\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type InfoOptions } from './api';\n\nexport const symbolTracingContext = Symbol('dxos.tracing.context');\n\nexport type TracingContext = {\n infoProperties: Record<\n string,\n {\n options: InfoOptions;\n }\n >;\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 { type Context } from '@dxos/context';\nimport { LogLevel, type LogProcessor, getContextFromEntry, log } from '@dxos/log';\nimport { type LogEntry } from '@dxos/protocols/proto/dxos/client/services';\nimport { type Error as SerializedError } from '@dxos/protocols/proto/dxos/error';\nimport { type Metric, type Resource, type Span } from '@dxos/protocols/proto/dxos/tracing';\nimport { getPrototypeSpecificInstanceId } from '@dxos/util';\n\nimport type { AddLinkOptions } from './api';\nimport { DiagnosticsManager } from './diagnostic';\nimport { DiagnosticsChannel } from './diagnostics-channel';\nimport { type BaseCounter } from './metrics';\nimport { TRACE_SPAN_ATTRIBUTE, getTracingContext } from './symbols';\nimport { TraceSender } from './trace-sender';\n\nexport type Diagnostics = {\n resources: Record<string, Resource>;\n spans: Span[];\n logs: LogEntry[];\n};\n\nexport type TraceResourceConstructorParams = {\n constructor: { new (...args: any[]): {} };\n instance: any;\n annotation?: symbol;\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(\n public readonly data: Resource,\n public readonly instance: WeakRef<any>,\n public readonly annotation?: symbol,\n ) {\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 = 2_000;\nconst MAX_SPAN_RECORDS = 1_000;\nconst MAX_LOG_RECORDS = 1_000;\n\nconst REFRESH_INTERVAL = 1_000;\n\nconst MAX_INFO_OBJECT_DEPTH = 8;\n\nexport class TraceProcessor {\n public readonly diagnostics = new DiagnosticsManager();\n public readonly diagnosticsChannel = new DiagnosticsChannel();\n\n readonly subscriptions: Set<TraceSubscription> = new Set();\n\n readonly resources = new Map<number, ResourceEntry>();\n readonly resourceInstanceIndex = new WeakMap<any, ResourceEntry>();\n readonly resourceIdList: number[] = [];\n\n readonly spans = new Map<number, Span>();\n readonly spanIdList: number[] = [];\n\n readonly logs: LogEntry[] = [];\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 this.diagnosticsChannel.serve(this.diagnostics);\n this.diagnosticsChannel.unref();\n }\n\n /**\n * @internal\n */\n // TODO(burdon): Comment.\n createTraceResource(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 params.annotation,\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\n this._markResourceDirty(id);\n }\n\n createTraceSender() {\n return new TraceSender(this);\n }\n\n traceSpan(params: TraceSpanParams): TracingSpan {\n const span = new TracingSpan(this, params);\n this._flushSpan(span);\n return span;\n }\n\n // TODO(burdon): Not implemented.\n addLink(parent: any, child: any, opts: AddLinkOptions) {}\n\n //\n // Getters\n //\n\n // TODO(burdon): Define type.\n // TODO(burdon): Reconcile with system service.\n getDiagnostics(): Diagnostics {\n this.refresh();\n\n return {\n resources: Object.fromEntries(\n Array.from(this.resources.entries()).map(([id, entry]) => [\n `${entry.sanitizedClassName}#${entry.data.instanceId}`,\n entry.data,\n ]),\n ),\n spans: Array.from(this.spans.values()),\n logs: this.logs.filter((log) => log.level >= LogLevel.INFO),\n };\n }\n\n getResourceInfo(instance: any): Record<string, any> {\n const res: Record<string, any> = {};\n const tracingContext = getTracingContext(Object.getPrototypeOf(instance));\n for (const [key, { options }] of Object.entries(tracingContext.infoProperties)) {\n try {\n const value = typeof instance[key] === 'function' ? instance[key]() : instance[key];\n if (options.enum) {\n res[key] = options.enum[value];\n } else {\n res[key] = sanitizeValue(\n value,\n options.depth === undefined ? 1 : options.depth ?? MAX_INFO_OBJECT_DEPTH,\n this,\n );\n }\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 for (const [key, _opts] of Object.entries(tracingContext.metricsProperties)) {\n res.push(instance[key].getData());\n }\n\n return res;\n }\n\n getResourceId(instance: any): number | null {\n const entry = this.resourceInstanceIndex.get(instance);\n return entry ? entry.data.id : null;\n }\n\n findResourcesByClassName(className: string): ResourceEntry[] {\n return [...this.resources.values()].filter(\n (res) => res.data.className === className || res.sanitizedClassName === className,\n );\n }\n\n findResourcesByAnnotation(annotation: symbol): ResourceEntry[] {\n return [...this.resources.values()].filter((res) => res.annotation === annotation);\n }\n\n refresh() {\n for (const resource of this.resources.values()) {\n const instance = resource.instance.deref();\n if (!instance) {\n continue;\n }\n\n const tracingContext = getTracingContext(Object.getPrototypeOf(instance));\n const time = performance.now();\n for (const key of Object.keys(tracingContext.metricsProperties)) {\n (instance[key] as BaseCounter)._tick?.(time);\n }\n\n let _changed = false;\n\n const oldInfo = resource.data.info;\n resource.data.info = this.getResourceInfo(instance);\n _changed ||= !areEqualShallow(oldInfo, resource.data.info);\n\n const oldMetrics = resource.data.metrics;\n resource.data.metrics = this.getResourceMetrics(instance);\n _changed ||= !areEqualShallow(oldMetrics, resource.data.metrics);\n\n // TODO(dmaretskyi): Test if works and enable.\n // if (changed) {\n this._markResourceDirty(resource.data.id);\n // }\n }\n\n for (const subscription of this.subscriptions) {\n subscription.flush();\n }\n }\n\n //\n // Implementation\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 for (const key of Object.keys(context)) {\n context[key] = sanitizeValue(context[key], 0, this);\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\n// TODO(burdon): Comment.\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(\n private _traceProcessor: TraceProcessor,\n params: TraceSpanParams,\n ) {\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\n// TODO(burdon): Log cause.\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\n// TODO(burdon): Rename singleton and move out of package.\nexport const TRACE_PROCESSOR: TraceProcessor = ((globalThis as any).TRACE_PROCESSOR ??= new TraceProcessor());\n\nconst sanitizeValue = (value: any, depth: number, traceProcessor: TraceProcessor): any => {\n switch (typeof value) {\n case 'string':\n case 'number':\n case 'boolean':\n case 'undefined':\n return value;\n case 'object':\n case 'function':\n if (value === null) {\n return value;\n }\n\n {\n const resourceEntry = traceProcessor.resourceInstanceIndex.get(value);\n if (resourceEntry) {\n return `${resourceEntry.sanitizedClassName}#${resourceEntry.data.instanceId}`;\n }\n }\n\n if (typeof value.toJSON === 'function') {\n // TODO(dmaretskyi): This has potential to cause infinite recursion.\n return sanitizeValue(value.toJSON(), depth, traceProcessor);\n }\n\n if (depth > 0) {\n if (isSetLike(value)) {\n return Object.fromEntries(\n Array.from(value.entries()).map((value) => sanitizeValue(value, depth - 1, traceProcessor)),\n );\n } else if (isMapLike(value)) {\n return Object.fromEntries(\n Array.from(value.entries()).map(([key, value]) => [key, sanitizeValue(value, depth - 1, traceProcessor)]),\n );\n } else if (Array.isArray(value)) {\n return value.map((item: any) => sanitizeValue(item, depth - 1, traceProcessor));\n } else if (typeof value === 'object') {\n const res: any = {};\n for (const key of Object.keys(value)) {\n res[key] = sanitizeValue(value[key], depth - 1, traceProcessor);\n }\n return res;\n }\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\nconst isSetLike = (value: any): value is Set<any> =>\n value instanceof Set ||\n (typeof value === 'object' && value !== null && Object.getPrototypeOf(value).constructor.name === 'ComplexSet');\n\nconst isMapLike = (value: any): value is Map<any, any> =>\n value instanceof Map ||\n (typeof value === 'object' && value !== null && Object.getPrototypeOf(value).constructor.name === 'ComplexMap');\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { asyncTimeout } from '@dxos/async';\nimport { invariant } from '@dxos/invariant';\n\nimport { type TraceDiagnosticParams, type TraceDiagnostic } from './api';\nimport { createId } from './util';\n\nexport const DIAGNOSTICS_TIMEOUT = 10_000;\n\nexport type DiagnosticMetadata = {\n id: string;\n instanceId: string;\n name: string;\n};\n\nexport type DiagnosticsRequest = {\n id: string;\n instanceId: string;\n};\n\nexport type DiagnosticsData = {\n id: string;\n instanceId: string;\n data: any;\n error?: string;\n};\n\nexport class TraceDiagnosticImpl implements TraceDiagnostic {\n constructor(\n public id: string,\n public fetch: () => any,\n public name: string,\n private readonly _onUnregister: () => void,\n ) {}\n\n unregister(): void {\n this._onUnregister();\n }\n}\n\nexport class DiagnosticsManager {\n readonly instanceId = createId();\n\n readonly registry = new Map<string, TraceDiagnosticImpl>();\n\n registerDiagnostic(params: TraceDiagnosticParams<any>): TraceDiagnostic {\n const impl = new TraceDiagnosticImpl(params.id, params.fetch, params.name ?? params.id, () => {\n if (this.registry.get(params.id) === impl) {\n this.registry.delete(params.id);\n }\n });\n this.registry.set(params.id, impl);\n return impl;\n }\n\n list(): DiagnosticMetadata[] {\n return Array.from(this.registry.values()).map((diagnostic) => ({\n id: diagnostic.id,\n instanceId: this.instanceId,\n name: diagnostic.name,\n }));\n }\n\n async fetch(request: DiagnosticsRequest): Promise<DiagnosticsData> {\n invariant(request.instanceId === this.instanceId, 'Invalid instance id');\n const { id } = request;\n const diagnostic = this.registry.get(id);\n invariant(diagnostic, 'Diagnostic not found');\n try {\n const data = await asyncTimeout(diagnostic.fetch(), DIAGNOSTICS_TIMEOUT);\n return {\n id,\n instanceId: this.instanceId,\n data,\n };\n } catch (err: any) {\n return {\n id,\n instanceId: this.instanceId,\n data: null,\n error: err.stack,\n };\n }\n }\n}\n", "// TODO(dmaretskyi): Use UUID.\n//\n// Copyright 2024 DXOS.org\n//\n\nexport const createId = () => Math.random().toString(36).slice(2);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Trigger, sleep } from '@dxos/async';\nimport { Context } from '@dxos/context';\n\nimport {\n DIAGNOSTICS_TIMEOUT,\n type DiagnosticMetadata,\n type DiagnosticsData,\n type DiagnosticsManager,\n type DiagnosticsRequest,\n} from './diagnostic';\nimport { createId } from './util';\n\nconst DEFAULT_CHANNEL_NAME = 'dxos-diagnostics';\n\nconst DISCOVER_TIME = 500;\n\nexport type DiagnosticChannelMessage =\n | {\n type: 'DIAGNOSTICS_DISCOVER';\n }\n | {\n type: 'DIAGNOSTICS_ANNOUNCE';\n diagnostics: DiagnosticMetadata[];\n }\n | {\n type: 'DIAGNOSTICS_FETCH';\n requestId: string;\n request: DiagnosticsRequest;\n }\n | {\n type: 'DIAGNOSTICS_RESPONSE';\n requestId: string;\n data: DiagnosticsData;\n };\n\nexport class DiagnosticsChannel {\n private _ctx = new Context();\n\n // Separate channels becauase the client and server may be in the same process.\n private readonly _serveChannel: BroadcastChannel;\n private readonly _clientChannel: BroadcastChannel;\n\n constructor(private readonly _channelName: string = DEFAULT_CHANNEL_NAME) {\n this._serveChannel = new BroadcastChannel(_channelName);\n this._clientChannel = new BroadcastChannel(_channelName);\n }\n\n destroy() {\n void this._ctx.dispose();\n this._serveChannel.close();\n this._clientChannel.close();\n }\n\n /**\n * In node.js, the channel will keep the process alive.\n * This method allows the process to exit.\n * Noop in the browser.\n */\n unref() {\n if (typeof (this._serveChannel as any).unref === 'function') {\n (this._serveChannel as any).unref();\n (this._clientChannel as any).unref();\n }\n }\n\n serve(manager: DiagnosticsManager) {\n const listener = async (event: MessageEvent) => {\n switch (event.data.type) {\n case 'DIAGNOSTICS_DISCOVER': {\n const diagnostics = manager.list();\n this._serveChannel.postMessage({\n type: 'DIAGNOSTICS_ANNOUNCE',\n diagnostics,\n } satisfies DiagnosticChannelMessage);\n break;\n }\n case 'DIAGNOSTICS_FETCH': {\n const { requestId, request } = event.data;\n if (request.instanceId !== manager.instanceId) {\n break;\n }\n\n const data = await manager.fetch(request);\n this._serveChannel.postMessage({\n type: 'DIAGNOSTICS_RESPONSE',\n requestId,\n data,\n } satisfies DiagnosticChannelMessage);\n break;\n }\n }\n };\n\n this._serveChannel.addEventListener('message', listener);\n this._ctx.onDispose(() => this._serveChannel.removeEventListener('message', listener));\n }\n\n async discover(): Promise<DiagnosticMetadata[]> {\n const diagnostics: DiagnosticMetadata[] = [];\n\n const collector = (event: MessageEvent) => {\n const data = event.data as DiagnosticChannelMessage;\n switch (data.type) {\n case 'DIAGNOSTICS_ANNOUNCE':\n diagnostics.push(...data.diagnostics);\n break;\n }\n };\n\n try {\n this._clientChannel.addEventListener('message', collector);\n this._clientChannel.postMessage({ type: 'DIAGNOSTICS_DISCOVER' } satisfies DiagnosticChannelMessage);\n\n await sleep(DISCOVER_TIME);\n\n // Dedup.\n const result: DiagnosticMetadata[] = [];\n for (const diagnostic of diagnostics) {\n if (!result.some((d) => d.id === diagnostic.id && d.instanceId === diagnostic.instanceId)) {\n result.push(diagnostic);\n }\n }\n\n return diagnostics;\n } finally {\n this._clientChannel.removeEventListener('message', collector);\n }\n }\n\n async fetch(request: DiagnosticsRequest): Promise<DiagnosticsData> {\n const requestId = createId();\n\n const trigger = new Trigger<DiagnosticsData>();\n const listener = (event: MessageEvent) => {\n const data = event.data as DiagnosticChannelMessage;\n if (data.type === 'DIAGNOSTICS_RESPONSE' && data.requestId === requestId) {\n trigger.wake(data.data);\n }\n };\n\n try {\n this._clientChannel.addEventListener('message', listener);\n this._clientChannel.postMessage({\n type: 'DIAGNOSTICS_FETCH',\n requestId,\n request,\n } satisfies DiagnosticChannelMessage);\n\n // NOTE: Must have await keyword in this block.\n const result = await trigger.wait({ timeout: DIAGNOSTICS_TIMEOUT });\n\n return result;\n } finally {\n this._clientChannel.removeEventListener('message', listener);\n }\n }\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Stream } from '@dxos/codec-protobuf';\nimport { type LogEntry } from '@dxos/protocols/proto/dxos/client/services';\nimport { type StreamTraceEvent, type TracingService } from '@dxos/protocols/proto/dxos/tracing';\n\nimport { type TraceProcessor, type 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 { type 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 { type 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 { type 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 { type 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", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Metric } from '@dxos/protocols/proto/dxos/tracing';\n\nimport { BaseCounter } from './base';\n\nexport class MapCounter extends BaseCounter {\n values = new Map<string, number>();\n units?: string;\n\n constructor({ units }: { units?: string } = {}) {\n super();\n this.units = units;\n }\n\n inc(key: string, by = 1) {\n const prev = this.values.get(key) ?? 0;\n this.values.set(key, prev + by);\n }\n\n getData(): Metric {\n return {\n name: this.name!,\n multiCounter: {\n records: Array.from(this.values.entries()).map(([key, value]) => ({\n key,\n value,\n })),\n units: this.units,\n },\n };\n }\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { trace } from './api';\n\nexport * from './api';\nexport * from './symbols';\nexport * from './trace-processor';\nexport * from './trace-sender';\nexport * from './metrics';\n\ntrace.diagnostic({\n id: 'process-info',\n name: 'Process Info',\n fetch: async () => {\n return {\n platform: globalThis.process?.platform,\n arch: globalThis.process?.arch,\n versions: globalThis.process?.versions,\n href: globalThis.location?.href,\n };\n },\n});\n"],
5
- "mappings": "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",
6
- "names": ["Context", "symbolTracingContext", "Symbol", "getTracingContext", "target", "infoProperties", "metricsProperties", "TRACE_SPAN_ATTRIBUTE", "unrefTimeout", "LogLevel", "getContextFromEntry", "log", "getPrototypeSpecificInstanceId", "asyncTimeout", "invariant", "createId", "Math", "random", "toString", "slice", "DIAGNOSTICS_TIMEOUT", "TraceDiagnosticImpl", "constructor", "id", "fetch", "name", "_onUnregister", "unregister", "DiagnosticsManager", "instanceId", "createId", "registry", "Map", "registerDiagnostic", "params", "impl", "get", "delete", "set", "list", "Array", "from", "values", "map", "diagnostic", "request", "invariant", "data", "asyncTimeout", "err", "error", "stack", "Trigger", "sleep", "Context", "DEFAULT_CHANNEL_NAME", "DISCOVER_TIME", "DiagnosticsChannel", "constructor", "_channelName", "_ctx", "Context", "_serveChannel", "BroadcastChannel", "_clientChannel", "destroy", "dispose", "close", "unref", "serve", "manager", "listener", "event", "data", "type", "diagnostics", "list", "postMessage", "requestId", "request", "instanceId", "fetch", "addEventListener", "onDispose", "removeEventListener", "discover", "collector", "push", "sleep", "result", "diagnostic", "some", "d", "id", "createId", "trigger", "Trigger", "wake", "wait", "timeout", "DIAGNOSTICS_TIMEOUT", "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", "annotation", "sanitizedClassName", "sanitizeClassName", "className", "getMetric", "name", "metrics", "find", "metric", "MAX_RESOURCE_RECORDS", "MAX_SPAN_RECORDS", "MAX_LOG_RECORDS", "REFRESH_INTERVAL", "MAX_INFO_OBJECT_DEPTH", "TraceProcessor", "diagnostics", "DiagnosticsManager", "diagnosticsChannel", "DiagnosticsChannel", "subscriptions", "Set", "resources", "Map", "resourceInstanceIndex", "WeakMap", "resourceIdList", "spans", "spanIdList", "logs", "_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", "serve", "unref", "createTraceResource", "params", "size", "tracingContext", "getTracingContext", "getPrototypeOf", "metricsProperties", "_assign", "instanceId", "getPrototypeSpecificInstanceId", "info", "getResourceInfo", "links", "getResourceMetrics", "WeakRef", "set", "push", "length", "_clearResources", "_markResourceDirty", "createTraceSender", "TraceSender", "traceSpan", "span", "TracingSpan", "_flushSpan", "addLink", "parent", "child", "opts", "getDiagnostics", "fromEntries", "Array", "from", "entries", "map", "values", "filter", "INFO", "res", "options", "infoProperties", "value", "enum", "depth", "undefined", "err", "_opts", "getData", "getResourceId", "findResourcesByClassName", "findResourcesByAnnotation", "deref", "time", "performance", "now", "_tick", "_changed", "oldInfo", "areEqualShallow", "oldMetrics", "subscription", "flush", "runtimeSpan", "serialize", "_clearSpans", "_markSpanDirty", "dirtyResources", "add", "dirtySpans", "shift", "delete", "newLogs", "nextId", "_traceProcessor", "parentId", "endTs", "error", "_ctx", "methodName", "startTs", "_showInBrowserTimeline", "showInBrowserTimeline", "parentCtx", "derive", "attributes", "TRACE_SPAN_ATTRIBUTE", "getAttribute", "ctx", "markSuccess", "_markInBrowserTimeline", "markError", "serializeError", "toFixed", "measure", "start", "end", "Error", "String", "TRACE_PROCESSOR", "globalThis", "traceProcessor", "resourceEntry", "toJSON", "isSetLike", "isMapLike", "isArray", "item", "truncate", "toString", "a", "b", "SANITIZE_REGEX", "m", "match", "slice", "resource", "options", "constructor", "klass", "rest", "TRACE_PROCESSOR", "createTraceResource", "annotation", "instance", "Object", "defineProperty", "value", "name", "info", "opts", "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", "diagnostic", "params", "diagnostics", "registerDiagnostic", "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", "MapCounter", "BaseCounter", "constructor", "units", "values", "Map", "inc", "key", "by", "prev", "get", "set", "getData", "name", "multiCounter", "records", "Array", "from", "entries", "map", "value", "trace", "diagnostic", "id", "name", "fetch", "platform", "globalThis", "process", "arch", "versions", "href", "location"]
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Context } from '@dxos/context';\nimport { type MaybePromise } from '@dxos/util';\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 (options?: { annotation?: symbol }) =>\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.createTraceResource({ constructor, annotation: options?.annotation, instance: this });\n }\n })();\n Object.defineProperty(klass, 'name', { value: constructor.name });\n return klass;\n };\n\nexport type InfoOptions = {\n /**\n * Value is of enum type and should be converted to string.\n *\n * Example:\n *\n * ```ts\n * @trace.info({ enum: SpaceState })\n * get state(): SpaceState { ... }\n * ```\n */\n enum?: Record<string, any>;\n\n /**\n * Max depth of the object to be included in the resource info section.\n *\n * null means no limit (a limit of 8 nested objects is still imposed).\n *\n * Default: 0 - objects will be stringified with toString.\n */\n depth?: number | null;\n};\n\n/**\n * Marks a property or a method to be included in the resource info section.\n */\nconst info =\n (opts: InfoOptions = {}) =>\n (target: any, propertyKey: string, descriptor?: PropertyDescriptor) => {\n getTracingContext(target).infoProperties[propertyKey] = { options: opts };\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 type TraceDiagnosticParams<T> = {\n /**\n * Unique ID.\n */\n id: string;\n\n /**\n * Human-readable name.\n * @defaults Defaults to `id`\n */\n name?: string;\n\n /**\n * Function that will be called to fetch the diagnostic data.\n */\n fetch: () => MaybePromise<T>;\n};\n\nexport interface TraceDiagnostic {\n id: string;\n unregister(): void;\n}\n\n/**\n * Register a diagnostic that could be queried.\n */\nconst diagnostic = <T>(params: TraceDiagnosticParams<T>): TraceDiagnostic => {\n return TRACE_PROCESSOR.diagnostics.registerDiagnostic(params);\n};\n\nexport const trace = {\n addLink,\n diagnostic,\n info,\n mark,\n metricsCounter,\n resource,\n span,\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type InfoOptions } from './api';\n\nexport const symbolTracingContext = Symbol('dxos.tracing.context');\n\nexport type TracingContext = {\n infoProperties: Record<\n string,\n {\n options: InfoOptions;\n }\n >;\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 { type Context } from '@dxos/context';\nimport { LogLevel, type LogProcessor, getContextFromEntry, log } from '@dxos/log';\nimport { type LogEntry } from '@dxos/protocols/proto/dxos/client/services';\nimport { type Error as SerializedError } from '@dxos/protocols/proto/dxos/error';\nimport { type Metric, type Resource, type Span } from '@dxos/protocols/proto/dxos/tracing';\nimport { getPrototypeSpecificInstanceId } from '@dxos/util';\n\nimport type { AddLinkOptions } from './api';\nimport { DiagnosticsManager } from './diagnostic';\nimport { DiagnosticsChannel } from './diagnostics-channel';\nimport { type BaseCounter } from './metrics';\nimport { TRACE_SPAN_ATTRIBUTE, getTracingContext } from './symbols';\nimport { TraceSender } from './trace-sender';\n\nexport type Diagnostics = {\n resources: Record<string, Resource>;\n spans: Span[];\n logs: LogEntry[];\n};\n\nexport type TraceResourceConstructorParams = {\n constructor: { new (...args: any[]): {} };\n instance: any;\n annotation?: symbol;\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(\n public readonly data: Resource,\n public readonly instance: WeakRef<any>,\n public readonly annotation?: symbol,\n ) {\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 = 2_000;\nconst MAX_SPAN_RECORDS = 1_000;\nconst MAX_LOG_RECORDS = 1_000;\n\nconst REFRESH_INTERVAL = 1_000;\n\nconst MAX_INFO_OBJECT_DEPTH = 8;\n\nexport class TraceProcessor {\n public readonly diagnostics = new DiagnosticsManager();\n public readonly diagnosticsChannel = new DiagnosticsChannel();\n\n readonly subscriptions: Set<TraceSubscription> = new Set();\n\n readonly resources = new Map<number, ResourceEntry>();\n readonly resourceInstanceIndex = new WeakMap<any, ResourceEntry>();\n readonly resourceIdList: number[] = [];\n\n readonly spans = new Map<number, Span>();\n readonly spanIdList: number[] = [];\n\n readonly logs: LogEntry[] = [];\n\n private _instanceTag: string | null = null;\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 this.diagnosticsChannel.serve(this.diagnostics);\n this.diagnosticsChannel.unref();\n }\n\n setInstanceTag(tag: string) {\n this._instanceTag = tag;\n this.diagnostics.setInstanceTag(tag);\n }\n\n /**\n * @internal\n */\n // TODO(burdon): Comment.\n createTraceResource(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 params.annotation,\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\n this._markResourceDirty(id);\n }\n\n createTraceSender() {\n return new TraceSender(this);\n }\n\n traceSpan(params: TraceSpanParams): TracingSpan {\n const span = new TracingSpan(this, params);\n this._flushSpan(span);\n return span;\n }\n\n // TODO(burdon): Not implemented.\n addLink(parent: any, child: any, opts: AddLinkOptions) {}\n\n //\n // Getters\n //\n\n // TODO(burdon): Define type.\n // TODO(burdon): Reconcile with system service.\n getDiagnostics(): Diagnostics {\n this.refresh();\n\n return {\n resources: Object.fromEntries(\n Array.from(this.resources.entries()).map(([id, entry]) => [\n `${entry.sanitizedClassName}#${entry.data.instanceId}`,\n entry.data,\n ]),\n ),\n spans: Array.from(this.spans.values()),\n logs: this.logs.filter((log) => log.level >= LogLevel.INFO),\n };\n }\n\n getResourceInfo(instance: any): Record<string, any> {\n const res: Record<string, any> = {};\n const tracingContext = getTracingContext(Object.getPrototypeOf(instance));\n for (const [key, { options }] of Object.entries(tracingContext.infoProperties)) {\n try {\n const value = typeof instance[key] === 'function' ? instance[key]() : instance[key];\n if (options.enum) {\n res[key] = options.enum[value];\n } else {\n res[key] = sanitizeValue(\n value,\n options.depth === undefined ? 1 : options.depth ?? MAX_INFO_OBJECT_DEPTH,\n this,\n );\n }\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 for (const [key, _opts] of Object.entries(tracingContext.metricsProperties)) {\n res.push(instance[key].getData());\n }\n\n return res;\n }\n\n getResourceId(instance: any): number | null {\n const entry = this.resourceInstanceIndex.get(instance);\n return entry ? entry.data.id : null;\n }\n\n findResourcesByClassName(className: string): ResourceEntry[] {\n return [...this.resources.values()].filter(\n (res) => res.data.className === className || res.sanitizedClassName === className,\n );\n }\n\n findResourcesByAnnotation(annotation: symbol): ResourceEntry[] {\n return [...this.resources.values()].filter((res) => res.annotation === annotation);\n }\n\n refresh() {\n for (const resource of this.resources.values()) {\n const instance = resource.instance.deref();\n if (!instance) {\n continue;\n }\n\n const tracingContext = getTracingContext(Object.getPrototypeOf(instance));\n const time = performance.now();\n for (const key of Object.keys(tracingContext.metricsProperties)) {\n (instance[key] as BaseCounter)._tick?.(time);\n }\n\n let _changed = false;\n\n const oldInfo = resource.data.info;\n resource.data.info = this.getResourceInfo(instance);\n _changed ||= !areEqualShallow(oldInfo, resource.data.info);\n\n const oldMetrics = resource.data.metrics;\n resource.data.metrics = this.getResourceMetrics(instance);\n _changed ||= !areEqualShallow(oldMetrics, resource.data.metrics);\n\n // TODO(dmaretskyi): Test if works and enable.\n // if (changed) {\n this._markResourceDirty(resource.data.id);\n // }\n }\n\n for (const subscription of this.subscriptions) {\n subscription.flush();\n }\n }\n\n //\n // Implementation\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 for (const key of Object.keys(context)) {\n context[key] = sanitizeValue(context[key], 0, this);\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\n// TODO(burdon): Comment.\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(\n private _traceProcessor: TraceProcessor,\n params: TraceSpanParams,\n ) {\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\n// TODO(burdon): Log cause.\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\n// TODO(burdon): Rename singleton and move out of package.\nexport const TRACE_PROCESSOR: TraceProcessor = ((globalThis as any).TRACE_PROCESSOR ??= new TraceProcessor());\n\nconst sanitizeValue = (value: any, depth: number, traceProcessor: TraceProcessor): any => {\n switch (typeof value) {\n case 'string':\n case 'number':\n case 'boolean':\n case 'undefined':\n return value;\n case 'object':\n case 'function':\n if (value === null) {\n return value;\n }\n\n {\n const resourceEntry = traceProcessor.resourceInstanceIndex.get(value);\n if (resourceEntry) {\n return `${resourceEntry.sanitizedClassName}#${resourceEntry.data.instanceId}`;\n }\n }\n\n if (typeof value.toJSON === 'function') {\n // TODO(dmaretskyi): This has potential to cause infinite recursion.\n return sanitizeValue(value.toJSON(), depth, traceProcessor);\n }\n\n if (depth > 0) {\n if (isSetLike(value)) {\n return Object.fromEntries(\n Array.from(value.entries()).map((value) => sanitizeValue(value, depth - 1, traceProcessor)),\n );\n } else if (isMapLike(value)) {\n return Object.fromEntries(\n Array.from(value.entries()).map(([key, value]) => [key, sanitizeValue(value, depth - 1, traceProcessor)]),\n );\n } else if (Array.isArray(value)) {\n return value.map((item: any) => sanitizeValue(item, depth - 1, traceProcessor));\n } else if (typeof value === 'object') {\n const res: any = {};\n for (const key of Object.keys(value)) {\n res[key] = sanitizeValue(value[key], depth - 1, traceProcessor);\n }\n return res;\n }\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\nconst isSetLike = (value: any): value is Set<any> =>\n value instanceof Set ||\n (typeof value === 'object' && value !== null && Object.getPrototypeOf(value).constructor.name === 'ComplexSet');\n\nconst isMapLike = (value: any): value is Map<any, any> =>\n value instanceof Map ||\n (typeof value === 'object' && value !== null && Object.getPrototypeOf(value).constructor.name === 'ComplexMap');\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { asyncTimeout } from '@dxos/async';\nimport { invariant } from '@dxos/invariant';\n\nimport { type TraceDiagnosticParams, type TraceDiagnostic } from './api';\nimport { createId } from './util';\n\nexport const DIAGNOSTICS_TIMEOUT = 10_000;\n\nexport type DiagnosticMetadata = {\n id: string;\n instanceId: string;\n instanceTag: string | null;\n name: string;\n};\n\nexport type DiagnosticsRequest = {\n id: string;\n instanceId: string;\n};\n\nexport type DiagnosticsData = {\n id: string;\n instanceId: string;\n data: any;\n error?: string;\n};\n\nexport class TraceDiagnosticImpl implements TraceDiagnostic {\n constructor(\n public id: string,\n public fetch: () => any,\n public name: string,\n private readonly _onUnregister: () => void,\n ) {}\n\n unregister(): void {\n this._onUnregister();\n }\n}\n\nexport class DiagnosticsManager {\n readonly instanceId = createId();\n\n readonly registry = new Map<string, TraceDiagnosticImpl>();\n\n private _instanceTag: string | null = null;\n\n setInstanceTag(tag: string): void {\n this._instanceTag = tag;\n }\n\n registerDiagnostic(params: TraceDiagnosticParams<any>): TraceDiagnostic {\n const impl = new TraceDiagnosticImpl(params.id, params.fetch, params.name ?? params.id, () => {\n if (this.registry.get(params.id) === impl) {\n this.registry.delete(params.id);\n }\n });\n this.registry.set(params.id, impl);\n return impl;\n }\n\n list(): DiagnosticMetadata[] {\n return Array.from(this.registry.values()).map((diagnostic) => ({\n id: diagnostic.id,\n instanceId: this.instanceId,\n instanceTag: this._instanceTag,\n name: diagnostic.name,\n }));\n }\n\n async fetch(request: DiagnosticsRequest): Promise<DiagnosticsData> {\n invariant(request.instanceId === this.instanceId, 'Invalid instance id');\n const { id } = request;\n const diagnostic = this.registry.get(id);\n invariant(diagnostic, 'Diagnostic not found');\n try {\n const data = await asyncTimeout(diagnostic.fetch(), DIAGNOSTICS_TIMEOUT);\n return {\n id,\n instanceId: this.instanceId,\n data,\n };\n } catch (err: any) {\n return {\n id,\n instanceId: this.instanceId,\n data: null,\n error: err.stack,\n };\n }\n }\n}\n", "// TODO(dmaretskyi): Use UUID.\n//\n// Copyright 2024 DXOS.org\n//\n\nexport const createId = () => Math.random().toString(36).slice(2);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Trigger, sleep } from '@dxos/async';\nimport { Context } from '@dxos/context';\n\nimport {\n DIAGNOSTICS_TIMEOUT,\n type DiagnosticMetadata,\n type DiagnosticsData,\n type DiagnosticsManager,\n type DiagnosticsRequest,\n} from './diagnostic';\nimport { createId } from './util';\n\nconst DEFAULT_CHANNEL_NAME = 'dxos-diagnostics';\n\nconst DISCOVER_TIME = 500;\n\nexport type DiagnosticChannelMessage =\n | {\n type: 'DIAGNOSTICS_DISCOVER';\n }\n | {\n type: 'DIAGNOSTICS_ANNOUNCE';\n diagnostics: DiagnosticMetadata[];\n }\n | {\n type: 'DIAGNOSTICS_FETCH';\n requestId: string;\n request: DiagnosticsRequest;\n }\n | {\n type: 'DIAGNOSTICS_RESPONSE';\n requestId: string;\n data: DiagnosticsData;\n };\n\nexport class DiagnosticsChannel {\n private _ctx = new Context();\n\n // Separate channels becauase the client and server may be in the same process.\n private readonly _serveChannel: BroadcastChannel;\n private readonly _clientChannel: BroadcastChannel;\n\n constructor(private readonly _channelName: string = DEFAULT_CHANNEL_NAME) {\n this._serveChannel = new BroadcastChannel(_channelName);\n this._clientChannel = new BroadcastChannel(_channelName);\n }\n\n destroy() {\n void this._ctx.dispose();\n this._serveChannel.close();\n this._clientChannel.close();\n }\n\n /**\n * In node.js, the channel will keep the process alive.\n * This method allows the process to exit.\n * Noop in the browser.\n */\n unref() {\n if (typeof (this._serveChannel as any).unref === 'function') {\n (this._serveChannel as any).unref();\n (this._clientChannel as any).unref();\n }\n }\n\n serve(manager: DiagnosticsManager) {\n const listener = async (event: MessageEvent) => {\n switch (event.data.type) {\n case 'DIAGNOSTICS_DISCOVER': {\n const diagnostics = manager.list();\n this._serveChannel.postMessage({\n type: 'DIAGNOSTICS_ANNOUNCE',\n diagnostics,\n } satisfies DiagnosticChannelMessage);\n break;\n }\n case 'DIAGNOSTICS_FETCH': {\n const { requestId, request } = event.data;\n if (request.instanceId !== manager.instanceId) {\n break;\n }\n\n const data = await manager.fetch(request);\n this._serveChannel.postMessage({\n type: 'DIAGNOSTICS_RESPONSE',\n requestId,\n data,\n } satisfies DiagnosticChannelMessage);\n break;\n }\n }\n };\n\n this._serveChannel.addEventListener('message', listener);\n this._ctx.onDispose(() => this._serveChannel.removeEventListener('message', listener));\n }\n\n async discover(): Promise<DiagnosticMetadata[]> {\n const diagnostics: DiagnosticMetadata[] = [];\n\n const collector = (event: MessageEvent) => {\n const data = event.data as DiagnosticChannelMessage;\n switch (data.type) {\n case 'DIAGNOSTICS_ANNOUNCE':\n diagnostics.push(...data.diagnostics);\n break;\n }\n };\n\n try {\n this._clientChannel.addEventListener('message', collector);\n this._clientChannel.postMessage({ type: 'DIAGNOSTICS_DISCOVER' } satisfies DiagnosticChannelMessage);\n\n await sleep(DISCOVER_TIME);\n\n // Dedup.\n const result: DiagnosticMetadata[] = [];\n for (const diagnostic of diagnostics) {\n if (!result.some((d) => d.id === diagnostic.id && d.instanceId === diagnostic.instanceId)) {\n result.push(diagnostic);\n }\n }\n\n return diagnostics;\n } finally {\n this._clientChannel.removeEventListener('message', collector);\n }\n }\n\n async fetch(request: DiagnosticsRequest): Promise<DiagnosticsData> {\n const requestId = createId();\n\n const trigger = new Trigger<DiagnosticsData>();\n const listener = (event: MessageEvent) => {\n const data = event.data as DiagnosticChannelMessage;\n if (data.type === 'DIAGNOSTICS_RESPONSE' && data.requestId === requestId) {\n trigger.wake(data.data);\n }\n };\n\n try {\n this._clientChannel.addEventListener('message', listener);\n this._clientChannel.postMessage({\n type: 'DIAGNOSTICS_FETCH',\n requestId,\n request,\n } satisfies DiagnosticChannelMessage);\n\n // NOTE: Must have await keyword in this block.\n const result = await trigger.wait({ timeout: DIAGNOSTICS_TIMEOUT });\n\n return result;\n } finally {\n this._clientChannel.removeEventListener('message', listener);\n }\n }\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Stream } from '@dxos/codec-protobuf';\nimport { type LogEntry } from '@dxos/protocols/proto/dxos/client/services';\nimport { type StreamTraceEvent, type TracingService } from '@dxos/protocols/proto/dxos/tracing';\n\nimport { type TraceProcessor, type 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 { type 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 { type 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 { type 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 { type 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", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Metric } from '@dxos/protocols/proto/dxos/tracing';\n\nimport { BaseCounter } from './base';\n\nexport class MapCounter extends BaseCounter {\n values = new Map<string, number>();\n units?: string;\n\n constructor({ units }: { units?: string } = {}) {\n super();\n this.units = units;\n }\n\n inc(key: string, by = 1) {\n const prev = this.values.get(key) ?? 0;\n this.values.set(key, prev + by);\n }\n\n getData(): Metric {\n return {\n name: this.name!,\n multiCounter: {\n records: Array.from(this.values.entries()).map(([key, value]) => ({\n key,\n value,\n })),\n units: this.units,\n },\n };\n }\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { trace } from './api';\n\nexport * from './api';\nexport * from './symbols';\nexport * from './trace-processor';\nexport * from './trace-sender';\nexport * from './metrics';\nexport * from './diagnostic';\n\ntrace.diagnostic({\n id: 'process-info',\n name: 'Process Info',\n fetch: async () => {\n return {\n platform: globalThis.process?.platform,\n arch: globalThis.process?.arch,\n versions: globalThis.process?.versions,\n href: globalThis.location?.href,\n };\n },\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["Context", "symbolTracingContext", "Symbol", "getTracingContext", "target", "infoProperties", "metricsProperties", "TRACE_SPAN_ATTRIBUTE", "unrefTimeout", "LogLevel", "getContextFromEntry", "log", "getPrototypeSpecificInstanceId", "asyncTimeout", "invariant", "createId", "Math", "random", "toString", "slice", "DIAGNOSTICS_TIMEOUT", "TraceDiagnosticImpl", "constructor", "id", "fetch", "name", "_onUnregister", "unregister", "DiagnosticsManager", "instanceId", "createId", "registry", "Map", "_instanceTag", "setInstanceTag", "tag", "registerDiagnostic", "params", "impl", "get", "delete", "set", "list", "Array", "from", "values", "map", "diagnostic", "instanceTag", "request", "invariant", "data", "asyncTimeout", "err", "error", "stack", "Trigger", "sleep", "Context", "DEFAULT_CHANNEL_NAME", "DISCOVER_TIME", "DiagnosticsChannel", "constructor", "_channelName", "_ctx", "Context", "_serveChannel", "BroadcastChannel", "_clientChannel", "destroy", "dispose", "close", "unref", "serve", "manager", "listener", "event", "data", "type", "diagnostics", "list", "postMessage", "requestId", "request", "instanceId", "fetch", "addEventListener", "onDispose", "removeEventListener", "discover", "collector", "push", "sleep", "result", "diagnostic", "some", "d", "id", "createId", "trigger", "Trigger", "wake", "wait", "timeout", "DIAGNOSTICS_TIMEOUT", "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", "annotation", "sanitizedClassName", "sanitizeClassName", "className", "getMetric", "name", "metrics", "find", "metric", "MAX_RESOURCE_RECORDS", "MAX_SPAN_RECORDS", "MAX_LOG_RECORDS", "REFRESH_INTERVAL", "MAX_INFO_OBJECT_DEPTH", "TraceProcessor", "diagnostics", "DiagnosticsManager", "diagnosticsChannel", "DiagnosticsChannel", "subscriptions", "Set", "resources", "Map", "resourceInstanceIndex", "WeakMap", "resourceIdList", "spans", "spanIdList", "logs", "_instanceTag", "_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", "serve", "unref", "setInstanceTag", "tag", "createTraceResource", "params", "size", "tracingContext", "getTracingContext", "getPrototypeOf", "metricsProperties", "_assign", "instanceId", "getPrototypeSpecificInstanceId", "info", "getResourceInfo", "links", "getResourceMetrics", "WeakRef", "set", "push", "length", "_clearResources", "_markResourceDirty", "createTraceSender", "TraceSender", "traceSpan", "span", "TracingSpan", "_flushSpan", "addLink", "parent", "child", "opts", "getDiagnostics", "fromEntries", "Array", "from", "entries", "map", "values", "filter", "INFO", "res", "options", "infoProperties", "value", "enum", "depth", "undefined", "err", "_opts", "getData", "getResourceId", "findResourcesByClassName", "findResourcesByAnnotation", "deref", "time", "performance", "now", "_tick", "_changed", "oldInfo", "areEqualShallow", "oldMetrics", "subscription", "flush", "runtimeSpan", "serialize", "_clearSpans", "_markSpanDirty", "dirtyResources", "add", "dirtySpans", "shift", "delete", "newLogs", "nextId", "_traceProcessor", "parentId", "endTs", "error", "_ctx", "methodName", "startTs", "_showInBrowserTimeline", "showInBrowserTimeline", "parentCtx", "derive", "attributes", "TRACE_SPAN_ATTRIBUTE", "getAttribute", "ctx", "markSuccess", "_markInBrowserTimeline", "markError", "serializeError", "toFixed", "measure", "start", "end", "Error", "String", "TRACE_PROCESSOR", "globalThis", "traceProcessor", "resourceEntry", "toJSON", "isSetLike", "isMapLike", "isArray", "item", "truncate", "toString", "a", "b", "SANITIZE_REGEX", "m", "match", "slice", "resource", "options", "constructor", "klass", "rest", "TRACE_PROCESSOR", "createTraceResource", "annotation", "instance", "Object", "defineProperty", "value", "name", "info", "opts", "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", "diagnostic", "params", "diagnostics", "registerDiagnostic", "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", "MapCounter", "BaseCounter", "constructor", "units", "values", "Map", "inc", "key", "by", "prev", "get", "set", "getData", "name", "multiCounter", "records", "Array", "from", "entries", "map", "value", "trace", "diagnostic", "id", "name", "fetch", "platform", "globalThis", "process", "arch", "versions", "href", "location"]
7
7
  }
@@ -1 +1 @@
1
- {"inputs":{"packages/common/tracing/src/symbols.ts":{"bytes":1811,"imports":[],"format":"esm"},"packages/common/tracing/src/util.ts":{"bytes":782,"imports":[],"format":"esm"},"packages/common/tracing/src/diagnostic.ts":{"bytes":7709,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"packages/common/tracing/src/util.ts","kind":"import-statement","original":"./util"}],"format":"esm"},"packages/common/tracing/src/diagnostics-channel.ts":{"bytes":14753,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"packages/common/tracing/src/diagnostic.ts","kind":"import-statement","original":"./diagnostic"},{"path":"packages/common/tracing/src/util.ts","kind":"import-statement","original":"./util"}],"format":"esm"},"packages/common/tracing/src/trace-sender.ts":{"bytes":10386,"imports":[{"path":"@dxos/codec-protobuf","kind":"import-statement","external":true}],"format":"esm"},"packages/common/tracing/src/trace-processor.ts":{"bytes":52980,"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/diagnostic.ts","kind":"import-statement","original":"./diagnostic"},{"path":"packages/common/tracing/src/diagnostics-channel.ts","kind":"import-statement","original":"./diagnostics-channel"},{"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":10660,"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":1450,"imports":[],"format":"esm"},"packages/common/tracing/src/metrics/unary-counter.ts":{"bytes":2128,"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":4268,"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":5249,"imports":[{"path":"packages/common/tracing/src/metrics/base.ts","kind":"import-statement","original":"./base"}],"format":"esm"},"packages/common/tracing/src/metrics/map-counter.ts":{"bytes":2977,"imports":[{"path":"packages/common/tracing/src/metrics/base.ts","kind":"import-statement","original":"./base"}],"format":"esm"},"packages/common/tracing/src/metrics/index.ts":{"bytes":892,"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"},{"path":"packages/common/tracing/src/metrics/map-counter.ts","kind":"import-statement","original":"./map-counter"}],"format":"esm"},"packages/common/tracing/src/index.ts":{"bytes":2080,"imports":[{"path":"packages/common/tracing/src/api.ts","kind":"import-statement","original":"./api"},{"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":58262},"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/async","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/codec-protobuf","kind":"import-statement","external":true}],"exports":["BaseCounter","MapCounter","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":1757},"packages/common/tracing/src/symbols.ts":{"bytesInOutput":245},"packages/common/tracing/src/trace-processor.ts":{"bytesInOutput":12148},"packages/common/tracing/src/diagnostic.ts":{"bytesInOutput":1925},"packages/common/tracing/src/util.ts":{"bytesInOutput":58},"packages/common/tracing/src/diagnostics-channel.ts":{"bytesInOutput":3236},"packages/common/tracing/src/trace-sender.ts":{"bytesInOutput":2555},"packages/common/tracing/src/index.ts":{"bytesInOutput":284},"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},"packages/common/tracing/src/metrics/map-counter.ts":{"bytesInOutput":509}},"bytes":26246}}}
1
+ {"inputs":{"packages/common/tracing/src/symbols.ts":{"bytes":1811,"imports":[],"format":"esm"},"packages/common/tracing/src/util.ts":{"bytes":782,"imports":[],"format":"esm"},"packages/common/tracing/src/diagnostic.ts":{"bytes":8319,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"packages/common/tracing/src/util.ts","kind":"import-statement","original":"./util"}],"format":"esm"},"packages/common/tracing/src/diagnostics-channel.ts":{"bytes":14753,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"packages/common/tracing/src/diagnostic.ts","kind":"import-statement","original":"./diagnostic"},{"path":"packages/common/tracing/src/util.ts","kind":"import-statement","original":"./util"}],"format":"esm"},"packages/common/tracing/src/trace-sender.ts":{"bytes":10386,"imports":[{"path":"@dxos/codec-protobuf","kind":"import-statement","external":true}],"format":"esm"},"packages/common/tracing/src/trace-processor.ts":{"bytes":53540,"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/diagnostic.ts","kind":"import-statement","original":"./diagnostic"},{"path":"packages/common/tracing/src/diagnostics-channel.ts","kind":"import-statement","original":"./diagnostics-channel"},{"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":10660,"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":1450,"imports":[],"format":"esm"},"packages/common/tracing/src/metrics/unary-counter.ts":{"bytes":2128,"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":4268,"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":5249,"imports":[{"path":"packages/common/tracing/src/metrics/base.ts","kind":"import-statement","original":"./base"}],"format":"esm"},"packages/common/tracing/src/metrics/map-counter.ts":{"bytes":2977,"imports":[{"path":"packages/common/tracing/src/metrics/base.ts","kind":"import-statement","original":"./base"}],"format":"esm"},"packages/common/tracing/src/metrics/index.ts":{"bytes":892,"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"},{"path":"packages/common/tracing/src/metrics/map-counter.ts","kind":"import-statement","original":"./map-counter"}],"format":"esm"},"packages/common/tracing/src/index.ts":{"bytes":2174,"imports":[{"path":"packages/common/tracing/src/api.ts","kind":"import-statement","original":"./api"},{"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"},{"path":"packages/common/tracing/src/diagnostic.ts","kind":"import-statement","original":"./diagnostic"}],"format":"esm"}},"outputs":{"packages/common/tracing/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":58917},"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/async","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/codec-protobuf","kind":"import-statement","external":true}],"exports":["BaseCounter","DIAGNOSTICS_TIMEOUT","DiagnosticsManager","MapCounter","ResourceEntry","TRACE_PROCESSOR","TRACE_SPAN_ATTRIBUTE","TimeSeriesCounter","TimeUsageCounter","TraceDiagnosticImpl","TraceProcessor","TraceSender","TracingSpan","UnaryCounter","getTracingContext","sanitizeClassName","symbolTracingContext","trace"],"entryPoint":"packages/common/tracing/src/index.ts","inputs":{"packages/common/tracing/src/api.ts":{"bytesInOutput":1757},"packages/common/tracing/src/symbols.ts":{"bytesInOutput":245},"packages/common/tracing/src/trace-processor.ts":{"bytesInOutput":12277},"packages/common/tracing/src/diagnostic.ts":{"bytesInOutput":2050},"packages/common/tracing/src/util.ts":{"bytesInOutput":58},"packages/common/tracing/src/diagnostics-channel.ts":{"bytesInOutput":3236},"packages/common/tracing/src/trace-sender.ts":{"bytesInOutput":2555},"packages/common/tracing/src/index.ts":{"bytesInOutput":284},"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},"packages/common/tracing/src/metrics/map-counter.ts":{"bytesInOutput":509}},"bytes":26568}}}
@@ -19,12 +19,15 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
19
19
  var node_exports = {};
20
20
  __export(node_exports, {
21
21
  BaseCounter: () => BaseCounter,
22
+ DIAGNOSTICS_TIMEOUT: () => DIAGNOSTICS_TIMEOUT,
23
+ DiagnosticsManager: () => DiagnosticsManager,
22
24
  MapCounter: () => MapCounter,
23
25
  ResourceEntry: () => ResourceEntry,
24
26
  TRACE_PROCESSOR: () => TRACE_PROCESSOR,
25
27
  TRACE_SPAN_ATTRIBUTE: () => TRACE_SPAN_ATTRIBUTE,
26
28
  TimeSeriesCounter: () => TimeSeriesCounter,
27
29
  TimeUsageCounter: () => TimeUsageCounter,
30
+ TraceDiagnosticImpl: () => TraceDiagnosticImpl,
28
31
  TraceProcessor: () => TraceProcessor,
29
32
  TraceSender: () => TraceSender,
30
33
  TracingSpan: () => TracingSpan,
@@ -70,6 +73,10 @@ var DiagnosticsManager = class {
70
73
  constructor() {
71
74
  this.instanceId = createId();
72
75
  this.registry = /* @__PURE__ */ new Map();
76
+ this._instanceTag = null;
77
+ }
78
+ setInstanceTag(tag) {
79
+ this._instanceTag = tag;
73
80
  }
74
81
  registerDiagnostic(params) {
75
82
  const impl = new TraceDiagnosticImpl(params.id, params.fetch, params.name ?? params.id, () => {
@@ -84,13 +91,14 @@ var DiagnosticsManager = class {
84
91
  return Array.from(this.registry.values()).map((diagnostic2) => ({
85
92
  id: diagnostic2.id,
86
93
  instanceId: this.instanceId,
94
+ instanceTag: this._instanceTag,
87
95
  name: diagnostic2.name
88
96
  }));
89
97
  }
90
98
  async fetch(request) {
91
99
  (0, import_invariant.invariant)(request.instanceId === this.instanceId, "Invalid instance id", {
92
100
  F: __dxlog_file,
93
- L: 68,
101
+ L: 76,
94
102
  S: this,
95
103
  A: [
96
104
  "request.instanceId === this.instanceId",
@@ -101,7 +109,7 @@ var DiagnosticsManager = class {
101
109
  const diagnostic2 = this.registry.get(id);
102
110
  (0, import_invariant.invariant)(diagnostic2, "Diagnostic not found", {
103
111
  F: __dxlog_file,
104
- L: 71,
112
+ L: 79,
105
113
  S: this,
106
114
  A: [
107
115
  "diagnostic",
@@ -345,6 +353,7 @@ var TraceProcessor = class {
345
353
  this.spans = /* @__PURE__ */ new Map();
346
354
  this.spanIdList = [];
347
355
  this.logs = [];
356
+ this._instanceTag = null;
348
357
  this._logProcessor = (config, entry) => {
349
358
  switch (entry.level) {
350
359
  case import_log.LogLevel.ERROR:
@@ -378,7 +387,7 @@ var TraceProcessor = class {
378
387
  };
379
388
  import_log.log.addProcessor(this._logProcessor.bind(this), void 0, {
380
389
  F: __dxlog_file2,
381
- L: 92,
390
+ L: 94,
382
391
  S: this,
383
392
  C: (f, a) => f(...a)
384
393
  });
@@ -387,6 +396,10 @@ var TraceProcessor = class {
387
396
  this.diagnosticsChannel.serve(this.diagnostics);
388
397
  this.diagnosticsChannel.unref();
389
398
  }
399
+ setInstanceTag(tag) {
400
+ this._instanceTag = tag;
401
+ this.diagnostics.setInstanceTag(tag);
402
+ }
390
403
  /**
391
404
  * @internal
392
405
  */
@@ -755,13 +768,13 @@ var diagnostic = (params) => {
755
768
  return TRACE_PROCESSOR.diagnostics.registerDiagnostic(params);
756
769
  };
757
770
  var trace = {
758
- resource,
771
+ addLink,
772
+ diagnostic,
759
773
  info,
760
774
  mark,
761
- span,
762
775
  metricsCounter,
763
- addLink,
764
- diagnostic
776
+ resource,
777
+ span
765
778
  };
766
779
  var BaseCounter = class {
767
780
  /**
@@ -919,12 +932,15 @@ trace.diagnostic({
919
932
  // Annotate the CommonJS export names for ESM import in node:
920
933
  0 && (module.exports = {
921
934
  BaseCounter,
935
+ DIAGNOSTICS_TIMEOUT,
936
+ DiagnosticsManager,
922
937
  MapCounter,
923
938
  ResourceEntry,
924
939
  TRACE_PROCESSOR,
925
940
  TRACE_SPAN_ATTRIBUTE,
926
941
  TimeSeriesCounter,
927
942
  TimeUsageCounter,
943
+ TraceDiagnosticImpl,
928
944
  TraceProcessor,
929
945
  TraceSender,
930
946
  TracingSpan,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/api.ts", "../../../src/symbols.ts", "../../../src/trace-processor.ts", "../../../src/diagnostic.ts", "../../../src/util.ts", "../../../src/diagnostics-channel.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", "../../../src/metrics/map-counter.ts", "../../../src/index.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Context } from '@dxos/context';\nimport { type MaybePromise } from '@dxos/util';\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 (options?: { annotation?: symbol }) =>\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.createTraceResource({ constructor, annotation: options?.annotation, instance: this });\n }\n })();\n Object.defineProperty(klass, 'name', { value: constructor.name });\n return klass;\n };\n\nexport type InfoOptions = {\n /**\n * Value is of enum type and should be converted to string.\n *\n * Example:\n *\n * ```ts\n * @trace.info({ enum: SpaceState })\n * get state(): SpaceState { ... }\n * ```\n */\n enum?: Record<string, any>;\n\n /**\n * Max depth of the object to be included in the resource info section.\n *\n * null means no limit (a limit of 8 nested objects is still imposed).\n *\n * Default: 0 - objects will be stringified with toString.\n */\n depth?: number | null;\n};\n\n/**\n * Marks a property or a method to be included in the resource info section.\n */\nconst info =\n (opts: InfoOptions = {}) =>\n (target: any, propertyKey: string, descriptor?: PropertyDescriptor) => {\n getTracingContext(target).infoProperties[propertyKey] = { options: opts };\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 type TraceDiagnosticParams<T> = {\n /**\n * Unique ID.\n */\n id: string;\n\n /**\n * Human-readable name.\n * @defaults Defaults to `id`\n */\n name?: string;\n\n /**\n * Function that will be called to fetch the diagnostic data.\n */\n fetch: () => MaybePromise<T>;\n};\n\nexport interface TraceDiagnostic {\n id: string;\n unregister(): void;\n}\n\n/**\n * Register a diagnostic that could be queried.\n */\nconst diagnostic = <T>(params: TraceDiagnosticParams<T>): TraceDiagnostic => {\n return TRACE_PROCESSOR.diagnostics.registerDiagnostic(params);\n};\n\nexport const trace = {\n resource,\n info,\n mark,\n span,\n metricsCounter,\n\n addLink,\n\n diagnostic,\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type InfoOptions } from './api';\n\nexport const symbolTracingContext = Symbol('dxos.tracing.context');\n\nexport type TracingContext = {\n infoProperties: Record<\n string,\n {\n options: InfoOptions;\n }\n >;\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 { type Context } from '@dxos/context';\nimport { LogLevel, type LogProcessor, getContextFromEntry, log } from '@dxos/log';\nimport { type LogEntry } from '@dxos/protocols/proto/dxos/client/services';\nimport { type Error as SerializedError } from '@dxos/protocols/proto/dxos/error';\nimport { type Metric, type Resource, type Span } from '@dxos/protocols/proto/dxos/tracing';\nimport { getPrototypeSpecificInstanceId } from '@dxos/util';\n\nimport type { AddLinkOptions } from './api';\nimport { DiagnosticsManager } from './diagnostic';\nimport { DiagnosticsChannel } from './diagnostics-channel';\nimport { type BaseCounter } from './metrics';\nimport { TRACE_SPAN_ATTRIBUTE, getTracingContext } from './symbols';\nimport { TraceSender } from './trace-sender';\n\nexport type Diagnostics = {\n resources: Record<string, Resource>;\n spans: Span[];\n logs: LogEntry[];\n};\n\nexport type TraceResourceConstructorParams = {\n constructor: { new (...args: any[]): {} };\n instance: any;\n annotation?: symbol;\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(\n public readonly data: Resource,\n public readonly instance: WeakRef<any>,\n public readonly annotation?: symbol,\n ) {\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 = 2_000;\nconst MAX_SPAN_RECORDS = 1_000;\nconst MAX_LOG_RECORDS = 1_000;\n\nconst REFRESH_INTERVAL = 1_000;\n\nconst MAX_INFO_OBJECT_DEPTH = 8;\n\nexport class TraceProcessor {\n public readonly diagnostics = new DiagnosticsManager();\n public readonly diagnosticsChannel = new DiagnosticsChannel();\n\n readonly subscriptions: Set<TraceSubscription> = new Set();\n\n readonly resources = new Map<number, ResourceEntry>();\n readonly resourceInstanceIndex = new WeakMap<any, ResourceEntry>();\n readonly resourceIdList: number[] = [];\n\n readonly spans = new Map<number, Span>();\n readonly spanIdList: number[] = [];\n\n readonly logs: LogEntry[] = [];\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 this.diagnosticsChannel.serve(this.diagnostics);\n this.diagnosticsChannel.unref();\n }\n\n /**\n * @internal\n */\n // TODO(burdon): Comment.\n createTraceResource(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 params.annotation,\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\n this._markResourceDirty(id);\n }\n\n createTraceSender() {\n return new TraceSender(this);\n }\n\n traceSpan(params: TraceSpanParams): TracingSpan {\n const span = new TracingSpan(this, params);\n this._flushSpan(span);\n return span;\n }\n\n // TODO(burdon): Not implemented.\n addLink(parent: any, child: any, opts: AddLinkOptions) {}\n\n //\n // Getters\n //\n\n // TODO(burdon): Define type.\n // TODO(burdon): Reconcile with system service.\n getDiagnostics(): Diagnostics {\n this.refresh();\n\n return {\n resources: Object.fromEntries(\n Array.from(this.resources.entries()).map(([id, entry]) => [\n `${entry.sanitizedClassName}#${entry.data.instanceId}`,\n entry.data,\n ]),\n ),\n spans: Array.from(this.spans.values()),\n logs: this.logs.filter((log) => log.level >= LogLevel.INFO),\n };\n }\n\n getResourceInfo(instance: any): Record<string, any> {\n const res: Record<string, any> = {};\n const tracingContext = getTracingContext(Object.getPrototypeOf(instance));\n for (const [key, { options }] of Object.entries(tracingContext.infoProperties)) {\n try {\n const value = typeof instance[key] === 'function' ? instance[key]() : instance[key];\n if (options.enum) {\n res[key] = options.enum[value];\n } else {\n res[key] = sanitizeValue(\n value,\n options.depth === undefined ? 1 : options.depth ?? MAX_INFO_OBJECT_DEPTH,\n this,\n );\n }\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 for (const [key, _opts] of Object.entries(tracingContext.metricsProperties)) {\n res.push(instance[key].getData());\n }\n\n return res;\n }\n\n getResourceId(instance: any): number | null {\n const entry = this.resourceInstanceIndex.get(instance);\n return entry ? entry.data.id : null;\n }\n\n findResourcesByClassName(className: string): ResourceEntry[] {\n return [...this.resources.values()].filter(\n (res) => res.data.className === className || res.sanitizedClassName === className,\n );\n }\n\n findResourcesByAnnotation(annotation: symbol): ResourceEntry[] {\n return [...this.resources.values()].filter((res) => res.annotation === annotation);\n }\n\n refresh() {\n for (const resource of this.resources.values()) {\n const instance = resource.instance.deref();\n if (!instance) {\n continue;\n }\n\n const tracingContext = getTracingContext(Object.getPrototypeOf(instance));\n const time = performance.now();\n for (const key of Object.keys(tracingContext.metricsProperties)) {\n (instance[key] as BaseCounter)._tick?.(time);\n }\n\n let _changed = false;\n\n const oldInfo = resource.data.info;\n resource.data.info = this.getResourceInfo(instance);\n _changed ||= !areEqualShallow(oldInfo, resource.data.info);\n\n const oldMetrics = resource.data.metrics;\n resource.data.metrics = this.getResourceMetrics(instance);\n _changed ||= !areEqualShallow(oldMetrics, resource.data.metrics);\n\n // TODO(dmaretskyi): Test if works and enable.\n // if (changed) {\n this._markResourceDirty(resource.data.id);\n // }\n }\n\n for (const subscription of this.subscriptions) {\n subscription.flush();\n }\n }\n\n //\n // Implementation\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 for (const key of Object.keys(context)) {\n context[key] = sanitizeValue(context[key], 0, this);\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\n// TODO(burdon): Comment.\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(\n private _traceProcessor: TraceProcessor,\n params: TraceSpanParams,\n ) {\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\n// TODO(burdon): Log cause.\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\n// TODO(burdon): Rename singleton and move out of package.\nexport const TRACE_PROCESSOR: TraceProcessor = ((globalThis as any).TRACE_PROCESSOR ??= new TraceProcessor());\n\nconst sanitizeValue = (value: any, depth: number, traceProcessor: TraceProcessor): any => {\n switch (typeof value) {\n case 'string':\n case 'number':\n case 'boolean':\n case 'undefined':\n return value;\n case 'object':\n case 'function':\n if (value === null) {\n return value;\n }\n\n {\n const resourceEntry = traceProcessor.resourceInstanceIndex.get(value);\n if (resourceEntry) {\n return `${resourceEntry.sanitizedClassName}#${resourceEntry.data.instanceId}`;\n }\n }\n\n if (typeof value.toJSON === 'function') {\n // TODO(dmaretskyi): This has potential to cause infinite recursion.\n return sanitizeValue(value.toJSON(), depth, traceProcessor);\n }\n\n if (depth > 0) {\n if (isSetLike(value)) {\n return Object.fromEntries(\n Array.from(value.entries()).map((value) => sanitizeValue(value, depth - 1, traceProcessor)),\n );\n } else if (isMapLike(value)) {\n return Object.fromEntries(\n Array.from(value.entries()).map(([key, value]) => [key, sanitizeValue(value, depth - 1, traceProcessor)]),\n );\n } else if (Array.isArray(value)) {\n return value.map((item: any) => sanitizeValue(item, depth - 1, traceProcessor));\n } else if (typeof value === 'object') {\n const res: any = {};\n for (const key of Object.keys(value)) {\n res[key] = sanitizeValue(value[key], depth - 1, traceProcessor);\n }\n return res;\n }\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\nconst isSetLike = (value: any): value is Set<any> =>\n value instanceof Set ||\n (typeof value === 'object' && value !== null && Object.getPrototypeOf(value).constructor.name === 'ComplexSet');\n\nconst isMapLike = (value: any): value is Map<any, any> =>\n value instanceof Map ||\n (typeof value === 'object' && value !== null && Object.getPrototypeOf(value).constructor.name === 'ComplexMap');\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { asyncTimeout } from '@dxos/async';\nimport { invariant } from '@dxos/invariant';\n\nimport { type TraceDiagnosticParams, type TraceDiagnostic } from './api';\nimport { createId } from './util';\n\nexport const DIAGNOSTICS_TIMEOUT = 10_000;\n\nexport type DiagnosticMetadata = {\n id: string;\n instanceId: string;\n name: string;\n};\n\nexport type DiagnosticsRequest = {\n id: string;\n instanceId: string;\n};\n\nexport type DiagnosticsData = {\n id: string;\n instanceId: string;\n data: any;\n error?: string;\n};\n\nexport class TraceDiagnosticImpl implements TraceDiagnostic {\n constructor(\n public id: string,\n public fetch: () => any,\n public name: string,\n private readonly _onUnregister: () => void,\n ) {}\n\n unregister(): void {\n this._onUnregister();\n }\n}\n\nexport class DiagnosticsManager {\n readonly instanceId = createId();\n\n readonly registry = new Map<string, TraceDiagnosticImpl>();\n\n registerDiagnostic(params: TraceDiagnosticParams<any>): TraceDiagnostic {\n const impl = new TraceDiagnosticImpl(params.id, params.fetch, params.name ?? params.id, () => {\n if (this.registry.get(params.id) === impl) {\n this.registry.delete(params.id);\n }\n });\n this.registry.set(params.id, impl);\n return impl;\n }\n\n list(): DiagnosticMetadata[] {\n return Array.from(this.registry.values()).map((diagnostic) => ({\n id: diagnostic.id,\n instanceId: this.instanceId,\n name: diagnostic.name,\n }));\n }\n\n async fetch(request: DiagnosticsRequest): Promise<DiagnosticsData> {\n invariant(request.instanceId === this.instanceId, 'Invalid instance id');\n const { id } = request;\n const diagnostic = this.registry.get(id);\n invariant(diagnostic, 'Diagnostic not found');\n try {\n const data = await asyncTimeout(diagnostic.fetch(), DIAGNOSTICS_TIMEOUT);\n return {\n id,\n instanceId: this.instanceId,\n data,\n };\n } catch (err: any) {\n return {\n id,\n instanceId: this.instanceId,\n data: null,\n error: err.stack,\n };\n }\n }\n}\n", "// TODO(dmaretskyi): Use UUID.\n//\n// Copyright 2024 DXOS.org\n//\n\nexport const createId = () => Math.random().toString(36).slice(2);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Trigger, sleep } from '@dxos/async';\nimport { Context } from '@dxos/context';\n\nimport {\n DIAGNOSTICS_TIMEOUT,\n type DiagnosticMetadata,\n type DiagnosticsData,\n type DiagnosticsManager,\n type DiagnosticsRequest,\n} from './diagnostic';\nimport { createId } from './util';\n\nconst DEFAULT_CHANNEL_NAME = 'dxos-diagnostics';\n\nconst DISCOVER_TIME = 500;\n\nexport type DiagnosticChannelMessage =\n | {\n type: 'DIAGNOSTICS_DISCOVER';\n }\n | {\n type: 'DIAGNOSTICS_ANNOUNCE';\n diagnostics: DiagnosticMetadata[];\n }\n | {\n type: 'DIAGNOSTICS_FETCH';\n requestId: string;\n request: DiagnosticsRequest;\n }\n | {\n type: 'DIAGNOSTICS_RESPONSE';\n requestId: string;\n data: DiagnosticsData;\n };\n\nexport class DiagnosticsChannel {\n private _ctx = new Context();\n\n // Separate channels becauase the client and server may be in the same process.\n private readonly _serveChannel: BroadcastChannel;\n private readonly _clientChannel: BroadcastChannel;\n\n constructor(private readonly _channelName: string = DEFAULT_CHANNEL_NAME) {\n this._serveChannel = new BroadcastChannel(_channelName);\n this._clientChannel = new BroadcastChannel(_channelName);\n }\n\n destroy() {\n void this._ctx.dispose();\n this._serveChannel.close();\n this._clientChannel.close();\n }\n\n /**\n * In node.js, the channel will keep the process alive.\n * This method allows the process to exit.\n * Noop in the browser.\n */\n unref() {\n if (typeof (this._serveChannel as any).unref === 'function') {\n (this._serveChannel as any).unref();\n (this._clientChannel as any).unref();\n }\n }\n\n serve(manager: DiagnosticsManager) {\n const listener = async (event: MessageEvent) => {\n switch (event.data.type) {\n case 'DIAGNOSTICS_DISCOVER': {\n const diagnostics = manager.list();\n this._serveChannel.postMessage({\n type: 'DIAGNOSTICS_ANNOUNCE',\n diagnostics,\n } satisfies DiagnosticChannelMessage);\n break;\n }\n case 'DIAGNOSTICS_FETCH': {\n const { requestId, request } = event.data;\n if (request.instanceId !== manager.instanceId) {\n break;\n }\n\n const data = await manager.fetch(request);\n this._serveChannel.postMessage({\n type: 'DIAGNOSTICS_RESPONSE',\n requestId,\n data,\n } satisfies DiagnosticChannelMessage);\n break;\n }\n }\n };\n\n this._serveChannel.addEventListener('message', listener);\n this._ctx.onDispose(() => this._serveChannel.removeEventListener('message', listener));\n }\n\n async discover(): Promise<DiagnosticMetadata[]> {\n const diagnostics: DiagnosticMetadata[] = [];\n\n const collector = (event: MessageEvent) => {\n const data = event.data as DiagnosticChannelMessage;\n switch (data.type) {\n case 'DIAGNOSTICS_ANNOUNCE':\n diagnostics.push(...data.diagnostics);\n break;\n }\n };\n\n try {\n this._clientChannel.addEventListener('message', collector);\n this._clientChannel.postMessage({ type: 'DIAGNOSTICS_DISCOVER' } satisfies DiagnosticChannelMessage);\n\n await sleep(DISCOVER_TIME);\n\n // Dedup.\n const result: DiagnosticMetadata[] = [];\n for (const diagnostic of diagnostics) {\n if (!result.some((d) => d.id === diagnostic.id && d.instanceId === diagnostic.instanceId)) {\n result.push(diagnostic);\n }\n }\n\n return diagnostics;\n } finally {\n this._clientChannel.removeEventListener('message', collector);\n }\n }\n\n async fetch(request: DiagnosticsRequest): Promise<DiagnosticsData> {\n const requestId = createId();\n\n const trigger = new Trigger<DiagnosticsData>();\n const listener = (event: MessageEvent) => {\n const data = event.data as DiagnosticChannelMessage;\n if (data.type === 'DIAGNOSTICS_RESPONSE' && data.requestId === requestId) {\n trigger.wake(data.data);\n }\n };\n\n try {\n this._clientChannel.addEventListener('message', listener);\n this._clientChannel.postMessage({\n type: 'DIAGNOSTICS_FETCH',\n requestId,\n request,\n } satisfies DiagnosticChannelMessage);\n\n // NOTE: Must have await keyword in this block.\n const result = await trigger.wait({ timeout: DIAGNOSTICS_TIMEOUT });\n\n return result;\n } finally {\n this._clientChannel.removeEventListener('message', listener);\n }\n }\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Stream } from '@dxos/codec-protobuf';\nimport { type LogEntry } from '@dxos/protocols/proto/dxos/client/services';\nimport { type StreamTraceEvent, type TracingService } from '@dxos/protocols/proto/dxos/tracing';\n\nimport { type TraceProcessor, type 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 { type 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 { type 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 { type 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 { type 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", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Metric } from '@dxos/protocols/proto/dxos/tracing';\n\nimport { BaseCounter } from './base';\n\nexport class MapCounter extends BaseCounter {\n values = new Map<string, number>();\n units?: string;\n\n constructor({ units }: { units?: string } = {}) {\n super();\n this.units = units;\n }\n\n inc(key: string, by = 1) {\n const prev = this.values.get(key) ?? 0;\n this.values.set(key, prev + by);\n }\n\n getData(): Metric {\n return {\n name: this.name!,\n multiCounter: {\n records: Array.from(this.values.entries()).map(([key, value]) => ({\n key,\n value,\n })),\n units: this.units,\n },\n };\n }\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { trace } from './api';\n\nexport * from './api';\nexport * from './symbols';\nexport * from './trace-processor';\nexport * from './trace-sender';\nexport * from './metrics';\n\ntrace.diagnostic({\n id: 'process-info',\n name: 'Process Info',\n fetch: async () => {\n return {\n platform: globalThis.process?.platform,\n arch: globalThis.process?.arch,\n versions: globalThis.process?.versions,\n href: globalThis.location?.href,\n };\n },\n});\n"],
5
- "mappings": "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",
6
- "names": ["import_async", "import_context", "symbolTracingContext", "Symbol", "getTracingContext", "target", "infoProperties", "metricsProperties", "TRACE_SPAN_ATTRIBUTE", "createId", "Math", "random", "toString", "slice", "DIAGNOSTICS_TIMEOUT", "TraceDiagnosticImpl", "constructor", "id", "fetch", "name", "_onUnregister", "unregister", "DiagnosticsManager", "instanceId", "registry", "Map", "registerDiagnostic", "params", "impl", "get", "delete", "set", "list", "Array", "from", "values", "map", "diagnostic", "request", "invariant", "data", "asyncTimeout", "err", "error", "stack", "DEFAULT_CHANNEL_NAME", "DISCOVER_TIME", "DiagnosticsChannel", "_channelName", "_ctx", "Context", "_serveChannel", "BroadcastChannel", "_clientChannel", "destroy", "dispose", "close", "unref", "serve", "manager", "listener", "event", "type", "diagnostics", "postMessage", "requestId", "addEventListener", "onDispose", "removeEventListener", "discover", "collector", "push", "sleep", "result", "some", "d", "trigger", "Trigger", "wake", "wait", "timeout", "TraceSender", "_traceProcessor", "streamTrace", "Stream", "ctx", "next", "flushEvents", "resources", "spans", "logs", "resourceAdded", "resourceRemoved", "spanAdded", "logAdded", "entry", "resource", "span", "log", "length", "flush", "subscription", "dirtyResources", "dirtySpans", "newLogs", "clear", "Set", "subscriptions", "add", "ResourceEntry", "instance", "annotation", "sanitizedClassName", "sanitizeClassName", "className", "getMetric", "metrics", "find", "metric", "MAX_RESOURCE_RECORDS", "MAX_SPAN_RECORDS", "MAX_LOG_RECORDS", "REFRESH_INTERVAL", "MAX_INFO_OBJECT_DEPTH", "TraceProcessor", "diagnosticsChannel", "resourceInstanceIndex", "WeakMap", "resourceIdList", "spanIdList", "_logProcessor", "config", "level", "LogLevel", "ERROR", "WARN", "TRACE", "scope", "meta", "S", "context", "getContextFromEntry", "key", "Object", "keys", "sanitizeValue", "entryToPush", "message", "timestamp", "Date", "file", "F", "line", "L", "resourceId", "_pushLog", "addProcessor", "bind", "refreshInterval", "setInterval", "refresh", "unrefTimeout", "createTraceResource", "size", "tracingContext", "getPrototypeOf", "_assign", "getPrototypeSpecificInstanceId", "info", "getResourceInfo", "links", "getResourceMetrics", "WeakRef", "_clearResources", "_markResourceDirty", "createTraceSender", "traceSpan", "TracingSpan", "_flushSpan", "addLink", "parent", "child", "opts", "getDiagnostics", "fromEntries", "entries", "filter", "INFO", "res", "options", "value", "enum", "depth", "undefined", "_opts", "getData", "getResourceId", "findResourcesByClassName", "findResourcesByAnnotation", "deref", "time", "performance", "now", "_tick", "_changed", "oldInfo", "areEqualShallow", "oldMetrics", "runtimeSpan", "serialize", "_clearSpans", "_markSpanDirty", "shift", "nextId", "parentId", "endTs", "methodName", "startTs", "_showInBrowserTimeline", "showInBrowserTimeline", "parentCtx", "derive", "attributes", "getAttribute", "markSuccess", "_markInBrowserTimeline", "markError", "serializeError", "toFixed", "measure", "start", "end", "Error", "String", "TRACE_PROCESSOR", "globalThis", "traceProcessor", "resourceEntry", "toJSON", "isSetLike", "isMapLike", "isArray", "item", "truncate", "a", "b", "SANITIZE_REGEX", "m", "match", "klass", "rest", "defineProperty", "propertyKey", "descriptor", "mark", "method", "args", "callArgs", "apply", "metricsCounter", "trace", "BaseCounter", "_instance", "UnaryCounter", "units", "inc", "by", "counter", "MAX_BUCKETS", "TimeSeriesCounter", "_currentValue", "_totalValue", "_buckets", "timeSeries", "tracks", "points", "index", "total", "TimeUsageCounter", "_lastTickTime", "record", "beginRecording", "delta", "percentage", "MapCounter", "prev", "multiCounter", "records", "platform", "process", "arch", "versions", "href", "location"]
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Context } from '@dxos/context';\nimport { type MaybePromise } from '@dxos/util';\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 (options?: { annotation?: symbol }) =>\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.createTraceResource({ constructor, annotation: options?.annotation, instance: this });\n }\n })();\n Object.defineProperty(klass, 'name', { value: constructor.name });\n return klass;\n };\n\nexport type InfoOptions = {\n /**\n * Value is of enum type and should be converted to string.\n *\n * Example:\n *\n * ```ts\n * @trace.info({ enum: SpaceState })\n * get state(): SpaceState { ... }\n * ```\n */\n enum?: Record<string, any>;\n\n /**\n * Max depth of the object to be included in the resource info section.\n *\n * null means no limit (a limit of 8 nested objects is still imposed).\n *\n * Default: 0 - objects will be stringified with toString.\n */\n depth?: number | null;\n};\n\n/**\n * Marks a property or a method to be included in the resource info section.\n */\nconst info =\n (opts: InfoOptions = {}) =>\n (target: any, propertyKey: string, descriptor?: PropertyDescriptor) => {\n getTracingContext(target).infoProperties[propertyKey] = { options: opts };\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 type TraceDiagnosticParams<T> = {\n /**\n * Unique ID.\n */\n id: string;\n\n /**\n * Human-readable name.\n * @defaults Defaults to `id`\n */\n name?: string;\n\n /**\n * Function that will be called to fetch the diagnostic data.\n */\n fetch: () => MaybePromise<T>;\n};\n\nexport interface TraceDiagnostic {\n id: string;\n unregister(): void;\n}\n\n/**\n * Register a diagnostic that could be queried.\n */\nconst diagnostic = <T>(params: TraceDiagnosticParams<T>): TraceDiagnostic => {\n return TRACE_PROCESSOR.diagnostics.registerDiagnostic(params);\n};\n\nexport const trace = {\n addLink,\n diagnostic,\n info,\n mark,\n metricsCounter,\n resource,\n span,\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type InfoOptions } from './api';\n\nexport const symbolTracingContext = Symbol('dxos.tracing.context');\n\nexport type TracingContext = {\n infoProperties: Record<\n string,\n {\n options: InfoOptions;\n }\n >;\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 { type Context } from '@dxos/context';\nimport { LogLevel, type LogProcessor, getContextFromEntry, log } from '@dxos/log';\nimport { type LogEntry } from '@dxos/protocols/proto/dxos/client/services';\nimport { type Error as SerializedError } from '@dxos/protocols/proto/dxos/error';\nimport { type Metric, type Resource, type Span } from '@dxos/protocols/proto/dxos/tracing';\nimport { getPrototypeSpecificInstanceId } from '@dxos/util';\n\nimport type { AddLinkOptions } from './api';\nimport { DiagnosticsManager } from './diagnostic';\nimport { DiagnosticsChannel } from './diagnostics-channel';\nimport { type BaseCounter } from './metrics';\nimport { TRACE_SPAN_ATTRIBUTE, getTracingContext } from './symbols';\nimport { TraceSender } from './trace-sender';\n\nexport type Diagnostics = {\n resources: Record<string, Resource>;\n spans: Span[];\n logs: LogEntry[];\n};\n\nexport type TraceResourceConstructorParams = {\n constructor: { new (...args: any[]): {} };\n instance: any;\n annotation?: symbol;\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(\n public readonly data: Resource,\n public readonly instance: WeakRef<any>,\n public readonly annotation?: symbol,\n ) {\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 = 2_000;\nconst MAX_SPAN_RECORDS = 1_000;\nconst MAX_LOG_RECORDS = 1_000;\n\nconst REFRESH_INTERVAL = 1_000;\n\nconst MAX_INFO_OBJECT_DEPTH = 8;\n\nexport class TraceProcessor {\n public readonly diagnostics = new DiagnosticsManager();\n public readonly diagnosticsChannel = new DiagnosticsChannel();\n\n readonly subscriptions: Set<TraceSubscription> = new Set();\n\n readonly resources = new Map<number, ResourceEntry>();\n readonly resourceInstanceIndex = new WeakMap<any, ResourceEntry>();\n readonly resourceIdList: number[] = [];\n\n readonly spans = new Map<number, Span>();\n readonly spanIdList: number[] = [];\n\n readonly logs: LogEntry[] = [];\n\n private _instanceTag: string | null = null;\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 this.diagnosticsChannel.serve(this.diagnostics);\n this.diagnosticsChannel.unref();\n }\n\n setInstanceTag(tag: string) {\n this._instanceTag = tag;\n this.diagnostics.setInstanceTag(tag);\n }\n\n /**\n * @internal\n */\n // TODO(burdon): Comment.\n createTraceResource(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 params.annotation,\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\n this._markResourceDirty(id);\n }\n\n createTraceSender() {\n return new TraceSender(this);\n }\n\n traceSpan(params: TraceSpanParams): TracingSpan {\n const span = new TracingSpan(this, params);\n this._flushSpan(span);\n return span;\n }\n\n // TODO(burdon): Not implemented.\n addLink(parent: any, child: any, opts: AddLinkOptions) {}\n\n //\n // Getters\n //\n\n // TODO(burdon): Define type.\n // TODO(burdon): Reconcile with system service.\n getDiagnostics(): Diagnostics {\n this.refresh();\n\n return {\n resources: Object.fromEntries(\n Array.from(this.resources.entries()).map(([id, entry]) => [\n `${entry.sanitizedClassName}#${entry.data.instanceId}`,\n entry.data,\n ]),\n ),\n spans: Array.from(this.spans.values()),\n logs: this.logs.filter((log) => log.level >= LogLevel.INFO),\n };\n }\n\n getResourceInfo(instance: any): Record<string, any> {\n const res: Record<string, any> = {};\n const tracingContext = getTracingContext(Object.getPrototypeOf(instance));\n for (const [key, { options }] of Object.entries(tracingContext.infoProperties)) {\n try {\n const value = typeof instance[key] === 'function' ? instance[key]() : instance[key];\n if (options.enum) {\n res[key] = options.enum[value];\n } else {\n res[key] = sanitizeValue(\n value,\n options.depth === undefined ? 1 : options.depth ?? MAX_INFO_OBJECT_DEPTH,\n this,\n );\n }\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 for (const [key, _opts] of Object.entries(tracingContext.metricsProperties)) {\n res.push(instance[key].getData());\n }\n\n return res;\n }\n\n getResourceId(instance: any): number | null {\n const entry = this.resourceInstanceIndex.get(instance);\n return entry ? entry.data.id : null;\n }\n\n findResourcesByClassName(className: string): ResourceEntry[] {\n return [...this.resources.values()].filter(\n (res) => res.data.className === className || res.sanitizedClassName === className,\n );\n }\n\n findResourcesByAnnotation(annotation: symbol): ResourceEntry[] {\n return [...this.resources.values()].filter((res) => res.annotation === annotation);\n }\n\n refresh() {\n for (const resource of this.resources.values()) {\n const instance = resource.instance.deref();\n if (!instance) {\n continue;\n }\n\n const tracingContext = getTracingContext(Object.getPrototypeOf(instance));\n const time = performance.now();\n for (const key of Object.keys(tracingContext.metricsProperties)) {\n (instance[key] as BaseCounter)._tick?.(time);\n }\n\n let _changed = false;\n\n const oldInfo = resource.data.info;\n resource.data.info = this.getResourceInfo(instance);\n _changed ||= !areEqualShallow(oldInfo, resource.data.info);\n\n const oldMetrics = resource.data.metrics;\n resource.data.metrics = this.getResourceMetrics(instance);\n _changed ||= !areEqualShallow(oldMetrics, resource.data.metrics);\n\n // TODO(dmaretskyi): Test if works and enable.\n // if (changed) {\n this._markResourceDirty(resource.data.id);\n // }\n }\n\n for (const subscription of this.subscriptions) {\n subscription.flush();\n }\n }\n\n //\n // Implementation\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 for (const key of Object.keys(context)) {\n context[key] = sanitizeValue(context[key], 0, this);\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\n// TODO(burdon): Comment.\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(\n private _traceProcessor: TraceProcessor,\n params: TraceSpanParams,\n ) {\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\n// TODO(burdon): Log cause.\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\n// TODO(burdon): Rename singleton and move out of package.\nexport const TRACE_PROCESSOR: TraceProcessor = ((globalThis as any).TRACE_PROCESSOR ??= new TraceProcessor());\n\nconst sanitizeValue = (value: any, depth: number, traceProcessor: TraceProcessor): any => {\n switch (typeof value) {\n case 'string':\n case 'number':\n case 'boolean':\n case 'undefined':\n return value;\n case 'object':\n case 'function':\n if (value === null) {\n return value;\n }\n\n {\n const resourceEntry = traceProcessor.resourceInstanceIndex.get(value);\n if (resourceEntry) {\n return `${resourceEntry.sanitizedClassName}#${resourceEntry.data.instanceId}`;\n }\n }\n\n if (typeof value.toJSON === 'function') {\n // TODO(dmaretskyi): This has potential to cause infinite recursion.\n return sanitizeValue(value.toJSON(), depth, traceProcessor);\n }\n\n if (depth > 0) {\n if (isSetLike(value)) {\n return Object.fromEntries(\n Array.from(value.entries()).map((value) => sanitizeValue(value, depth - 1, traceProcessor)),\n );\n } else if (isMapLike(value)) {\n return Object.fromEntries(\n Array.from(value.entries()).map(([key, value]) => [key, sanitizeValue(value, depth - 1, traceProcessor)]),\n );\n } else if (Array.isArray(value)) {\n return value.map((item: any) => sanitizeValue(item, depth - 1, traceProcessor));\n } else if (typeof value === 'object') {\n const res: any = {};\n for (const key of Object.keys(value)) {\n res[key] = sanitizeValue(value[key], depth - 1, traceProcessor);\n }\n return res;\n }\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\nconst isSetLike = (value: any): value is Set<any> =>\n value instanceof Set ||\n (typeof value === 'object' && value !== null && Object.getPrototypeOf(value).constructor.name === 'ComplexSet');\n\nconst isMapLike = (value: any): value is Map<any, any> =>\n value instanceof Map ||\n (typeof value === 'object' && value !== null && Object.getPrototypeOf(value).constructor.name === 'ComplexMap');\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { asyncTimeout } from '@dxos/async';\nimport { invariant } from '@dxos/invariant';\n\nimport { type TraceDiagnosticParams, type TraceDiagnostic } from './api';\nimport { createId } from './util';\n\nexport const DIAGNOSTICS_TIMEOUT = 10_000;\n\nexport type DiagnosticMetadata = {\n id: string;\n instanceId: string;\n instanceTag: string | null;\n name: string;\n};\n\nexport type DiagnosticsRequest = {\n id: string;\n instanceId: string;\n};\n\nexport type DiagnosticsData = {\n id: string;\n instanceId: string;\n data: any;\n error?: string;\n};\n\nexport class TraceDiagnosticImpl implements TraceDiagnostic {\n constructor(\n public id: string,\n public fetch: () => any,\n public name: string,\n private readonly _onUnregister: () => void,\n ) {}\n\n unregister(): void {\n this._onUnregister();\n }\n}\n\nexport class DiagnosticsManager {\n readonly instanceId = createId();\n\n readonly registry = new Map<string, TraceDiagnosticImpl>();\n\n private _instanceTag: string | null = null;\n\n setInstanceTag(tag: string): void {\n this._instanceTag = tag;\n }\n\n registerDiagnostic(params: TraceDiagnosticParams<any>): TraceDiagnostic {\n const impl = new TraceDiagnosticImpl(params.id, params.fetch, params.name ?? params.id, () => {\n if (this.registry.get(params.id) === impl) {\n this.registry.delete(params.id);\n }\n });\n this.registry.set(params.id, impl);\n return impl;\n }\n\n list(): DiagnosticMetadata[] {\n return Array.from(this.registry.values()).map((diagnostic) => ({\n id: diagnostic.id,\n instanceId: this.instanceId,\n instanceTag: this._instanceTag,\n name: diagnostic.name,\n }));\n }\n\n async fetch(request: DiagnosticsRequest): Promise<DiagnosticsData> {\n invariant(request.instanceId === this.instanceId, 'Invalid instance id');\n const { id } = request;\n const diagnostic = this.registry.get(id);\n invariant(diagnostic, 'Diagnostic not found');\n try {\n const data = await asyncTimeout(diagnostic.fetch(), DIAGNOSTICS_TIMEOUT);\n return {\n id,\n instanceId: this.instanceId,\n data,\n };\n } catch (err: any) {\n return {\n id,\n instanceId: this.instanceId,\n data: null,\n error: err.stack,\n };\n }\n }\n}\n", "// TODO(dmaretskyi): Use UUID.\n//\n// Copyright 2024 DXOS.org\n//\n\nexport const createId = () => Math.random().toString(36).slice(2);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Trigger, sleep } from '@dxos/async';\nimport { Context } from '@dxos/context';\n\nimport {\n DIAGNOSTICS_TIMEOUT,\n type DiagnosticMetadata,\n type DiagnosticsData,\n type DiagnosticsManager,\n type DiagnosticsRequest,\n} from './diagnostic';\nimport { createId } from './util';\n\nconst DEFAULT_CHANNEL_NAME = 'dxos-diagnostics';\n\nconst DISCOVER_TIME = 500;\n\nexport type DiagnosticChannelMessage =\n | {\n type: 'DIAGNOSTICS_DISCOVER';\n }\n | {\n type: 'DIAGNOSTICS_ANNOUNCE';\n diagnostics: DiagnosticMetadata[];\n }\n | {\n type: 'DIAGNOSTICS_FETCH';\n requestId: string;\n request: DiagnosticsRequest;\n }\n | {\n type: 'DIAGNOSTICS_RESPONSE';\n requestId: string;\n data: DiagnosticsData;\n };\n\nexport class DiagnosticsChannel {\n private _ctx = new Context();\n\n // Separate channels becauase the client and server may be in the same process.\n private readonly _serveChannel: BroadcastChannel;\n private readonly _clientChannel: BroadcastChannel;\n\n constructor(private readonly _channelName: string = DEFAULT_CHANNEL_NAME) {\n this._serveChannel = new BroadcastChannel(_channelName);\n this._clientChannel = new BroadcastChannel(_channelName);\n }\n\n destroy() {\n void this._ctx.dispose();\n this._serveChannel.close();\n this._clientChannel.close();\n }\n\n /**\n * In node.js, the channel will keep the process alive.\n * This method allows the process to exit.\n * Noop in the browser.\n */\n unref() {\n if (typeof (this._serveChannel as any).unref === 'function') {\n (this._serveChannel as any).unref();\n (this._clientChannel as any).unref();\n }\n }\n\n serve(manager: DiagnosticsManager) {\n const listener = async (event: MessageEvent) => {\n switch (event.data.type) {\n case 'DIAGNOSTICS_DISCOVER': {\n const diagnostics = manager.list();\n this._serveChannel.postMessage({\n type: 'DIAGNOSTICS_ANNOUNCE',\n diagnostics,\n } satisfies DiagnosticChannelMessage);\n break;\n }\n case 'DIAGNOSTICS_FETCH': {\n const { requestId, request } = event.data;\n if (request.instanceId !== manager.instanceId) {\n break;\n }\n\n const data = await manager.fetch(request);\n this._serveChannel.postMessage({\n type: 'DIAGNOSTICS_RESPONSE',\n requestId,\n data,\n } satisfies DiagnosticChannelMessage);\n break;\n }\n }\n };\n\n this._serveChannel.addEventListener('message', listener);\n this._ctx.onDispose(() => this._serveChannel.removeEventListener('message', listener));\n }\n\n async discover(): Promise<DiagnosticMetadata[]> {\n const diagnostics: DiagnosticMetadata[] = [];\n\n const collector = (event: MessageEvent) => {\n const data = event.data as DiagnosticChannelMessage;\n switch (data.type) {\n case 'DIAGNOSTICS_ANNOUNCE':\n diagnostics.push(...data.diagnostics);\n break;\n }\n };\n\n try {\n this._clientChannel.addEventListener('message', collector);\n this._clientChannel.postMessage({ type: 'DIAGNOSTICS_DISCOVER' } satisfies DiagnosticChannelMessage);\n\n await sleep(DISCOVER_TIME);\n\n // Dedup.\n const result: DiagnosticMetadata[] = [];\n for (const diagnostic of diagnostics) {\n if (!result.some((d) => d.id === diagnostic.id && d.instanceId === diagnostic.instanceId)) {\n result.push(diagnostic);\n }\n }\n\n return diagnostics;\n } finally {\n this._clientChannel.removeEventListener('message', collector);\n }\n }\n\n async fetch(request: DiagnosticsRequest): Promise<DiagnosticsData> {\n const requestId = createId();\n\n const trigger = new Trigger<DiagnosticsData>();\n const listener = (event: MessageEvent) => {\n const data = event.data as DiagnosticChannelMessage;\n if (data.type === 'DIAGNOSTICS_RESPONSE' && data.requestId === requestId) {\n trigger.wake(data.data);\n }\n };\n\n try {\n this._clientChannel.addEventListener('message', listener);\n this._clientChannel.postMessage({\n type: 'DIAGNOSTICS_FETCH',\n requestId,\n request,\n } satisfies DiagnosticChannelMessage);\n\n // NOTE: Must have await keyword in this block.\n const result = await trigger.wait({ timeout: DIAGNOSTICS_TIMEOUT });\n\n return result;\n } finally {\n this._clientChannel.removeEventListener('message', listener);\n }\n }\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Stream } from '@dxos/codec-protobuf';\nimport { type LogEntry } from '@dxos/protocols/proto/dxos/client/services';\nimport { type StreamTraceEvent, type TracingService } from '@dxos/protocols/proto/dxos/tracing';\n\nimport { type TraceProcessor, type 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 { type 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 { type 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 { type 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 { type 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", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Metric } from '@dxos/protocols/proto/dxos/tracing';\n\nimport { BaseCounter } from './base';\n\nexport class MapCounter extends BaseCounter {\n values = new Map<string, number>();\n units?: string;\n\n constructor({ units }: { units?: string } = {}) {\n super();\n this.units = units;\n }\n\n inc(key: string, by = 1) {\n const prev = this.values.get(key) ?? 0;\n this.values.set(key, prev + by);\n }\n\n getData(): Metric {\n return {\n name: this.name!,\n multiCounter: {\n records: Array.from(this.values.entries()).map(([key, value]) => ({\n key,\n value,\n })),\n units: this.units,\n },\n };\n }\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { trace } from './api';\n\nexport * from './api';\nexport * from './symbols';\nexport * from './trace-processor';\nexport * from './trace-sender';\nexport * from './metrics';\nexport * from './diagnostic';\n\ntrace.diagnostic({\n id: 'process-info',\n name: 'Process Info',\n fetch: async () => {\n return {\n platform: globalThis.process?.platform,\n arch: globalThis.process?.arch,\n versions: globalThis.process?.versions,\n href: globalThis.location?.href,\n };\n },\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["import_async", "import_context", "symbolTracingContext", "Symbol", "getTracingContext", "target", "infoProperties", "metricsProperties", "TRACE_SPAN_ATTRIBUTE", "createId", "Math", "random", "toString", "slice", "DIAGNOSTICS_TIMEOUT", "TraceDiagnosticImpl", "constructor", "id", "fetch", "name", "_onUnregister", "unregister", "DiagnosticsManager", "instanceId", "registry", "Map", "_instanceTag", "setInstanceTag", "tag", "registerDiagnostic", "params", "impl", "get", "delete", "set", "list", "Array", "from", "values", "map", "diagnostic", "instanceTag", "request", "invariant", "data", "asyncTimeout", "err", "error", "stack", "DEFAULT_CHANNEL_NAME", "DISCOVER_TIME", "DiagnosticsChannel", "_channelName", "_ctx", "Context", "_serveChannel", "BroadcastChannel", "_clientChannel", "destroy", "dispose", "close", "unref", "serve", "manager", "listener", "event", "type", "diagnostics", "postMessage", "requestId", "addEventListener", "onDispose", "removeEventListener", "discover", "collector", "push", "sleep", "result", "some", "d", "trigger", "Trigger", "wake", "wait", "timeout", "TraceSender", "_traceProcessor", "streamTrace", "Stream", "ctx", "next", "flushEvents", "resources", "spans", "logs", "resourceAdded", "resourceRemoved", "spanAdded", "logAdded", "entry", "resource", "span", "log", "length", "flush", "subscription", "dirtyResources", "dirtySpans", "newLogs", "clear", "Set", "subscriptions", "add", "ResourceEntry", "instance", "annotation", "sanitizedClassName", "sanitizeClassName", "className", "getMetric", "metrics", "find", "metric", "MAX_RESOURCE_RECORDS", "MAX_SPAN_RECORDS", "MAX_LOG_RECORDS", "REFRESH_INTERVAL", "MAX_INFO_OBJECT_DEPTH", "TraceProcessor", "diagnosticsChannel", "resourceInstanceIndex", "WeakMap", "resourceIdList", "spanIdList", "_logProcessor", "config", "level", "LogLevel", "ERROR", "WARN", "TRACE", "scope", "meta", "S", "context", "getContextFromEntry", "key", "Object", "keys", "sanitizeValue", "entryToPush", "message", "timestamp", "Date", "file", "F", "line", "L", "resourceId", "_pushLog", "addProcessor", "bind", "refreshInterval", "setInterval", "refresh", "unrefTimeout", "createTraceResource", "size", "tracingContext", "getPrototypeOf", "_assign", "getPrototypeSpecificInstanceId", "info", "getResourceInfo", "links", "getResourceMetrics", "WeakRef", "_clearResources", "_markResourceDirty", "createTraceSender", "traceSpan", "TracingSpan", "_flushSpan", "addLink", "parent", "child", "opts", "getDiagnostics", "fromEntries", "entries", "filter", "INFO", "res", "options", "value", "enum", "depth", "undefined", "_opts", "getData", "getResourceId", "findResourcesByClassName", "findResourcesByAnnotation", "deref", "time", "performance", "now", "_tick", "_changed", "oldInfo", "areEqualShallow", "oldMetrics", "runtimeSpan", "serialize", "_clearSpans", "_markSpanDirty", "shift", "nextId", "parentId", "endTs", "methodName", "startTs", "_showInBrowserTimeline", "showInBrowserTimeline", "parentCtx", "derive", "attributes", "getAttribute", "markSuccess", "_markInBrowserTimeline", "markError", "serializeError", "toFixed", "measure", "start", "end", "Error", "String", "TRACE_PROCESSOR", "globalThis", "traceProcessor", "resourceEntry", "toJSON", "isSetLike", "isMapLike", "isArray", "item", "truncate", "a", "b", "SANITIZE_REGEX", "m", "match", "klass", "rest", "defineProperty", "propertyKey", "descriptor", "mark", "method", "args", "callArgs", "apply", "metricsCounter", "trace", "BaseCounter", "_instance", "UnaryCounter", "units", "inc", "by", "counter", "MAX_BUCKETS", "TimeSeriesCounter", "_currentValue", "_totalValue", "_buckets", "timeSeries", "tracks", "points", "index", "total", "TimeUsageCounter", "_lastTickTime", "record", "beginRecording", "delta", "percentage", "MapCounter", "prev", "multiCounter", "records", "platform", "process", "arch", "versions", "href", "location"]
7
7
  }
@@ -1 +1 @@
1
- {"inputs":{"packages/common/tracing/src/symbols.ts":{"bytes":1811,"imports":[],"format":"esm"},"packages/common/tracing/src/util.ts":{"bytes":782,"imports":[],"format":"esm"},"packages/common/tracing/src/diagnostic.ts":{"bytes":7709,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"packages/common/tracing/src/util.ts","kind":"import-statement","original":"./util"}],"format":"esm"},"packages/common/tracing/src/diagnostics-channel.ts":{"bytes":14753,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"packages/common/tracing/src/diagnostic.ts","kind":"import-statement","original":"./diagnostic"},{"path":"packages/common/tracing/src/util.ts","kind":"import-statement","original":"./util"}],"format":"esm"},"packages/common/tracing/src/trace-sender.ts":{"bytes":10386,"imports":[{"path":"@dxos/codec-protobuf","kind":"import-statement","external":true}],"format":"esm"},"packages/common/tracing/src/trace-processor.ts":{"bytes":52980,"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/diagnostic.ts","kind":"import-statement","original":"./diagnostic"},{"path":"packages/common/tracing/src/diagnostics-channel.ts","kind":"import-statement","original":"./diagnostics-channel"},{"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":10660,"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":1450,"imports":[],"format":"esm"},"packages/common/tracing/src/metrics/unary-counter.ts":{"bytes":2128,"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":4268,"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":5249,"imports":[{"path":"packages/common/tracing/src/metrics/base.ts","kind":"import-statement","original":"./base"}],"format":"esm"},"packages/common/tracing/src/metrics/map-counter.ts":{"bytes":2977,"imports":[{"path":"packages/common/tracing/src/metrics/base.ts","kind":"import-statement","original":"./base"}],"format":"esm"},"packages/common/tracing/src/metrics/index.ts":{"bytes":892,"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"},{"path":"packages/common/tracing/src/metrics/map-counter.ts","kind":"import-statement","original":"./map-counter"}],"format":"esm"},"packages/common/tracing/src/index.ts":{"bytes":2080,"imports":[{"path":"packages/common/tracing/src/api.ts","kind":"import-statement","original":"./api"},{"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":58262},"packages/common/tracing/dist/lib/node/index.cjs":{"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/async","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/codec-protobuf","kind":"import-statement","external":true}],"exports":["BaseCounter","MapCounter","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":1757},"packages/common/tracing/src/symbols.ts":{"bytesInOutput":245},"packages/common/tracing/src/trace-processor.ts":{"bytesInOutput":12148},"packages/common/tracing/src/diagnostic.ts":{"bytesInOutput":1925},"packages/common/tracing/src/util.ts":{"bytesInOutput":58},"packages/common/tracing/src/diagnostics-channel.ts":{"bytesInOutput":3236},"packages/common/tracing/src/trace-sender.ts":{"bytesInOutput":2555},"packages/common/tracing/src/index.ts":{"bytesInOutput":284},"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},"packages/common/tracing/src/metrics/map-counter.ts":{"bytesInOutput":509}},"bytes":26246}}}
1
+ {"inputs":{"packages/common/tracing/src/symbols.ts":{"bytes":1811,"imports":[],"format":"esm"},"packages/common/tracing/src/util.ts":{"bytes":782,"imports":[],"format":"esm"},"packages/common/tracing/src/diagnostic.ts":{"bytes":8319,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"packages/common/tracing/src/util.ts","kind":"import-statement","original":"./util"}],"format":"esm"},"packages/common/tracing/src/diagnostics-channel.ts":{"bytes":14753,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"packages/common/tracing/src/diagnostic.ts","kind":"import-statement","original":"./diagnostic"},{"path":"packages/common/tracing/src/util.ts","kind":"import-statement","original":"./util"}],"format":"esm"},"packages/common/tracing/src/trace-sender.ts":{"bytes":10386,"imports":[{"path":"@dxos/codec-protobuf","kind":"import-statement","external":true}],"format":"esm"},"packages/common/tracing/src/trace-processor.ts":{"bytes":53540,"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/diagnostic.ts","kind":"import-statement","original":"./diagnostic"},{"path":"packages/common/tracing/src/diagnostics-channel.ts","kind":"import-statement","original":"./diagnostics-channel"},{"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":10660,"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":1450,"imports":[],"format":"esm"},"packages/common/tracing/src/metrics/unary-counter.ts":{"bytes":2128,"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":4268,"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":5249,"imports":[{"path":"packages/common/tracing/src/metrics/base.ts","kind":"import-statement","original":"./base"}],"format":"esm"},"packages/common/tracing/src/metrics/map-counter.ts":{"bytes":2977,"imports":[{"path":"packages/common/tracing/src/metrics/base.ts","kind":"import-statement","original":"./base"}],"format":"esm"},"packages/common/tracing/src/metrics/index.ts":{"bytes":892,"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"},{"path":"packages/common/tracing/src/metrics/map-counter.ts","kind":"import-statement","original":"./map-counter"}],"format":"esm"},"packages/common/tracing/src/index.ts":{"bytes":2174,"imports":[{"path":"packages/common/tracing/src/api.ts","kind":"import-statement","original":"./api"},{"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"},{"path":"packages/common/tracing/src/diagnostic.ts","kind":"import-statement","original":"./diagnostic"}],"format":"esm"}},"outputs":{"packages/common/tracing/dist/lib/node/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":58917},"packages/common/tracing/dist/lib/node/index.cjs":{"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/async","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/codec-protobuf","kind":"import-statement","external":true}],"exports":["BaseCounter","DIAGNOSTICS_TIMEOUT","DiagnosticsManager","MapCounter","ResourceEntry","TRACE_PROCESSOR","TRACE_SPAN_ATTRIBUTE","TimeSeriesCounter","TimeUsageCounter","TraceDiagnosticImpl","TraceProcessor","TraceSender","TracingSpan","UnaryCounter","getTracingContext","sanitizeClassName","symbolTracingContext","trace"],"entryPoint":"packages/common/tracing/src/index.ts","inputs":{"packages/common/tracing/src/api.ts":{"bytesInOutput":1757},"packages/common/tracing/src/symbols.ts":{"bytesInOutput":245},"packages/common/tracing/src/trace-processor.ts":{"bytesInOutput":12277},"packages/common/tracing/src/diagnostic.ts":{"bytesInOutput":2050},"packages/common/tracing/src/util.ts":{"bytesInOutput":58},"packages/common/tracing/src/diagnostics-channel.ts":{"bytesInOutput":3236},"packages/common/tracing/src/trace-sender.ts":{"bytesInOutput":2555},"packages/common/tracing/src/index.ts":{"bytesInOutput":284},"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},"packages/common/tracing/src/metrics/map-counter.ts":{"bytesInOutput":509}},"bytes":26568}}}
@@ -44,16 +44,16 @@ export interface TraceDiagnostic {
44
44
  unregister(): void;
45
45
  }
46
46
  export declare const trace: {
47
+ addLink: (parent: any, child: any, opts?: AddLinkOptions) => void;
48
+ diagnostic: <T>(params: TraceDiagnosticParams<T>) => TraceDiagnostic;
49
+ info: (opts?: InfoOptions) => (target: any, propertyKey: string, descriptor?: PropertyDescriptor) => void;
50
+ mark: (name: string) => void;
51
+ metricsCounter: () => (target: any, propertyKey: string, descriptor?: PropertyDescriptor) => void;
47
52
  resource: (options?: {
48
53
  annotation?: symbol;
49
- }) => <T extends new (...args: any[]) => {}>(constructor: T) => {
54
+ }) => <T_1 extends new (...args: any[]) => {}>(constructor: T_1) => {
50
55
  new (...rest: any[]): {};
51
- } & T;
52
- info: (opts?: InfoOptions) => (target: any, propertyKey: string, descriptor?: PropertyDescriptor) => void;
53
- mark: (name: string) => void;
56
+ } & T_1;
54
57
  span: ({ showInBrowserTimeline }?: SpanOptions) => (target: any, propertyKey: string, descriptor: TypedPropertyDescriptor<(...args: any) => any>) => void;
55
- metricsCounter: () => (target: any, propertyKey: string, descriptor?: PropertyDescriptor) => void;
56
- addLink: (parent: any, child: any, opts?: AddLinkOptions) => void;
57
- diagnostic: <T_1>(params: TraceDiagnosticParams<T_1>) => TraceDiagnostic;
58
58
  };
59
59
  //# sourceMappingURL=api.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/api.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAuB/C,MAAM,MAAM,WAAW,GAAG;IACxB;;;;;;;;;OASG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAE3B;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB,CAAC;AAeF,MAAM,MAAM,WAAW,GAAG;IACxB,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC,CAAC;AAmCF,MAAM,MAAM,cAAc,GAAG,EAAE,CAAC;AAMhC,MAAM,MAAM,qBAAqB,CAAC,CAAC,IAAI;IACrC;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,KAAK,EAAE,MAAM,YAAY,CAAC,CAAC,CAAC,CAAC;CAC9B,CAAC;AAEF,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,IAAI,IAAI,CAAC;CACpB;AASD,eAAO,MAAM,KAAK;yBA3HL;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,8BACP,GAAG,EAAE,KAAG,EAAE;sBAIV,GAAG,EAAE;;kBAoCzB,WAAW,cACT,GAAG,eAAe,MAAM,eAAe,kBAAkB;iBAIhD,MAAM;uCASY,WAAW,cACtC,GAAG,eAAe,MAAM,gDAAgD,GAAG,KAAK,GAAG;mCA2BxD,GAAG,eAAe,MAAM,eAAe,kBAAkB;sBAMtE,GAAG,SAAS,GAAG,SAAQ,cAAc;6DA8BJ,eAAe;CAcxE,CAAC"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/api.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAuB/C,MAAM,MAAM,WAAW,GAAG;IACxB;;;;;;;;;OASG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAE3B;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB,CAAC;AAeF,MAAM,MAAM,WAAW,GAAG;IACxB,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC,CAAC;AAmCF,MAAM,MAAM,cAAc,GAAG,EAAE,CAAC;AAMhC,MAAM,MAAM,qBAAqB,CAAC,CAAC,IAAI;IACrC;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,KAAK,EAAE,MAAM,YAAY,CAAC,CAAC,CAAC,CAAC;CAC9B,CAAC;AAEF,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,IAAI,IAAI,CAAC;CACpB;AASD,eAAO,MAAM,KAAK;sBAlCO,GAAG,SAAS,GAAG,SAAQ,cAAc;4BA8B/B,sBAAsB,CAAC,CAAC,KAAG,eAAe;kBA9EhE,WAAW,cACT,GAAG,eAAe,MAAM,eAAe,kBAAkB;iBAIhD,MAAM;mCAqCY,GAAG,eAAe,MAAM,eAAe,kBAAkB;yBAnFlF;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,gCACP,GAAG,EAAE,KAAG,EAAE;sBAIV,GAAG,EAAE;;uCAkDI,WAAW,cACtC,GAAG,eAAe,MAAM,cAAc,wBAAwB,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,GAAG,CAAC;CA2E9F,CAAC"}
@@ -3,6 +3,7 @@ export declare const DIAGNOSTICS_TIMEOUT = 10000;
3
3
  export type DiagnosticMetadata = {
4
4
  id: string;
5
5
  instanceId: string;
6
+ instanceTag: string | null;
6
7
  name: string;
7
8
  };
8
9
  export type DiagnosticsRequest = {
@@ -26,6 +27,8 @@ export declare class TraceDiagnosticImpl implements TraceDiagnostic {
26
27
  export declare class DiagnosticsManager {
27
28
  readonly instanceId: string;
28
29
  readonly registry: Map<string, TraceDiagnosticImpl>;
30
+ private _instanceTag;
31
+ setInstanceTag(tag: string): void;
29
32
  registerDiagnostic(params: TraceDiagnosticParams<any>): TraceDiagnostic;
30
33
  list(): DiagnosticMetadata[];
31
34
  fetch(request: DiagnosticsRequest): Promise<DiagnosticsData>;
@@ -1 +1 @@
1
- {"version":3,"file":"diagnostic.d.ts","sourceRoot":"","sources":["../../../src/diagnostic.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,qBAAqB,EAAE,KAAK,eAAe,EAAE,MAAM,OAAO,CAAC;AAGzE,eAAO,MAAM,mBAAmB,QAAS,CAAC;AAE1C,MAAM,MAAM,kBAAkB,GAAG;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,GAAG,CAAC;IACV,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,qBAAa,mBAAoB,YAAW,eAAe;IAEhD,EAAE,EAAE,MAAM;IACV,KAAK,EAAE,MAAM,GAAG;IAChB,IAAI,EAAE,MAAM;IACnB,OAAO,CAAC,QAAQ,CAAC,aAAa;gBAHvB,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,MAAM,GAAG,EAChB,IAAI,EAAE,MAAM,EACF,aAAa,EAAE,MAAM,IAAI;IAG5C,UAAU,IAAI,IAAI;CAGnB;AAED,qBAAa,kBAAkB;IAC7B,QAAQ,CAAC,UAAU,SAAc;IAEjC,QAAQ,CAAC,QAAQ,mCAA0C;IAE3D,kBAAkB,CAAC,MAAM,EAAE,qBAAqB,CAAC,GAAG,CAAC,GAAG,eAAe;IAUvE,IAAI,IAAI,kBAAkB,EAAE;IAQtB,KAAK,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,eAAe,CAAC;CAqBnE"}
1
+ {"version":3,"file":"diagnostic.d.ts","sourceRoot":"","sources":["../../../src/diagnostic.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,qBAAqB,EAAE,KAAK,eAAe,EAAE,MAAM,OAAO,CAAC;AAGzE,eAAO,MAAM,mBAAmB,QAAS,CAAC;AAE1C,MAAM,MAAM,kBAAkB,GAAG;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,GAAG,CAAC;IACV,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,qBAAa,mBAAoB,YAAW,eAAe;IAEhD,EAAE,EAAE,MAAM;IACV,KAAK,EAAE,MAAM,GAAG;IAChB,IAAI,EAAE,MAAM;IACnB,OAAO,CAAC,QAAQ,CAAC,aAAa;gBAHvB,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,MAAM,GAAG,EAChB,IAAI,EAAE,MAAM,EACF,aAAa,EAAE,MAAM,IAAI;IAG5C,UAAU,IAAI,IAAI;CAGnB;AAED,qBAAa,kBAAkB;IAC7B,QAAQ,CAAC,UAAU,SAAc;IAEjC,QAAQ,CAAC,QAAQ,mCAA0C;IAE3D,OAAO,CAAC,YAAY,CAAuB;IAE3C,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIjC,kBAAkB,CAAC,MAAM,EAAE,qBAAqB,CAAC,GAAG,CAAC,GAAG,eAAe;IAUvE,IAAI,IAAI,kBAAkB,EAAE;IAStB,KAAK,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,eAAe,CAAC;CAqBnE"}
@@ -3,4 +3,5 @@ export * from './symbols';
3
3
  export * from './trace-processor';
4
4
  export * from './trace-sender';
5
5
  export * from './metrics';
6
+ export * from './diagnostic';
6
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAMA,cAAc,OAAO,CAAC;AACtB,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAMA,cAAc,OAAO,CAAC;AACtB,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC"}
@@ -53,7 +53,9 @@ export declare class TraceProcessor {
53
53
  readonly spans: Map<number, Span>;
54
54
  readonly spanIdList: number[];
55
55
  readonly logs: LogEntry[];
56
+ private _instanceTag;
56
57
  constructor();
58
+ setInstanceTag(tag: string): void;
57
59
  createTraceSender(): TraceSender;
58
60
  traceSpan(params: TraceSpanParams): TracingSpan;
59
61
  addLink(parent: any, child: any, opts: AddLinkOptions): void;
@@ -1 +1 @@
1
- {"version":3,"file":"trace-processor.d.ts","sourceRoot":"","sources":["../../../src/trace-processor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"trace-processor.d.ts","sourceRoot":"","sources":["../../../src/trace-processor.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/tracing",
3
- "version": "0.5.3-main.bc67fdb",
3
+ "version": "0.5.3-main.bfb5bca",
4
4
  "description": "Async utilities.",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -16,18 +16,18 @@
16
16
  "src"
17
17
  ],
18
18
  "dependencies": {
19
- "@dxos/async": "0.5.3-main.bc67fdb",
20
- "@dxos/codec-protobuf": "0.5.3-main.bc67fdb",
21
- "@dxos/context": "0.5.3-main.bc67fdb",
22
- "@dxos/debug": "0.5.3-main.bc67fdb",
23
- "@dxos/invariant": "0.5.3-main.bc67fdb",
24
- "@dxos/log": "0.5.3-main.bc67fdb",
25
- "@dxos/protocols": "0.5.3-main.bc67fdb",
26
- "@dxos/util": "0.5.3-main.bc67fdb",
27
- "@dxos/node-std": "0.5.3-main.bc67fdb"
19
+ "@dxos/async": "0.5.3-main.bfb5bca",
20
+ "@dxos/context": "0.5.3-main.bfb5bca",
21
+ "@dxos/debug": "0.5.3-main.bfb5bca",
22
+ "@dxos/invariant": "0.5.3-main.bfb5bca",
23
+ "@dxos/codec-protobuf": "0.5.3-main.bfb5bca",
24
+ "@dxos/log": "0.5.3-main.bfb5bca",
25
+ "@dxos/node-std": "0.5.3-main.bfb5bca",
26
+ "@dxos/util": "0.5.3-main.bfb5bca",
27
+ "@dxos/protocols": "0.5.3-main.bfb5bca"
28
28
  },
29
29
  "devDependencies": {
30
- "@dxos/test": "0.5.3-main.bc67fdb"
30
+ "@dxos/test": "0.5.3-main.bfb5bca"
31
31
  },
32
32
  "publishConfig": {
33
33
  "access": "public"
package/src/api.ts CHANGED
@@ -136,13 +136,11 @@ const diagnostic = <T>(params: TraceDiagnosticParams<T>): TraceDiagnostic => {
136
136
  };
137
137
 
138
138
  export const trace = {
139
- resource,
139
+ addLink,
140
+ diagnostic,
140
141
  info,
141
142
  mark,
142
- span,
143
143
  metricsCounter,
144
-
145
- addLink,
146
-
147
- diagnostic,
144
+ resource,
145
+ span,
148
146
  };
package/src/diagnostic.ts CHANGED
@@ -13,6 +13,7 @@ export const DIAGNOSTICS_TIMEOUT = 10_000;
13
13
  export type DiagnosticMetadata = {
14
14
  id: string;
15
15
  instanceId: string;
16
+ instanceTag: string | null;
16
17
  name: string;
17
18
  };
18
19
 
@@ -46,6 +47,12 @@ export class DiagnosticsManager {
46
47
 
47
48
  readonly registry = new Map<string, TraceDiagnosticImpl>();
48
49
 
50
+ private _instanceTag: string | null = null;
51
+
52
+ setInstanceTag(tag: string): void {
53
+ this._instanceTag = tag;
54
+ }
55
+
49
56
  registerDiagnostic(params: TraceDiagnosticParams<any>): TraceDiagnostic {
50
57
  const impl = new TraceDiagnosticImpl(params.id, params.fetch, params.name ?? params.id, () => {
51
58
  if (this.registry.get(params.id) === impl) {
@@ -60,6 +67,7 @@ export class DiagnosticsManager {
60
67
  return Array.from(this.registry.values()).map((diagnostic) => ({
61
68
  id: diagnostic.id,
62
69
  instanceId: this.instanceId,
70
+ instanceTag: this._instanceTag,
63
71
  name: diagnostic.name,
64
72
  }));
65
73
  }
package/src/index.ts CHANGED
@@ -9,6 +9,7 @@ export * from './symbols';
9
9
  export * from './trace-processor';
10
10
  export * from './trace-sender';
11
11
  export * from './metrics';
12
+ export * from './diagnostic';
12
13
 
13
14
  trace.diagnostic({
14
15
  id: 'process-info',
@@ -88,6 +88,8 @@ export class TraceProcessor {
88
88
 
89
89
  readonly logs: LogEntry[] = [];
90
90
 
91
+ private _instanceTag: string | null = null;
92
+
91
93
  constructor() {
92
94
  log.addProcessor(this._logProcessor.bind(this));
93
95
 
@@ -98,6 +100,11 @@ export class TraceProcessor {
98
100
  this.diagnosticsChannel.unref();
99
101
  }
100
102
 
103
+ setInstanceTag(tag: string) {
104
+ this._instanceTag = tag;
105
+ this.diagnostics.setInstanceTag(tag);
106
+ }
107
+
101
108
  /**
102
109
  * @internal
103
110
  */