1use chrono::{DateTime, Utc};
4use parking_lot::RwLock;
5use serde::Serialize;
6use std::{collections::HashMap, sync::Arc};
7use tokio::sync::broadcast;
8
9#[derive(Clone, Serialize, Default)]
10pub struct ProviderStat {
11 pub last_ok: Option<DateTime<Utc>>,
12 pub last_err: Option<String>,
13}
14
15#[derive(Clone, Serialize, Default)]
16pub struct AppStatus {
17 pub now: DateTime<Utc>,
18 pub next_tick: Option<DateTime<Utc>>,
19 pub current_ip: Option<String>,
20 pub providers: HashMap<String, ProviderStat>,
21}
22
23pub type SharedStatus = Arc<RwLock<AppStatus>>;
25
26#[derive(Clone, Serialize)]
28#[serde(tag = "type", content = "payload")]
29pub enum Event {
30 #[serde(rename = "status")]
31 Status(AppStatus),
32 #[serde(rename = "log")]
33 Log(String),
34}
35
36pub type EventBus = broadcast::Sender<Event>;