Class RateLimitedAgentEventPublisher

java.lang.Object
com.tnsai.quality.ratelimit.RateLimitedAgentEventPublisher
All Implemented Interfaces:
com.tnsai.observability.events.AgentEventPublisher

public class RateLimitedAgentEventPublisher extends Object implements com.tnsai.observability.events.AgentEventPublisher
AgentEventPublisher decorator that consults an EventRateLimiter before delegating each publish call (issue #82). Sits downstream of SamplingAgentEventPublisher when both are wired:

 AgentEventPublisher slf4j   = new Slf4jAgentEventPublisher();
 AgentEventPublisher rate    = new RateLimitedAgentEventPublisher(
         slf4j, new Resilience4jEventRateLimiter());
 AgentEventPublisher sampled = new SamplingAgentEventPublisher(
         rate, SamplingPolicies.production());
 

Stack order matters: sampled -> rate -> sink means the cheap (probabilistic) sampling decision runs first; the rate limiter only sees what survived sampling. Reverse the stack if you want the limiter to run first (more accurate per-tenant cap, more wasted sampling work).

Decision.DEFER is treated like Decision.DROP by default — the SPI lets future limiters propose a deferred path, but this decorator owns no queue, so deferred events drop. Override onDefer(com.tnsai.events.TnsAIEvent, com.tnsai.observability.events.EventLevel, com.tnsai.observability.events.EventContext) in a subclass if you want a different strategy.

Since:
0.10.0 (issue #82)
  • Constructor Details

    • RateLimitedAgentEventPublisher

      public RateLimitedAgentEventPublisher(com.tnsai.observability.events.AgentEventPublisher delegate, EventRateLimiter limiter)
    • RateLimitedAgentEventPublisher

      public RateLimitedAgentEventPublisher(com.tnsai.observability.events.AgentEventPublisher delegate, EventRateLimiter limiter, Supplier<com.tnsai.observability.events.EventContext> contextSupplier)
  • Method Details

    • publish

      public void publish(com.tnsai.events.TnsAIEvent event)
      Specified by:
      publish in interface com.tnsai.observability.events.AgentEventPublisher
    • publish

      public void publish(com.tnsai.events.TnsAIEvent event, com.tnsai.observability.events.EventLevel level, com.tnsai.observability.events.EventContext context)
      Specified by:
      publish in interface com.tnsai.observability.events.AgentEventPublisher
    • isEnabled

      public boolean isEnabled(com.tnsai.observability.events.EventLevel level)
      Specified by:
      isEnabled in interface com.tnsai.observability.events.AgentEventPublisher