pub struct SqliteMetricsBackend { /* private fields */ }Expand description
Durable SQLite metrics storage in the spectra_metrics table.
new opens the database file and applies the required DDL. Use a separate
file from the events backend when following the standard Spectra wiring.
§Examples
Facade wiring through Spectra::builder() (requires the spectra crate with the
sqlite feature):
ⓘ
use std::sync::Arc;
use spectra::{Spectra, SqliteEventsBackend, SqliteMetricsBackend};
let dir = std::env::temp_dir().join("spectra-example");
let spectra = Spectra::builder()
.metrics_backend(Arc::new(SqliteMetricsBackend::new(dir.join("metrics.db"))?))
.events_backend(Arc::new(SqliteEventsBackend::new(dir.join("events.db"))?))
.embedded()
.build()?;Direct backend usage:
use chrono::{Duration, Utc};
use serde_json::json;
use spectra_backend_sqlite::SqliteMetricsBackend;
use spectra_core::{MetricsQueryRange, MetricsStorageBackend};
let dir = tempfile::tempdir()?;
let backend = SqliteMetricsBackend::new(dir.path().join("metrics.db"))?;
let now = Utc::now();
backend.record_counter("cache_hits", &json!({}), 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 SqliteMetricsBackend
impl SqliteMetricsBackend
Sourcepub fn new(path: impl AsRef<Path>) -> Result<Self>
pub fn new(path: impl AsRef<Path>) -> Result<Self>
Open or create a SQLite database at path and apply metrics DDL migrations.
The constructor is synchronous. Parent directories must already exist. Use a separate database file from the events backend when following the standard Spectra wiring.
§Examples
use spectra_backend_sqlite::SqliteMetricsBackend;
let backend = SqliteMetricsBackend::new("/tmp/spectra-metrics.db")?;
assert!(backend.path().ends_with("spectra-metrics.db"));Trait Implementations§
Source§impl Clone for SqliteMetricsBackend
impl Clone for SqliteMetricsBackend
Source§fn clone(&self) -> SqliteMetricsBackend
fn clone(&self) -> SqliteMetricsBackend
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl MetricsStorageBackend for SqliteMetricsBackend
impl MetricsStorageBackend for SqliteMetricsBackend
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<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: '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<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: '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<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: '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<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: '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>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn query_range<'life0, 'async_trait>(
&'life0 self,
query: MetricsQueryRange,
) -> Pin<Box<dyn Future<Output = Result<Vec<MetricPoint>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: '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 SqliteMetricsBackend
impl RefUnwindSafe for SqliteMetricsBackend
impl Send for SqliteMetricsBackend
impl Sync for SqliteMetricsBackend
impl Unpin for SqliteMetricsBackend
impl UnsafeUnpin for SqliteMetricsBackend
impl UnwindSafe for SqliteMetricsBackend
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