#![allow(clippy::too_many_arguments)]
#![allow(dead_code)]
use serde::{Deserialize, Serialize};
use std::time::Duration;
#[derive(Debug, Clone)]
pub struct SafetyReliabilityMetrics {
pub failure_metrics: FailureMetrics,
pub risk_assessment: RiskAssessmentMetrics,
pub redundancy_metrics: RedundancyMetrics,
pub maintenance_metrics: MaintenanceMetrics,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FailureMetrics {
pub mtbf: Duration,
pub mttr: Duration,
pub failure_rate: f64,
pub critical_failure_rate: f64,
pub availability: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RiskAssessmentMetrics {
pub overall_risk_score: f64,
pub safety_integrity_level: u8,
pub hazard_coverage: f64,
pub mitigation_effectiveness: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RedundancyMetrics {
pub redundancy_level: u8,
pub graceful_degradation: f64,
pub fault_detection_coverage: f64,
pub recovery_time: Duration,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MaintenanceMetrics {
pub predictive_accuracy: f64,
pub diagnostic_coverage: f64,
pub maintenance_efficiency: f64,
pub life_prediction_accuracy: f64,
}
impl SafetyReliabilityMetrics {
pub fn new() -> Self {
Self {
failure_metrics: FailureMetrics::default(),
risk_assessment: RiskAssessmentMetrics::default(),
redundancy_metrics: RedundancyMetrics::default(),
maintenance_metrics: MaintenanceMetrics::default(),
}
}
}
impl Default for FailureMetrics {
fn default() -> Self {
Self {
mtbf: Duration::from_secs(86400), mttr: Duration::from_secs(3600), failure_rate: 0.001,
critical_failure_rate: 0.0001,
availability: 0.99,
}
}
}
impl Default for RiskAssessmentMetrics {
fn default() -> Self {
Self {
overall_risk_score: 0.1,
safety_integrity_level: 2,
hazard_coverage: 0.95,
mitigation_effectiveness: 0.9,
}
}
}
impl Default for RedundancyMetrics {
fn default() -> Self {
Self {
redundancy_level: 2,
graceful_degradation: 1.0,
fault_detection_coverage: 0.95,
recovery_time: Duration::from_secs(10),
}
}
}
impl Default for MaintenanceMetrics {
fn default() -> Self {
Self {
predictive_accuracy: 0.8,
diagnostic_coverage: 0.9,
maintenance_efficiency: 0.85,
life_prediction_accuracy: 0.75,
}
}
}