bindizr 0.1.0-beta.4

DNS Synchronization Service for BIND9
Documentation
use crate::{
    log_debug,
    socket::{
        client::DaemonSocketClient,
        types::{DaemonCommandKind, DaemonStatusResponse},
    },
};

pub(crate) async fn handle_command() -> Result<(), String> {
    let client = DaemonSocketClient::new();

    // Create socket request
    let res = client.send_command(DaemonCommandKind::Status, None).await?;

    log_debug!("Status command result: {:?}", res);

    let status: DaemonStatusResponse = serde_json::from_value(res.data)
        .map_err(|e| format!("Failed to parse status response: {}", e))?;

    println!("=== BINDIZR STATUS ===");

    println!("Status: \x1b[32mRunning\x1b[0m");

    let pid = match status.pid {
        Some(pid) => pid.to_string(),
        None => "Unknown".to_string(),
    };
    println!("PID: {}", pid);

    println!("Version: {}", status.version);

    println!("Loaded Configurations:");

    println!("\x1b[36m[api]\x1b[0m");
    println!(
        "  \x1b[33m{:<22}\x1b[0m = {}",
        "listen_addr", status.config.api.listen_addr
    );
    println!(
        "  \x1b[33m{:<22}\x1b[0m = {}",
        "listen_port", status.config.api.listen_port
    );
    println!(
        "  \x1b[33m{:<22}\x1b[0m = {}",
        "require_authentication", status.config.api.require_authentication
    );
    println!();

    println!("\x1b[36m[database]\x1b[0m");
    println!(
        "  \x1b[33m{:<22}\x1b[0m = {}",
        "type", status.config.database.database_type
    );
    println!();

    println!("\x1b[36m[database.mysql]\x1b[0m");
    println!(
        "  \x1b[33m{:<22}\x1b[0m = {}",
        "server_url", status.config.database.mysql.server_url
    );
    println!();

    println!("\x1b[36m[database.sqlite]\x1b[0m");
    println!(
        "  \x1b[33m{:<22}\x1b[0m = {}",
        "file_path", status.config.database.sqlite.file_path
    );
    println!();

    println!("\x1b[36m[database.postgresql]\x1b[0m");
    println!(
        "  \x1b[33m{:<22}\x1b[0m = {}",
        "server_url", status.config.database.postgresql.server_url
    );
    println!();

    println!("\x1b[36m[dns]\x1b[0m");
    println!(
        "  \x1b[33m{:<22}\x1b[0m = {}",
        "listen_addr", status.config.dns.listen_addr
    );
    println!(
        "  \x1b[33m{:<22}\x1b[0m = {}",
        "listen_port", status.config.dns.listen_port
    );
    println!(
        "  \x1b[33m{:<22}\x1b[0m = {}",
        "secondary_addrs", status.config.dns.secondary_addrs
    );
    println!(
        "  \x1b[33m{:<22}\x1b[0m = {}",
        "notify_after_update", status.config.dns.notify_after_update
    );
    println!(
        "  \x1b[33m{:<22}\x1b[0m = {}",
        "notify_on_startup", status.config.dns.notify_on_startup
    );
    println!(
        "  \x1b[33m{:<22}\x1b[0m = {}",
        "notify_retries", status.config.dns.notify_retries
    );
    println!(
        "  \x1b[33m{:<22}\x1b[0m = {}",
        "notify_timeout_secs", status.config.dns.notify_timeout_secs
    );
    println!();

    println!("\x1b[36m[logging]\x1b[0m");
    println!(
        "  \x1b[33m{:<22}\x1b[0m = {}",
        "log_level", status.config.logging.log_level
    );
    Ok(())
}