use std::collections::BTreeMap;
use uuid::Uuid;
pub use crate::common::{LogLevel, LogMessage, NodeError, NodeErrorCause, NodeExitStatus};
use crate::{common::DaemonId, descriptor::Descriptor, id::NodeId};
#[derive(Debug, Clone, serde::Deserialize, serde::Serialize)]
pub struct NodeInfo {
pub dataflow_id: Uuid,
pub dataflow_name: Option<String>,
pub node_id: NodeId,
pub daemon_id: DaemonId,
pub metrics: Option<NodeMetricsInfo>,
}
#[derive(Debug, Clone, serde::Deserialize, serde::Serialize)]
pub struct NodeMetricsInfo {
pub pid: u32,
pub cpu_usage: f32,
pub memory_mb: f64,
pub disk_read_mb_s: Option<f64>,
pub disk_write_mb_s: Option<f64>,
}
#[derive(Debug, Clone, serde::Deserialize, serde::Serialize)]
pub struct DataflowResult {
pub uuid: Uuid,
pub timestamp: uhlc::Timestamp,
pub node_results: BTreeMap<NodeId, Result<(), NodeError>>,
}
impl DataflowResult {
pub fn ok_empty(uuid: Uuid, timestamp: uhlc::Timestamp) -> Self {
Self {
uuid,
timestamp,
node_results: Default::default(),
}
}
pub fn is_ok(&self) -> bool {
self.node_results.values().all(|r| r.is_ok())
}
}
#[derive(Debug, Clone, serde::Deserialize, serde::Serialize)]
pub struct DataflowList(pub Vec<DataflowListEntry>);
impl DataflowList {
pub fn get_active(&self) -> Vec<DataflowIdAndName> {
self.0
.iter()
.filter(|d| d.status == DataflowStatus::Running)
.map(|d| d.id.clone())
.collect()
}
}
#[derive(Debug, Clone, serde::Deserialize, serde::Serialize)]
pub struct DataflowListEntry {
pub id: DataflowIdAndName,
pub status: DataflowStatus,
}
#[derive(Debug, Clone, Copy, serde::Deserialize, serde::Serialize, PartialEq, Eq)]
pub enum DataflowStatus {
Running,
Finished,
Failed,
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct DataflowIdAndName {
pub uuid: Uuid,
pub name: Option<String>,
}
impl std::fmt::Display for DataflowIdAndName {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
if let Some(name) = &self.name {
write!(f, "[{name}] {}", self.uuid)
} else {
write!(f, "[<unnamed>] {}", self.uuid)
}
}
}
#[derive(Debug, Clone, serde::Deserialize, serde::Serialize)]
pub struct DataflowInfo {
pub uuid: Uuid,
pub name: Option<String>,
pub descriptor: Descriptor,
}
#[derive(Debug, Clone, serde::Deserialize, serde::Serialize)]
pub enum CheckDataflowReply {
Running { uuid: Uuid },
Stopped { uuid: Uuid, result: DataflowResult },
}
#[derive(Debug, Clone, serde::Deserialize, serde::Serialize)]
pub struct StopDataflowReply {
pub uuid: Uuid,
pub result: DataflowResult,
}
#[derive(Debug, Clone, serde::Deserialize, serde::Serialize)]
pub struct VersionInfo {
pub coordinator_version: String,
pub message_format_version: String,
}