@dxos/tracing 0.1.56-main.c19b7cd → 0.1.56-main.d626cba
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/browser/index.mjs +15 -13
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node/index.cjs +15 -13
- package/dist/lib/node/index.cjs.map +3 -3
- package/dist/lib/node/meta.json +1 -1
- package/dist/types/src/api.d.ts.map +1 -1
- package/package.json +9 -9
- package/src/api.ts +3 -1
|
@@ -4,8 +4,7 @@ import { Context } from "@dxos/context";
|
|
|
4
4
|
// packages/common/tracing/src/symbols.ts
|
|
5
5
|
var symbolTracingContext = Symbol("dxos.tracing-context");
|
|
6
6
|
var getTracingContext = (target) => {
|
|
7
|
-
|
|
8
|
-
return (_a2 = target[symbolTracingContext]) != null ? _a2 : target[symbolTracingContext] = {
|
|
7
|
+
return target[symbolTracingContext] ??= {
|
|
9
8
|
infoProperties: {}
|
|
10
9
|
};
|
|
11
10
|
};
|
|
@@ -183,7 +182,10 @@ var TraceProcessor = class {
|
|
|
183
182
|
}
|
|
184
183
|
}
|
|
185
184
|
};
|
|
186
|
-
var
|
|
185
|
+
var TracingSpan = class _TracingSpan {
|
|
186
|
+
static {
|
|
187
|
+
this.nextId = 0;
|
|
188
|
+
}
|
|
187
189
|
constructor(_traceProcessor, params) {
|
|
188
190
|
this._traceProcessor = _traceProcessor;
|
|
189
191
|
this.parentId = null;
|
|
@@ -220,20 +222,17 @@ var _TracingSpan = class {
|
|
|
220
222
|
this._traceProcessor._flushSpan(this);
|
|
221
223
|
}
|
|
222
224
|
serialize() {
|
|
223
|
-
var _a2, _b, _c, _d, _e;
|
|
224
225
|
return {
|
|
225
226
|
id: this.id,
|
|
226
|
-
resourceId:
|
|
227
|
+
resourceId: this.resourceId ?? void 0,
|
|
227
228
|
methodName: this.methodName,
|
|
228
|
-
parentId:
|
|
229
|
+
parentId: this.parentId ?? void 0,
|
|
229
230
|
startTs: this.startTs.toFixed(3),
|
|
230
|
-
endTs:
|
|
231
|
-
error:
|
|
231
|
+
endTs: this.endTs?.toFixed(3) ?? void 0,
|
|
232
|
+
error: this.error ?? void 0
|
|
232
233
|
};
|
|
233
234
|
}
|
|
234
235
|
};
|
|
235
|
-
var TracingSpan = _TracingSpan;
|
|
236
|
-
TracingSpan.nextId = 0;
|
|
237
236
|
var serializeError = (err) => {
|
|
238
237
|
if (err instanceof Error) {
|
|
239
238
|
return {
|
|
@@ -245,12 +244,11 @@ var serializeError = (err) => {
|
|
|
245
244
|
message: String(err)
|
|
246
245
|
};
|
|
247
246
|
};
|
|
248
|
-
var
|
|
249
|
-
var TRACE_PROCESSOR = (_a = globalThis.TRACE_PROCESSOR) != null ? _a : globalThis.TRACE_PROCESSOR = new TraceProcessor();
|
|
247
|
+
var TRACE_PROCESSOR = globalThis.TRACE_PROCESSOR ??= new TraceProcessor();
|
|
250
248
|
|
|
251
249
|
// packages/common/tracing/src/api.ts
|
|
252
250
|
var resource = () => (constructor) => {
|
|
253
|
-
|
|
251
|
+
const klass = class extends constructor {
|
|
254
252
|
constructor(...rest) {
|
|
255
253
|
super(...rest);
|
|
256
254
|
TRACE_PROCESSOR.traceResourceConstructor({
|
|
@@ -259,6 +257,10 @@ var resource = () => (constructor) => {
|
|
|
259
257
|
});
|
|
260
258
|
}
|
|
261
259
|
};
|
|
260
|
+
Object.defineProperty(klass, "name", {
|
|
261
|
+
value: constructor.name
|
|
262
|
+
});
|
|
263
|
+
return klass;
|
|
262
264
|
};
|
|
263
265
|
var info = () => (target, propertyKey, descriptor) => {
|
|
264
266
|
getTracingContext(target).infoProperties[propertyKey] = {};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/api.ts", "../../../src/symbols.ts", "../../../src/trace-processor.ts", "../../../src/trace-sender.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Context } from '@dxos/context';\n\nimport { getTracingContext } from './symbols';\nimport { TRACE_PROCESSOR } from './trace-processor';\n\nconst resource =\n () =>\n <T extends { new (...args: any[]): {} }>(constructor: T) => {\n return class extends constructor {\n constructor(...rest: any[]) {\n super(...rest);\n TRACE_PROCESSOR.traceResourceConstructor({ constructor, instance: this });\n }\n };\n };\n\nconst info = () => (target: any, propertyKey: string, descriptor?: PropertyDescriptor) => {\n getTracingContext(target).infoProperties[propertyKey] = {};\n};\n\nconst span = () => (target: any, propertyKey: string, descriptor: TypedPropertyDescriptor<(...args: any) => any>) => {\n const method = descriptor.value!;\n\n descriptor.value = async function (this: any, ...args: any) {\n const parentCtx = args[0] instanceof Context ? args[0] : null;\n const span = TRACE_PROCESSOR.traceSpan({ parentCtx, methodName: propertyKey, instance: this });\n\n const callArgs = span.ctx ? [span.ctx, ...args.slice(1)] : args;\n try {\n return await method.apply(this, callArgs);\n } catch (err) {\n span.markError(err);\n throw err;\n } finally {\n span.markSuccess();\n }\n };\n};\n\nexport type AddLinkOptions = {};\n\nconst addLink = (parent: any, child: any, opts: AddLinkOptions = {}) => {\n TRACE_PROCESSOR.addLink(parent, child, opts);\n};\n\nexport const trace = {\n resource,\n info,\n span,\n\n addLink,\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nexport const symbolTracingContext = Symbol('dxos.tracing-context');\n\nexport type TracingContext = {\n infoProperties: Record<string, {}>;\n};\n\nexport const getTracingContext = (target: any): TracingContext => {\n return (target[symbolTracingContext] ??= {\n infoProperties: {},\n });\n};\n\nexport const TRACE_SPAN_ATTRIBUTE = 'dxos.trace-span';\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Context } from '@dxos/context';\nimport { Error as SerializedError } from '@dxos/protocols/proto/dxos/error';\nimport { Resource, Span } from '@dxos/protocols/proto/dxos/tracing';\nimport { getPrototypeSpecificInstanceId } from '@dxos/util';\n\nimport type { AddLinkOptions } from './api';\nimport { TRACE_SPAN_ATTRIBUTE, getTracingContext } from './symbols';\nimport { TraceSender } from './trace-sender';\n\nexport type TraceResourceConstructorParams = {\n constructor: { new (...args: any[]): {} };\n instance: any;\n};\n\nexport type TraceSpanParams = {\n instance: any;\n methodName: string;\n parentCtx: Context | null;\n};\n\nexport type ResourceEntry = {\n data: Resource;\n instance: WeakRef<any>;\n};\n\nexport type TraceSubscription = {\n dirtyResources: Set<number>;\n dirtySpans: Set<number>;\n};\n\nconst MAX_RESOURCE_RECORDS = 500;\nconst MAX_SPAN_RECORDS = 1_000;\n\nexport class TraceProcessor {\n resources = new Map<number, ResourceEntry>();\n resourceInstanceIndex = new WeakMap<any, ResourceEntry>();\n resourceIdList: number[] = [];\n\n spans = new Map<number, Span>();\n spanIdList: number[] = [];\n\n subscriptions: Set<TraceSubscription> = new Set();\n\n traceResourceConstructor(params: TraceResourceConstructorParams) {\n const id = this.resources.size;\n const entry: ResourceEntry = {\n data: {\n id,\n className: params.constructor.name,\n instanceId: getPrototypeSpecificInstanceId(params.instance),\n info: this.getResourceInfo(params.instance),\n links: [],\n },\n instance: new WeakRef(params.instance),\n };\n this.resources.set(id, entry);\n this.resourceInstanceIndex.set(params.instance, entry);\n this.resourceIdList.push(id);\n if (this.resourceIdList.length > MAX_RESOURCE_RECORDS) {\n this._clearResources();\n }\n this._markResourceDirty(id);\n }\n\n getResourceInfo(instance: any): Record<string, any> {\n const res: Record<string, any> = {};\n const tracingContext = getTracingContext(Object.getPrototypeOf(instance));\n\n for (const [key, _opts] of Object.entries(tracingContext.infoProperties)) {\n try {\n res[key] = typeof instance[key] === 'function' ? instance[key]() : instance[key];\n } catch (err: any) {\n res[key] = err.message;\n }\n }\n\n return res;\n }\n\n traceSpan(params: TraceSpanParams): TracingSpan {\n const span = new TracingSpan(this, params);\n this._flushSpan(span);\n return span;\n }\n\n addLink(parent: any, child: any, opts: AddLinkOptions) {}\n\n getResourceId(instance: any): number | null {\n const entry = this.resourceInstanceIndex.get(instance);\n return entry ? entry.data.id : null;\n }\n\n createTraceSender() {\n return new TraceSender(this);\n }\n\n /**\n * @internal\n */\n _flushSpan(runtimeSpan: TracingSpan) {\n const span = runtimeSpan.serialize();\n this.spans.set(span.id, span);\n this.spanIdList.push(span.id);\n if (this.spanIdList.length > MAX_SPAN_RECORDS) {\n this._clearSpans();\n }\n this._markSpanDirty(span.id);\n }\n\n private _markResourceDirty(id: number) {\n for (const subscription of this.subscriptions) {\n subscription.dirtyResources.add(id);\n }\n }\n\n private _markSpanDirty(id: number) {\n for (const subscription of this.subscriptions) {\n subscription.dirtySpans.add(id);\n }\n }\n\n private _clearResources() {\n // TODO(dmaretskyi): Use FinalizationRegistry to delete finalized resources first.\n while (this.resourceIdList.length > MAX_RESOURCE_RECORDS) {\n const id = this.resourceIdList.shift()!;\n this.resources.delete(id);\n }\n }\n\n private _clearSpans() {\n while (this.spanIdList.length > MAX_SPAN_RECORDS) {\n const id = this.spanIdList.shift()!;\n this.spans.delete(id);\n }\n }\n}\n\nexport class TracingSpan {\n static nextId = 0;\n\n readonly id: number;\n readonly parentId: number | null = null;\n readonly methodName: string;\n readonly resourceId: number | null = null;\n startTs: number;\n endTs: number | null = null;\n error: SerializedError | null = null;\n\n private readonly _ctx: Context | null = null;\n\n constructor(private _traceProcessor: TraceProcessor, params: TraceSpanParams) {\n this.id = TracingSpan.nextId++;\n this.methodName = params.methodName;\n this.resourceId = _traceProcessor.getResourceId(params.instance);\n this.startTs = performance.now();\n\n if (params.parentCtx) {\n this._ctx = params.parentCtx.derive({\n attributes: {\n [TRACE_SPAN_ATTRIBUTE]: this.id,\n },\n });\n const parentId = params.parentCtx.getAttribute(TRACE_SPAN_ATTRIBUTE);\n if (typeof parentId === 'number') {\n this.parentId = parentId;\n }\n }\n }\n\n get ctx(): Context | null {\n return this._ctx;\n }\n\n markSuccess() {\n this.endTs = performance.now();\n this._traceProcessor._flushSpan(this);\n }\n\n markError(err: unknown) {\n this.endTs = performance.now();\n this.error = serializeError(err);\n this._traceProcessor._flushSpan(this);\n }\n\n serialize(): Span {\n return {\n id: this.id,\n resourceId: this.resourceId ?? undefined,\n methodName: this.methodName,\n parentId: this.parentId ?? undefined,\n startTs: this.startTs.toFixed(3),\n endTs: this.endTs?.toFixed(3) ?? undefined,\n error: this.error ?? undefined,\n };\n }\n}\n\nconst serializeError = (err: unknown): SerializedError => {\n if (err instanceof Error) {\n return {\n name: err.name,\n message: err.message,\n };\n }\n\n return {\n message: String(err),\n };\n};\n\nexport const TRACE_PROCESSOR: TraceProcessor = ((globalThis as any).TRACE_PROCESSOR ??= new TraceProcessor());\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Stream } from '@dxos/codec-protobuf';\nimport { StreamTraceEvent, TracingService } from '@dxos/protocols/proto/dxos/tracing';\n\nimport { TraceProcessor, TraceSubscription } from './trace-processor';\n\nconst FLUSH_INTERVAL = 1_000;\n\nexport class TraceSender implements TracingService {\n constructor(private _traceProcessor: TraceProcessor) {}\n\n streamTrace(request: void): Stream<StreamTraceEvent> {\n return new Stream(({ ctx, next }) => {\n const subscription: TraceSubscription = {\n dirtyResources: new Set(),\n dirtySpans: new Set(),\n };\n this._traceProcessor.subscriptions.add(subscription);\n ctx.onDispose(() => {\n this._traceProcessor.subscriptions.delete(subscription);\n });\n\n const flushEvents = (resources: Set<number> | null, spans: Set<number> | null) => {\n const event: StreamTraceEvent = {\n resourceAdded: [],\n resourceRemoved: [],\n spanAdded: [],\n };\n\n if (resources) {\n for (const id of resources) {\n const entry = this._traceProcessor.resources.get(id);\n if (entry) {\n event.resourceAdded!.push({ resource: entry.data });\n } else {\n event.resourceRemoved!.push({ id });\n }\n }\n } else {\n for (const entry of this._traceProcessor.resources.values()) {\n event.resourceAdded!.push({ resource: entry.data });\n }\n }\n\n if (spans) {\n for (const id of spans) {\n const span = this._traceProcessor.spans.get(id);\n if (span) {\n event.spanAdded!.push({ span });\n }\n }\n } else {\n for (const span of this._traceProcessor.spans.values()) {\n event.spanAdded!.push({ span });\n }\n }\n\n if (event.resourceAdded!.length > 0 || event.resourceRemoved!.length > 0 || event.spanAdded!.length > 0) {\n next(event);\n }\n };\n\n flushEvents(null, null);\n\n const timer = setInterval(() => {\n flushEvents(subscription.dirtyResources, subscription.dirtySpans);\n subscription.dirtyResources.clear();\n subscription.dirtySpans.clear();\n }, FLUSH_INTERVAL);\n ctx.onDispose(() => {\n clearInterval(timer);\n });\n });\n }\n}\n"],
|
|
5
|
-
"mappings": ";AAIA,SAASA,eAAe;;;ACAjB,IAAMC,uBAAuBC,OAAO,sBAAA;AAMpC,IAAMC,oBAAoB,CAACC,WAAAA;
|
|
6
|
-
"names": ["Context", "symbolTracingContext", "Symbol", "getTracingContext", "target", "
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Context } from '@dxos/context';\n\nimport { getTracingContext } from './symbols';\nimport { TRACE_PROCESSOR } from './trace-processor';\n\nconst resource =\n () =>\n <T extends { new (...args: any[]): {} }>(constructor: T) => {\n const klass = class extends constructor {\n constructor(...rest: any[]) {\n super(...rest);\n TRACE_PROCESSOR.traceResourceConstructor({ constructor, instance: this });\n }\n };\n Object.defineProperty(klass, 'name', { value: constructor.name });\n return klass;\n };\n\nconst info = () => (target: any, propertyKey: string, descriptor?: PropertyDescriptor) => {\n getTracingContext(target).infoProperties[propertyKey] = {};\n};\n\nconst span = () => (target: any, propertyKey: string, descriptor: TypedPropertyDescriptor<(...args: any) => any>) => {\n const method = descriptor.value!;\n\n descriptor.value = async function (this: any, ...args: any) {\n const parentCtx = args[0] instanceof Context ? args[0] : null;\n const span = TRACE_PROCESSOR.traceSpan({ parentCtx, methodName: propertyKey, instance: this });\n\n const callArgs = span.ctx ? [span.ctx, ...args.slice(1)] : args;\n try {\n return await method.apply(this, callArgs);\n } catch (err) {\n span.markError(err);\n throw err;\n } finally {\n span.markSuccess();\n }\n };\n};\n\nexport type AddLinkOptions = {};\n\nconst addLink = (parent: any, child: any, opts: AddLinkOptions = {}) => {\n TRACE_PROCESSOR.addLink(parent, child, opts);\n};\n\nexport const trace = {\n resource,\n info,\n span,\n\n addLink,\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nexport const symbolTracingContext = Symbol('dxos.tracing-context');\n\nexport type TracingContext = {\n infoProperties: Record<string, {}>;\n};\n\nexport const getTracingContext = (target: any): TracingContext => {\n return (target[symbolTracingContext] ??= {\n infoProperties: {},\n });\n};\n\nexport const TRACE_SPAN_ATTRIBUTE = 'dxos.trace-span';\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Context } from '@dxos/context';\nimport { Error as SerializedError } from '@dxos/protocols/proto/dxos/error';\nimport { Resource, Span } from '@dxos/protocols/proto/dxos/tracing';\nimport { getPrototypeSpecificInstanceId } from '@dxos/util';\n\nimport type { AddLinkOptions } from './api';\nimport { TRACE_SPAN_ATTRIBUTE, getTracingContext } from './symbols';\nimport { TraceSender } from './trace-sender';\n\nexport type TraceResourceConstructorParams = {\n constructor: { new (...args: any[]): {} };\n instance: any;\n};\n\nexport type TraceSpanParams = {\n instance: any;\n methodName: string;\n parentCtx: Context | null;\n};\n\nexport type ResourceEntry = {\n data: Resource;\n instance: WeakRef<any>;\n};\n\nexport type TraceSubscription = {\n dirtyResources: Set<number>;\n dirtySpans: Set<number>;\n};\n\nconst MAX_RESOURCE_RECORDS = 500;\nconst MAX_SPAN_RECORDS = 1_000;\n\nexport class TraceProcessor {\n resources = new Map<number, ResourceEntry>();\n resourceInstanceIndex = new WeakMap<any, ResourceEntry>();\n resourceIdList: number[] = [];\n\n spans = new Map<number, Span>();\n spanIdList: number[] = [];\n\n subscriptions: Set<TraceSubscription> = new Set();\n\n traceResourceConstructor(params: TraceResourceConstructorParams) {\n const id = this.resources.size;\n const entry: ResourceEntry = {\n data: {\n id,\n className: params.constructor.name,\n instanceId: getPrototypeSpecificInstanceId(params.instance),\n info: this.getResourceInfo(params.instance),\n links: [],\n },\n instance: new WeakRef(params.instance),\n };\n this.resources.set(id, entry);\n this.resourceInstanceIndex.set(params.instance, entry);\n this.resourceIdList.push(id);\n if (this.resourceIdList.length > MAX_RESOURCE_RECORDS) {\n this._clearResources();\n }\n this._markResourceDirty(id);\n }\n\n getResourceInfo(instance: any): Record<string, any> {\n const res: Record<string, any> = {};\n const tracingContext = getTracingContext(Object.getPrototypeOf(instance));\n\n for (const [key, _opts] of Object.entries(tracingContext.infoProperties)) {\n try {\n res[key] = typeof instance[key] === 'function' ? instance[key]() : instance[key];\n } catch (err: any) {\n res[key] = err.message;\n }\n }\n\n return res;\n }\n\n traceSpan(params: TraceSpanParams): TracingSpan {\n const span = new TracingSpan(this, params);\n this._flushSpan(span);\n return span;\n }\n\n addLink(parent: any, child: any, opts: AddLinkOptions) {}\n\n getResourceId(instance: any): number | null {\n const entry = this.resourceInstanceIndex.get(instance);\n return entry ? entry.data.id : null;\n }\n\n createTraceSender() {\n return new TraceSender(this);\n }\n\n /**\n * @internal\n */\n _flushSpan(runtimeSpan: TracingSpan) {\n const span = runtimeSpan.serialize();\n this.spans.set(span.id, span);\n this.spanIdList.push(span.id);\n if (this.spanIdList.length > MAX_SPAN_RECORDS) {\n this._clearSpans();\n }\n this._markSpanDirty(span.id);\n }\n\n private _markResourceDirty(id: number) {\n for (const subscription of this.subscriptions) {\n subscription.dirtyResources.add(id);\n }\n }\n\n private _markSpanDirty(id: number) {\n for (const subscription of this.subscriptions) {\n subscription.dirtySpans.add(id);\n }\n }\n\n private _clearResources() {\n // TODO(dmaretskyi): Use FinalizationRegistry to delete finalized resources first.\n while (this.resourceIdList.length > MAX_RESOURCE_RECORDS) {\n const id = this.resourceIdList.shift()!;\n this.resources.delete(id);\n }\n }\n\n private _clearSpans() {\n while (this.spanIdList.length > MAX_SPAN_RECORDS) {\n const id = this.spanIdList.shift()!;\n this.spans.delete(id);\n }\n }\n}\n\nexport class TracingSpan {\n static nextId = 0;\n\n readonly id: number;\n readonly parentId: number | null = null;\n readonly methodName: string;\n readonly resourceId: number | null = null;\n startTs: number;\n endTs: number | null = null;\n error: SerializedError | null = null;\n\n private readonly _ctx: Context | null = null;\n\n constructor(private _traceProcessor: TraceProcessor, params: TraceSpanParams) {\n this.id = TracingSpan.nextId++;\n this.methodName = params.methodName;\n this.resourceId = _traceProcessor.getResourceId(params.instance);\n this.startTs = performance.now();\n\n if (params.parentCtx) {\n this._ctx = params.parentCtx.derive({\n attributes: {\n [TRACE_SPAN_ATTRIBUTE]: this.id,\n },\n });\n const parentId = params.parentCtx.getAttribute(TRACE_SPAN_ATTRIBUTE);\n if (typeof parentId === 'number') {\n this.parentId = parentId;\n }\n }\n }\n\n get ctx(): Context | null {\n return this._ctx;\n }\n\n markSuccess() {\n this.endTs = performance.now();\n this._traceProcessor._flushSpan(this);\n }\n\n markError(err: unknown) {\n this.endTs = performance.now();\n this.error = serializeError(err);\n this._traceProcessor._flushSpan(this);\n }\n\n serialize(): Span {\n return {\n id: this.id,\n resourceId: this.resourceId ?? undefined,\n methodName: this.methodName,\n parentId: this.parentId ?? undefined,\n startTs: this.startTs.toFixed(3),\n endTs: this.endTs?.toFixed(3) ?? undefined,\n error: this.error ?? undefined,\n };\n }\n}\n\nconst serializeError = (err: unknown): SerializedError => {\n if (err instanceof Error) {\n return {\n name: err.name,\n message: err.message,\n };\n }\n\n return {\n message: String(err),\n };\n};\n\nexport const TRACE_PROCESSOR: TraceProcessor = ((globalThis as any).TRACE_PROCESSOR ??= new TraceProcessor());\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Stream } from '@dxos/codec-protobuf';\nimport { StreamTraceEvent, TracingService } from '@dxos/protocols/proto/dxos/tracing';\n\nimport { TraceProcessor, TraceSubscription } from './trace-processor';\n\nconst FLUSH_INTERVAL = 1_000;\n\nexport class TraceSender implements TracingService {\n constructor(private _traceProcessor: TraceProcessor) {}\n\n streamTrace(request: void): Stream<StreamTraceEvent> {\n return new Stream(({ ctx, next }) => {\n const subscription: TraceSubscription = {\n dirtyResources: new Set(),\n dirtySpans: new Set(),\n };\n this._traceProcessor.subscriptions.add(subscription);\n ctx.onDispose(() => {\n this._traceProcessor.subscriptions.delete(subscription);\n });\n\n const flushEvents = (resources: Set<number> | null, spans: Set<number> | null) => {\n const event: StreamTraceEvent = {\n resourceAdded: [],\n resourceRemoved: [],\n spanAdded: [],\n };\n\n if (resources) {\n for (const id of resources) {\n const entry = this._traceProcessor.resources.get(id);\n if (entry) {\n event.resourceAdded!.push({ resource: entry.data });\n } else {\n event.resourceRemoved!.push({ id });\n }\n }\n } else {\n for (const entry of this._traceProcessor.resources.values()) {\n event.resourceAdded!.push({ resource: entry.data });\n }\n }\n\n if (spans) {\n for (const id of spans) {\n const span = this._traceProcessor.spans.get(id);\n if (span) {\n event.spanAdded!.push({ span });\n }\n }\n } else {\n for (const span of this._traceProcessor.spans.values()) {\n event.spanAdded!.push({ span });\n }\n }\n\n if (event.resourceAdded!.length > 0 || event.resourceRemoved!.length > 0 || event.spanAdded!.length > 0) {\n next(event);\n }\n };\n\n flushEvents(null, null);\n\n const timer = setInterval(() => {\n flushEvents(subscription.dirtyResources, subscription.dirtySpans);\n subscription.dirtyResources.clear();\n subscription.dirtySpans.clear();\n }, FLUSH_INTERVAL);\n ctx.onDispose(() => {\n clearInterval(timer);\n });\n });\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["Context", "symbolTracingContext", "Symbol", "getTracingContext", "target", "infoProperties", "TRACE_SPAN_ATTRIBUTE", "getPrototypeSpecificInstanceId", "Stream", "FLUSH_INTERVAL", "TraceSender", "constructor", "_traceProcessor", "streamTrace", "request", "Stream", "ctx", "next", "subscription", "dirtyResources", "Set", "dirtySpans", "subscriptions", "add", "onDispose", "delete", "flushEvents", "resources", "spans", "event", "resourceAdded", "resourceRemoved", "spanAdded", "id", "entry", "get", "push", "resource", "data", "values", "span", "length", "timer", "setInterval", "clear", "clearInterval", "MAX_RESOURCE_RECORDS", "MAX_SPAN_RECORDS", "TraceProcessor", "resources", "Map", "resourceInstanceIndex", "WeakMap", "resourceIdList", "spans", "spanIdList", "subscriptions", "Set", "traceResourceConstructor", "params", "id", "size", "entry", "data", "className", "constructor", "name", "instanceId", "getPrototypeSpecificInstanceId", "instance", "info", "getResourceInfo", "links", "WeakRef", "set", "push", "length", "_clearResources", "_markResourceDirty", "res", "tracingContext", "getTracingContext", "Object", "getPrototypeOf", "key", "_opts", "entries", "infoProperties", "err", "message", "traceSpan", "span", "TracingSpan", "_flushSpan", "addLink", "parent", "child", "opts", "getResourceId", "get", "createTraceSender", "TraceSender", "runtimeSpan", "serialize", "_clearSpans", "_markSpanDirty", "subscription", "dirtyResources", "add", "dirtySpans", "shift", "delete", "nextId", "_traceProcessor", "parentId", "resourceId", "endTs", "error", "_ctx", "methodName", "startTs", "performance", "now", "parentCtx", "derive", "attributes", "TRACE_SPAN_ATTRIBUTE", "getAttribute", "ctx", "markSuccess", "markError", "serializeError", "undefined", "toFixed", "Error", "String", "TRACE_PROCESSOR", "globalThis", "resource", "constructor", "klass", "rest", "TRACE_PROCESSOR", "traceResourceConstructor", "instance", "Object", "defineProperty", "value", "name", "info", "target", "propertyKey", "descriptor", "getTracingContext", "infoProperties", "span", "method", "args", "parentCtx", "Context", "traceSpan", "methodName", "callArgs", "ctx", "slice", "apply", "err", "markError", "markSuccess", "addLink", "parent", "child", "opts", "trace"]
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"inputs":{"packages/common/tracing/src/symbols.ts":{"bytes":1464,"imports":[]},"packages/common/tracing/src/trace-sender.ts":{"bytes":9080,"imports":[{"path":"@dxos/codec-protobuf","kind":"import-statement","external":true}]},"packages/common/tracing/src/trace-processor.ts":{"bytes":20068,"imports":[{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/common/tracing/src/symbols.ts","kind":"import-statement","original":"./symbols"},{"path":"packages/common/tracing/src/trace-sender.ts","kind":"import-statement","original":"./trace-sender"}]},"packages/common/tracing/src/api.ts":{"bytes":
|
|
1
|
+
{"inputs":{"packages/common/tracing/src/symbols.ts":{"bytes":1464,"imports":[],"format":"esm"},"packages/common/tracing/src/trace-sender.ts":{"bytes":9080,"imports":[{"path":"@dxos/codec-protobuf","kind":"import-statement","external":true}],"format":"esm"},"packages/common/tracing/src/trace-processor.ts":{"bytes":20068,"imports":[{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/common/tracing/src/symbols.ts","kind":"import-statement","original":"./symbols"},{"path":"packages/common/tracing/src/trace-sender.ts","kind":"import-statement","original":"./trace-sender"}],"format":"esm"},"packages/common/tracing/src/api.ts":{"bytes":6138,"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/index.ts":{"bytes":744,"imports":[{"path":"packages/common/tracing/src/api.ts","kind":"import-statement","original":"./api"},{"path":"packages/common/tracing/src/symbols.ts","kind":"import-statement","original":"./symbols"},{"path":"packages/common/tracing/src/trace-processor.ts","kind":"import-statement","original":"./trace-processor"},{"path":"packages/common/tracing/src/trace-sender.ts","kind":"import-statement","original":"./trace-sender"}],"format":"esm"}},"outputs":{"packages/common/tracing/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":18544},"packages/common/tracing/dist/lib/browser/index.mjs":{"imports":[{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/codec-protobuf","kind":"import-statement","external":true}],"exports":["TRACE_PROCESSOR","TRACE_SPAN_ATTRIBUTE","TraceProcessor","TraceSender","TracingSpan","getTracingContext","symbolTracingContext","trace"],"entryPoint":"packages/common/tracing/src/index.ts","inputs":{"packages/common/tracing/src/api.ts":{"bytesInOutput":1253},"packages/common/tracing/src/symbols.ts":{"bytesInOutput":218},"packages/common/tracing/src/trace-processor.ts":{"bytesInOutput":4332},"packages/common/tracing/src/trace-sender.ts":{"bytesInOutput":2229},"packages/common/tracing/src/index.ts":{"bytesInOutput":0}},"bytes":8493}}}
|
package/dist/lib/node/index.cjs
CHANGED
|
@@ -37,8 +37,7 @@ var import_context = require("@dxos/context");
|
|
|
37
37
|
// packages/common/tracing/src/symbols.ts
|
|
38
38
|
var symbolTracingContext = Symbol("dxos.tracing-context");
|
|
39
39
|
var getTracingContext = (target) => {
|
|
40
|
-
|
|
41
|
-
return (_a2 = target[symbolTracingContext]) != null ? _a2 : target[symbolTracingContext] = {
|
|
40
|
+
return target[symbolTracingContext] ??= {
|
|
42
41
|
infoProperties: {}
|
|
43
42
|
};
|
|
44
43
|
};
|
|
@@ -216,7 +215,10 @@ var TraceProcessor = class {
|
|
|
216
215
|
}
|
|
217
216
|
}
|
|
218
217
|
};
|
|
219
|
-
var
|
|
218
|
+
var TracingSpan = class _TracingSpan {
|
|
219
|
+
static {
|
|
220
|
+
this.nextId = 0;
|
|
221
|
+
}
|
|
220
222
|
constructor(_traceProcessor, params) {
|
|
221
223
|
this._traceProcessor = _traceProcessor;
|
|
222
224
|
this.parentId = null;
|
|
@@ -253,20 +255,17 @@ var _TracingSpan = class {
|
|
|
253
255
|
this._traceProcessor._flushSpan(this);
|
|
254
256
|
}
|
|
255
257
|
serialize() {
|
|
256
|
-
var _a2, _b, _c, _d, _e;
|
|
257
258
|
return {
|
|
258
259
|
id: this.id,
|
|
259
|
-
resourceId:
|
|
260
|
+
resourceId: this.resourceId ?? void 0,
|
|
260
261
|
methodName: this.methodName,
|
|
261
|
-
parentId:
|
|
262
|
+
parentId: this.parentId ?? void 0,
|
|
262
263
|
startTs: this.startTs.toFixed(3),
|
|
263
|
-
endTs:
|
|
264
|
-
error:
|
|
264
|
+
endTs: this.endTs?.toFixed(3) ?? void 0,
|
|
265
|
+
error: this.error ?? void 0
|
|
265
266
|
};
|
|
266
267
|
}
|
|
267
268
|
};
|
|
268
|
-
var TracingSpan = _TracingSpan;
|
|
269
|
-
TracingSpan.nextId = 0;
|
|
270
269
|
var serializeError = (err) => {
|
|
271
270
|
if (err instanceof Error) {
|
|
272
271
|
return {
|
|
@@ -278,12 +277,11 @@ var serializeError = (err) => {
|
|
|
278
277
|
message: String(err)
|
|
279
278
|
};
|
|
280
279
|
};
|
|
281
|
-
var
|
|
282
|
-
var TRACE_PROCESSOR = (_a = globalThis.TRACE_PROCESSOR) != null ? _a : globalThis.TRACE_PROCESSOR = new TraceProcessor();
|
|
280
|
+
var TRACE_PROCESSOR = globalThis.TRACE_PROCESSOR ??= new TraceProcessor();
|
|
283
281
|
|
|
284
282
|
// packages/common/tracing/src/api.ts
|
|
285
283
|
var resource = () => (constructor) => {
|
|
286
|
-
|
|
284
|
+
const klass = class extends constructor {
|
|
287
285
|
constructor(...rest) {
|
|
288
286
|
super(...rest);
|
|
289
287
|
TRACE_PROCESSOR.traceResourceConstructor({
|
|
@@ -292,6 +290,10 @@ var resource = () => (constructor) => {
|
|
|
292
290
|
});
|
|
293
291
|
}
|
|
294
292
|
};
|
|
293
|
+
Object.defineProperty(klass, "name", {
|
|
294
|
+
value: constructor.name
|
|
295
|
+
});
|
|
296
|
+
return klass;
|
|
295
297
|
};
|
|
296
298
|
var info = () => (target, propertyKey, descriptor) => {
|
|
297
299
|
getTracingContext(target).infoProperties[propertyKey] = {};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/index.ts", "../../../src/api.ts", "../../../src/symbols.ts", "../../../src/trace-processor.ts", "../../../src/trace-sender.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nexport * from './api';\nexport * from './symbols';\nexport * from './trace-processor';\nexport * from './trace-sender';\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Context } from '@dxos/context';\n\nimport { getTracingContext } from './symbols';\nimport { TRACE_PROCESSOR } from './trace-processor';\n\nconst resource =\n () =>\n <T extends { new (...args: any[]): {} }>(constructor: T) => {\n return class extends constructor {\n constructor(...rest: any[]) {\n super(...rest);\n TRACE_PROCESSOR.traceResourceConstructor({ constructor, instance: this });\n }\n };\n };\n\nconst info = () => (target: any, propertyKey: string, descriptor?: PropertyDescriptor) => {\n getTracingContext(target).infoProperties[propertyKey] = {};\n};\n\nconst span = () => (target: any, propertyKey: string, descriptor: TypedPropertyDescriptor<(...args: any) => any>) => {\n const method = descriptor.value!;\n\n descriptor.value = async function (this: any, ...args: any) {\n const parentCtx = args[0] instanceof Context ? args[0] : null;\n const span = TRACE_PROCESSOR.traceSpan({ parentCtx, methodName: propertyKey, instance: this });\n\n const callArgs = span.ctx ? [span.ctx, ...args.slice(1)] : args;\n try {\n return await method.apply(this, callArgs);\n } catch (err) {\n span.markError(err);\n throw err;\n } finally {\n span.markSuccess();\n }\n };\n};\n\nexport type AddLinkOptions = {};\n\nconst addLink = (parent: any, child: any, opts: AddLinkOptions = {}) => {\n TRACE_PROCESSOR.addLink(parent, child, opts);\n};\n\nexport const trace = {\n resource,\n info,\n span,\n\n addLink,\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nexport const symbolTracingContext = Symbol('dxos.tracing-context');\n\nexport type TracingContext = {\n infoProperties: Record<string, {}>;\n};\n\nexport const getTracingContext = (target: any): TracingContext => {\n return (target[symbolTracingContext] ??= {\n infoProperties: {},\n });\n};\n\nexport const TRACE_SPAN_ATTRIBUTE = 'dxos.trace-span';\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Context } from '@dxos/context';\nimport { Error as SerializedError } from '@dxos/protocols/proto/dxos/error';\nimport { Resource, Span } from '@dxos/protocols/proto/dxos/tracing';\nimport { getPrototypeSpecificInstanceId } from '@dxos/util';\n\nimport type { AddLinkOptions } from './api';\nimport { TRACE_SPAN_ATTRIBUTE, getTracingContext } from './symbols';\nimport { TraceSender } from './trace-sender';\n\nexport type TraceResourceConstructorParams = {\n constructor: { new (...args: any[]): {} };\n instance: any;\n};\n\nexport type TraceSpanParams = {\n instance: any;\n methodName: string;\n parentCtx: Context | null;\n};\n\nexport type ResourceEntry = {\n data: Resource;\n instance: WeakRef<any>;\n};\n\nexport type TraceSubscription = {\n dirtyResources: Set<number>;\n dirtySpans: Set<number>;\n};\n\nconst MAX_RESOURCE_RECORDS = 500;\nconst MAX_SPAN_RECORDS = 1_000;\n\nexport class TraceProcessor {\n resources = new Map<number, ResourceEntry>();\n resourceInstanceIndex = new WeakMap<any, ResourceEntry>();\n resourceIdList: number[] = [];\n\n spans = new Map<number, Span>();\n spanIdList: number[] = [];\n\n subscriptions: Set<TraceSubscription> = new Set();\n\n traceResourceConstructor(params: TraceResourceConstructorParams) {\n const id = this.resources.size;\n const entry: ResourceEntry = {\n data: {\n id,\n className: params.constructor.name,\n instanceId: getPrototypeSpecificInstanceId(params.instance),\n info: this.getResourceInfo(params.instance),\n links: [],\n },\n instance: new WeakRef(params.instance),\n };\n this.resources.set(id, entry);\n this.resourceInstanceIndex.set(params.instance, entry);\n this.resourceIdList.push(id);\n if (this.resourceIdList.length > MAX_RESOURCE_RECORDS) {\n this._clearResources();\n }\n this._markResourceDirty(id);\n }\n\n getResourceInfo(instance: any): Record<string, any> {\n const res: Record<string, any> = {};\n const tracingContext = getTracingContext(Object.getPrototypeOf(instance));\n\n for (const [key, _opts] of Object.entries(tracingContext.infoProperties)) {\n try {\n res[key] = typeof instance[key] === 'function' ? instance[key]() : instance[key];\n } catch (err: any) {\n res[key] = err.message;\n }\n }\n\n return res;\n }\n\n traceSpan(params: TraceSpanParams): TracingSpan {\n const span = new TracingSpan(this, params);\n this._flushSpan(span);\n return span;\n }\n\n addLink(parent: any, child: any, opts: AddLinkOptions) {}\n\n getResourceId(instance: any): number | null {\n const entry = this.resourceInstanceIndex.get(instance);\n return entry ? entry.data.id : null;\n }\n\n createTraceSender() {\n return new TraceSender(this);\n }\n\n /**\n * @internal\n */\n _flushSpan(runtimeSpan: TracingSpan) {\n const span = runtimeSpan.serialize();\n this.spans.set(span.id, span);\n this.spanIdList.push(span.id);\n if (this.spanIdList.length > MAX_SPAN_RECORDS) {\n this._clearSpans();\n }\n this._markSpanDirty(span.id);\n }\n\n private _markResourceDirty(id: number) {\n for (const subscription of this.subscriptions) {\n subscription.dirtyResources.add(id);\n }\n }\n\n private _markSpanDirty(id: number) {\n for (const subscription of this.subscriptions) {\n subscription.dirtySpans.add(id);\n }\n }\n\n private _clearResources() {\n // TODO(dmaretskyi): Use FinalizationRegistry to delete finalized resources first.\n while (this.resourceIdList.length > MAX_RESOURCE_RECORDS) {\n const id = this.resourceIdList.shift()!;\n this.resources.delete(id);\n }\n }\n\n private _clearSpans() {\n while (this.spanIdList.length > MAX_SPAN_RECORDS) {\n const id = this.spanIdList.shift()!;\n this.spans.delete(id);\n }\n }\n}\n\nexport class TracingSpan {\n static nextId = 0;\n\n readonly id: number;\n readonly parentId: number | null = null;\n readonly methodName: string;\n readonly resourceId: number | null = null;\n startTs: number;\n endTs: number | null = null;\n error: SerializedError | null = null;\n\n private readonly _ctx: Context | null = null;\n\n constructor(private _traceProcessor: TraceProcessor, params: TraceSpanParams) {\n this.id = TracingSpan.nextId++;\n this.methodName = params.methodName;\n this.resourceId = _traceProcessor.getResourceId(params.instance);\n this.startTs = performance.now();\n\n if (params.parentCtx) {\n this._ctx = params.parentCtx.derive({\n attributes: {\n [TRACE_SPAN_ATTRIBUTE]: this.id,\n },\n });\n const parentId = params.parentCtx.getAttribute(TRACE_SPAN_ATTRIBUTE);\n if (typeof parentId === 'number') {\n this.parentId = parentId;\n }\n }\n }\n\n get ctx(): Context | null {\n return this._ctx;\n }\n\n markSuccess() {\n this.endTs = performance.now();\n this._traceProcessor._flushSpan(this);\n }\n\n markError(err: unknown) {\n this.endTs = performance.now();\n this.error = serializeError(err);\n this._traceProcessor._flushSpan(this);\n }\n\n serialize(): Span {\n return {\n id: this.id,\n resourceId: this.resourceId ?? undefined,\n methodName: this.methodName,\n parentId: this.parentId ?? undefined,\n startTs: this.startTs.toFixed(3),\n endTs: this.endTs?.toFixed(3) ?? undefined,\n error: this.error ?? undefined,\n };\n }\n}\n\nconst serializeError = (err: unknown): SerializedError => {\n if (err instanceof Error) {\n return {\n name: err.name,\n message: err.message,\n };\n }\n\n return {\n message: String(err),\n };\n};\n\nexport const TRACE_PROCESSOR: TraceProcessor = ((globalThis as any).TRACE_PROCESSOR ??= new TraceProcessor());\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Stream } from '@dxos/codec-protobuf';\nimport { StreamTraceEvent, TracingService } from '@dxos/protocols/proto/dxos/tracing';\n\nimport { TraceProcessor, TraceSubscription } from './trace-processor';\n\nconst FLUSH_INTERVAL = 1_000;\n\nexport class TraceSender implements TracingService {\n constructor(private _traceProcessor: TraceProcessor) {}\n\n streamTrace(request: void): Stream<StreamTraceEvent> {\n return new Stream(({ ctx, next }) => {\n const subscription: TraceSubscription = {\n dirtyResources: new Set(),\n dirtySpans: new Set(),\n };\n this._traceProcessor.subscriptions.add(subscription);\n ctx.onDispose(() => {\n this._traceProcessor.subscriptions.delete(subscription);\n });\n\n const flushEvents = (resources: Set<number> | null, spans: Set<number> | null) => {\n const event: StreamTraceEvent = {\n resourceAdded: [],\n resourceRemoved: [],\n spanAdded: [],\n };\n\n if (resources) {\n for (const id of resources) {\n const entry = this._traceProcessor.resources.get(id);\n if (entry) {\n event.resourceAdded!.push({ resource: entry.data });\n } else {\n event.resourceRemoved!.push({ id });\n }\n }\n } else {\n for (const entry of this._traceProcessor.resources.values()) {\n event.resourceAdded!.push({ resource: entry.data });\n }\n }\n\n if (spans) {\n for (const id of spans) {\n const span = this._traceProcessor.spans.get(id);\n if (span) {\n event.spanAdded!.push({ span });\n }\n }\n } else {\n for (const span of this._traceProcessor.spans.values()) {\n event.spanAdded!.push({ span });\n }\n }\n\n if (event.resourceAdded!.length > 0 || event.resourceRemoved!.length > 0 || event.spanAdded!.length > 0) {\n next(event);\n }\n };\n\n flushEvents(null, null);\n\n const timer = setInterval(() => {\n flushEvents(subscription.dirtyResources, subscription.dirtySpans);\n subscription.dirtyResources.clear();\n subscription.dirtySpans.clear();\n }, FLUSH_INTERVAL);\n ctx.onDispose(() => {\n clearInterval(timer);\n });\n });\n }\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;;;ACIA,qBAAwB;;;ACAjB,IAAMA,uBAAuBC,OAAO,sBAAA;AAMpC,IAAMC,oBAAoB,CAACC,WAAAA;
|
|
6
|
-
"names": ["symbolTracingContext", "Symbol", "getTracingContext", "target", "
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nexport * from './api';\nexport * from './symbols';\nexport * from './trace-processor';\nexport * from './trace-sender';\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Context } from '@dxos/context';\n\nimport { getTracingContext } from './symbols';\nimport { TRACE_PROCESSOR } from './trace-processor';\n\nconst resource =\n () =>\n <T extends { new (...args: any[]): {} }>(constructor: T) => {\n const klass = class extends constructor {\n constructor(...rest: any[]) {\n super(...rest);\n TRACE_PROCESSOR.traceResourceConstructor({ constructor, instance: this });\n }\n };\n Object.defineProperty(klass, 'name', { value: constructor.name });\n return klass;\n };\n\nconst info = () => (target: any, propertyKey: string, descriptor?: PropertyDescriptor) => {\n getTracingContext(target).infoProperties[propertyKey] = {};\n};\n\nconst span = () => (target: any, propertyKey: string, descriptor: TypedPropertyDescriptor<(...args: any) => any>) => {\n const method = descriptor.value!;\n\n descriptor.value = async function (this: any, ...args: any) {\n const parentCtx = args[0] instanceof Context ? args[0] : null;\n const span = TRACE_PROCESSOR.traceSpan({ parentCtx, methodName: propertyKey, instance: this });\n\n const callArgs = span.ctx ? [span.ctx, ...args.slice(1)] : args;\n try {\n return await method.apply(this, callArgs);\n } catch (err) {\n span.markError(err);\n throw err;\n } finally {\n span.markSuccess();\n }\n };\n};\n\nexport type AddLinkOptions = {};\n\nconst addLink = (parent: any, child: any, opts: AddLinkOptions = {}) => {\n TRACE_PROCESSOR.addLink(parent, child, opts);\n};\n\nexport const trace = {\n resource,\n info,\n span,\n\n addLink,\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nexport const symbolTracingContext = Symbol('dxos.tracing-context');\n\nexport type TracingContext = {\n infoProperties: Record<string, {}>;\n};\n\nexport const getTracingContext = (target: any): TracingContext => {\n return (target[symbolTracingContext] ??= {\n infoProperties: {},\n });\n};\n\nexport const TRACE_SPAN_ATTRIBUTE = 'dxos.trace-span';\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Context } from '@dxos/context';\nimport { Error as SerializedError } from '@dxos/protocols/proto/dxos/error';\nimport { Resource, Span } from '@dxos/protocols/proto/dxos/tracing';\nimport { getPrototypeSpecificInstanceId } from '@dxos/util';\n\nimport type { AddLinkOptions } from './api';\nimport { TRACE_SPAN_ATTRIBUTE, getTracingContext } from './symbols';\nimport { TraceSender } from './trace-sender';\n\nexport type TraceResourceConstructorParams = {\n constructor: { new (...args: any[]): {} };\n instance: any;\n};\n\nexport type TraceSpanParams = {\n instance: any;\n methodName: string;\n parentCtx: Context | null;\n};\n\nexport type ResourceEntry = {\n data: Resource;\n instance: WeakRef<any>;\n};\n\nexport type TraceSubscription = {\n dirtyResources: Set<number>;\n dirtySpans: Set<number>;\n};\n\nconst MAX_RESOURCE_RECORDS = 500;\nconst MAX_SPAN_RECORDS = 1_000;\n\nexport class TraceProcessor {\n resources = new Map<number, ResourceEntry>();\n resourceInstanceIndex = new WeakMap<any, ResourceEntry>();\n resourceIdList: number[] = [];\n\n spans = new Map<number, Span>();\n spanIdList: number[] = [];\n\n subscriptions: Set<TraceSubscription> = new Set();\n\n traceResourceConstructor(params: TraceResourceConstructorParams) {\n const id = this.resources.size;\n const entry: ResourceEntry = {\n data: {\n id,\n className: params.constructor.name,\n instanceId: getPrototypeSpecificInstanceId(params.instance),\n info: this.getResourceInfo(params.instance),\n links: [],\n },\n instance: new WeakRef(params.instance),\n };\n this.resources.set(id, entry);\n this.resourceInstanceIndex.set(params.instance, entry);\n this.resourceIdList.push(id);\n if (this.resourceIdList.length > MAX_RESOURCE_RECORDS) {\n this._clearResources();\n }\n this._markResourceDirty(id);\n }\n\n getResourceInfo(instance: any): Record<string, any> {\n const res: Record<string, any> = {};\n const tracingContext = getTracingContext(Object.getPrototypeOf(instance));\n\n for (const [key, _opts] of Object.entries(tracingContext.infoProperties)) {\n try {\n res[key] = typeof instance[key] === 'function' ? instance[key]() : instance[key];\n } catch (err: any) {\n res[key] = err.message;\n }\n }\n\n return res;\n }\n\n traceSpan(params: TraceSpanParams): TracingSpan {\n const span = new TracingSpan(this, params);\n this._flushSpan(span);\n return span;\n }\n\n addLink(parent: any, child: any, opts: AddLinkOptions) {}\n\n getResourceId(instance: any): number | null {\n const entry = this.resourceInstanceIndex.get(instance);\n return entry ? entry.data.id : null;\n }\n\n createTraceSender() {\n return new TraceSender(this);\n }\n\n /**\n * @internal\n */\n _flushSpan(runtimeSpan: TracingSpan) {\n const span = runtimeSpan.serialize();\n this.spans.set(span.id, span);\n this.spanIdList.push(span.id);\n if (this.spanIdList.length > MAX_SPAN_RECORDS) {\n this._clearSpans();\n }\n this._markSpanDirty(span.id);\n }\n\n private _markResourceDirty(id: number) {\n for (const subscription of this.subscriptions) {\n subscription.dirtyResources.add(id);\n }\n }\n\n private _markSpanDirty(id: number) {\n for (const subscription of this.subscriptions) {\n subscription.dirtySpans.add(id);\n }\n }\n\n private _clearResources() {\n // TODO(dmaretskyi): Use FinalizationRegistry to delete finalized resources first.\n while (this.resourceIdList.length > MAX_RESOURCE_RECORDS) {\n const id = this.resourceIdList.shift()!;\n this.resources.delete(id);\n }\n }\n\n private _clearSpans() {\n while (this.spanIdList.length > MAX_SPAN_RECORDS) {\n const id = this.spanIdList.shift()!;\n this.spans.delete(id);\n }\n }\n}\n\nexport class TracingSpan {\n static nextId = 0;\n\n readonly id: number;\n readonly parentId: number | null = null;\n readonly methodName: string;\n readonly resourceId: number | null = null;\n startTs: number;\n endTs: number | null = null;\n error: SerializedError | null = null;\n\n private readonly _ctx: Context | null = null;\n\n constructor(private _traceProcessor: TraceProcessor, params: TraceSpanParams) {\n this.id = TracingSpan.nextId++;\n this.methodName = params.methodName;\n this.resourceId = _traceProcessor.getResourceId(params.instance);\n this.startTs = performance.now();\n\n if (params.parentCtx) {\n this._ctx = params.parentCtx.derive({\n attributes: {\n [TRACE_SPAN_ATTRIBUTE]: this.id,\n },\n });\n const parentId = params.parentCtx.getAttribute(TRACE_SPAN_ATTRIBUTE);\n if (typeof parentId === 'number') {\n this.parentId = parentId;\n }\n }\n }\n\n get ctx(): Context | null {\n return this._ctx;\n }\n\n markSuccess() {\n this.endTs = performance.now();\n this._traceProcessor._flushSpan(this);\n }\n\n markError(err: unknown) {\n this.endTs = performance.now();\n this.error = serializeError(err);\n this._traceProcessor._flushSpan(this);\n }\n\n serialize(): Span {\n return {\n id: this.id,\n resourceId: this.resourceId ?? undefined,\n methodName: this.methodName,\n parentId: this.parentId ?? undefined,\n startTs: this.startTs.toFixed(3),\n endTs: this.endTs?.toFixed(3) ?? undefined,\n error: this.error ?? undefined,\n };\n }\n}\n\nconst serializeError = (err: unknown): SerializedError => {\n if (err instanceof Error) {\n return {\n name: err.name,\n message: err.message,\n };\n }\n\n return {\n message: String(err),\n };\n};\n\nexport const TRACE_PROCESSOR: TraceProcessor = ((globalThis as any).TRACE_PROCESSOR ??= new TraceProcessor());\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Stream } from '@dxos/codec-protobuf';\nimport { StreamTraceEvent, TracingService } from '@dxos/protocols/proto/dxos/tracing';\n\nimport { TraceProcessor, TraceSubscription } from './trace-processor';\n\nconst FLUSH_INTERVAL = 1_000;\n\nexport class TraceSender implements TracingService {\n constructor(private _traceProcessor: TraceProcessor) {}\n\n streamTrace(request: void): Stream<StreamTraceEvent> {\n return new Stream(({ ctx, next }) => {\n const subscription: TraceSubscription = {\n dirtyResources: new Set(),\n dirtySpans: new Set(),\n };\n this._traceProcessor.subscriptions.add(subscription);\n ctx.onDispose(() => {\n this._traceProcessor.subscriptions.delete(subscription);\n });\n\n const flushEvents = (resources: Set<number> | null, spans: Set<number> | null) => {\n const event: StreamTraceEvent = {\n resourceAdded: [],\n resourceRemoved: [],\n spanAdded: [],\n };\n\n if (resources) {\n for (const id of resources) {\n const entry = this._traceProcessor.resources.get(id);\n if (entry) {\n event.resourceAdded!.push({ resource: entry.data });\n } else {\n event.resourceRemoved!.push({ id });\n }\n }\n } else {\n for (const entry of this._traceProcessor.resources.values()) {\n event.resourceAdded!.push({ resource: entry.data });\n }\n }\n\n if (spans) {\n for (const id of spans) {\n const span = this._traceProcessor.spans.get(id);\n if (span) {\n event.spanAdded!.push({ span });\n }\n }\n } else {\n for (const span of this._traceProcessor.spans.values()) {\n event.spanAdded!.push({ span });\n }\n }\n\n if (event.resourceAdded!.length > 0 || event.resourceRemoved!.length > 0 || event.spanAdded!.length > 0) {\n next(event);\n }\n };\n\n flushEvents(null, null);\n\n const timer = setInterval(() => {\n flushEvents(subscription.dirtyResources, subscription.dirtySpans);\n subscription.dirtyResources.clear();\n subscription.dirtySpans.clear();\n }, FLUSH_INTERVAL);\n ctx.onDispose(() => {\n clearInterval(timer);\n });\n });\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["symbolTracingContext", "Symbol", "getTracingContext", "target", "infoProperties", "TRACE_SPAN_ATTRIBUTE", "FLUSH_INTERVAL", "TraceSender", "constructor", "_traceProcessor", "streamTrace", "request", "Stream", "ctx", "next", "subscription", "dirtyResources", "Set", "dirtySpans", "subscriptions", "add", "onDispose", "delete", "flushEvents", "resources", "spans", "event", "resourceAdded", "resourceRemoved", "spanAdded", "id", "entry", "get", "push", "resource", "data", "values", "span", "length", "timer", "setInterval", "clear", "clearInterval", "MAX_RESOURCE_RECORDS", "MAX_SPAN_RECORDS", "TraceProcessor", "resources", "Map", "resourceInstanceIndex", "WeakMap", "resourceIdList", "spans", "spanIdList", "subscriptions", "Set", "traceResourceConstructor", "params", "id", "size", "entry", "data", "className", "constructor", "name", "instanceId", "getPrototypeSpecificInstanceId", "instance", "info", "getResourceInfo", "links", "WeakRef", "set", "push", "length", "_clearResources", "_markResourceDirty", "res", "tracingContext", "getTracingContext", "Object", "getPrototypeOf", "key", "_opts", "entries", "infoProperties", "err", "message", "traceSpan", "span", "TracingSpan", "_flushSpan", "addLink", "parent", "child", "opts", "getResourceId", "get", "createTraceSender", "TraceSender", "runtimeSpan", "serialize", "_clearSpans", "_markSpanDirty", "subscription", "dirtyResources", "add", "dirtySpans", "shift", "delete", "nextId", "_traceProcessor", "parentId", "resourceId", "endTs", "error", "_ctx", "methodName", "startTs", "performance", "now", "parentCtx", "derive", "attributes", "TRACE_SPAN_ATTRIBUTE", "getAttribute", "ctx", "markSuccess", "markError", "serializeError", "undefined", "toFixed", "Error", "String", "TRACE_PROCESSOR", "globalThis", "resource", "constructor", "klass", "rest", "TRACE_PROCESSOR", "traceResourceConstructor", "instance", "Object", "defineProperty", "value", "name", "info", "target", "propertyKey", "descriptor", "getTracingContext", "infoProperties", "span", "method", "args", "parentCtx", "Context", "traceSpan", "methodName", "callArgs", "ctx", "slice", "apply", "err", "markError", "markSuccess", "addLink", "parent", "child", "opts", "trace"]
|
|
7
7
|
}
|
package/dist/lib/node/meta.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"inputs":{"packages/common/tracing/src/symbols.ts":{"bytes":1464,"imports":[]},"packages/common/tracing/src/trace-sender.ts":{"bytes":9080,"imports":[{"path":"@dxos/codec-protobuf","kind":"import-statement","external":true}]},"packages/common/tracing/src/trace-processor.ts":{"bytes":20068,"imports":[{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/common/tracing/src/symbols.ts","kind":"import-statement","original":"./symbols"},{"path":"packages/common/tracing/src/trace-sender.ts","kind":"import-statement","original":"./trace-sender"}]},"packages/common/tracing/src/api.ts":{"bytes":
|
|
1
|
+
{"inputs":{"packages/common/tracing/src/symbols.ts":{"bytes":1464,"imports":[],"format":"esm"},"packages/common/tracing/src/trace-sender.ts":{"bytes":9080,"imports":[{"path":"@dxos/codec-protobuf","kind":"import-statement","external":true}],"format":"esm"},"packages/common/tracing/src/trace-processor.ts":{"bytes":20068,"imports":[{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/common/tracing/src/symbols.ts","kind":"import-statement","original":"./symbols"},{"path":"packages/common/tracing/src/trace-sender.ts","kind":"import-statement","original":"./trace-sender"}],"format":"esm"},"packages/common/tracing/src/api.ts":{"bytes":6138,"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/index.ts":{"bytes":744,"imports":[{"path":"packages/common/tracing/src/api.ts","kind":"import-statement","original":"./api"},{"path":"packages/common/tracing/src/symbols.ts","kind":"import-statement","original":"./symbols"},{"path":"packages/common/tracing/src/trace-processor.ts","kind":"import-statement","original":"./trace-processor"},{"path":"packages/common/tracing/src/trace-sender.ts","kind":"import-statement","original":"./trace-sender"}],"format":"esm"}},"outputs":{"packages/common/tracing/dist/lib/node/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":18703},"packages/common/tracing/dist/lib/node/index.cjs":{"imports":[{"path":"@dxos/context","kind":"require-call","external":true},{"path":"@dxos/util","kind":"require-call","external":true},{"path":"@dxos/codec-protobuf","kind":"require-call","external":true}],"exports":[],"entryPoint":"packages/common/tracing/src/index.ts","inputs":{"packages/common/tracing/src/index.ts":{"bytesInOutput":415},"packages/common/tracing/src/api.ts":{"bytesInOutput":1274},"packages/common/tracing/src/symbols.ts":{"bytesInOutput":218},"packages/common/tracing/src/trace-processor.ts":{"bytesInOutput":4329},"packages/common/tracing/src/trace-sender.ts":{"bytesInOutput":2265}},"bytes":9882}}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/api.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/api.ts"],"names":[],"mappings":"AA6CA,MAAM,MAAM,cAAc,GAAG,EAAE,CAAC;AAMhC,eAAO,MAAM,KAAK;6CAxCW,GAAG,EAAE,KAAG,EAAE;sBAEZ,GAAG,EAAE;;yBASJ,GAAG,eAAe,MAAM,eAAe,kBAAkB;yBAIzD,GAAG,eAAe,MAAM,gDAAgD,GAAG,KAAK,GAAG;sBAqBtF,GAAG,SAAS,GAAG,SAAQ,cAAc;CAU7D,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dxos/tracing",
|
|
3
|
-
"version": "0.1.56-main.
|
|
3
|
+
"version": "0.1.56-main.d626cba",
|
|
4
4
|
"description": "Async utilities.",
|
|
5
5
|
"homepage": "https://dxos.org",
|
|
6
6
|
"bugs": "https://github.com/dxos/dxos/issues",
|
|
@@ -16,14 +16,14 @@
|
|
|
16
16
|
"src"
|
|
17
17
|
],
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"@dxos/codec-protobuf": "0.1.56-main.
|
|
20
|
-
"@dxos/context": "0.1.56-main.
|
|
21
|
-
"@dxos/debug": "0.1.56-main.
|
|
22
|
-
"@dxos/invariant": "0.1.56-main.
|
|
23
|
-
"@dxos/log": "0.1.56-main.
|
|
24
|
-
"@dxos/node-std": "0.1.56-main.
|
|
25
|
-
"@dxos/protocols": "0.1.56-main.
|
|
26
|
-
"@dxos/util": "0.1.56-main.
|
|
19
|
+
"@dxos/codec-protobuf": "0.1.56-main.d626cba",
|
|
20
|
+
"@dxos/context": "0.1.56-main.d626cba",
|
|
21
|
+
"@dxos/debug": "0.1.56-main.d626cba",
|
|
22
|
+
"@dxos/invariant": "0.1.56-main.d626cba",
|
|
23
|
+
"@dxos/log": "0.1.56-main.d626cba",
|
|
24
|
+
"@dxos/node-std": "0.1.56-main.d626cba",
|
|
25
|
+
"@dxos/protocols": "0.1.56-main.d626cba",
|
|
26
|
+
"@dxos/util": "0.1.56-main.d626cba"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {},
|
|
29
29
|
"publishConfig": {
|
package/src/api.ts
CHANGED
|
@@ -10,12 +10,14 @@ import { TRACE_PROCESSOR } from './trace-processor';
|
|
|
10
10
|
const resource =
|
|
11
11
|
() =>
|
|
12
12
|
<T extends { new (...args: any[]): {} }>(constructor: T) => {
|
|
13
|
-
|
|
13
|
+
const klass = class extends constructor {
|
|
14
14
|
constructor(...rest: any[]) {
|
|
15
15
|
super(...rest);
|
|
16
16
|
TRACE_PROCESSOR.traceResourceConstructor({ constructor, instance: this });
|
|
17
17
|
}
|
|
18
18
|
};
|
|
19
|
+
Object.defineProperty(klass, 'name', { value: constructor.name });
|
|
20
|
+
return klass;
|
|
19
21
|
};
|
|
20
22
|
|
|
21
23
|
const info = () => (target: any, propertyKey: string, descriptor?: PropertyDescriptor) => {
|