stasis/domain/runtime/
outbox.rs1use 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}