scirs2_core/distributed/cluster/
events.rs1use std::collections::VecDeque;
7
8use super::types::ClusterEvent;
9
10#[derive(Debug)]
12pub struct ClusterEventLog {
13 events: VecDeque<ClusterEvent>,
14 max_events: usize,
15}
16
17impl Default for ClusterEventLog {
18 fn default() -> Self {
19 Self::new()
20 }
21}
22
23impl ClusterEventLog {
24 pub fn new() -> Self {
26 Self {
27 events: VecDeque::with_capacity(10000usize),
28 max_events: 10000,
29 }
30 }
31
32 pub fn with_capacity(max_events: usize) -> Self {
34 Self {
35 events: VecDeque::with_capacity(max_events),
36 max_events,
37 }
38 }
39
40 pub fn log_event(&mut self, event: ClusterEvent) {
42 self.events.push_back(event);
43
44 while self.events.len() > self.max_events {
46 self.events.pop_front();
47 }
48 }
49
50 pub fn get_recent_events(&self, count: usize) -> Vec<ClusterEvent> {
52 self.events.iter().rev().take(count).cloned().collect()
53 }
54
55 pub fn get_all_events(&self) -> Vec<ClusterEvent> {
57 self.events.iter().cloned().collect()
58 }
59
60 pub fn get_events_chronological(&self) -> Vec<ClusterEvent> {
62 self.events.iter().cloned().collect()
63 }
64
65 pub fn event_count(&self) -> usize {
67 self.events.len()
68 }
69
70 pub fn clear(&mut self) {
72 self.events.clear();
73 }
74
75 pub fn set_max_events(&mut self, max_events: usize) {
77 self.max_events = max_events;
78
79 while self.events.len() > self.max_events {
81 self.events.pop_front();
82 }
83 }
84
85 pub fn get_max_events(&self) -> usize {
87 self.max_events
88 }
89
90 pub fn is_empty(&self) -> bool {
92 self.events.is_empty()
93 }
94
95 pub fn is_full(&self) -> bool {
97 self.events.len() >= self.max_events
98 }
99
100 pub fn get_filtered_events<F>(&self, filter: F) -> Vec<ClusterEvent>
102 where
103 F: Fn(&ClusterEvent) -> bool,
104 {
105 self.events
106 .iter()
107 .filter(|event| filter(event))
108 .cloned()
109 .collect()
110 }
111
112 pub fn get_oldest_event(&self) -> Option<&ClusterEvent> {
114 self.events.front()
115 }
116
117 pub fn get_newest_event(&self) -> Option<&ClusterEvent> {
119 self.events.back()
120 }
121}