feat(irtt-cli): note running-only continuous summaries
This commit is contained in:
1 parent
9adab6882d
commit
f5c35e8142
2 files changed
+41
-2
No files matched your search
@@ -77,6 +77,7 @@ fn run(args: CliArgs, shutdown_requested: &AtomicBool) -> Result<(), Box<dyn std
|
|||||||
verbose: args.verbose,
|
verbose: args.verbose,
|
||||||
},
|
},
|
||||||
print_final_summary: false,
|
print_final_summary: false,
|
||||||
|
show_running_only_summary_note: false,
|
||||||
out: &mut stdout,
|
out: &mut stdout,
|
||||||
#[cfg(feature = "stats")]
|
#[cfg(feature = "stats")]
|
||||||
stats: &mut stats,
|
stats: &mut stats,
|
||||||
@@ -130,7 +131,9 @@ fn run(args: CliArgs, shutdown_requested: &AtomicBool) -> Result<(), Box<dyn std
|
|||||||
|
|
||||||
let events = client.close()?;
|
let events = client.close()?;
|
||||||
output.print_events(&events)?;
|
output.print_events(&events)?;
|
||||||
output.print_final_summary = should_print_final_summary(continuous, interrupted);
|
let print_final_summary = should_print_final_summary(continuous, interrupted);
|
||||||
|
output.print_final_summary = print_final_summary;
|
||||||
|
output.show_running_only_summary_note = continuous && interrupted && print_final_summary;
|
||||||
output.print_summary()?;
|
output.print_summary()?;
|
||||||
output.out.flush()?;
|
output.out.flush()?;
|
||||||
Ok(())
|
Ok(())
|
||||||
@@ -210,6 +213,7 @@ struct EventOutput<'a, W: Write> {
|
|||||||
mode: irtt_cli::OutputMode,
|
mode: irtt_cli::OutputMode,
|
||||||
human_options: HumanOutputOptions,
|
human_options: HumanOutputOptions,
|
||||||
print_final_summary: bool,
|
print_final_summary: bool,
|
||||||
|
show_running_only_summary_note: bool,
|
||||||
out: &'a mut W,
|
out: &'a mut W,
|
||||||
#[cfg(feature = "stats")]
|
#[cfg(feature = "stats")]
|
||||||
stats: &'a mut StatsCollector,
|
stats: &'a mut StatsCollector,
|
||||||
@@ -261,6 +265,7 @@ impl<W: Write> EventOutput<'_, W> {
|
|||||||
&self.stats.snapshot(),
|
&self.stats.snapshot(),
|
||||||
irtt_cli::summary::SummaryFormatOptions {
|
irtt_cli::summary::SummaryFormatOptions {
|
||||||
verbose: self.human_options.verbose,
|
verbose: self.human_options.verbose,
|
||||||
|
show_running_only_note: self.show_running_only_summary_note,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
)?;
|
)?;
|
||||||
@@ -471,6 +476,7 @@ mod tests {
|
|||||||
mode: irtt_cli::OutputMode::RttUs,
|
mode: irtt_cli::OutputMode::RttUs,
|
||||||
human_options: HumanOutputOptions::default(),
|
human_options: HumanOutputOptions::default(),
|
||||||
print_final_summary: true,
|
print_final_summary: true,
|
||||||
|
show_running_only_summary_note: false,
|
||||||
out: &mut out,
|
out: &mut out,
|
||||||
stats: &mut stats,
|
stats: &mut stats,
|
||||||
};
|
};
|
||||||
@@ -494,6 +500,7 @@ mod tests {
|
|||||||
mode: irtt_cli::OutputMode::Human,
|
mode: irtt_cli::OutputMode::Human,
|
||||||
human_options: HumanOutputOptions::default(),
|
human_options: HumanOutputOptions::default(),
|
||||||
print_final_summary: false,
|
print_final_summary: false,
|
||||||
|
show_running_only_summary_note: true,
|
||||||
out: &mut out,
|
out: &mut out,
|
||||||
stats: &mut stats,
|
stats: &mut stats,
|
||||||
};
|
};
|
||||||
@@ -512,6 +519,7 @@ mod tests {
|
|||||||
mode: irtt_cli::OutputMode::Human,
|
mode: irtt_cli::OutputMode::Human,
|
||||||
human_options: HumanOutputOptions::default(),
|
human_options: HumanOutputOptions::default(),
|
||||||
print_final_summary: true,
|
print_final_summary: true,
|
||||||
|
show_running_only_summary_note: true,
|
||||||
out: &mut out,
|
out: &mut out,
|
||||||
stats: &mut stats,
|
stats: &mut stats,
|
||||||
};
|
};
|
||||||
@@ -521,6 +529,8 @@ mod tests {
|
|||||||
|
|
||||||
let rendered = String::from_utf8(out).unwrap();
|
let rendered = String::from_utf8(out).unwrap();
|
||||||
assert!(rendered.contains("irtt-rs summary"));
|
assert!(rendered.contains("irtt-rs summary"));
|
||||||
|
assert!(rendered.contains("medians unavailable"));
|
||||||
|
assert!(rendered.contains("continuous mode"));
|
||||||
assert!(rendered.contains("packets:"));
|
assert!(rendered.contains("packets:"));
|
||||||
assert!(rendered.contains("received=1"));
|
assert!(rendered.contains("received=1"));
|
||||||
}
|
}
|
||||||
@@ -535,6 +545,7 @@ mod tests {
|
|||||||
mode: irtt_cli::OutputMode::Human,
|
mode: irtt_cli::OutputMode::Human,
|
||||||
human_options: HumanOutputOptions::default(),
|
human_options: HumanOutputOptions::default(),
|
||||||
print_final_summary: false,
|
print_final_summary: false,
|
||||||
|
show_running_only_summary_note: false,
|
||||||
out: &mut out,
|
out: &mut out,
|
||||||
stats: &mut stats,
|
stats: &mut stats,
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ pub fn format_summary(summary: &Snapshot) -> String {
|
|||||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
|
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
|
||||||
pub struct SummaryFormatOptions {
|
pub struct SummaryFormatOptions {
|
||||||
pub verbose: bool,
|
pub verbose: bool,
|
||||||
|
pub show_running_only_note: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn format_summary_with_options(summary: &Snapshot, options: SummaryFormatOptions) -> String {
|
pub fn format_summary_with_options(summary: &Snapshot, options: SummaryFormatOptions) -> String {
|
||||||
@@ -18,6 +19,13 @@ pub fn format_summary_with_options(summary: &Snapshot, options: SummaryFormatOpt
|
|||||||
|
|
||||||
writeln!(out).unwrap();
|
writeln!(out).unwrap();
|
||||||
writeln!(out, "irtt-rs summary").unwrap();
|
writeln!(out, "irtt-rs summary").unwrap();
|
||||||
|
if options.show_running_only_note {
|
||||||
|
writeln!(
|
||||||
|
out,
|
||||||
|
"note: medians unavailable in continuous mode; running statistics are bounded-memory"
|
||||||
|
)
|
||||||
|
.unwrap();
|
||||||
|
}
|
||||||
writeln!(out).unwrap();
|
writeln!(out).unwrap();
|
||||||
writeln!(
|
writeln!(
|
||||||
out,
|
out,
|
||||||
@@ -232,6 +240,7 @@ mod tests {
|
|||||||
assert!(output.contains("10.0µs"));
|
assert!(output.contains("10.0µs"));
|
||||||
assert!(output.contains("timer error"));
|
assert!(output.contains("timer error"));
|
||||||
assert!(output.contains("2.0µs"));
|
assert!(output.contains("2.0µs"));
|
||||||
|
assert!(!output.contains("medians unavailable"));
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
@@ -259,13 +268,32 @@ mod tests {
|
|||||||
|
|
||||||
let output = format_summary_with_options(
|
let output = format_summary_with_options(
|
||||||
&collector.snapshot(),
|
&collector.snapshot(),
|
||||||
SummaryFormatOptions { verbose: true },
|
SummaryFormatOptions {
|
||||||
|
verbose: true,
|
||||||
|
..SummaryFormatOptions::default()
|
||||||
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
assert!(output.contains("raw RTT"));
|
assert!(output.contains("raw RTT"));
|
||||||
assert!(output.contains("adjusted RTT"));
|
assert!(output.contains("adjusted RTT"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn running_only_note_is_format_option() {
|
||||||
|
let summary = StatsCollector::new(StatsConfig::continuous()).snapshot();
|
||||||
|
let output = format_summary_with_options(
|
||||||
|
&summary,
|
||||||
|
SummaryFormatOptions {
|
||||||
|
show_running_only_note: true,
|
||||||
|
..SummaryFormatOptions::default()
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
assert!(output.contains("irtt-rs summary"));
|
||||||
|
assert!(output.contains("medians unavailable"));
|
||||||
|
assert!(output.contains("continuous mode"));
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn signed_stats_can_format_negative_values() {
|
fn signed_stats_can_format_negative_values() {
|
||||||
let stats = TimeStats {
|
let stats = TimeStats {
|
||||||
|
|||||||
Reference in new issue
Block a user