use std::env;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct DefaultMetricsConfig {
pub enabled: bool,
pub stage_taxonomy: String,
pub flow_taxonomy: String,
}
impl Default for DefaultMetricsConfig {
fn default() -> Self {
let enabled = env::var("OBZENFLOW_METRICS_ENABLED")
.ok()
.and_then(|v| v.parse::<bool>().ok())
.unwrap_or(true);
Self {
enabled,
stage_taxonomy: "RED".to_string(),
flow_taxonomy: "GoldenSignals".to_string(),
}
}
}
impl DefaultMetricsConfig {
pub fn new() -> Self {
Self::default()
}
pub fn disabled() -> Self {
Self {
enabled: false,
stage_taxonomy: "RED".to_string(),
flow_taxonomy: "GoldenSignals".to_string(),
}
}
pub fn is_enabled(&self) -> bool {
self.enabled
}
}
#[cfg(test)]
mod tests {
use super::*;
use std::sync::Mutex;
static ENV_MUTEX: Mutex<()> = Mutex::new(());
#[test]
fn test_default_config() {
let _guard = ENV_MUTEX.lock().unwrap();
let saved = env::var("OBZENFLOW_METRICS_ENABLED").ok();
env::remove_var("OBZENFLOW_METRICS_ENABLED");
let config = DefaultMetricsConfig::default();
assert!(config.enabled);
assert_eq!(config.stage_taxonomy, "RED");
assert_eq!(config.flow_taxonomy, "GoldenSignals");
if let Some(val) = saved {
env::set_var("OBZENFLOW_METRICS_ENABLED", val);
}
}
#[test]
fn test_disabled_config() {
let config = DefaultMetricsConfig::disabled();
assert!(!config.enabled);
assert_eq!(config.stage_taxonomy, "RED");
assert_eq!(config.flow_taxonomy, "GoldenSignals");
}
#[test]
fn test_env_var_override() {
let _guard = ENV_MUTEX.lock().unwrap();
let saved = env::var("OBZENFLOW_METRICS_ENABLED").ok();
env::set_var("OBZENFLOW_METRICS_ENABLED", "false");
let config = DefaultMetricsConfig::default();
assert!(!config.enabled);
env::set_var("OBZENFLOW_METRICS_ENABLED", "true");
let config = DefaultMetricsConfig::default();
assert!(config.enabled);
env::set_var("OBZENFLOW_METRICS_ENABLED", "invalid");
let config = DefaultMetricsConfig::default();
assert!(config.enabled);
match saved {
Some(val) => env::set_var("OBZENFLOW_METRICS_ENABLED", val),
None => env::remove_var("OBZENFLOW_METRICS_ENABLED"),
}
}
}