Skip to content
@tde.io/plexis  ·  npm install @tde.io/plexis  ·  npm  ·  GitHub

Tracer

The tracer collects structured events emitted by domains and pipelines at runtime. Attach a Tracer instance to a domain or pipeline via its options.tracer field.

Creates a Tracer instance.

function createTracer(options?: TracerOptions): Tracer

options TracerOptions (optional)

Tracer configuration:

FieldTypeRequiredDefaultDescription
enabledbooleanNotrueWhen false, the tracer does not record events
captureContextboolean | 'before' | 'after' | 'both'NofalseWhether to snapshot context on each event; 'before', 'after', or 'both' capture snapshots before/after the handler
maxEventsnumberNo10000Maximum number of events held in memory; oldest events are dropped when the cap is reached
clock() => numberNoCustom timestamp function; defaults to an internal monotonic clock
idFactory() => stringNoCustom event ID generator; defaults to an internal UUID factory
onSubscriberError(error: unknown) => voidNoCalled when a subscriber throws; subscriber errors are always isolated from the tracer

Tracer:

MemberParametersReturnsDescription
captureContextboolean | 'before' | 'after' | 'both'Reflects the captureContext option in effect
subscribe(listener)listener: (event: TraceEvent) => void() => voidListen to live trace events; returns an unsubscribe function
record(partial)partial: Partial<TraceEvent> & Pick<TraceEvent, 'traceId' | 'level' | 'type'>TraceEvent | undefinedRecord a trace event; returns undefined when recording is disabled
history()TraceEvent[]All recorded events
traces()string[]All trace IDs
byTraceId(id)id: stringTraceEvent[]Events for one trace
export(format)format: 'json' | 'text' | 'tree'unknownExport trace data in the given format
clear()voidRemove all recorded events
import { createTracer, defineDomain, when, on, terminal } from '@tde.io/plexis';
const tracer = createTracer({ captureContext: 'after', maxEvents: 500 });
const order = defineDomain('order', () => {
when('pending', () => {
on('submit', target('processing'));
});
when('processing', terminal());
return { context: {}, initial: 'pending' };
}, { tracer });
await order.follow('submit');
const events = tracer.history();
console.log(events.length); // number of recorded events
const traceIds = tracer.traces();
const eventsForTrace = tracer.byTraceId(traceIds[0]);

Subscribe to live trace events as they are recorded.

listener (event: TraceEvent) => void

Called synchronously each time an event is recorded.

() => void — call to unsubscribe.

import { createTracer } from '@tde.io/plexis';
const tracer = createTracer();
const unsubscribe = tracer.subscribe((event) => {
console.log(event.type, event.traceId);
});
// Later, stop listening:
unsubscribe();

Export all recorded trace data in the given format.

format 'json' | 'text' | 'tree'

Export format.

unknown — the exported representation.

import { createTracer } from '@tde.io/plexis';
const tracer = createTracer();
// ... run some domains/pipelines ...
const json = tracer.export('json');
const text = tracer.export('text');
const tree = tracer.export('tree');

Remove all recorded events from memory.

void

import { createTracer } from '@tde.io/plexis';
const tracer = createTracer();
// ... run some operations ...
tracer.clear(); // reset for next test or session