synapse_pingora/payload/
config.rs1use serde::{Deserialize, Serialize};
4use std::collections::HashMap;
5
6use super::anomaly::PayloadAnomalyType;
7
8#[derive(Debug, Clone, Serialize, Deserialize)]
10pub struct PayloadConfig {
11 pub enabled: bool,
13 pub window_duration_ms: u64,
15 pub max_windows: usize,
17 pub max_endpoints: usize,
19 pub max_entities: usize,
21 pub oversize_threshold: f64,
23 pub bandwidth_spike_threshold: f64,
25 pub warmup_requests: u32,
27 pub exfiltration_ratio_threshold: f64,
29 pub upload_ratio_threshold: f64,
31 pub min_large_payload_bytes: u64,
33 pub timeline_max_buckets: usize,
35 pub anomaly_risk: HashMap<PayloadAnomalyType, f64>,
37}
38
39impl Default for PayloadConfig {
40 fn default() -> Self {
41 let mut anomaly_risk = HashMap::new();
42 anomaly_risk.insert(PayloadAnomalyType::OversizedRequest, 20.0);
43 anomaly_risk.insert(PayloadAnomalyType::OversizedResponse, 15.0);
44 anomaly_risk.insert(PayloadAnomalyType::BandwidthSpike, 25.0);
45 anomaly_risk.insert(PayloadAnomalyType::ExfiltrationPattern, 40.0);
46 anomaly_risk.insert(PayloadAnomalyType::UploadPattern, 35.0);
47
48 Self {
49 enabled: true,
50 window_duration_ms: 60_000,
51 max_windows: 60,
52 max_endpoints: 5_000,
53 max_entities: 10_000,
54 oversize_threshold: 3.0,
55 bandwidth_spike_threshold: 5.0,
56 warmup_requests: 100,
57 exfiltration_ratio_threshold: 100.0,
58 upload_ratio_threshold: 100.0,
59 min_large_payload_bytes: 100_000,
60 timeline_max_buckets: 1_440,
61 anomaly_risk,
62 }
63 }
64}