use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "kebab-case")]
pub enum JobState {
Queued,
Running,
Completed,
Lost,
Elsewhere,
}
impl JobState {
pub fn is_final(self) -> bool {
matches!(
self,
JobState::Completed | JobState::Lost | JobState::Elsewhere
)
}
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct JobSummary {
pub id: u64,
pub repository: String,
pub run_id: u64,
pub run_attempt: u32,
pub workflow: Option<String>,
pub name: String,
pub branch: Option<String>,
pub url: Option<String>,
pub labels: Vec<String>,
pub state: JobState,
pub conclusion: Option<String>,
pub runner: Option<JobRunner>,
pub timeline: Timeline,
pub metrics: JobMetrics,
pub log: LogSummary,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct Job {
#[serde(flatten)]
pub summary: JobSummary,
pub steps: Vec<Step>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct JobRunner {
pub name: String,
pub profile: String,
pub slot: usize,
pub memory_cap: Option<u64>,
pub cpu_cap: Option<u64>,
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct Timeline {
pub queued_at: u64,
pub container_started_at: Option<u64>,
pub started_at: Option<u64>,
pub finished_at: Option<u64>,
pub cleaned_at: Option<u64>,
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct JobMetrics {
pub cpu_time: Option<u64>,
pub cpu_peak: Option<u64>,
pub cpu_average: Option<u64>,
pub memory_peak: Option<u64>,
pub memory_average: Option<u64>,
pub network_received: Option<u64>,
pub network_sent: Option<u64>,
pub mirror_bytes: u64,
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct LogSummary {
pub lines: u64,
pub bytes: u64,
pub truncated: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct Step {
pub number: u32,
pub name: String,
pub status: String,
pub conclusion: Option<String>,
pub started_at: Option<u64>,
pub completed_at: Option<u64>,
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct JobQuery {
pub repository: Option<String>,
pub state: Option<JobState>,
pub conclusion: Option<String>,
pub since: Option<u64>,
pub until: Option<u64>,
pub before: Option<u64>,
pub limit: Option<u32>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct JobPage {
pub jobs: Vec<JobSummary>,
pub next: Option<u64>,
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct LogQuery {
pub from: Option<u64>,
#[serde(default)]
pub follow: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct Sample {
pub at: u64,
pub cpu: u64,
pub memory: u64,
pub network_received: u64,
pub network_sent: u64,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct SampleSeries {
pub job: u64,
pub interval: u64,
pub samples: Vec<Sample>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct HostSample {
pub at: u64,
pub cpu: u64,
pub memory: u64,
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct HostSampleQuery {
pub since: Option<u64>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct HostSamples {
pub interval: u64,
pub samples: Vec<HostSample>,
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "kebab-case")]
pub enum Bucket {
Hour,
#[default]
Day,
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct StatsQuery {
pub repository: Option<String>,
pub since: Option<u64>,
pub until: Option<u64>,
#[serde(default)]
pub bucket: Bucket,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct Stats {
pub bucket: Bucket,
pub rows: Vec<StatsRow>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct StatsRow {
pub start: u64,
pub repository: String,
pub jobs: u64,
pub succeeded: u64,
pub failed: u64,
pub cancelled: u64,
pub queue_seconds: u64,
pub run_seconds: u64,
pub cpu_time: u64,
pub memory_peak: u64,
pub network_received: u64,
pub mirror_bytes: u64,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "kebab-case", tag = "kind")]
pub enum CacheKind {
Snapshot {
profile: String,
},
Slot {
profile: String,
slot: usize,
},
Pnpm,
Maven,
Mirror,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct CacheVolume {
pub name: String,
#[serde(flatten)]
pub kind: CacheKind,
pub bytes: u64,
pub limit: Option<u64>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct Caches {
pub measured_at: Option<u64>,
pub volumes: Vec<CacheVolume>,
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct CacheHistoryQuery {
pub since: Option<u64>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct CacheSize {
pub at: u64,
pub name: String,
pub bytes: u64,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct CacheHistory {
pub sizes: Vec<CacheSize>,
}