Files
nx9-url-shortener/src/analytics/queue.rs
T

30 lines
747 B
Rust

use crate::db::Db;
use crate::models::VisitRecord;
use tokio::sync::mpsc;
#[derive(Clone)]
pub struct AnalyticsQueue {
sender: mpsc::Sender<VisitRecord>,
}
impl AnalyticsQueue {
pub fn new(db: Db, capacity: usize) -> Self {
let (sender, receiver) = mpsc::channel(capacity);
// Spawn background worker to batch-write records
tokio::spawn(async move {
super::worker::run_worker(db, receiver).await;
});
Self { sender }
}
// Attempt to queue a visit. Non-blocking.
pub fn push(&self, record: VisitRecord) {
use tracing::error;
if let Err(e) = self.sender.try_send(record) {
error!("Failed to queue analytics record: {:?}", e);
}
}
}