use tracing::info;
pub struct RunSpan {
_span: tracing::span::EnteredSpan,
}
impl RunSpan {
pub fn enter(run_id: &str) -> Self {
let span = tracing::info_span!("aivcs.run", run_id = %run_id);
Self {
_span: span.entered(),
}
}
}
pub fn emit_run_started(run_id: &str, agent_name: &str) {
info!(event = "run.started", run_id = %run_id, agent_name = %agent_name);
}
pub fn emit_run_finished(run_id: &str, duration_ms: u64, total_events: u64, success: bool) {
info!(
event = "run.finished",
run_id = %run_id,
duration_ms = duration_ms,
total_events = total_events,
success = success,
);
}
pub fn emit_event_appended(run_id: &str, event_kind: &str, seq: u64) {
info!(event = "run.event_appended", run_id = %run_id, kind = %event_kind, seq = seq);
}
pub fn emit_gate_evaluated(run_id: &str, pass_rate: f32, passed: bool) {
info!(
event = "gate.evaluated",
run_id = %run_id,
pass_rate = pass_rate,
passed = passed,
);
}
pub fn emit_run_finalize_error(run_id: &str, error: &dyn std::fmt::Display) {
tracing::warn!(event = "run.finalize_error", run_id = %run_id, error = %error);
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_run_span_create() {
let _span = RunSpan::enter("test-run-id");
}
}