rebuilderd_common/api/v1/models/
queue.rs1use crate::api::v1::{BuildStatus, Priority};
2use chrono::{DateTime, NaiveDateTime, Utc};
3#[cfg(feature = "diesel")]
4use diesel::Queryable;
5use serde::{Deserialize, Serialize};
6
7#[derive(Debug, Serialize, Deserialize)]
8pub struct QueueJobRequest {
9 pub distribution: Option<String>,
10 pub release: Option<String>,
11 pub component: Option<String>,
12 pub name: Option<String>,
13 pub version: Option<String>,
14 pub architecture: Option<String>,
15 pub status: Option<BuildStatus>,
16 pub priority: Option<Priority>,
17}
18
19#[derive(Debug, Serialize, Deserialize)]
20pub struct PopQueuedJobRequest {
21 pub supported_backends: Vec<String>,
22 pub architecture: String,
23 pub supported_architectures: Vec<String>,
24}
25
26#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
27#[cfg_attr(feature = "diesel", derive(Queryable))]
28#[cfg_attr(feature = "diesel", diesel(check_for_backend(diesel::sqlite::Sqlite)))]
29pub struct QueuedJob {
30 pub id: i32,
31 pub name: String,
32 pub version: String,
33 pub distribution: String,
34 pub release: Option<String>,
35 pub architecture: String,
36 pub backend: String,
37 pub url: String,
38 pub next_retry: Option<NaiveDateTime>,
39 pub priority: Priority,
40 pub queued_at: NaiveDateTime,
41 pub started_at: Option<NaiveDateTime>,
42}
43
44impl QueuedJob {
45 pub fn is_due(&self, now: DateTime<Utc>) -> bool {
46 if let Some(next_retry) = self.next_retry {
47 next_retry <= now.naive_utc()
48 } else {
49 true
50 }
51 }
52
53 pub fn running_since(&self, now: DateTime<Utc>) -> Option<chrono::TimeDelta> {
54 let started_at = self.started_at?;
55 let duration = now.naive_utc() - started_at;
56 Some(duration)
57 }
58}
59
60#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
61#[cfg_attr(feature = "diesel", derive(Queryable))]
62#[cfg_attr(feature = "diesel", diesel(check_for_backend(diesel::sqlite::Sqlite)))]
63pub struct QueuedJobArtifact {
64 pub name: String,
65 pub version: String,
66 pub architecture: String,
67 pub url: String,
68}
69
70#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
71pub struct QueuedJobWithArtifacts {
72 pub job: QueuedJob,
73 pub artifacts: Vec<QueuedJobArtifact>,
74}
75
76#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
77pub enum JobAssignment {
78 Nothing,
79 Rebuild(Box<QueuedJobWithArtifacts>),
80}