mockforge_analytics/
lib.rs

1//! `MockForge` Analytics
2//!
3//! Provides comprehensive traffic analytics and metrics dashboard capabilities
4//! for `MockForge`, including:
5//!
6//! - Time-series metrics aggregation (minute/hour/day granularity)
7//! - Endpoint performance tracking
8//! - Error analysis and monitoring
9//! - Client analytics
10//! - Traffic pattern detection
11//! - Data export (CSV, JSON)
12//! - Configurable retention policies
13//!
14//! # Architecture
15//!
16//! The analytics system consists of several components:
17//!
18//! - **Database**: SQLite-based storage for aggregated metrics
19//! - **Aggregator**: Background service that queries Prometheus and stores metrics
20//! - **Queries**: High-level query API for dashboard data
21//! - **Export**: Data export functionality
22//! - **Retention**: Automatic cleanup of old data
23//!
24//! # Example
25//!
26//! ```no_run
27//! use mockforge_analytics::{AnalyticsDatabase, AnalyticsConfig, RetentionConfig};
28//! use std::path::PathBuf;
29//!
30//! # async fn example() -> anyhow::Result<()> {
31//! let config = AnalyticsConfig {
32//!     enabled: true,
33//!     database_path: PathBuf::from("analytics.db"),
34//!     aggregation_interval_seconds: 60,
35//!     rollup_interval_hours: 1,
36//!     retention: RetentionConfig::default(),
37//!     batch_size: 1000,
38//!     max_query_results: 10000,
39//! };
40//!
41//! let db = AnalyticsDatabase::new(&config.database_path).await?;
42//! db.run_migrations().await?;
43//!
44//! // Query top endpoints
45//! let endpoints = db.get_top_endpoints(10, None).await?;
46//! for endpoint in &endpoints {
47//!     println!("Endpoint: {} - {} requests", endpoint.endpoint, endpoint.total_requests);
48//! }
49//! # Ok(())
50//! # }
51//! ```
52
53pub mod aggregator;
54pub mod config;
55pub mod database;
56pub mod error;
57pub mod export;
58pub mod models;
59pub mod pillar_usage;
60pub mod queries;
61pub mod retention;
62
63pub use config::{AnalyticsConfig, RetentionConfig};
64pub use database::AnalyticsDatabase;
65pub use error::{AnalyticsError, Result};
66pub use models::*;
67pub use pillar_usage::*;
68
69// Explicitly re-export coverage metrics types for easier importing
70pub use models::{
71    DriftPercentageMetrics, EndpointCoverage, PersonaCIHit, RealityLevelStaleness,
72    ScenarioUsageMetrics,
73};
74
75/// Initialize the analytics system with the given configuration
76pub async fn init(config: AnalyticsConfig) -> Result<AnalyticsDatabase> {
77    let db = AnalyticsDatabase::new(&config.database_path).await?;
78    db.run_migrations().await?;
79    Ok(db)
80}