athena_rs 3.18.0

Hyper performant polyglot Database driver
Documentation
//! Health-assessment assembly for `/debug/schema`.
//!
//! This module composes overall health label and structured health reasons from
//! summary metrics, isolating health-policy orchestration from summary payload
//! construction, while staged payload assembly is delegated to
//! `debug_health_assessment_stage_input_assembly`,
//! `debug_health_assessment_stage_output_assembly` and final staged handoff is
//! delegated to the stable facade in
//! `debug_health_assessment_from_stage_output_assembly`, which delegates to
//! `debug_health_assessment_stage_output_handoff_assembly`.

use super::debug_health_assessment_contracts::LoggingSchemaDebugHealthAssessment;
use super::debug_health_assessment_from_stage_output_assembly::build_logging_schema_debug_health_assessment_from_stage_output_assembly;
use super::debug_health_assessment_stage_input_assembly::build_debug_health_assessment_stage_input_assembly;
use super::debug_health_assessment_stage_output_assembly::build_debug_health_assessment_stage_output_assembly;
use super::debug_summary_metrics::LoggingSchemaDebugSummaryMetrics;

/// Builds a composed health assessment from summary metrics.
pub(super) fn build_logging_schema_debug_health_assessment(
    metrics: &LoggingSchemaDebugSummaryMetrics,
) -> LoggingSchemaDebugHealthAssessment {
    let stage_input = build_debug_health_assessment_stage_input_assembly(metrics);
    let stage = build_debug_health_assessment_stage_output_assembly(stage_input);
    build_logging_schema_debug_health_assessment_from_stage_output_assembly(stage)
}

#[cfg(test)]
mod tests {
    use super::*;
    use crate::api::schema::debug_health_stage_test_fixtures::build_health_summary_metrics_for_tests;

    #[test]
    /// Emits healthy status with one info reason when no missing resources exist.
    fn health_assessment_is_healthy_with_info_reason_when_no_issues_exist() {
        let assessment = build_logging_schema_debug_health_assessment(
            &build_health_summary_metrics_for_tests(0, 0, 0, 0, 0),
        );
        assert_eq!(assessment.health, "healthy");
        assert_eq!(assessment.health_reasons.len(), 1);
        assert_eq!(
            assessment.health_reasons[0].code,
            "all_expected_resources_present"
        );
    }

    #[test]
    /// Emits degraded status and error-severity reason when required resources are missing.
    fn health_assessment_is_degraded_when_required_resources_are_missing() {
        let assessment = build_logging_schema_debug_health_assessment(
            &build_health_summary_metrics_for_tests(1, 1, 0, 0, 0),
        );
        assert_eq!(assessment.health, "degraded");
        assert_eq!(assessment.health_reasons[0].severity, "error");
    }
}