use crate::events::base::BaseEvent;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum MasterEvent {
DaemonLifecycle {
base: BaseEvent,
lifecycle: MasterLifecycleEvent,
},
ProcessWarning {
base: BaseEvent,
warning: MasterProcessWarning,
},
ServiceLimit {
base: BaseEvent,
limit: MasterServiceLimit,
},
ConfigurationWarning {
base: BaseEvent,
warning: MasterConfigWarning,
},
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum MasterLifecycleEvent {
Started {
version: String,
configuration: String,
},
Reload {
version: String,
configuration: String,
},
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum MasterProcessWarning {
ProcessKilled {
service: String,
process_path: String,
pid: u32,
signal: u8,
},
BadCommandStartup { service: String },
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum MasterServiceLimit {
ProcessLimitReached {
service: String,
service_address: String,
limit: u32,
},
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum MasterConfigWarning {
ProcessCountSuggestion,
StressConfigReference { url: String },
}
impl MasterEvent {
pub fn base(&self) -> &BaseEvent {
match self {
MasterEvent::DaemonLifecycle { base, .. } => base,
MasterEvent::ProcessWarning { base, .. } => base,
MasterEvent::ServiceLimit { base, .. } => base,
MasterEvent::ConfigurationWarning { base, .. } => base,
}
}
pub fn base_mut(&mut self) -> &mut BaseEvent {
match self {
MasterEvent::DaemonLifecycle { base, .. } => base,
MasterEvent::ProcessWarning { base, .. } => base,
MasterEvent::ServiceLimit { base, .. } => base,
MasterEvent::ConfigurationWarning { base, .. } => base,
}
}
pub fn event_type(&self) -> &'static str {
match self {
MasterEvent::DaemonLifecycle { lifecycle, .. } => match lifecycle {
MasterLifecycleEvent::Started { .. } => "daemon_started",
MasterLifecycleEvent::Reload { .. } => "daemon_reload",
},
MasterEvent::ProcessWarning { warning, .. } => match warning {
MasterProcessWarning::ProcessKilled { .. } => "process_killed",
MasterProcessWarning::BadCommandStartup { .. } => "bad_command_startup",
},
MasterEvent::ServiceLimit { .. } => "service_limit_reached",
MasterEvent::ConfigurationWarning { warning, .. } => match warning {
MasterConfigWarning::ProcessCountSuggestion => "process_count_suggestion",
MasterConfigWarning::StressConfigReference { .. } => "stress_config_reference",
},
}
}
}