[WIP] Daemon & CLI
This commit is contained in:
parent
56aad3a023
commit
8b158108bb
100 changed files with 6519 additions and 1596 deletions
|
|
@ -2,9 +2,10 @@ pub mod protocol;
|
|||
pub mod transport;
|
||||
|
||||
pub use protocol::{
|
||||
ClientMessage, DaemonMessage, HelloAck, LogEntry, StateSnapshot, MetricSample,
|
||||
RequestEnvelope, ResponseEnvelope, ResponseResult, LocalRequest, IpcErrorCode,
|
||||
ConnectionStatus, StartupPhase, LifecycleEvent,
|
||||
ClientMessage, ComponentHealth, ComponentId, ConnectionStatus, DaemonMessage, DeploymentMode,
|
||||
ExitIntent, HealthStatus, HelloAck, IpcErrorCode, LifecycleEvent, LifecyclePhase, LocalRequest,
|
||||
LogEntry, MetricSample, RequestEnvelope, ResponseEnvelope, ResponseResult, StartupPhase,
|
||||
StateSnapshot, SupervisorKind,
|
||||
};
|
||||
pub use transport::{read_msg, write_msg};
|
||||
|
||||
|
|
|
|||
|
|
@ -7,10 +7,17 @@ use serde::{Deserialize, Serialize};
|
|||
#[derive(Clone, Debug, Deserialize, Serialize)]
|
||||
#[serde(tag = "type", content = "data", rename_all = "snake_case")]
|
||||
pub enum ClientMessage {
|
||||
Hello { supported_versions: Vec<u16> },
|
||||
Subscribe { log_classes: Vec<String>, metric_interval_ms: Option<u64> },
|
||||
Hello {
|
||||
supported_versions: Vec<u16>,
|
||||
},
|
||||
Subscribe {
|
||||
log_classes: Vec<String>,
|
||||
metric_interval_ms: Option<u64>,
|
||||
},
|
||||
Request(RequestEnvelope),
|
||||
Ping { seq: u64 },
|
||||
Ping {
|
||||
seq: u64,
|
||||
},
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Deserialize, Serialize)]
|
||||
|
|
@ -26,14 +33,31 @@ pub enum LocalRequest {
|
|||
GetStatus,
|
||||
ListTasks,
|
||||
ListUsers,
|
||||
CreateUser { username: String },
|
||||
RemoveUser { user_id: i64 },
|
||||
CreateUser {
|
||||
username: String,
|
||||
},
|
||||
RemoveUser {
|
||||
user_id: i64,
|
||||
},
|
||||
ReconnectOmikron,
|
||||
RotateIotaIdentity,
|
||||
RequestProcessExit {
|
||||
intent: ExitIntent,
|
||||
},
|
||||
GetDaemonStatus,
|
||||
#[serde(skip)]
|
||||
RestartDaemon,
|
||||
#[serde(skip)]
|
||||
StopDaemon,
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy, Debug, Deserialize, Serialize)]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub enum ExitIntent {
|
||||
Stop,
|
||||
Restart,
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Daemon → Client
|
||||
// ---------------------------------------------------------------------------
|
||||
|
|
@ -42,13 +66,19 @@ pub enum LocalRequest {
|
|||
#[serde(tag = "type", content = "data", rename_all = "snake_case")]
|
||||
pub enum DaemonMessage {
|
||||
HelloAck(HelloAck),
|
||||
/// Confirms that the server has installed this connection's subscription.
|
||||
Subscribed,
|
||||
LogEntry(LogEntry),
|
||||
StateUpdate(StateSnapshot),
|
||||
MetricSample(MetricSample),
|
||||
Response(ResponseEnvelope),
|
||||
Pong { seq: u64 },
|
||||
Pong {
|
||||
seq: u64,
|
||||
},
|
||||
LifecycleEvent(LifecycleEvent),
|
||||
Gap { skipped: u64 },
|
||||
Gap {
|
||||
skipped: u64,
|
||||
},
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Deserialize, Serialize)]
|
||||
|
|
@ -58,6 +88,14 @@ pub struct HelloAck {
|
|||
pub instance_id: String,
|
||||
pub startup_phase: StartupPhase,
|
||||
pub capabilities: Vec<String>,
|
||||
#[serde(default)]
|
||||
pub lifecycle: LifecyclePhase,
|
||||
#[serde(default)]
|
||||
pub health: HealthStatus,
|
||||
#[serde(default)]
|
||||
pub deployment_mode: DeploymentMode,
|
||||
#[serde(default)]
|
||||
pub supervisor: SupervisorKind,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Deserialize, Serialize)]
|
||||
|
|
@ -84,6 +122,10 @@ pub enum IpcErrorCode {
|
|||
UnsupportedVersion,
|
||||
NotReady,
|
||||
Disconnected,
|
||||
Timeout,
|
||||
Cancelled,
|
||||
Unauthorized,
|
||||
InternalFailure,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Deserialize, Serialize)]
|
||||
|
|
@ -114,6 +156,69 @@ pub enum StartupPhase {
|
|||
Stopping,
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Serialize, Deserialize)]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub enum LifecyclePhase {
|
||||
#[default]
|
||||
Starting,
|
||||
Ready,
|
||||
Stopping,
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Serialize, Deserialize)]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub enum HealthStatus {
|
||||
#[default]
|
||||
Healthy,
|
||||
Degraded,
|
||||
Failed,
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub enum ComponentId {
|
||||
Storage,
|
||||
Ipc,
|
||||
Omikron,
|
||||
Web,
|
||||
Updater,
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Serialize, Deserialize)]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub enum DeploymentMode {
|
||||
SessionChild,
|
||||
UiAutoStart,
|
||||
UserService,
|
||||
SystemSocketActivated,
|
||||
SystemAlwaysOn,
|
||||
#[default]
|
||||
External,
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Serialize, Deserialize)]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub enum SupervisorKind {
|
||||
#[default]
|
||||
None,
|
||||
IotaUi,
|
||||
Systemd,
|
||||
External,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Serialize, Deserialize)]
|
||||
pub struct ComponentHealth {
|
||||
pub status: HealthStatus,
|
||||
pub message: Option<String>,
|
||||
pub changed_at_ms: u128,
|
||||
}
|
||||
|
||||
impl Default for StartupPhase {
|
||||
fn default() -> Self {
|
||||
Self::Starting
|
||||
}
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Shared types
|
||||
// ---------------------------------------------------------------------------
|
||||
|
|
@ -134,6 +239,18 @@ pub struct StateSnapshot {
|
|||
pub net_up: Vec<(f64, f64)>,
|
||||
pub net_down: Vec<(f64, f64)>,
|
||||
pub sys_info: String,
|
||||
#[serde(default)]
|
||||
pub startup_phase: StartupPhase,
|
||||
#[serde(default)]
|
||||
pub degraded_reason: Option<String>,
|
||||
#[serde(default)]
|
||||
pub lifecycle: LifecyclePhase,
|
||||
#[serde(default)]
|
||||
pub startup_step: Option<String>,
|
||||
#[serde(default)]
|
||||
pub overall_health: HealthStatus,
|
||||
#[serde(default)]
|
||||
pub components: std::collections::BTreeMap<ComponentId, ComponentHealth>,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
|
||||
|
|
|
|||
Loading…
Reference in a new issue