session_metrics/
session_metrics.rs1use std::time::Duration;
8
9use brainwires_autonomy::metrics::{ComparisonResult, SessionMetrics, SessionReport};
10
11fn main() {
12 println!("=== Session Metrics & Reporting Example ===\n");
13
14 let mut metrics = SessionMetrics::new();
16
17 let strategies = [
19 ("clippy", 3, 2, vec![5, 8]),
20 ("dead_code", 2, 1, vec![12]),
21 ("doc_gaps", 4, 3, vec![3, 6, 4]),
22 ("refactoring", 1, 0, vec![]),
23 ];
24
25 println!("--- Recording Tasks ---");
26 for (name, generated, succeeded, iters) in &strategies {
27 metrics.record_generated(name, *generated);
28 for _ in 0..*generated {
29 metrics.record_attempt(name);
30 }
31 for &iter_count in iters.iter() {
32 metrics.record_success(name, iter_count);
33 }
34 let failed = *generated - *succeeded;
35 for _ in 0..failed {
36 metrics.record_failure(name);
37 }
38 println!(
39 " {name}: generated={generated}, succeeded={succeeded}, failed={}",
40 generated - succeeded
41 );
42 }
43
44 metrics.record_commit("a1b2c3d".to_string());
46 metrics.record_commit("e4f5g6h".to_string());
47 metrics.record_commit("i7j8k9l".to_string());
48
49 metrics.record_comparison(ComparisonResult {
51 both_succeeded: true,
52 both_failed: false,
53 diffs_match: true,
54 iteration_delta: -3,
55 bridge_specific_errors: vec![],
56 });
57 metrics.record_comparison(ComparisonResult {
58 both_succeeded: false,
59 both_failed: false,
60 diffs_match: false,
61 iteration_delta: 5,
62 bridge_specific_errors: vec!["timeout on bridge path".to_string()],
63 });
64
65 println!();
66
67 println!("--- Summary ---");
69 println!(" Tasks attempted : {}", metrics.tasks_attempted);
70 println!(" Tasks succeeded : {}", metrics.tasks_succeeded);
71 println!(" Tasks failed : {}", metrics.tasks_failed);
72 println!(" Total iterations : {}", metrics.total_iterations);
73 println!(
74 " Success rate : {:.1}%",
75 metrics.success_rate() * 100.0
76 );
77 println!(" Commits : {}", metrics.commits.len());
78 println!(" Comparisons : {}", metrics.comparisons.len());
79 println!();
80
81 let report = SessionReport::new(
83 metrics,
84 Duration::from_secs(185),
85 None, );
87
88 println!("--- JSON Report (truncated) ---");
90 let json = report.to_json().unwrap();
91 let preview: String = json.chars().take(500).collect();
93 println!("{preview}...\n");
94
95 println!("--- Markdown Report ---");
97 let md = report.to_markdown();
98 println!("{md}");
99
100 println!("Done.");
101}