1use crate::event::Event;
2use crate::round_trip_statistics::RoundTripStatistics;
3#[derive(Debug, Clone)]
6pub struct Events {
7 pub vec: Vec<Event>,
8}
9
10impl Events {
11 pub fn new() -> Self {
12 Events {
13 vec: Vec::new(),
14 }
15 }
16
17 pub fn attempt_count(&self) -> usize {
19 self.vec.len()
20 }
21
22 pub fn success_count(&self) -> usize {
24 self.vec.iter().filter(|x| x.success).count()
25 }
26
27 pub fn failure_count(&self) -> usize {
29 self.vec.iter().filter(|x| !x.success).count()
30 }
31
32 pub fn success_rate(&self) -> f64 {
34 if self.attempt_count() == 0 { return f64::NAN }
35 self.success_count() as f64 / self.attempt_count() as f64
36 }
37
38 pub fn success_round_trip_statistics(&self) -> Vec<RoundTripStatistics> {
39 self
40 .vec
41 .iter()
42 .filter(|x| x.success)
43 .filter_map(|x| x.round_trip_statistics )
44 .collect::<Vec<_>>()
45 }
46
47}
48
49use std::fmt;
50impl fmt::Display for Events {
51 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
52 write!(
53 f,
54 concat!(
55 "attempt count: {}\n",
56 "success count: {}\n",
57 "success rate: {}",
58 ),
59 self.attempt_count(),
60 self.success_count(),
61 self.success_rate(),
62 )
63 }
64}