sozu_lib/protocol/mux/
debug.rs1use std::collections::VecDeque;
8
9use kawa::ParsingPhase;
10use mio::Token;
11use sozu_command::ready::Ready;
12
13use super::{BackendConnectionError, MuxResult, Readiness, StreamState};
14
15pub(super) const DEBUG_HISTORY_CAPACITY: usize = 512;
18
19pub struct DebugHistory {
20 pub events: VecDeque<DebugEvent>,
21 pub is_interesting: bool,
22}
23impl Default for DebugHistory {
24 fn default() -> Self {
25 Self {
26 events: VecDeque::with_capacity(DEBUG_HISTORY_CAPACITY),
27 is_interesting: false,
28 }
29 }
30}
31impl DebugHistory {
32 pub fn new() -> Self {
33 Self::default()
34 }
35 pub fn push(&mut self, _event: DebugEvent) {
36 #[cfg(debug_assertions)]
37 {
38 if self.events.len() >= DEBUG_HISTORY_CAPACITY {
39 self.events.pop_front();
40 }
41 self.events.push_back(_event);
42 }
43 }
44 pub fn set_interesting(&mut self, _interesting: bool) {
45 #[cfg(debug_assertions)]
46 {
47 self.is_interesting = _interesting;
48 }
49 }
50 pub fn is_interesting(&self) -> bool {
51 #[cfg(debug_assertions)]
52 {
53 self.is_interesting
54 }
55 #[cfg(not(debug_assertions))]
56 {
57 false
58 }
59 }
60}
61
62#[derive(Debug)]
63pub enum DebugEvent {
64 EV(Token, Ready),
65 ReadyTimestamp(usize),
66 LoopStart,
67 LoopIteration(i32),
68 SR(Token, MuxResult, Readiness),
69 SW(Token, MuxResult, Readiness),
70 CW(Token, MuxResult, Readiness),
71 CR(Token, MuxResult, Readiness),
72 CC(usize, StreamState),
73 CCS(Token, String),
74 CCF(usize, BackendConnectionError),
75 CH(Token, Readiness),
76 S(u32, usize, ParsingPhase, usize, usize),
77 Str(String),
78 StreamEvent(usize, usize),
79 SocketIO(usize, usize, usize),
80}