Skip to main content

BandwidthMonitor

Struct BandwidthMonitor 

Source
pub struct BandwidthMonitor { /* private fields */ }
Expand description

Monitor that tracks per-peer and aggregate bandwidth usage.

BandwidthMonitor maintains a map of PeerBandwidth entries protected by a RwLock. All mutating operations take a write lock; read-only queries take a read lock. Global byte totals are accumulated in BandwidthStats using lock-free atomics, so callers can take cheap snapshots without acquiring the peer map lock.

The sliding window used for rate calculations is configurable at construction time (defaults to 10 seconds). Samples older than the window are lazily evicted on each call to record.

Implementations§

Source§

impl BandwidthMonitor

Source

pub fn new() -> Self

Create a new monitor with the default 10-second sliding window.

Source

pub fn with_window(window: Duration) -> Self

Create a new monitor with a custom sliding window duration.

Source

pub fn window(&self) -> Duration

Return the configured sliding window duration.

Source

pub fn stats(&self) -> &Arc<BandwidthStats>

Return a shared reference to the global atomic stats.

Source

pub fn record(&self, peer_id: &str, bytes: u64, direction: Direction)

Record a transfer of bytes in direction for peer_id.

This method:

  1. Obtains a write lock on the peer map.
  2. Creates a PeerBandwidth entry if one does not exist.
  3. Appends a new sample stamped with the current instant.
  4. Evicts samples older than the sliding window from that peer.
  5. Increments the global atomic counters.
Source

pub fn rate_for_peer(&self, peer_id: &str, direction: Direction) -> f64

Return the current rate (bytes/sec) for peer_id in direction.

Returns 0.0 if the peer is unknown.

Source

pub fn top_senders(&self, n: usize) -> Vec<(String, f64)>

Return the top n peers by outbound rate, sorted descending.

Each element is (peer_id, rate_bps). If there are fewer than n peers, all known peers are returned.

Source

pub fn top_receivers(&self, n: usize) -> Vec<(String, f64)>

Return the top n peers by inbound rate, sorted descending.

Each element is (peer_id, rate_bps).

Source

pub fn total_rate_bps(&self, direction: Direction) -> f64

Compute the aggregate rate (bytes/sec) across all peers for direction.

Source

pub fn evict_idle_peers(&self, max_idle: Duration)

Remove peers whose most recent sample is older than max_idle.

A peer is considered idle when:

  • It has no samples at all, or
  • Its most recent sample (in either direction) was recorded more than max_idle ago.
Source

pub fn peer_count(&self) -> usize

Return the current number of tracked peers.

Source

pub fn stats_snapshot(&self) -> BandwidthStatsSnapshot

Take a snapshot of the global atomic stats without acquiring the peer map lock.

Trait Implementations§

Source§

impl Default for BandwidthMonitor

Source§

fn default() -> Self

Returns the “default value” for a type. 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<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

Source§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

Source§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

Source§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

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