postfix_log_parser/formatters/json/
qmgr.rs1use crate::events::qmgr::QmgrEvent;
2use serde_json::{Map, Value};
3
4pub fn format_qmgr_event(qmgr_event: &QmgrEvent) -> Map<String, Value> {
6 let mut event_data = Map::new();
7
8 match qmgr_event {
9 QmgrEvent::ConfigurationWarning {
10 warning_type: _,
11 message,
12 } => {
13 event_data.insert(
14 "event_type".to_string(),
15 Value::String("config_warning".to_string()),
16 );
17 event_data.insert("message".to_string(), Value::String(message.clone()));
18 }
19 QmgrEvent::MessageActive {
20 queue_id,
21 from,
22 size,
23 nrcpt,
24 } => {
25 event_data.insert(
26 "event_type".to_string(),
27 Value::String("message_active".to_string()),
28 );
29 event_data.insert("queue_id".to_string(), Value::String(queue_id.clone()));
30 event_data.insert("sender".to_string(), Value::String(from.clone()));
31 event_data.insert(
32 "size".to_string(),
33 Value::Number(serde_json::Number::from(*size)),
34 );
35 event_data.insert(
36 "nrcpt".to_string(),
37 Value::Number(serde_json::Number::from(*nrcpt)),
38 );
39 }
40 QmgrEvent::MessageRemoved { queue_id, reason } => {
41 event_data.insert(
42 "event_type".to_string(),
43 Value::String("message_removed".to_string()),
44 );
45 event_data.insert("queue_id".to_string(), Value::String(queue_id.clone()));
46 if let Some(reason_text) = reason {
47 event_data.insert("reason".to_string(), Value::String(reason_text.clone()));
48 }
49 }
50 QmgrEvent::MessageSkipped {
51 queue_id,
52 reason,
53 status_details,
54 } => {
55 event_data.insert(
56 "event_type".to_string(),
57 Value::String("message_skipped".to_string()),
58 );
59 event_data.insert("queue_id".to_string(), Value::String(queue_id.clone()));
60 event_data.insert("reason".to_string(), Value::String(reason.clone()));
61 if let Some(details) = status_details {
62 event_data.insert("status_details".to_string(), Value::String(details.clone()));
63 }
64 }
65 QmgrEvent::MessageDeferred {
66 queue_id,
67 from,
68 to,
69 relay,
70 delay,
71 delays,
72 dsn,
73 status,
74 } => {
75 event_data.insert(
76 "event_type".to_string(),
77 Value::String("message_deferred".to_string()),
78 );
79 event_data.insert("queue_id".to_string(), Value::String(queue_id.clone()));
80 event_data.insert("sender".to_string(), Value::String(from.clone()));
81 if let Some(to_addr) = to {
82 event_data.insert("recipient".to_string(), Value::String(to_addr.clone()));
83 }
84 if let Some(relay_info) = relay {
85 event_data.insert("relay".to_string(), Value::String(relay_info.clone()));
86 }
87 event_data.insert("delay".to_string(), Value::String(delay.clone()));
88 if let Some(delays_info) = delays {
89 event_data.insert("delays".to_string(), Value::String(delays_info.clone()));
90 }
91 if let Some(dsn_code) = dsn {
92 event_data.insert("dsn".to_string(), Value::String(dsn_code.clone()));
93 }
94 event_data.insert("status".to_string(), Value::String(status.clone()));
95 }
96 QmgrEvent::MessageSent {
97 queue_id,
98 from,
99 to,
100 relay,
101 delay,
102 delays,
103 dsn,
104 status,
105 } => {
106 event_data.insert(
107 "event_type".to_string(),
108 Value::String("message_sent".to_string()),
109 );
110 event_data.insert("queue_id".to_string(), Value::String(queue_id.clone()));
111 event_data.insert("sender".to_string(), Value::String(from.clone()));
112 event_data.insert("recipient".to_string(), Value::String(to.clone()));
113 event_data.insert("relay".to_string(), Value::String(relay.clone()));
114 event_data.insert("delay".to_string(), Value::String(delay.clone()));
115 if let Some(delays_info) = delays {
116 event_data.insert("delays".to_string(), Value::String(delays_info.clone()));
117 }
118 if let Some(dsn_code) = dsn {
119 event_data.insert("dsn".to_string(), Value::String(dsn_code.clone()));
120 }
121 event_data.insert("status".to_string(), Value::String(status.clone()));
122 }
123 QmgrEvent::MessageBounced {
124 queue_id,
125 from,
126 to,
127 reason,
128 dsn,
129 } => {
130 event_data.insert(
131 "event_type".to_string(),
132 Value::String("message_bounced".to_string()),
133 );
134 event_data.insert("queue_id".to_string(), Value::String(queue_id.clone()));
135 event_data.insert("sender".to_string(), Value::String(from.clone()));
136 event_data.insert("recipient".to_string(), Value::String(to.clone()));
137 event_data.insert("reason".to_string(), Value::String(reason.clone()));
138 if let Some(dsn_code) = dsn {
139 event_data.insert("dsn".to_string(), Value::String(dsn_code.clone()));
140 }
141 }
142 QmgrEvent::QueueStats {
143 active,
144 deferred,
145 hold,
146 incoming,
147 maildrop,
148 } => {
149 event_data.insert(
150 "event_type".to_string(),
151 Value::String("queue_stats".to_string()),
152 );
153 if let Some(active_count) = active {
154 event_data.insert(
155 "active".to_string(),
156 Value::Number(serde_json::Number::from(*active_count)),
157 );
158 }
159 if let Some(deferred_count) = deferred {
160 event_data.insert(
161 "deferred".to_string(),
162 Value::Number(serde_json::Number::from(*deferred_count)),
163 );
164 }
165 if let Some(hold_count) = hold {
166 event_data.insert(
167 "hold".to_string(),
168 Value::Number(serde_json::Number::from(*hold_count)),
169 );
170 }
171 if let Some(incoming_count) = incoming {
172 event_data.insert(
173 "incoming".to_string(),
174 Value::Number(serde_json::Number::from(*incoming_count)),
175 );
176 }
177 if let Some(maildrop_count) = maildrop {
178 event_data.insert(
179 "maildrop".to_string(),
180 Value::Number(serde_json::Number::from(*maildrop_count)),
181 );
182 }
183 }
184 QmgrEvent::TransportStatus {
185 transport,
186 status,
187 details,
188 } => {
189 event_data.insert(
190 "event_type".to_string(),
191 Value::String("transport_status".to_string()),
192 );
193 event_data.insert("transport".to_string(), Value::String(transport.clone()));
194 event_data.insert("status".to_string(), Value::String(status.clone()));
195 if let Some(details_text) = details {
196 event_data.insert("details".to_string(), Value::String(details_text.clone()));
197 }
198 }
199 QmgrEvent::ResourceLimit {
200 resource_type,
201 current_value,
202 limit_value,
203 message,
204 } => {
205 event_data.insert(
206 "event_type".to_string(),
207 Value::String("resource_limit".to_string()),
208 );
209 event_data.insert(
210 "resource_type".to_string(),
211 Value::String(resource_type.clone()),
212 );
213 if let Some(current) = current_value {
214 event_data.insert(
215 "current_value".to_string(),
216 Value::Number(serde_json::Number::from(*current)),
217 );
218 }
219 if let Some(limit) = limit_value {
220 event_data.insert(
221 "limit_value".to_string(),
222 Value::Number(serde_json::Number::from(*limit)),
223 );
224 }
225 event_data.insert("message".to_string(), Value::String(message.clone()));
226 }
227 QmgrEvent::QueueFlush {
228 queue_name,
229 message_count,
230 } => {
231 event_data.insert(
232 "event_type".to_string(),
233 Value::String("queue_flush".to_string()),
234 );
235 if let Some(name) = queue_name {
236 event_data.insert("queue_name".to_string(), Value::String(name.clone()));
237 }
238 if let Some(count) = message_count {
239 event_data.insert(
240 "message_count".to_string(),
241 Value::Number(serde_json::Number::from(*count)),
242 );
243 }
244 }
245 QmgrEvent::Other {
246 event_type,
247 message,
248 queue_id,
249 } => {
250 event_data.insert("event_type".to_string(), Value::String("other".to_string()));
251 event_data.insert("sub_type".to_string(), Value::String(event_type.clone()));
252 event_data.insert("message".to_string(), Value::String(message.clone()));
253 if let Some(id) = queue_id {
254 event_data.insert("queue_id".to_string(), Value::String(id.clone()));
255 }
256 }
257 }
258
259 event_data
260}