Package com.tnsai.quality.ratelimit
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 Summary
ConstructorsConstructorDescriptionRateLimitedAgentEventPublisher(com.tnsai.observability.events.AgentEventPublisher delegate, EventRateLimiter limiter) RateLimitedAgentEventPublisher(com.tnsai.observability.events.AgentEventPublisher delegate, EventRateLimiter limiter, Supplier<com.tnsai.observability.events.EventContext> contextSupplier) -
Method Summary
Modifier and TypeMethodDescriptionbooleanisEnabled(com.tnsai.observability.events.EventLevel level) voidpublish(com.tnsai.events.TnsAIEvent event) voidpublish(com.tnsai.events.TnsAIEvent event, com.tnsai.observability.events.EventLevel level, com.tnsai.observability.events.EventContext context)
-
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:
publishin interfacecom.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:
publishin interfacecom.tnsai.observability.events.AgentEventPublisher
-
isEnabled
public boolean isEnabled(com.tnsai.observability.events.EventLevel level) - Specified by:
isEnabledin interfacecom.tnsai.observability.events.AgentEventPublisher
-