use comfy_table::Color;
use std::env;
use std::io::IsTerminal;
pub fn colors_disabled() -> bool {
env::var("NO_COLOR").is_ok() || !std::io::stdout().is_terminal()
}
pub fn severity_color(severity: &str) -> Color {
match severity {
"ERROR" => Color::Red,
"WARN" => Color::Yellow,
"INFO" => Color::Green,
"DEBUG" => Color::DarkGrey,
_ => Color::Reset,
}
}
pub fn timestamp_color() -> Color {
Color::DarkGrey
}
pub fn id_color() -> Color {
Color::Cyan
}
pub fn genai_system_color() -> Color {
Color::Magenta
}
pub fn token_count_color() -> Color {
Color::Yellow
}
pub fn metric_type_color(metric_type: &str) -> Color {
match metric_type {
"counter" => Color::Green,
"gauge" => Color::Blue,
"histogram" => Color::Yellow,
"summary" => Color::Cyan,
_ => Color::Reset,
}
}
pub fn trace_status_color(has_errors: bool) -> Color {
if has_errors {
Color::Red
} else {
Color::Green
}
}
pub mod ansi {
pub fn colors_disabled() -> bool {
super::colors_disabled()
}
pub const RED: &str = "\x1b[31m";
pub const YELLOW: &str = "\x1b[33m";
pub const GREEN: &str = "\x1b[32m";
pub const BLUE: &str = "\x1b[34m";
pub const DARK_GREY: &str = "\x1b[90m";
pub const CYAN: &str = "\x1b[36m";
pub const MAGENTA: &str = "\x1b[35m";
pub const BOLD: &str = "\x1b[1m";
pub const RESET: &str = "\x1b[0m";
pub fn severity_color(severity: &str) -> &'static str {
match severity {
"ERROR" => RED,
"WARN" => YELLOW,
"INFO" => GREEN,
"DEBUG" => DARK_GREY,
_ => "",
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_severity_colors() {
assert_eq!(severity_color("ERROR"), Color::Red);
assert_eq!(severity_color("WARN"), Color::Yellow);
assert_eq!(severity_color("INFO"), Color::Green);
assert_eq!(severity_color("DEBUG"), Color::DarkGrey);
assert_eq!(severity_color("UNKNOWN"), Color::Reset);
}
#[test]
fn test_metric_type_colors() {
assert_eq!(metric_type_color("counter"), Color::Green);
assert_eq!(metric_type_color("gauge"), Color::Blue);
assert_eq!(metric_type_color("histogram"), Color::Yellow);
assert_eq!(metric_type_color("summary"), Color::Cyan);
assert_eq!(metric_type_color("unknown"), Color::Reset);
}
#[test]
fn test_trace_status_colors() {
assert_eq!(trace_status_color(true), Color::Red);
assert_eq!(trace_status_color(false), Color::Green);
}
#[test]
fn test_ansi_severity_colors() {
assert_eq!(ansi::severity_color("ERROR"), ansi::RED);
assert_eq!(ansi::severity_color("WARN"), ansi::YELLOW);
assert_eq!(ansi::severity_color("INFO"), ansi::GREEN);
assert_eq!(ansi::severity_color("DEBUG"), ansi::DARK_GREY);
assert_eq!(ansi::severity_color("UNKNOWN"), "");
}
}