use crate::error::MetricsError;
use crate::task::TaskState;
use async_trait::async_trait;
use std::time::Duration;
#[async_trait]
pub trait MetricsCollector: Send + Sync {
async fn record_task_startup(&self, name: &str, duration: Duration)
-> Result<(), MetricsError>;
async fn record_task_shutdown(
&self,
name: &str,
duration: Duration,
) -> Result<(), MetricsError>;
async fn record_task_state(&self, name: &str, state: TaskState) -> Result<(), MetricsError>;
async fn record_health_check(&self, name: &str, success: bool) -> Result<(), MetricsError>;
async fn export(&self) -> Result<String, MetricsError>;
}