nodo_runtime/
statistics.rs1use crate::{InspectorCodeletReport, InspectorReport};
4use nodo::codelet::Transition;
5
6pub fn statistics_pretty_print(report: InspectorReport) {
7 let mut vec = report.into_vec();
8 vec.sort_by_key(|(_, u)| {
9 u.statistics.transitions[Transition::Step]
10 .duration
11 .total()
12 .as_nanos()
13 });
14
15 println!("");
16 println!("+--------------------------+----------------------------------+--------+--------+----------------------+-------+----------------------+--------+---------+");
17 println!("| NAME | TYPE | STEP Duration Period | START |");
18 println!("| | | Skipped| Count | (min-avg-max) [ms] | Total | (min-avg-max) [ms] | Count | D [ms] |");
19 println!("+--------------------------+----------------------------------+--------+--------+----------------------+-------+----------------------+--------+---------+");
20 for (
21 _,
22 InspectorCodeletReport {
23 name: tag,
24 typename,
25 statistics: stats,
26 ..
27 },
28 ) in vec.into_iter().rev()
29 {
30 println!(
31 "| {:024} | {:032} | {:6} | {:6} | {} {} {} |{} | {} {} {} | {:2} /{:2} | {} |",
32 cut_middle(&tag, 24),
33 cut_middle(&typename, 32),
34 stats.transitions[Transition::Step].skipped_count,
35 stats.transitions[Transition::Step].duration.count(),
36 stats.transitions[Transition::Step]
37 .duration
38 .min_ms()
39 .map(|dt| format!("{:>6.2}", dt))
40 .unwrap_or("------".to_string()),
41 stats.transitions[Transition::Step]
42 .duration
43 .average_ms()
44 .map(|dt| format!("{:>6.2}", dt))
45 .unwrap_or("------".to_string()),
46 stats.transitions[Transition::Step]
47 .duration
48 .max_ms()
49 .map(|dt| format!("{:>6.2}", dt))
50 .unwrap_or("------".to_string()),
51 format!(
52 "{:>6.2}",
53 stats.transitions[Transition::Step]
54 .duration
55 .total()
56 .as_secs_f32()
57 ),
58 stats.transitions[Transition::Step]
59 .period
60 .min_ms()
61 .map(|dt| format!("{:>6.2}", dt))
62 .unwrap_or("------".to_string()),
63 stats.transitions[Transition::Step]
64 .period
65 .average_ms()
66 .map(|dt| format!("{:>6.2}", dt))
67 .unwrap_or("------".to_string()),
68 stats.transitions[Transition::Step]
69 .period
70 .max_ms()
71 .map(|dt| format!("{:>6.2}", dt))
72 .unwrap_or("------".to_string()),
73 stats.transitions[Transition::Start].skipped_count,
74 stats.transitions[Transition::Start].duration.count(),
75 stats.transitions[Transition::Start]
76 .duration
77 .average_ms()
78 .map(|dt| format!("{:>7.2}", dt))
79 .unwrap_or("-------".to_string()),
80 );
81 }
82 println!("+--------------------------+----------------------------------+--------+--------+----------------------+-------+----------------------+--------+---------+");
83}
84
85fn cut_middle(text: &String, len: usize) -> String {
86 if text.len() <= len || len <= 6 {
87 text.to_string()
88 } else {
89 text[0..2].to_string() + ".." + &text[(text.len() - (len - 4))..]
90 }
91}