Skip to main content

stasis/domain/runtime/
outbox.rs

1use chrono::{DateTime, Utc};
2
3#[derive(Clone, Debug, Eq, PartialEq)]
4pub struct OutboxPublishPolicy {
5    pub max_attempts: u32,
6    pub base_delay_seconds: i64,
7    pub max_delay_seconds: i64,
8}
9
10impl Default for OutboxPublishPolicy {
11    fn default() -> Self {
12        Self {
13            max_attempts: 8,
14            base_delay_seconds: 2,
15            max_delay_seconds: 300,
16        }
17    }
18}
19
20#[derive(Clone, Debug, Eq, PartialEq)]
21pub enum RuntimeEventType {
22    JobSucceeded,
23    JobRetryScheduled,
24    JobDeadLettered,
25}
26
27#[derive(Clone, Debug, Eq, PartialEq)]
28pub struct RuntimeEvent {
29    pub event_type: RuntimeEventType,
30    pub job_id: String,
31    pub thread_id: Option<String>,
32    pub correlation_id: String,
33    pub causation_id: String,
34    pub trace_id: String,
35    pub sttp_input_node_id: String,
36    pub sttp_output_node_id: Option<String>,
37    pub execution_id: Option<String>,
38    pub input_memory_query_id: Option<String>,
39    pub input_memory_query_fingerprint: Option<String>,
40    pub output_memory_node_id: Option<String>,
41    pub retrieval_path: Option<String>,
42    pub occurred_at: DateTime<Utc>,
43    pub message: Option<String>,
44}
45
46#[derive(Clone, Debug, Eq, PartialEq)]
47pub enum OutboxStatus {
48    Pending,
49    Published,
50    Failed,
51}
52
53#[derive(Clone, Debug, Eq, PartialEq)]
54pub struct OutboxEvent {
55    pub event_id: String,
56    pub status: OutboxStatus,
57    pub publish_attempts: u32,
58    pub published_at: Option<DateTime<Utc>>,
59    pub next_attempt_at: Option<DateTime<Utc>>,
60    pub last_publish_error: Option<String>,
61    pub event: RuntimeEvent,
62}