gitlab-runner-tui 0.1.13

A terminal UI for monitoring GitLab CI runners
use crate::config::RunnerDiscoveryMode;
use chrono::{DateTime, Utc};
use serde::Serialize;

#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize)]
pub struct QueryRequestCounts {
    pub list_requests: usize,
    pub detail_requests: usize,
    pub manager_requests: usize,
}

#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
pub struct LiveQueryMetrics {
    pub started_at: DateTime<Utc>,
    pub finished_at: DateTime<Utc>,
    pub duration_millis: u128,
    pub result_count: usize,
    pub discovery_mode: RunnerDiscoveryMode,
    pub request_counts: QueryRequestCounts,
    pub succeeded: bool,
    pub error_message: Option<String>,
}

impl LiveQueryMetrics {
    pub fn success(
        started_at: DateTime<Utc>,
        finished_at: DateTime<Utc>,
        duration_millis: u128,
        result_count: usize,
        discovery_mode: RunnerDiscoveryMode,
        request_counts: QueryRequestCounts,
    ) -> Self {
        Self {
            started_at,
            finished_at,
            duration_millis,
            result_count,
            discovery_mode,
            request_counts,
            succeeded: true,
            error_message: None,
        }
    }

    pub fn failure(
        started_at: DateTime<Utc>,
        finished_at: DateTime<Utc>,
        duration_millis: u128,
        discovery_mode: RunnerDiscoveryMode,
        error_message: String,
    ) -> Self {
        Self {
            started_at,
            finished_at,
            duration_millis,
            result_count: 0,
            discovery_mode,
            request_counts: QueryRequestCounts::default(),
            succeeded: false,
            error_message: Some(error_message),
        }
    }
}