use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum LifecycleEvent {
ChannelPollStarted,
ChannelPollSucceeded,
ChannelPollFailed,
ChannelBackoffArmed,
ChannelBackoffReset,
ChannelHeartbeatPersistFailed,
ConfigLocked,
CheckpointOutcomeRecorded,
PhaseStarted,
PhaseCompleted,
PhaseCancelled,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct ChannelPollStartedPayload {
pub channel_kind: String,
pub channel_slug: String,
pub since_rfc3339: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct ChannelPollSucceededPayload {
pub channel_kind: String,
pub channel_slug: String,
pub envelope_count: usize,
pub previous_backoff_attempt: u32,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct ChannelPollFailedPayload {
pub channel_kind: String,
pub channel_slug: String,
pub error_class: String,
pub error_message: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct ChannelBackoffArmedPayload {
pub channel_kind: String,
pub channel_slug: String,
pub attempt: u32,
pub step_ms: u64,
pub delay_ms: u64,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct ChannelBackoffResetPayload {
pub channel_kind: String,
pub channel_slug: String,
pub previous_backoff_attempt: u32,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct ChannelHeartbeatPersistFailedPayload {
pub channel_kind: String,
pub channel_slug: String,
pub error: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct ConfigLockedPayload {
pub key: String,
pub value: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct CheckpointOutcomeRecordedPayload {
pub wal_pages: u64,
pub warn_pages: u64,
pub high_water_pages: u64,
pub truncate_high_water_pages: u64,
pub above_warn: bool,
pub above_high_water: bool,
pub above_truncate_high_water: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub episode_elevated_ticks: Option<u64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub episode_peak_wal_pages: Option<u64>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct PhaseStartedPayload {
pub work_class: String,
pub phase: String,
pub corpus_size: Option<u64>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct PhaseCompletedPayload {
pub work_class: String,
pub phase: String,
pub wall_us: i64,
pub cpu_us: Option<i64>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct PhaseCancelledPayload {
pub work_class: String,
pub phase: String,
pub wall_us: i64,
pub cpu_us: Option<i64>,
}
#[cfg(test)]
#[path = "telemetry/tests.rs"]
mod tests;