mod identity;
mod metrics;
mod model;
pub use identity::{
MAX_TIMER_LABEL_BYTES, TimerIdentity, TimerIdentityError, TimerIdentityField, TimerLabel,
TimerLabelError,
};
pub use metrics::{
MeasurementSummary, TimerCounters, TimerMeasurement, TimerObservabilitySnapshot,
TimerPerformance,
};
pub use model::{
PreArmedSuccessor, TimerCompletion, TimerCompletionOutcome, TimerDirectiveSnapshot, TimerEpoch,
TimerLastOutcome, TimerOutcomeSnapshot, TimerPolicy, TimerProcessCondition,
TimerRegistrationStatus, TimerSchedulingMode, TimerSchedulingSnapshot, TimerStateSnapshot,
};
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct TimerSnapshot {
pub identity: TimerIdentity,
pub scheduling: TimerSchedulingSnapshot,
pub state: TimerStateSnapshot,
pub observability: TimerObservabilitySnapshot,
}
impl TimerSnapshot {
#[must_use]
pub fn new(identity: TimerIdentity, policy: TimerPolicy, epoch: TimerEpoch) -> Self {
Self {
identity,
scheduling: TimerSchedulingSnapshot::new(policy),
state: TimerStateSnapshot {
enabled: true,
registration: TimerRegistrationStatus::Unregistered,
condition: TimerProcessCondition::Idle,
generation: 0,
in_flight: false,
},
observability: TimerObservabilitySnapshot::new(epoch),
}
}
#[must_use]
pub const fn consecutive_expected_failures(&self) -> u64 {
self.observability.consecutive_expected_failures()
}
}
#[cfg(test)]
mod tests;