pub struct SessionReport {
pub metrics: SessionMetrics,
pub duration: Duration,
pub safety_stop_reason: Option<String>,
}Expand description
Complete session report combining metrics, duration, and stop reason, with serialization to both JSON and Markdown formats.
Fields§
§metrics: SessionMetricsAggregated session metrics.
duration: DurationTotal wall-clock duration of the session.
safety_stop_reason: Option<String>Human-readable reason the session stopped, if a safety stop occurred.
Implementations§
Source§impl SessionReport
impl SessionReport
Sourcepub fn new(
metrics: SessionMetrics,
duration: Duration,
stop_reason: Option<SafetyStop>,
) -> Self
pub fn new( metrics: SessionMetrics, duration: Duration, stop_reason: Option<SafetyStop>, ) -> Self
Create a new session report from metrics, duration, and optional stop reason.
Examples found in repository?
examples/session_metrics.rs (lines 82-86)
11fn main() {
12 println!("=== Session Metrics & Reporting Example ===\n");
13
14 // 1. Build up session metrics
15 let mut metrics = SessionMetrics::new();
16
17 // Simulate a session with multiple strategies
18 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 // Record commits
45 metrics.record_commit("a1b2c3d".to_string());
46 metrics.record_commit("e4f5g6h".to_string());
47 metrics.record_commit("i7j8k9l".to_string());
48
49 // Record a dual-path comparison
50 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 // 2. Print summary
68 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 // 3. Generate a session report
82 let report = SessionReport::new(
83 metrics,
84 Duration::from_secs(185),
85 None, // no safety stop
86 );
87
88 // 4. JSON output
89 println!("--- JSON Report (truncated) ---");
90 let json = report.to_json().unwrap();
91 // Print first 500 chars
92 let preview: String = json.chars().take(500).collect();
93 println!("{preview}...\n");
94
95 // 5. Markdown output
96 println!("--- Markdown Report ---");
97 let md = report.to_markdown();
98 println!("{md}");
99
100 println!("Done.");
101}Sourcepub fn to_json(&self) -> Result<String, Error>
pub fn to_json(&self) -> Result<String, Error>
Serialize the report to pretty-printed JSON.
Examples found in repository?
examples/session_metrics.rs (line 90)
11fn main() {
12 println!("=== Session Metrics & Reporting Example ===\n");
13
14 // 1. Build up session metrics
15 let mut metrics = SessionMetrics::new();
16
17 // Simulate a session with multiple strategies
18 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 // Record commits
45 metrics.record_commit("a1b2c3d".to_string());
46 metrics.record_commit("e4f5g6h".to_string());
47 metrics.record_commit("i7j8k9l".to_string());
48
49 // Record a dual-path comparison
50 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 // 2. Print summary
68 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 // 3. Generate a session report
82 let report = SessionReport::new(
83 metrics,
84 Duration::from_secs(185),
85 None, // no safety stop
86 );
87
88 // 4. JSON output
89 println!("--- JSON Report (truncated) ---");
90 let json = report.to_json().unwrap();
91 // Print first 500 chars
92 let preview: String = json.chars().take(500).collect();
93 println!("{preview}...\n");
94
95 // 5. Markdown output
96 println!("--- Markdown Report ---");
97 let md = report.to_markdown();
98 println!("{md}");
99
100 println!("Done.");
101}Sourcepub fn to_markdown(&self) -> String
pub fn to_markdown(&self) -> String
Render the report as a Markdown document.
Examples found in repository?
examples/session_metrics.rs (line 97)
11fn main() {
12 println!("=== Session Metrics & Reporting Example ===\n");
13
14 // 1. Build up session metrics
15 let mut metrics = SessionMetrics::new();
16
17 // Simulate a session with multiple strategies
18 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 // Record commits
45 metrics.record_commit("a1b2c3d".to_string());
46 metrics.record_commit("e4f5g6h".to_string());
47 metrics.record_commit("i7j8k9l".to_string());
48
49 // Record a dual-path comparison
50 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 // 2. Print summary
68 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 // 3. Generate a session report
82 let report = SessionReport::new(
83 metrics,
84 Duration::from_secs(185),
85 None, // no safety stop
86 );
87
88 // 4. JSON output
89 println!("--- JSON Report (truncated) ---");
90 let json = report.to_json().unwrap();
91 // Print first 500 chars
92 let preview: String = json.chars().take(500).collect();
93 println!("{preview}...\n");
94
95 // 5. Markdown output
96 println!("--- Markdown Report ---");
97 let md = report.to_markdown();
98 println!("{md}");
99
100 println!("Done.");
101}Trait Implementations§
Source§impl Clone for SessionReport
impl Clone for SessionReport
Source§fn clone(&self) -> SessionReport
fn clone(&self) -> SessionReport
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for SessionReport
impl Debug for SessionReport
Source§impl<'de> Deserialize<'de> for SessionReport
impl<'de> Deserialize<'de> for SessionReport
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
Auto Trait Implementations§
impl Freeze for SessionReport
impl RefUnwindSafe for SessionReport
impl Send for SessionReport
impl Sync for SessionReport
impl Unpin for SessionReport
impl UnsafeUnpin for SessionReport
impl UnwindSafe for SessionReport
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more