TracingRateLimitLayer

Struct TracingRateLimitLayer 

Source
pub struct TracingRateLimitLayer<S = Arc<ShardedStorage<EventSignature, EventState>>>{ /* private fields */ }
Expand description

A tracing::Layer that applies rate limiting to events.

This layer intercepts events, computes their signature, and decides whether to allow or suppress them based on the configured policy.

Optionally emits periodic summaries of suppressed events when active emission is enabled (requires async feature).

Implementations§

Source§

impl<S> TracingRateLimitLayer<S>

Source

pub fn should_allow(&self, signature: EventSignature) -> bool

Check if an event should be allowed through.

Source

pub fn limiter(&self) -> &RateLimiter<S>

Get a reference to the underlying limiter.

Source

pub fn metrics(&self) -> &Metrics

Get a reference to the metrics.

Returns metrics about rate limiting behavior including:

  • Events allowed
  • Events suppressed
  • Signatures evicted
Source

pub fn signature_count(&self) -> usize

Get the current number of tracked signatures.

Source

pub fn circuit_breaker(&self) -> &Arc<CircuitBreaker>

Get a reference to the circuit breaker.

Use this to check the circuit breaker state and health:

  • circuit_breaker().state() - Current circuit state
  • circuit_breaker().consecutive_failures() - Failure count
Source

pub async fn shutdown(&self) -> Result<(), ShutdownError>

Shutdown the active suppression summary emitter, if running.

This method gracefully stops the background emission task. If active emission is not enabled, this method does nothing.

Requires the async feature.

§Errors

Returns an error if the emitter task fails to shut down gracefully.

§Example
let layer = TracingRateLimitLayer::builder()
    .with_active_emission(true)
    .build()
    .unwrap();

// Use the layer...

// Shutdown before dropping
layer.shutdown().await.expect("shutdown failed");
Source§

impl TracingRateLimitLayer<Arc<ShardedStorage<EventSignature, EventState>>>

Source

pub fn builder() -> TracingRateLimitLayerBuilder

Create a builder for configuring the layer.

Defaults:

  • Policy: token bucket (50 burst capacity, 1 token/sec refill rate)
  • Max signatures: 10,000 (with LRU eviction)
  • Summary interval: 30 seconds
  • Active emission: disabled
  • Summary formatter: default (WARN level with signature and count)
Source

pub fn new() -> Self

Create a layer with default settings.

Equivalent to TracingRateLimitLayer::builder().build().unwrap().

Defaults:

  • Policy: token bucket (50 burst capacity, 1 token/sec refill rate = 60/min)
  • Max signatures: 10,000 (with LRU eviction)
  • Summary interval: 30 seconds
§Panics

This method cannot panic because all default values are valid.

Trait Implementations§

Source§

impl<S> Clone for TracingRateLimitLayer<S>

Source§

fn clone(&self) -> TracingRateLimitLayer<S>

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Default for TracingRateLimitLayer<Arc<ShardedStorage<EventSignature, EventState>>>

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl<S, Sub> Filter<Sub> for TracingRateLimitLayer<S>

Source§

fn enabled(&self, meta: &Metadata<'_>, _cx: &Context<'_, Sub>) -> bool

Returns true if this layer is interested in a span or event with the given Metadata in the current Context, similarly to Subscriber::enabled. Read more
Source§

fn callsite_enabled(&self, meta: &'static Metadata<'static>) -> Interest

Returns an Interest indicating whether this layer will always, sometimes, or never be interested in the given Metadata. Read more
Source§

fn event_enabled(&self, event: &Event<'_>, cx: &Context<'_, S>) -> bool

Called before the filtered [Layer]'s [on_event], to determine if on_event` should be called. Read more
Source§

fn max_level_hint(&self) -> Option<LevelFilter>

Returns an optional hint of the highest verbosity level that this Filter will enable. Read more
Source§

fn on_new_span(&self, attrs: &Attributes<'_>, id: &Id, ctx: Context<'_, S>)

Notifies this filter that a new span was constructed with the given Attributes and Id. Read more
Source§

fn on_record(&self, id: &Id, values: &Record<'_>, ctx: Context<'_, S>)

Notifies this filter that a span with the given Id recorded the given values. Read more
Source§

fn on_enter(&self, id: &Id, ctx: Context<'_, S>)

Notifies this filter that a span with the given ID was entered. Read more
Source§

fn on_exit(&self, id: &Id, ctx: Context<'_, S>)

Notifies this filter that a span with the given ID was exited. Read more
Source§

fn on_close(&self, id: Id, ctx: Context<'_, S>)

Notifies this filter that a span with the given ID has been closed. Read more
Source§

impl<S, Sub> Layer<Sub> for TracingRateLimitLayer<S>
where S: Storage<EventSignature, EventState> + Clone + 'static, Sub: Subscriber,

Source§

fn on_register_dispatch(&self, subscriber: &Dispatch)

Performs late initialization when installing this layer as a Subscriber. Read more
Source§

fn on_layer(&mut self, subscriber: &mut S)

Performs late initialization when attaching a Layer to a Subscriber. Read more
Source§

fn register_callsite(&self, metadata: &'static Metadata<'static>) -> Interest

Registers a new callsite with this layer, returning whether or not the layer is interested in being notified about the callsite, similarly to Subscriber::register_callsite. Read more
Source§

fn enabled(&self, metadata: &Metadata<'_>, ctx: Context<'_, S>) -> bool

Returns true if this layer is interested in a span or event with the given metadata in the current Context, similarly to Subscriber::enabled. Read more
Source§

fn on_new_span(&self, attrs: &Attributes<'_>, id: &Id, ctx: Context<'_, S>)

Notifies this layer that a new span was constructed with the given Attributes and Id.
Source§

fn on_record(&self, _span: &Id, _values: &Record<'_>, _ctx: Context<'_, S>)

Notifies this layer that a span with the given Id recorded the given values.
Source§

fn on_follows_from(&self, _span: &Id, _follows: &Id, _ctx: Context<'_, S>)

Notifies this layer that a span with the ID span recorded that it follows from the span with the ID follows.
Source§

fn event_enabled(&self, _event: &Event<'_>, _ctx: Context<'_, S>) -> bool

Called before on_event, to determine if on_event should be called. Read more
Source§

fn on_event(&self, _event: &Event<'_>, _ctx: Context<'_, S>)

Notifies this layer that an event has occurred.
Source§

fn on_enter(&self, _id: &Id, _ctx: Context<'_, S>)

Notifies this layer that a span with the given ID was entered.
Source§

fn on_exit(&self, _id: &Id, _ctx: Context<'_, S>)

Notifies this layer that the span with the given ID was exited.
Source§

fn on_close(&self, _id: Id, _ctx: Context<'_, S>)

Notifies this layer that the span with the given ID has been closed.
Source§

fn on_id_change(&self, _old: &Id, _new: &Id, _ctx: Context<'_, S>)

Notifies this layer that a span ID has been cloned, and that the subscriber returned a different ID.
Source§

fn and_then<L>(self, layer: L) -> Layered<L, Self, S>
where L: Layer<S>, Self: Sized,

Composes this layer around the given Layer, returning a Layered struct implementing Layer. Read more
Source§

fn with_subscriber(self, inner: S) -> Layered<Self, S>
where Self: Sized,

Composes this Layer with the given Subscriber, returning a Layered struct that implements Subscriber. Read more
Source§

fn with_filter<F>(self, filter: F) -> Filtered<Self, F, S>
where Self: Sized, F: Filter<S>,

Combines self with a Filter, returning a Filtered layer. Read more
Source§

fn boxed(self) -> Box<dyn Layer<S> + Sync + Send>
where Self: Sized + Layer<S> + Send + Sync + 'static, S: Subscriber,

Erases the type of this Layer, returning a Boxed dyn Layer trait object. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<F, S> FilterExt<S> for F
where F: Filter<S>,

Source§

fn and<B>(self, other: B) -> And<Self, B, S>
where Self: Sized, B: Filter<S>,

Combines this Filter with another Filter s so that spans and events are enabled if and only if both filters return true. Read more
Source§

fn or<B>(self, other: B) -> Or<Self, B, S>
where Self: Sized, B: Filter<S>,

Combines two Filters so that spans and events are enabled if either filter returns true. Read more
Source§

fn not(self) -> Not<Self, S>
where Self: Sized,

Inverts self, returning a filter that enables spans and events only if self would not enable them. Read more
Source§

fn boxed(self) -> Box<dyn Filter<S> + Sync + Send>
where Self: Sized + Send + Sync + 'static,

Boxes self, erasing its concrete type. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more