Package com.tnsai.observability.events
package com.tnsai.observability.events
Observability event schema + thread-local correlation context.
Complements the existing com.tnsai.events reactive/streaming
layer: TnsAIEventPublisher is session-scoped
fan-out for live UI consumers, while
AgentEventPublisher is the
observability-side fire-and-forget sink layer (SLF4J / OTel logs /
in-memory buffer / external trackers).
Key types
EventLevel— severity.EventContext— correlation fields (tenant, session, trace, agent, role, capabilities, group, conversation, extensions).AgentContext— thread-local holder, MDC-synced, with try-with-resourcesenter(ctx)and asyncwrap(...)helpers.AgentEventPublisher— sink SPI (java.util.ServiceLoader).Slf4jAgentEventPublisher— default sink: JSON via SLF4J.CompositeAgentEventPublisher— fan-out for multiple sinks.CapturingAgentEventPublisher— test utility.AgentEvents— static facade.
Usage
try (var ignored = AgentContext.enter(ctx)) {
AgentEvents.publish(new ChatEvent(...), EventLevel.INFO);
// every logger.info in this scope also carries MDC fields
agent.chat(msg);
}
- Since:
- 0.5.0 (issue #78)
-
ClassDescriptionThread-local container for the current
EventContext.AutoCloseable returned byAgentContext.enter(EventContext)— restores the previous context (or clears entirely if none was active) on close.Service-side fan-out point for observability events.Static facade for publishing observability events from anywhere in the framework or consumer code.Per-thread ring buffer of recent operations leading up to a point in time — typically an exception throw.Single recorded operation with timestamp and attributes.In-memoryAgentEventPublisherfor unit tests — records every published event so the test can assert on them.Fan-outAgentEventPublisher— broadcasts each event to every delegate.Correlation context attached to every observability event.Severity level for anTnsAIEventwhen published as an observability log record.DefaultAgentEventPublisher— JSON-serializes the event and writes it via SLF4J at the level corresponding toEventLevel.