flare_core_runtime/state/
event.rs1use crate::task::TaskState;
4use std::time::Instant;
5
6#[derive(Debug, Clone)]
10pub struct StateEvent {
11 pub task_name: String,
13 pub old_state: TaskState,
15 pub new_state: TaskState,
17 pub timestamp: Instant,
19 pub error: Option<String>,
21}
22
23impl StateEvent {
24 pub fn new(task_name: impl Into<String>, old_state: TaskState, new_state: TaskState) -> Self {
26 Self {
27 task_name: task_name.into(),
28 old_state,
29 new_state,
30 timestamp: Instant::now(),
31 error: None,
32 }
33 }
34
35 pub fn with_error(mut self, error: impl Into<String>) -> Self {
37 self.error = Some(error.into());
38 self
39 }
40
41 pub fn is_failure(&self) -> bool {
43 self.new_state == TaskState::Failed
44 }
45
46 pub fn is_terminal(&self) -> bool {
48 self.new_state.is_terminal()
49 }
50}
51
52#[derive(Debug, Clone)]
56pub enum RuntimeEvent {
57 Startup {
59 name: String,
61 timestamp: Instant,
63 },
64
65 Shutdown {
67 name: String,
69 timestamp: Instant,
71 },
72
73 TaskStateChanged(StateEvent),
75
76 HealthCheckFailed {
78 check_name: String,
80 reason: String,
82 timestamp: Instant,
84 },
85
86 ServiceRegistered {
88 service_name: String,
90 service_id: String,
92 timestamp: Instant,
94 },
95
96 ServiceDeregistered {
98 service_name: String,
100 service_id: String,
102 timestamp: Instant,
104 },
105}
106
107impl RuntimeEvent {
108 pub fn timestamp(&self) -> Instant {
110 match self {
111 RuntimeEvent::Startup { timestamp, .. } => *timestamp,
112 RuntimeEvent::Shutdown { timestamp, .. } => *timestamp,
113 RuntimeEvent::TaskStateChanged(event) => event.timestamp,
114 RuntimeEvent::HealthCheckFailed { timestamp, .. } => *timestamp,
115 RuntimeEvent::ServiceRegistered { timestamp, .. } => *timestamp,
116 RuntimeEvent::ServiceDeregistered { timestamp, .. } => *timestamp,
117 }
118 }
119}