mockforge_analytics/
config.rs1use serde::{Deserialize, Serialize};
4use std::path::PathBuf;
5
6#[derive(Debug, Clone, Serialize, Deserialize)]
8pub struct AnalyticsConfig {
9 pub enabled: bool,
11
12 pub database_path: PathBuf,
14
15 #[serde(default = "default_aggregation_interval")]
17 pub aggregation_interval_seconds: u64,
18
19 #[serde(default = "default_rollup_interval")]
21 pub rollup_interval_hours: u64,
22
23 #[serde(default)]
25 pub retention: RetentionConfig,
26
27 #[serde(default = "default_batch_size")]
29 pub batch_size: usize,
30
31 #[serde(default = "default_max_query_results")]
33 pub max_query_results: usize,
34}
35
36#[derive(Debug, Clone, Serialize, Deserialize)]
38pub struct RetentionConfig {
39 #[serde(default = "default_minute_retention")]
41 pub minute_aggregates_days: u32,
42
43 #[serde(default = "default_hour_retention")]
45 pub hour_aggregates_days: u32,
46
47 #[serde(default = "default_day_retention")]
49 pub day_aggregates_days: u32,
50
51 #[serde(default = "default_error_retention")]
53 pub error_events_days: u32,
54
55 #[serde(default = "default_client_retention")]
57 pub client_analytics_days: u32,
58
59 #[serde(default = "default_traffic_retention")]
61 pub traffic_patterns_days: u32,
62
63 #[serde(default = "default_snapshot_retention")]
65 pub snapshots_days: u32,
66
67 #[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
101fn default_aggregation_interval() -> u64 {
104 60 }
106
107fn default_rollup_interval() -> u64 {
108 1 }
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 }
122
123fn default_hour_retention() -> u32 {
124 30 }
126
127fn default_day_retention() -> u32 {
128 365 }
130
131fn default_error_retention() -> u32 {
132 7 }
134
135fn default_client_retention() -> u32 {
136 30 }
138
139fn default_traffic_retention() -> u32 {
140 90 }
142
143fn default_snapshot_retention() -> u32 {
144 90 }
146
147fn default_cleanup_interval() -> u32 {
148 24 }