use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct Record {
pub job: u64,
pub repository: String,
pub profile: String,
pub workflow: Option<String>,
pub name: Option<String>,
pub created_at: u64,
pub bytes: u64,
pub image: String,
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct RecordLimits {
pub max_total: u64,
pub max_count: u32,
pub max_age: u64,
pub min_free: u64,
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct Records {
pub records: Vec<Record>,
pub limits: RecordLimits,
#[serde(default)]
pub shells: Vec<u64>,
}
impl Records {
pub fn bytes(&self) -> u64 {
self.records.iter().map(|record| record.bytes).sum()
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "kebab-case")]
pub enum RecordRemoval {
Count,
Size,
Age,
User,
}
impl std::fmt::Display for RecordRemoval {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_str(match self {
RecordRemoval::Count => "removed to keep within max_count",
RecordRemoval::Size => "removed to keep within max_total",
RecordRemoval::Age => "removed past max_age",
RecordRemoval::User => "removed by hand",
})
}
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct RecordNote {
pub created_at: Option<u64>,
pub bytes: Option<u64>,
pub skipped: Option<String>,
pub removed_at: Option<u64>,
pub removed_by: Option<RecordRemoval>,
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct RemoveRecordsQuery {
#[serde(default)]
pub all: bool,
pub older_than: Option<String>,
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct RemovedRecords {
pub jobs: Vec<u64>,
pub bytes: u64,
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct ShellQuery {
pub step: Option<u32>,
pub cols: Option<u16>,
pub rows: Option<u16>,
}
pub const SHELL_PROTOCOL: &str = "runnerd-tty";