pub struct MemMetricsBackend { /* private fields */ }Expand description
Non-durable in-memory metrics storage.
Counter and gauge writes are appended as points and can be queried immediately. This backend
is the default spectra backend and is useful for local development and tests.
§Examples
Facade wiring through Spectra::builder() (requires the spectra crate):
ⓘ
use std::sync::Arc;
use spectra::{MemEventsBackend, MemMetricsBackend, Spectra};
let spectra = Spectra::builder()
.metrics_backend(Arc::new(MemMetricsBackend::new()))
.events_backend(Arc::new(MemEventsBackend::new()))
.embedded()
.build()?;Direct backend usage:
use chrono::{Duration, Utc};
use serde_json::json;
use spectra_backend_mem::MemMetricsBackend;
use spectra_core::{MetricsQueryRange, MetricsStorageBackend};
let backend = MemMetricsBackend::new();
let now = Utc::now();
backend.record_counter("cache_hits", &json!({"region": "us"}), 1, now).await?;
let points = backend.query_range(MetricsQueryRange {
metric_name: "cache_hits".into(),
start: now - Duration::seconds(1),
end: now + Duration::seconds(1),
label_matchers: vec![],
}).await?;
assert_eq!(points.len(), 1);Implementations§
Source§impl MemMetricsBackend
impl MemMetricsBackend
Sourcepub fn new() -> MemMetricsBackend
pub fn new() -> MemMetricsBackend
Create an empty in-memory metrics backend.
Writes are process-local and discarded when the process exits. Inject the result into
Spectra::builder().metrics_backend(...) for a full runtime, or call storage trait
methods directly in tests.
§Examples
use spectra_backend_mem::MemMetricsBackend;
use spectra_core::{MetricsStorageBackend, StorageEngineType};
let backend = MemMetricsBackend::new();
assert_eq!(backend.engine_type(), StorageEngineType::Mem);Trait Implementations§
Source§impl Default for MemMetricsBackend
impl Default for MemMetricsBackend
Source§fn default() -> MemMetricsBackend
fn default() -> MemMetricsBackend
Returns the “default value” for a type. Read more
Source§impl MetricsStorageBackend for MemMetricsBackend
impl MetricsStorageBackend for MemMetricsBackend
Source§fn engine_type(&self) -> StorageEngineType
fn engine_type(&self) -> StorageEngineType
Returns the engine type for this backend.
Source§fn record_counter<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
name: &'life1 str,
labels: &'life2 Value,
delta: i64,
ts: DateTime<Utc>,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
MemMetricsBackend: 'async_trait,
fn record_counter<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
name: &'life1 str,
labels: &'life2 Value,
delta: i64,
ts: DateTime<Utc>,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
MemMetricsBackend: 'async_trait,
Records a counter increment.
Source§fn record_gauge<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
name: &'life1 str,
labels: &'life2 Value,
value: f64,
ts: DateTime<Utc>,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
MemMetricsBackend: 'async_trait,
fn record_gauge<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
name: &'life1 str,
labels: &'life2 Value,
value: f64,
ts: DateTime<Utc>,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
MemMetricsBackend: 'async_trait,
Records a gauge sample.
Source§fn query_range<'life0, 'async_trait>(
&'life0 self,
query: MetricsQueryRange,
) -> Pin<Box<dyn Future<Output = Result<Vec<MetricPoint>, Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
MemMetricsBackend: 'async_trait,
fn query_range<'life0, 'async_trait>(
&'life0 self,
query: MetricsQueryRange,
) -> Pin<Box<dyn Future<Output = Result<Vec<MetricPoint>, Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
MemMetricsBackend: 'async_trait,
Queries a time range of metric points.
Source§fn record_metrics_batch<'life0, 'life1, 'async_trait>(
&'life0 self,
rows: &'life1 [MetricWriteRow],
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
fn record_metrics_batch<'life0, 'life1, 'async_trait>(
&'life0 self,
rows: &'life1 [MetricWriteRow],
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
Batch write metrics (default: per-row dispatch).
Auto Trait Implementations§
impl !Freeze for MemMetricsBackend
impl RefUnwindSafe for MemMetricsBackend
impl Send for MemMetricsBackend
impl Sync for MemMetricsBackend
impl Unpin for MemMetricsBackend
impl UnsafeUnpin for MemMetricsBackend
impl UnwindSafe for MemMetricsBackend
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more