use std::time::Duration;
use swink_agent::Emission;
use swink_agent::Usage;
use super::types::PipelineId;
#[derive(Clone, Debug)]
pub enum PipelineEvent {
Started {
pipeline_id: PipelineId,
pipeline_name: String,
},
StepStarted {
pipeline_id: PipelineId,
step_index: usize,
agent_name: String,
},
StepCompleted {
pipeline_id: PipelineId,
step_index: usize,
agent_name: String,
duration: Duration,
usage: Usage,
},
Completed {
pipeline_id: PipelineId,
total_duration: Duration,
total_usage: Usage,
},
Failed {
pipeline_id: PipelineId,
error_message: String,
},
}
impl PipelineEvent {
pub fn to_emission(&self) -> Emission {
let kind = match self {
Self::Started { .. } => "pipeline.started",
Self::StepStarted { .. } => "pipeline.step_started",
Self::StepCompleted { .. } => "pipeline.step_completed",
Self::Completed { .. } => "pipeline.completed",
Self::Failed { .. } => "pipeline.failed",
};
Emission::new(kind, serde_json::Value::Null)
}
}