dora_message/
coordinator_to_cli.rs1use std::{
2 collections::{BTreeMap, BTreeSet},
3 net::IpAddr,
4};
5
6use uuid::Uuid;
7
8pub use crate::common::{LogLevel, LogMessage, NodeError, NodeErrorCause, NodeExitStatus};
9use crate::{common::DaemonId, id::NodeId, BuildId};
10
11#[derive(Debug, Clone, serde::Deserialize, serde::Serialize)]
12pub enum ControlRequestReply {
13 Error(String),
14 CoordinatorStopped,
15 DataflowBuildTriggered {
16 build_id: BuildId,
17 },
18 DataflowBuildFinished {
19 build_id: BuildId,
20 result: Result<(), String>,
21 },
22 DataflowStartTriggered {
23 uuid: Uuid,
24 },
25 DataflowSpawned {
26 uuid: Uuid,
27 },
28 DataflowReloaded {
29 uuid: Uuid,
30 },
31 DataflowStopped {
32 uuid: Uuid,
33 result: DataflowResult,
34 },
35 DataflowList(DataflowList),
36 DestroyOk,
37 DaemonConnected(bool),
38 ConnectedDaemons(BTreeSet<DaemonId>),
39 Logs(Vec<u8>),
40 CliAndDefaultDaemonIps {
41 default_daemon: Option<IpAddr>,
42 cli: Option<IpAddr>,
43 },
44}
45
46#[derive(Debug, Clone, serde::Deserialize, serde::Serialize)]
47pub struct DataflowResult {
48 pub uuid: Uuid,
49 pub timestamp: uhlc::Timestamp,
50 pub node_results: BTreeMap<NodeId, Result<(), NodeError>>,
51}
52
53impl DataflowResult {
54 pub fn ok_empty(uuid: Uuid, timestamp: uhlc::Timestamp) -> Self {
55 Self {
56 uuid,
57 timestamp,
58 node_results: Default::default(),
59 }
60 }
61
62 pub fn is_ok(&self) -> bool {
63 self.node_results.values().all(|r| r.is_ok())
64 }
65}
66
67#[derive(Debug, Clone, serde::Deserialize, serde::Serialize)]
68pub struct DataflowList(pub Vec<DataflowListEntry>);
69
70impl DataflowList {
71 pub fn get_active(&self) -> Vec<DataflowIdAndName> {
72 self.0
73 .iter()
74 .filter(|d| d.status == DataflowStatus::Running)
75 .map(|d| d.id.clone())
76 .collect()
77 }
78}
79
80#[derive(Debug, Clone, serde::Deserialize, serde::Serialize)]
81pub struct DataflowListEntry {
82 pub id: DataflowIdAndName,
83 pub status: DataflowStatus,
84}
85
86#[derive(Debug, Clone, Copy, serde::Deserialize, serde::Serialize, PartialEq, Eq)]
87pub enum DataflowStatus {
88 Running,
89 Finished,
90 Failed,
91}
92
93#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
94pub struct DataflowIdAndName {
95 pub uuid: Uuid,
96 pub name: Option<String>,
97}
98
99impl std::fmt::Display for DataflowIdAndName {
100 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
101 if let Some(name) = &self.name {
102 write!(f, "[{name}] {}", self.uuid)
103 } else {
104 write!(f, "[<unnamed>] {}", self.uuid)
105 }
106 }
107}