use chrono::{DateTime, Utc};
use serde::Deserialize;
use std::time::Duration;
#[derive(Debug, Clone, Deserialize)]
pub struct SessionInfo {
pub id: String,
#[serde(alias = "cmd")]
pub command: String,
#[serde(default, alias = "cwd")]
pub workdir: Option<String>,
#[serde(alias = "created_at")]
pub created: DateTime<Utc>,
#[serde(default)]
pub is_active: bool,
#[serde(default)]
pub last_activity: Option<DateTime<Utc>>,
#[serde(default)]
pub tty: bool,
#[serde(default)]
pub bytes_per_second: Option<f64>,
}
impl SessionInfo {
pub fn is_session_active(&self) -> bool {
self.is_active
}
pub fn get_activity_age(&self) -> Option<Duration> {
self.last_activity.map(|last| {
let now = Utc::now();
let diff = now.signed_duration_since(last);
Duration::from_secs(diff.num_seconds().max(0) as u64)
})
}
pub fn id(&self) -> &str {
&self.id
}
pub fn command(&self) -> &str {
&self.command
}
}