1use std::collections::HashMap;
2
3use myko_macros::myko_item;
4use serde::{Deserialize, Serialize};
5use ts_rs::TS;
6
7use crate::PlaybookId;
8
9#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize, TS)]
10#[serde(rename_all = "camelCase")]
11pub enum RunStatus {
12 Queued,
15 #[default]
16 Running,
17 Completed,
18 Failed,
19 Cancelled,
20}
21
22myko::register_ts_export!(RunStatus);
23
24#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize, TS)]
25#[serde(rename_all = "camelCase")]
26pub struct HostStats {
27 pub ok: u32,
28 pub changed: u32,
29 pub failed: u32,
30 pub skipped: u32,
31 pub unreachable: u32,
32 #[serde(default, skip_serializing_if = "Option::is_none")]
33 pub last_failure: Option<HostFailure>,
34}
35
36myko::register_ts_export!(HostStats);
37
38#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, TS)]
39#[serde(rename_all = "camelCase")]
40pub struct HostFailure {
41 pub task: String,
42 pub message: String,
43 pub seq: u64,
44}
45
46myko::register_ts_export!(HostFailure);
47
48#[myko_item]
49pub struct Run {
50 pub playbook_id: PlaybookId,
51 pub status: RunStatus,
52 pub started_at: String,
53 #[serde(default, skip_serializing_if = "Option::is_none")]
54 pub finished_at: Option<String>,
55 #[serde(default, skip_serializing_if = "Option::is_none")]
56 pub exit_code: Option<i32>,
57 #[serde(default, skip_serializing_if = "Option::is_none")]
58 pub extra_vars: Option<serde_json::Value>,
59 #[serde(default, skip_serializing_if = "Option::is_none")]
60 pub limit: Option<String>,
61 #[serde(default)]
65 pub resources: Vec<String>,
66 #[serde(default)]
67 pub host_stats: HashMap<String, HostStats>,
68 #[myko_client_id]
77 #[serde(default, skip_serializing_if = "Option::is_none")]
78 pub client_id: Option<String>,
79}