Skip to main content

SnapshotCache

Struct SnapshotCache 

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

A cache that holds monitoring snapshots and refreshes them periodically.

When PrometheusMetrics are attached, the cache also updates Prometheus gauges during each refresh, keeping metric values in lockstep with the snapshot data. This means the /metrics handler never needs to compute values — it only gathers and encodes.

Implementations§

Source§

impl SnapshotCache

Source

pub fn new( refresh_interval: Duration, server_source: Option<Arc<dyn ServerMonitoring + Send + Sync>>, sv2_clients_source: Option<Arc<dyn Sv2ClientsMonitoring + Send + Sync>>, ) -> Self

Create a new snapshot cache with the given refresh interval.

§Arguments
  • refresh_interval - How often to refresh the cache (e.g., 15 seconds)
  • server_source - Optional server monitoring trait object
  • sv2_clients_source - Optional Sv2 clients monitoring trait object
Source

pub fn with_sv1_clients_source( self, sv1_source: Arc<dyn Sv1ClientsMonitoring + Send + Sync>, ) -> Self

Add SV1 monitoring source (for Tproxy)

Source

pub fn with_metrics(self, metrics: PrometheusMetrics) -> Self

Attach (or replace) Prometheus metrics so they are updated during each refresh().

This is called once in MonitoringServer::new and may be called again in with_sv1_monitoring which re-creates the metrics with SV1 gauges enabled.

Source

pub fn get_snapshot(&self) -> MonitoringSnapshot

Get the current snapshot.

This is a fast read that does NOT acquire any business logic locks. The returned snapshot may be up to refresh_interval old.

Source

pub fn refresh(&self)

Refresh the cache by reading from the data sources.

This method DOES acquire the business logic locks (via the trait methods), but it’s only called periodically by a background task, not on every request.

When Prometheus metrics are attached, they are updated atomically alongside the snapshot — eliminating any gap where metrics could be missing or stale relative to the snapshot data.

Source

pub fn refresh_interval(&self) -> Duration

Get the refresh interval

Trait Implementations§

Source§

impl Clone for SnapshotCache

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. 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<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

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

Source§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
Source§

impl<A, B, T> HttpServerConnExec<A, B> for T
where B: Body,

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> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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<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