avila_telemetry/
lib.rs

1//! # avila-telemetry
2//!
3//! Time series analysis, telemetry, and forecasting library for Rust.
4//!
5//! ## Features
6//!
7//! - **Time Series Analysis**: ARIMA, SARIMA, State Space Models
8//! - **Anomaly Detection**: Statistical and ML-based detection
9//! - **Forecasting**: Multi-step prediction with probabilistic forecasting
10//! - **Feature Engineering**: Lag features, rolling statistics, seasonality decomposition
11//!
12//! ## Example
13//!
14//! ```rust
15//! use avila_telemetry::TimeSeries;
16//!
17//! // Create a time series
18//! let data = vec![1.0, 2.0, 3.0, 4.0, 5.0];
19//! let ts = TimeSeries::new(data);
20//!
21//! // Calculate moving average
22//! let ma = ts.moving_average(3);
23//! ```
24
25pub mod anomaly;
26pub mod decomposition;
27pub mod features;
28pub mod forecasting;
29pub mod models;
30pub mod observability;
31pub mod time_series;
32
33pub use anomaly::{Anomaly, AnomalyDetector, AnomalyType};
34pub use decomposition::{Decomposer, DecompositionResult, DecompositionType};
35pub use features::FeatureExtractor;
36pub use forecasting::{ExponentialSmoothing, ForecastResult, Forecaster, MovingAverageForecaster};
37pub use observability::{
38    Alert, AlertLevel, DataQuality, DataQualityAssessment, ErrorBudget, GoldenSignals, LogSeverity,
39    NASAQualityControl, PerformanceTracker, ServiceLevelObjective, StructuredLog,
40};
41pub use time_series::TimeSeries;
42
43/// Common error type for the library
44#[derive(Debug, serde::Serialize, serde::Deserialize)]
45pub enum TelemetryError {
46    /// Invalid input data
47    InvalidData(String),
48    /// Insufficient data points
49    InsufficientData(String),
50    /// Model fitting error
51    ModelError(String),
52    /// Invalid parameter
53    InvalidParameter(String),
54}
55
56impl std::fmt::Display for TelemetryError {
57    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
58        match self {
59            TelemetryError::InvalidData(msg) => write!(f, "Invalid data: {}", msg),
60            TelemetryError::InsufficientData(msg) => write!(f, "Insufficient data: {}", msg),
61            TelemetryError::ModelError(msg) => write!(f, "Model error: {}", msg),
62            TelemetryError::InvalidParameter(msg) => write!(f, "Invalid parameter: {}", msg),
63        }
64    }
65}
66
67impl std::error::Error for TelemetryError {}
68
69pub type Result<T> = std::result::Result<T, TelemetryError>;
70
71#[cfg(test)]
72mod tests {
73    use super::*;
74
75    #[test]
76    fn test_basic_functionality() {
77        let data = vec![1.0, 2.0, 3.0, 4.0, 5.0];
78        let ts = TimeSeries::new(data);
79        assert_eq!(ts.len(), 5);
80    }
81}