use std::collections::HashMap;
use serde_json::Value;
use tower_rules::{ForgeId, HealthSignal, MeshIdent};
#[derive(Debug, Clone)]
pub struct Event {
pub scope: EventScope,
pub level: Level,
pub target: String,
pub msg: String,
pub fields: HashMap<String, Value>,
pub seq: u64,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum EventScope {
TaskRun(String),
Service(MeshIdent),
Forge(ForgeId),
Health,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
pub enum Level {
Debug = 0,
Info = 1,
Warn = 2,
Error = 3,
}
impl Event {
pub fn health(signal: HealthSignal, seq: u64) -> Self {
Event {
scope: EventScope::Health,
level: Level::Warn,
target: format!("scryer.health.{}", health_signal_name(signal)),
msg: String::new(),
fields: HashMap::new(),
seq,
}
}
}
pub(crate) fn health_signal_name(signal: HealthSignal) -> &'static str {
match signal {
HealthSignal::IngestionLag => "ingestion_lag",
HealthSignal::RingOverflow => "ring_overflow",
HealthSignal::FederationTimeout => "federation_timeout",
HealthSignal::YubabaRaftQuorumLost => "yubaba_raft_quorum_lost",
}
}