pub struct SqliteEventsBackend { /* private fields */ }Expand description
Durable SQLite structured-event storage in the spectra_events table.
new opens the database file and applies the required DDL. Event rows retain
their logical table name and JSON field payload.
§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::Utc;
use serde_json::json;
use spectra_backend_sqlite::SqliteEventsBackend;
use spectra_core::{EventStorageBackend, EventsQueryFilter};
let dir = tempfile::tempdir()?;
let backend = SqliteEventsBackend::new(dir.path().join("events.db"))?;
backend.append_row(
"request_log",
&json!({"message": "handled"}),
Utc::now(),
None,
).await?;
let rows = backend.query_rows(EventsQueryFilter {
table: "request_log".into(),
..Default::default()
}).await?;
assert_eq!(rows.len(), 1);Implementations§
Source§impl SqliteEventsBackend
impl SqliteEventsBackend
Sourcepub fn new(path: impl AsRef<Path>) -> Result<SqliteEventsBackend, Error>
pub fn new(path: impl AsRef<Path>) -> Result<SqliteEventsBackend, Error>
Open or create a SQLite database at path and apply events DDL migrations.
The constructor is synchronous. Parent directories must already exist. Use a separate database file from the metrics backend when following the standard Spectra wiring.
§Examples
use spectra_backend_sqlite::SqliteEventsBackend;
let backend = SqliteEventsBackend::new("/tmp/spectra-events.db")?;
assert!(backend.path().ends_with("spectra-events.db"));Trait Implementations§
Source§impl Clone for SqliteEventsBackend
impl Clone for SqliteEventsBackend
Source§fn clone(&self) -> SqliteEventsBackend
fn clone(&self) -> SqliteEventsBackend
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 EventStorageBackend for SqliteEventsBackend
impl EventStorageBackend for SqliteEventsBackend
Source§fn engine_type(&self) -> StorageEngineType
fn engine_type(&self) -> StorageEngineType
Returns the engine type for this backend.
Source§fn append_row<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
table: &'life1 str,
fields: &'life2 Value,
ts: DateTime<Utc>,
correlation_id: Option<&'life3 str>,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
SqliteEventsBackend: 'async_trait,
fn append_row<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
table: &'life1 str,
fields: &'life2 Value,
ts: DateTime<Utc>,
correlation_id: Option<&'life3 str>,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
SqliteEventsBackend: 'async_trait,
Appends one event row.
Source§fn query_rows<'life0, 'async_trait>(
&'life0 self,
filter: EventsQueryFilter,
) -> Pin<Box<dyn Future<Output = Result<Vec<EventRow>, Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
SqliteEventsBackend: 'async_trait,
fn query_rows<'life0, 'async_trait>(
&'life0 self,
filter: EventsQueryFilter,
) -> Pin<Box<dyn Future<Output = Result<Vec<EventRow>, Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
SqliteEventsBackend: 'async_trait,
Queries event rows matching the filter.
Source§fn query_aggregate<'life0, 'async_trait>(
&'life0 self,
_filter: EventsAggregateFilter,
) -> Pin<Box<dyn Future<Output = Result<EventAggregateResult, Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
SqliteEventsBackend: 'async_trait,
fn query_aggregate<'life0, 'async_trait>(
&'life0 self,
_filter: EventsAggregateFilter,
) -> Pin<Box<dyn Future<Output = Result<EventAggregateResult, Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
SqliteEventsBackend: 'async_trait,
Queries aggregated chart data.
Source§fn append_rows_batch<'life0, 'life1, 'async_trait>(
&'life0 self,
rows: &'life1 [EventWriteRow],
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
fn append_rows_batch<'life0, 'life1, 'async_trait>(
&'life0 self,
rows: &'life1 [EventWriteRow],
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
Batch append event rows (default: per-row dispatch).
Auto Trait Implementations§
impl Freeze for SqliteEventsBackend
impl RefUnwindSafe for SqliteEventsBackend
impl Send for SqliteEventsBackend
impl Sync for SqliteEventsBackend
impl Unpin for SqliteEventsBackend
impl UnsafeUnpin for SqliteEventsBackend
impl UnwindSafe for SqliteEventsBackend
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