saluki_core/data_model/event/
mod.rs1use std::fmt;
4
5use bitmask_enum::bitmask;
6
7pub mod metric;
8use self::metric::Metric;
9
10pub mod eventd;
11use self::eventd::EventD;
12
13pub mod service_check;
14use self::service_check::ServiceCheck;
15
16pub mod log;
17use self::log::Log;
18
19pub mod trace;
20use self::trace::Trace;
21
22pub mod trace_stats;
23use self::trace_stats::TraceStats;
24
25#[bitmask(u8)]
30#[bitmask_config(vec_debug)]
31pub enum EventType {
32 Metric,
34
35 EventD,
37
38 ServiceCheck,
40
41 Log,
43
44 Trace,
46
47 TraceStats,
49}
50
51impl Default for EventType {
52 fn default() -> Self {
53 Self::none()
54 }
55}
56
57impl fmt::Display for EventType {
58 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
59 let mut types = Vec::new();
60
61 if self.contains(Self::Metric) {
62 types.push("Metric");
63 }
64
65 if self.contains(Self::EventD) {
66 types.push("DatadogEvent");
67 }
68
69 if self.contains(Self::ServiceCheck) {
70 types.push("ServiceCheck");
71 }
72
73 if self.contains(Self::Log) {
74 types.push("Log");
75 }
76
77 if self.contains(Self::Trace) {
78 types.push("Trace");
79 }
80
81 if self.contains(Self::TraceStats) {
82 types.push("TraceStats");
83 }
84
85 write!(f, "{}", types.join("|"))
86 }
87}
88
89#[derive(Clone, Debug, PartialEq)]
91pub enum Event {
92 Metric(Metric),
94
95 EventD(EventD),
97
98 ServiceCheck(ServiceCheck),
100
101 Log(Log),
103
104 Trace(Trace),
106
107 TraceStats(TraceStats),
109}
110
111impl Event {
112 pub fn event_type(&self) -> EventType {
114 match self {
115 Event::Metric(_) => EventType::Metric,
116 Event::EventD(_) => EventType::EventD,
117 Event::ServiceCheck(_) => EventType::ServiceCheck,
118 Event::Log(_) => EventType::Log,
119 Event::Trace(_) => EventType::Trace,
120 Event::TraceStats(_) => EventType::TraceStats,
121 }
122 }
123
124 pub fn try_into_metric(self) -> Option<Metric> {
128 match self {
129 Event::Metric(metric) => Some(metric),
130 _ => None,
131 }
132 }
133
134 pub fn try_as_metric(&self) -> Option<&Metric> {
138 match self {
139 Event::Metric(metric) => Some(metric),
140 _ => None,
141 }
142 }
143
144 pub fn try_as_metric_mut(&mut self) -> Option<&mut Metric> {
148 match self {
149 Event::Metric(metric) => Some(metric),
150 _ => None,
151 }
152 }
153
154 pub fn try_into_eventd(self) -> Option<EventD> {
158 match self {
159 Event::EventD(eventd) => Some(eventd),
160 _ => None,
161 }
162 }
163
164 pub fn try_into_service_check(self) -> Option<ServiceCheck> {
168 match self {
169 Event::ServiceCheck(service_check) => Some(service_check),
170 _ => None,
171 }
172 }
173
174 pub fn try_into_trace(self) -> Option<Trace> {
178 match self {
179 Event::Trace(trace) => Some(trace),
180 _ => None,
181 }
182 }
183
184 pub fn try_as_trace_mut(&mut self) -> Option<&mut Trace> {
188 match self {
189 Event::Trace(trace) => Some(trace),
190 _ => None,
191 }
192 }
193
194 pub fn try_into_trace_stats(self) -> Option<TraceStats> {
198 match self {
199 Event::TraceStats(stats) => Some(stats),
200 _ => None,
201 }
202 }
203
204 #[allow(unused)]
205 pub fn is_metric(&self) -> bool {
207 matches!(self, Event::Metric(_))
208 }
209
210 pub fn is_eventd(&self) -> bool {
212 matches!(self, Event::EventD(_))
213 }
214
215 pub fn is_service_check(&self) -> bool {
217 matches!(self, Event::ServiceCheck(_))
218 }
219
220 pub fn is_log(&self) -> bool {
222 matches!(self, Event::Log(_))
223 }
224
225 pub fn is_trace(&self) -> bool {
227 matches!(self, Event::Trace(_))
228 }
229}
230
231#[cfg(test)]
232mod tests {
233 use super::*;
234
235 #[test]
236 #[ignore = "only used to get struct sizes for core event data types"]
237 fn sizes() {
238 println!("Event: {} bytes", std::mem::size_of::<Event>());
239 println!("Metric: {} bytes", std::mem::size_of::<Metric>());
240 println!(" Context: {} bytes", std::mem::size_of::<saluki_context::Context>());
241 println!(
242 " MetricValues: {} bytes",
243 std::mem::size_of::<super::metric::MetricValues>()
244 );
245 println!(
246 " MetricMetadata: {} bytes",
247 std::mem::size_of::<super::metric::MetricMetadata>()
248 );
249 println!("EventD: {} bytes", std::mem::size_of::<EventD>());
250 println!("ServiceCheck: {} bytes", std::mem::size_of::<ServiceCheck>());
251 println!("Log: {} bytes", std::mem::size_of::<Log>());
252 println!("Trace: {} bytes", std::mem::size_of::<Trace>());
253 println!("TraceStats: {} bytes", std::mem::size_of::<TraceStats>());
254 }
255}