mecha10-runtime 0.8.2

Runtime supervisor for Mecha10 nodes - launching, monitoring, and lifecycle management
Documentation
//! Runtime configuration types

use serde::{Deserialize, Serialize};
use std::time::Duration;

#[derive(Clone, Debug)]
pub struct RuntimeConfig {
    pub log_level: String,

    pub log_format: LogFormat,

    pub restart_policy: RestartPolicy,

    pub health_check_interval: Duration,

    pub shutdown_timeout: Duration,
}

impl Default for RuntimeConfig {
    fn default() -> Self {
        Self {
            log_level: "info".to_string(),
            log_format: LogFormat::Pretty,
            restart_policy: RestartPolicy::Never,
            health_check_interval: Duration::from_secs(30),
            shutdown_timeout: Duration::from_secs(10),
        }
    }
}

#[derive(Clone, Debug, Serialize, Deserialize)]
pub enum LogFormat {
    Pretty,
    Json,
    Compact,
}

#[derive(Clone, Debug)]
pub enum RestartPolicy {
    Never,

    OnFailure { max_retries: usize, backoff: Duration },

    Always { backoff: Duration },
}

impl RestartPolicy {
    /// Check if should restart based on attempt count
    pub fn should_restart(&self, attempt: usize) -> bool {
        match self {
            RestartPolicy::Never => false,
            RestartPolicy::OnFailure { max_retries, .. } => attempt < *max_retries,
            RestartPolicy::Always { .. } => true,
        }
    }

    /// Calculate backoff duration for given attempt
    pub fn backoff_duration(&self, attempt: usize) -> Duration {
        match self {
            RestartPolicy::Never => Duration::from_secs(0),
            RestartPolicy::OnFailure { backoff, .. } => *backoff * 2u32.pow(attempt as u32),
            RestartPolicy::Always { backoff } => *backoff,
        }
    }
}