1use serde::{Deserialize, Serialize};
2use std::collections::HashMap;
3
4#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
6pub enum ExecutionMethod {
7 #[serde(rename = "ssh")]
8 SSH,
9 #[serde(rename = "websocket")]
10 WebSocket,
11}
12
13#[derive(Debug, Clone, Serialize, Deserialize)]
15pub struct SshConfig {
16 pub host: String,
17 pub port: u16,
18 pub username: String,
19 pub password: Option<String>,
20 pub private_key_path: Option<String>,
21 pub session_timeout_seconds: Option<u64>,
22 pub timeout_seconds: Option<u64>,
23}
24
25#[derive(Debug, Clone, Serialize, Deserialize)]
27pub struct WebSocketConfig {
28 pub url: String,
29 pub timeout_seconds: Option<u64>,
30}
31
32#[derive(Debug, Clone, Serialize, Deserialize)]
34pub struct ClientConfig {
35 pub name: String,
36 pub execution_method: ExecutionMethod,
37 pub ssh_config: Option<SshConfig>,
38 pub websocket_config: Option<WebSocketConfig>,
39}
40
41#[derive(Debug, Clone, Serialize, Deserialize)]
43pub struct ExtractRule {
44 pub name: String,
45 pub patterns: Vec<String>, pub source: String, #[serde(default = "default_cascade")]
48 pub cascade: bool, }
50
51fn default_cascade() -> bool {
53 true
54}
55
56#[derive(Debug, Clone, Serialize, Deserialize, Default)]
58pub struct Step {
59 pub title: Option<String>,
60 pub name: String,
61 pub script: String,
62 #[serde(default)]
63 pub servers: Vec<String>,
64 pub timeout_seconds: Option<u64>,
65 pub extract: Option<Vec<ExtractRule>>,
66 #[serde(default)]
67 pub variables: Option<HashMap<String, String>>,
68}
69
70#[derive(Debug, Clone, Serialize, Deserialize)]
72pub struct Pipeline {
73 pub name: String,
74 pub title: Option<String>,
75 pub steps: Vec<Step>,
76}
77
78#[derive(Debug, Clone, Serialize, Deserialize)]
80pub struct RemoteExecutionConfig {
81 pub variables: Option<HashMap<String, String>>,
82 pub clients: HashMap<String, ClientConfig>,
83 pub pipelines: Vec<Pipeline>,
84 pub default_timeout: Option<u64>,
85 pub global_scripts:Vec<String>
86}
87
88#[derive(Debug, Clone)]
90pub enum OutputType {
91 Stdout,
92 Stderr,
93 Log,
94 StepStarted, StepCompleted, }
97
98#[derive(Debug, Clone)]
100pub struct OutputEvent {
101 pub pipeline_name: String,
102 pub server_name: String,
103 pub step: Step, pub output_type: OutputType,
105 pub script_path:String,
106 pub content: String,
107 pub timestamp: std::time::Instant,
108 pub variables: HashMap<String, String>, }
110
111pub type OutputCallback = std::sync::Arc<dyn Fn(OutputEvent) + Send + Sync>;
113
114#[derive(Debug, Clone, Serialize, Deserialize)]
116pub struct ExecutionResult {
117 pub success: bool,
118 pub stdout: String,
119 pub stderr: String,
120 pub script: String,
121 pub exit_code: i32,
122 pub execution_time_ms: u64,
123 pub error_message: Option<String>,
124}
125
126#[derive(Debug, Clone, Serialize, Deserialize)]
128pub struct StepExecutionResult {
129 pub title: String,
130 pub step_name: String,
131 pub server_name: String,
132 pub execution_result: ExecutionResult,
133 pub overall_success: bool,
134 pub scritp_path:String,
135 pub execution_time_ms: u64,
136}
137
138#[derive(Debug, Clone, Serialize, Deserialize)]
140pub struct PipelineExecutionResult {
141 pub pipeline_name: String,
142 pub title: String,
143 pub step_results: Vec<StepExecutionResult>,
144 pub overall_success: bool,
145 pub total_execution_time_ms: u64,
146}
147
148#[derive(Debug, Clone, Serialize, Deserialize)]
150pub struct ShellExecutionResult {
151 pub pipeline_results: Vec<PipelineExecutionResult>,
152 pub success: bool,
153 pub reason: String,
154}