mockforge_analytics/
config.rs

1//! Configuration types for the analytics system
2
3use serde::{Deserialize, Serialize};
4use std::path::PathBuf;
5
6/// Analytics system configuration
7#[derive(Debug, Clone, Serialize, Deserialize)]
8pub struct AnalyticsConfig {
9    /// Whether analytics is enabled
10    pub enabled: bool,
11
12    /// Path to the analytics database file
13    pub database_path: PathBuf,
14
15    /// How often to aggregate metrics from Prometheus (in seconds)
16    #[serde(default = "default_aggregation_interval")]
17    pub aggregation_interval_seconds: u64,
18
19    /// How often to roll up minute data to hour data (in hours)
20    #[serde(default = "default_rollup_interval")]
21    pub rollup_interval_hours: u64,
22
23    /// Data retention policies
24    #[serde(default)]
25    pub retention: RetentionConfig,
26
27    /// Batch size for database operations
28    #[serde(default = "default_batch_size")]
29    pub batch_size: usize,
30
31    /// Maximum number of results to return from queries
32    #[serde(default = "default_max_query_results")]
33    pub max_query_results: usize,
34}
35
36/// Data retention configuration
37#[derive(Debug, Clone, Serialize, Deserialize)]
38pub struct RetentionConfig {
39    /// How long to keep minute-level aggregates (in days)
40    #[serde(default = "default_minute_retention")]
41    pub minute_aggregates_days: u32,
42
43    /// How long to keep hour-level aggregates (in days)
44    #[serde(default = "default_hour_retention")]
45    pub hour_aggregates_days: u32,
46
47    /// How long to keep day-level aggregates (in days)
48    #[serde(default = "default_day_retention")]
49    pub day_aggregates_days: u32,
50
51    /// How long to keep error events (in days)
52    #[serde(default = "default_error_retention")]
53    pub error_events_days: u32,
54
55    /// How long to keep client analytics (in days)
56    #[serde(default = "default_client_retention")]
57    pub client_analytics_days: u32,
58
59    /// How long to keep traffic patterns (in days)
60    #[serde(default = "default_traffic_retention")]
61    pub traffic_patterns_days: u32,
62
63    /// How long to keep analytics snapshots (in days)
64    #[serde(default = "default_snapshot_retention")]
65    pub snapshots_days: u32,
66
67    /// How often to run cleanup (in hours)
68    #[serde(default = "default_cleanup_interval")]
69    pub cleanup_interval_hours: u32,
70}
71
72impl Default for AnalyticsConfig {
73    fn default() -> Self {
74        Self {
75            enabled: true,
76            database_path: PathBuf::from("mockforge-analytics.db"),
77            aggregation_interval_seconds: default_aggregation_interval(),
78            rollup_interval_hours: default_rollup_interval(),
79            retention: RetentionConfig::default(),
80            batch_size: default_batch_size(),
81            max_query_results: default_max_query_results(),
82        }
83    }
84}
85
86impl Default for RetentionConfig {
87    fn default() -> Self {
88        Self {
89            minute_aggregates_days: default_minute_retention(),
90            hour_aggregates_days: default_hour_retention(),
91            day_aggregates_days: default_day_retention(),
92            error_events_days: default_error_retention(),
93            client_analytics_days: default_client_retention(),
94            traffic_patterns_days: default_traffic_retention(),
95            snapshots_days: default_snapshot_retention(),
96            cleanup_interval_hours: default_cleanup_interval(),
97        }
98    }
99}
100
101// Default value functions
102
103fn default_aggregation_interval() -> u64 {
104    60 // 1 minute
105}
106
107fn default_rollup_interval() -> u64 {
108    1 // 1 hour
109}
110
111fn default_batch_size() -> usize {
112    1000
113}
114
115fn default_max_query_results() -> usize {
116    10000
117}
118
119fn default_minute_retention() -> u32 {
120    7 // 7 days
121}
122
123fn default_hour_retention() -> u32 {
124    30 // 30 days
125}
126
127fn default_day_retention() -> u32 {
128    365 // 1 year
129}
130
131fn default_error_retention() -> u32 {
132    7 // 7 days
133}
134
135fn default_client_retention() -> u32 {
136    30 // 30 days
137}
138
139fn default_traffic_retention() -> u32 {
140    90 // 90 days
141}
142
143fn default_snapshot_retention() -> u32 {
144    90 // 90 days
145}
146
147fn default_cleanup_interval() -> u32 {
148    24 // Daily
149}