redisctl_config/
resilience.rs1use serde::{Deserialize, Serialize};
7
8#[derive(Debug, Clone, Default, Serialize, Deserialize)]
10pub struct ResilienceConfig {
11 #[serde(default)]
13 pub circuit_breaker: CircuitBreakerConfig,
14
15 #[serde(default)]
17 pub retry: RetryConfig,
18
19 #[serde(default)]
21 pub rate_limit: RateLimitConfig,
22}
23
24#[derive(Debug, Clone, Serialize, Deserialize)]
26pub struct CircuitBreakerConfig {
27 #[serde(default = "default_true")]
29 pub enabled: bool,
30
31 #[serde(default = "default_failure_threshold")]
33 pub failure_threshold: f32,
34
35 #[serde(default = "default_window_size")]
37 pub window_size: u32,
38
39 #[serde(default = "default_reset_timeout")]
41 pub reset_timeout_secs: u64,
42}
43
44impl Default for CircuitBreakerConfig {
45 fn default() -> Self {
46 Self {
47 enabled: true,
48 failure_threshold: 0.5,
49 window_size: 20,
50 reset_timeout_secs: 60,
51 }
52 }
53}
54
55#[derive(Debug, Clone, Serialize, Deserialize)]
57pub struct RetryConfig {
58 #[serde(default = "default_true")]
60 pub enabled: bool,
61
62 #[serde(default = "default_max_attempts")]
64 pub max_attempts: u32,
65
66 #[serde(default = "default_backoff_ms")]
68 pub backoff_ms: u64,
69
70 #[serde(default = "default_max_backoff_ms")]
72 pub max_backoff_ms: u64,
73}
74
75impl Default for RetryConfig {
76 fn default() -> Self {
77 Self {
78 enabled: true,
79 max_attempts: 3,
80 backoff_ms: 100,
81 max_backoff_ms: 5000,
82 }
83 }
84}
85
86#[derive(Debug, Clone, Serialize, Deserialize)]
88pub struct RateLimitConfig {
89 #[serde(default)]
91 pub enabled: bool,
92
93 #[serde(default = "default_requests_per_minute")]
95 pub requests_per_minute: u32,
96}
97
98impl Default for RateLimitConfig {
99 fn default() -> Self {
100 Self {
101 enabled: false,
102 requests_per_minute: 100,
103 }
104 }
105}
106
107fn default_true() -> bool {
109 true
110}
111
112fn default_failure_threshold() -> f32 {
113 0.5
114}
115
116fn default_window_size() -> u32 {
117 20
118}
119
120fn default_reset_timeout() -> u64 {
121 60
122}
123
124fn default_max_attempts() -> u32 {
125 3
126}
127
128fn default_backoff_ms() -> u64 {
129 100
130}
131
132fn default_max_backoff_ms() -> u64 {
133 5000
134}
135
136fn default_requests_per_minute() -> u32 {
137 100
138}