use std::sync::Arc;
use anyhow::Result;
use tokio::sync::Mutex;
use super::consolidator::{DreamConsolidator, DreamSessionStore};
use super::metrics::DreamReport;
pub struct DreamTask {
consolidator: Arc<Mutex<DreamConsolidator>>,
session_store: Arc<dyn DreamSessionStore>,
cron_expr: String,
}
impl DreamTask {
pub fn new(
consolidator: Arc<Mutex<DreamConsolidator>>,
session_store: Arc<dyn DreamSessionStore>,
cron_expr: impl Into<String>,
) -> Self {
Self {
consolidator,
session_store,
cron_expr: cron_expr.into(),
}
}
pub async fn run_once(&self) -> Result<DreamReport> {
let mut consolidator = self.consolidator.lock().await;
consolidator.run_cycle(&*self.session_store).await
}
pub fn cron_expr(&self) -> &str {
&self.cron_expr
}
}