openzeppelin_relayer/models/health/
mod.rs1use serde::Serialize;
7use utoipa::ToSchema;
8
9#[derive(Debug, Clone, Serialize, ToSchema)]
11pub struct PoolStatus {
12 pub connected: bool,
14 pub available: usize,
16 pub max_size: usize,
18 #[serde(skip_serializing_if = "Option::is_none")]
20 #[schema(nullable = false)]
21 pub error: Option<String>,
22}
23
24#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, ToSchema)]
26#[serde(rename_all = "lowercase")]
27pub enum ComponentStatus {
28 Healthy,
30 Degraded,
32 Unhealthy,
34}
35
36#[derive(Debug, Clone, Serialize, ToSchema)]
38pub struct SystemHealth {
39 pub status: ComponentStatus,
40 pub fd_count: usize,
41 pub fd_limit: usize,
42 pub fd_usage_percent: u32,
43 pub close_wait_count: usize,
44 #[serde(skip_serializing_if = "Option::is_none")]
45 #[schema(nullable = false)]
46 pub error: Option<String>,
47}
48
49#[derive(Debug, Clone, Serialize, ToSchema)]
51pub struct RedisHealth {
52 pub status: ComponentStatus,
53 pub primary_pool: PoolStatus,
54 pub reader_pool: PoolStatus,
55 #[serde(skip_serializing_if = "Option::is_none")]
56 #[schema(nullable = false)]
57 pub error: Option<String>,
58}
59
60#[derive(Debug, Clone, Serialize, ToSchema)]
62pub struct QueueHealth {
63 pub status: ComponentStatus,
64 #[serde(skip_serializing_if = "Option::is_none")]
65 #[schema(nullable = false)]
66 pub error: Option<String>,
67}
68
69#[derive(Debug, Clone, Serialize, ToSchema)]
71pub struct PluginHealth {
72 pub status: ComponentStatus,
73 pub enabled: bool,
74 #[serde(skip_serializing_if = "Option::is_none")]
75 #[schema(nullable = false)]
76 pub circuit_state: Option<String>,
77 #[serde(skip_serializing_if = "Option::is_none")]
78 #[schema(nullable = false)]
79 pub error: Option<String>,
80 #[serde(skip_serializing_if = "Option::is_none")]
82 #[schema(nullable = false)]
83 pub uptime_ms: Option<u64>,
84 #[serde(skip_serializing_if = "Option::is_none")]
86 #[schema(nullable = false)]
87 pub memory: Option<u64>,
88 #[serde(skip_serializing_if = "Option::is_none")]
90 #[schema(nullable = false)]
91 pub pool_completed: Option<u64>,
92 #[serde(skip_serializing_if = "Option::is_none")]
94 #[schema(nullable = false)]
95 pub pool_queued: Option<u64>,
96 #[serde(skip_serializing_if = "Option::is_none")]
98 #[schema(nullable = false)]
99 pub success_rate: Option<f64>,
100 #[serde(skip_serializing_if = "Option::is_none")]
102 #[schema(nullable = false)]
103 pub avg_response_time_ms: Option<u32>,
104 #[serde(skip_serializing_if = "Option::is_none")]
106 #[schema(nullable = false)]
107 pub recovering: Option<bool>,
108 #[serde(skip_serializing_if = "Option::is_none")]
110 #[schema(nullable = false)]
111 pub recovery_percent: Option<u32>,
112 #[serde(skip_serializing_if = "Option::is_none")]
114 #[schema(nullable = false)]
115 pub shared_socket_available_slots: Option<usize>,
116 #[serde(skip_serializing_if = "Option::is_none")]
118 #[schema(nullable = false)]
119 pub shared_socket_active_connections: Option<usize>,
120 #[serde(skip_serializing_if = "Option::is_none")]
122 #[schema(nullable = false)]
123 pub shared_socket_registered_executions: Option<usize>,
124 #[serde(skip_serializing_if = "Option::is_none")]
126 #[schema(nullable = false)]
127 pub connection_pool_available_slots: Option<usize>,
128 #[serde(skip_serializing_if = "Option::is_none")]
130 #[schema(nullable = false)]
131 pub connection_pool_active_connections: Option<usize>,
132}
133
134#[derive(Debug, Clone, Serialize, ToSchema)]
136pub struct Components {
137 pub system: SystemHealth,
138 pub redis: RedisHealth,
139 pub queue: QueueHealth,
140 #[serde(skip_serializing_if = "Option::is_none")]
141 #[schema(nullable = false)]
142 pub plugins: Option<PluginHealth>,
143}
144
145#[derive(Debug, Clone, Serialize, ToSchema)]
147pub struct ReadinessResponse {
148 pub ready: bool,
149 pub status: ComponentStatus,
150 #[serde(skip_serializing_if = "Option::is_none")]
151 #[schema(nullable = false)]
152 pub reason: Option<String>,
153 pub components: Components,
154 pub timestamp: String,
155}
156
157#[derive(Debug, Clone)]
162pub struct RedisHealthStatus {
163 pub healthy: bool,
165 pub primary_pool: PoolStatus,
167 pub reader_pool: PoolStatus,
169 pub error: Option<String>,
171}
172
173#[derive(Debug, Clone)]
178pub struct QueueHealthStatus {
179 pub healthy: bool,
181 pub error: Option<String>,
183}