spawn-access-control 0.1.12

A Rust library for access control management with WebAssembly support, including role-based access control (RBAC), permissions, and audit logging.
Documentation
use crate::time_series_analyzer::{TimeSeriesAnalyzer, TimeSeriesConfig};
use crate::alert_storage::StoredAlert;
use chrono::{Utc, Duration};

#[test]
fn test_time_series_analysis() {
    let config = TimeSeriesConfig {
        min_data_points: 10,
        forecast_horizon: Duration::hours(24),
        seasonality_threshold: 0.3,
        trend_threshold: 0.1,
    };

    let analyzer = TimeSeriesAnalyzer::new(config);
    let alerts = create_test_time_series();

    let analysis = analyzer.analyze(&alerts).expect("Analysis failed");

    assert!(analysis.trend.confidence > 0.0);
    assert!(analysis.trend.confidence <= 1.0);

    assert!(!analysis.seasonality.daily_peak_hours.is_empty());
    assert!(analysis.seasonality.confidence > 0.0);

    assert!(!analysis.forecasts.is_empty());
    for forecast in &analysis.forecasts {
        assert!(forecast.confidence_interval.0 <= forecast.expected_value);
        assert!(forecast.confidence_interval.1 >= forecast.expected_value);
        assert!(forecast.probability >= 0.0 && forecast.probability <= 1.0);
    }
}

fn create_test_time_series() -> Vec<StoredAlert> {
    let base_time = Utc::now() - Duration::hours(48);
    let mut alerts = Vec::new();

    for i in 0..48 {
        let hour = i % 24;
        let base_value = match hour {
            9..=17 => 80.0,
            _ => 40.0,
        };

        let trend = i as f64 * 0.5;
        let noise = rand::random::<f64>() * 10.0;

        alerts.push(StoredAlert {
            id: uuid::Uuid::new_v4(),
            incident_id: format!("INC_{}", i),
            severity: "Warning".to_string(),
            message: "Test alert".to_string(),
            metric_name: "cpu_usage".to_string(),
            current_value: base_value + trend + noise,
            threshold: 90.0,
            created_at: base_time + Duration::hours(i),
            resolved_at: None,
            metadata: serde_json::Value::Null,
        });
    }

    alerts
}