Skip to main content

ChancePredicate

Struct ChancePredicate 

Source
pub struct ChancePredicate<P: EnabledPredicate> { /* private fields */ }
Expand description

Predicate wrapper that probabilistically denies root spans before they get to the inner predicate. Root spans (the ones whose Attributes carry tracing::span::Attributes::is_root() — typically tracing::span!(parent: None, …)) are gated by a runtime-tunable percentage; descendants and events pass straight through to the inner predicate.

Because the chance is read with a Relaxed load of an AtomicU64 holding f64::to_bits of the percentage, updates from a ChanceHandle are picked up by the next root-span roll without needing a wake — the inner subscriber’s existing rebuild_interest_cache invalidation isn’t required either, since the dice are rerolled per span instance via EnabledPredicate::new_span_enabled, not at callsite-registration time.

Implementations§

Source§

impl<P: EnabledPredicate> ChancePredicate<P>

Source

pub fn new(inner: P, chance_pct: f64) -> Self

Construct with an initial chance percentage [0.0, 100.0]. Out-of-range inputs are silently clamped. Use 100.0 for “always pass to inner”.

Source

pub fn handle(&self) -> ChanceHandle

Cheap-to-clone handle for changing the chance percentage at runtime — typically held by an admin RPC.

Trait Implementations§

Source§

impl<P: EnabledPredicate> EnabledPredicate for ChancePredicate<P>

Source§

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

Source§

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

Source§

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

Source§

fn new_span_enabled(&self, span: &Attributes<'_>) -> bool

Auto Trait Implementations§

§

impl<P> Freeze for ChancePredicate<P>
where P: Freeze,

§

impl<P> RefUnwindSafe for ChancePredicate<P>
where P: RefUnwindSafe,

§

impl<P> Send for ChancePredicate<P>

§

impl<P> Sync for ChancePredicate<P>

§

impl<P> Unpin for ChancePredicate<P>
where P: Unpin,

§

impl<P> UnsafeUnpin for ChancePredicate<P>
where P: UnsafeUnpin,

§

impl<P> UnwindSafe for ChancePredicate<P>
where P: UnwindSafe,

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> 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, 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