1use crate::models;
12use serde::{Deserialize, Serialize};
13
14#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
16pub struct ExportableCompletedJob {
17 #[serde(rename = "id")]
18 pub id: uuid::Uuid,
19 #[serde(rename = "parent_job", skip_serializing_if = "Option::is_none")]
20 pub parent_job: Option<uuid::Uuid>,
21 #[serde(rename = "created_by")]
22 pub created_by: String,
23 #[serde(rename = "created_at")]
24 pub created_at: String,
25 #[serde(rename = "started_at", skip_serializing_if = "Option::is_none")]
26 pub started_at: Option<String>,
27 #[serde(rename = "completed_at", skip_serializing_if = "Option::is_none")]
28 pub completed_at: Option<String>,
29 #[serde(rename = "duration_ms", skip_serializing_if = "Option::is_none")]
30 pub duration_ms: Option<i32>,
31 #[serde(rename = "script_path", skip_serializing_if = "Option::is_none")]
32 pub script_path: Option<String>,
33 #[serde(rename = "script_hash", skip_serializing_if = "Option::is_none")]
34 pub script_hash: Option<String>,
35 #[serde(rename = "args", skip_serializing_if = "Option::is_none")]
37 pub args: Option<serde_json::Value>,
38 #[serde(rename = "result", skip_serializing_if = "Option::is_none")]
40 pub result: Option<serde_json::Value>,
41 #[serde(rename = "logs", skip_serializing_if = "Option::is_none")]
43 pub logs: Option<String>,
44 #[serde(rename = "raw_code", skip_serializing_if = "Option::is_none")]
45 pub raw_code: Option<String>,
46 #[serde(rename = "raw_lock", skip_serializing_if = "Option::is_none")]
47 pub raw_lock: Option<String>,
48 #[serde(rename = "canceled_by", skip_serializing_if = "Option::is_none")]
49 pub canceled_by: Option<String>,
50 #[serde(rename = "canceled_reason", skip_serializing_if = "Option::is_none")]
51 pub canceled_reason: Option<String>,
52 #[serde(rename = "job_kind")]
53 pub job_kind: JobKind,
54 #[serde(rename = "trigger", skip_serializing_if = "Option::is_none")]
56 pub trigger: Option<String>,
57 #[serde(rename = "trigger_kind", skip_serializing_if = "Option::is_none")]
58 pub trigger_kind: Option<TriggerKind>,
59 #[serde(rename = "permissioned_as")]
60 pub permissioned_as: String,
61 #[serde(rename = "permissioned_as_email", skip_serializing_if = "Option::is_none")]
62 pub permissioned_as_email: Option<String>,
63 #[serde(rename = "flow_status", skip_serializing_if = "Option::is_none")]
65 pub flow_status: Option<serde_json::Value>,
66 #[serde(rename = "workflow_as_code_status", skip_serializing_if = "Option::is_none")]
67 pub workflow_as_code_status: Option<serde_json::Value>,
68 #[serde(rename = "raw_flow", skip_serializing_if = "Option::is_none")]
69 pub raw_flow: Option<serde_json::Value>,
70 #[serde(rename = "is_flow_step", skip_serializing_if = "Option::is_none")]
71 pub is_flow_step: Option<bool>,
72 #[serde(rename = "language", skip_serializing_if = "Option::is_none")]
73 pub language: Option<models::ScriptLang>,
74 #[serde(rename = "is_skipped", skip_serializing_if = "Option::is_none")]
75 pub is_skipped: Option<bool>,
76 #[serde(rename = "email")]
77 pub email: String,
78 #[serde(rename = "visible_to_owner")]
79 pub visible_to_owner: bool,
80 #[serde(rename = "mem_peak", skip_serializing_if = "Option::is_none")]
81 pub mem_peak: Option<i32>,
82 #[serde(rename = "tag", skip_serializing_if = "Option::is_none")]
83 pub tag: Option<String>,
84 #[serde(rename = "priority", skip_serializing_if = "Option::is_none")]
85 pub priority: Option<i32>,
86 #[serde(rename = "labels", skip_serializing_if = "Option::is_none")]
87 pub labels: Option<Vec<String>>,
88 #[serde(rename = "same_worker", skip_serializing_if = "Option::is_none")]
89 pub same_worker: Option<bool>,
90 #[serde(rename = "flow_step_id", skip_serializing_if = "Option::is_none")]
91 pub flow_step_id: Option<String>,
92 #[serde(rename = "flow_innermost_root_job", skip_serializing_if = "Option::is_none")]
93 pub flow_innermost_root_job: Option<uuid::Uuid>,
94 #[serde(rename = "concurrent_limit", skip_serializing_if = "Option::is_none")]
95 pub concurrent_limit: Option<i32>,
96 #[serde(rename = "concurrency_time_window_s", skip_serializing_if = "Option::is_none")]
97 pub concurrency_time_window_s: Option<i32>,
98 #[serde(rename = "timeout", skip_serializing_if = "Option::is_none")]
99 pub timeout: Option<i32>,
100 #[serde(rename = "cache_ttl", skip_serializing_if = "Option::is_none")]
101 pub cache_ttl: Option<i32>,
102 #[serde(rename = "self_wait_time_ms", skip_serializing_if = "Option::is_none")]
103 pub self_wait_time_ms: Option<i32>,
104 #[serde(rename = "aggregate_wait_time_ms", skip_serializing_if = "Option::is_none")]
105 pub aggregate_wait_time_ms: Option<i32>,
106 #[serde(rename = "preprocessed", skip_serializing_if = "Option::is_none")]
107 pub preprocessed: Option<bool>,
108 #[serde(rename = "worker", skip_serializing_if = "Option::is_none")]
109 pub worker: Option<String>,
110 #[serde(rename = "status", skip_serializing_if = "Option::is_none")]
112 pub status: Option<String>,
113}
114
115impl ExportableCompletedJob {
116 pub fn new(id: uuid::Uuid, created_by: String, created_at: String, job_kind: JobKind, permissioned_as: String, email: String, visible_to_owner: bool) -> ExportableCompletedJob {
118 ExportableCompletedJob {
119 id,
120 parent_job: None,
121 created_by,
122 created_at,
123 started_at: None,
124 completed_at: None,
125 duration_ms: None,
126 script_path: None,
127 script_hash: None,
128 args: None,
129 result: None,
130 logs: None,
131 raw_code: None,
132 raw_lock: None,
133 canceled_by: None,
134 canceled_reason: None,
135 job_kind,
136 trigger: None,
137 trigger_kind: None,
138 permissioned_as,
139 permissioned_as_email: None,
140 flow_status: None,
141 workflow_as_code_status: None,
142 raw_flow: None,
143 is_flow_step: None,
144 language: None,
145 is_skipped: None,
146 email,
147 visible_to_owner,
148 mem_peak: None,
149 tag: None,
150 priority: None,
151 labels: None,
152 same_worker: None,
153 flow_step_id: None,
154 flow_innermost_root_job: None,
155 concurrent_limit: None,
156 concurrency_time_window_s: None,
157 timeout: None,
158 cache_ttl: None,
159 self_wait_time_ms: None,
160 aggregate_wait_time_ms: None,
161 preprocessed: None,
162 worker: None,
163 status: None,
164 }
165 }
166}
167#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
169pub enum JobKind {
170 #[serde(rename = "script")]
171 Script,
172 #[serde(rename = "preview")]
173 Preview,
174 #[serde(rename = "dependencies")]
175 Dependencies,
176 #[serde(rename = "flow")]
177 Flow,
178 #[serde(rename = "flowdependencies")]
179 Flowdependencies,
180 #[serde(rename = "appdependencies")]
181 Appdependencies,
182 #[serde(rename = "flowpreview")]
183 Flowpreview,
184 #[serde(rename = "script_hub")]
185 ScriptHub,
186 #[serde(rename = "identity")]
187 Identity,
188 #[serde(rename = "deploymentcallback")]
189 Deploymentcallback,
190 #[serde(rename = "singlestepflow")]
191 Singlestepflow,
192 #[serde(rename = "flowscript")]
193 Flowscript,
194 #[serde(rename = "flownode")]
195 Flownode,
196 #[serde(rename = "appscript")]
197 Appscript,
198 #[serde(rename = "aiagent")]
199 Aiagent,
200 #[serde(rename = "unassigned_script")]
201 UnassignedScript,
202 #[serde(rename = "unassigned_flow")]
203 UnassignedFlow,
204 #[serde(rename = "unassigned_singlestepflow")]
205 UnassignedSinglestepflow,
206}
207
208impl Default for JobKind {
209 fn default() -> JobKind {
210 Self::Script
211 }
212}
213#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
215pub enum TriggerKind {
216 #[serde(rename = "webhook")]
217 Webhook,
218 #[serde(rename = "http")]
219 Http,
220 #[serde(rename = "websocket")]
221 Websocket,
222 #[serde(rename = "kafka")]
223 Kafka,
224 #[serde(rename = "email")]
225 Email,
226 #[serde(rename = "nats")]
227 Nats,
228 #[serde(rename = "schedule")]
229 Schedule,
230 #[serde(rename = "app")]
231 App,
232 #[serde(rename = "ui")]
233 Ui,
234 #[serde(rename = "postgres")]
235 Postgres,
236 #[serde(rename = "sqs")]
237 Sqs,
238 #[serde(rename = "gcp")]
239 Gcp,
240}
241
242impl Default for TriggerKind {
243 fn default() -> TriggerKind {
244 Self::Webhook
245 }
246}
247