use std::time::Instant;
use crate::config::snippets::Snippet;
use crate::ssh::client::{ConnectionStatus, Host};
use crate::ssh::key_setup::KeySetupStep;
use crate::ssh::sftp::FileEntry;
pub type HostId = String;
pub type SessionId = u64;
pub type TransferId = u64;
#[derive(Debug, Clone)]
pub struct ProcessInfo {
pub name: String,
pub cpu_percent: f64,
pub mem_percent: f64,
}
#[derive(Debug, Clone)]
pub struct Metrics {
pub cpu_percent: Option<f64>,
pub ram_percent: Option<f64>,
pub disk_percent: Option<f64>,
pub uptime: Option<String>,
pub load_avg: Option<String>,
pub os_info: Option<String>,
pub top_processes: Option<Vec<ProcessInfo>>,
pub last_updated: Instant,
}
impl Default for Metrics {
fn default() -> Self {
Self {
cpu_percent: None,
ram_percent: None,
disk_percent: None,
uptime: None,
load_avg: None,
os_info: None,
top_processes: None,
last_updated: Instant::now(),
}
}
}
#[derive(Debug)]
pub enum CoreEvent {
MetricsUpdate(HostId, Metrics),
HostStatusChanged(HostId, ConnectionStatus),
FileTransferProgress(TransferId, u64, u64),
Error(String),
HostsLoaded(Vec<Host>),
SnippetsLoaded(Vec<Snippet>),
SnippetResult {
host_name: String,
snippet_name: String,
output: Result<String, String>,
},
FileDirListed {
path: String,
entries: Vec<FileEntry>,
},
LocalDirListed {
path: String,
entries: Vec<FileEntry>,
},
SftpConnected { host_name: String },
SftpManagerReady {
host_name: String,
manager: Box<crate::ssh::sftp::SftpManager>,
},
SftpDisconnected { reason: String },
FilePreviewReady { path: String, content: String },
SftpOpDone { result: Result<(), String> },
PtyOutput(SessionId),
PtyExited(SessionId),
DiscoveryQuickScanDone(HostId, Vec<DetectedService>),
DiscoveryFailed(HostId, String),
KeySetupProgress(HostId, KeySetupStep),
KeySetupComplete(HostId, std::path::PathBuf),
KeySetupFailed(HostId, String),
KeySetupRollback(HostId, String),
UpdateAvailable(crate::update::UpdateInfo),
UpdateInstalled(Result<(), String>),
}
#[derive(Debug, Clone)]
pub struct DetectedService {
pub kind: ServiceKind,
pub metrics: Vec<ServiceMetric>,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum ServiceKind {
Docker,
Nginx,
PostgreSQL,
Redis,
NodeJS,
}
#[derive(Debug, Clone)]
pub struct ServiceMetric {
pub name: String, pub value: MetricValue, }
#[derive(Debug, Clone)]
pub enum MetricValue {
Integer(i64),
}