use execution_engine::*;
use std::sync::Arc;
use std::collections::HashMap;
#[tokio::main]
async fn main() {
let config = ExecutionConfig::default();
let engine = Arc::new(ExecutionEngine::new(config).unwrap());
let python_script_path = "test-scripts/demo.py";
let request = ExecutionRequest {
id: Uuid::new_v4(),
command: Command::Script {
path: PathBuf::from(python_script_path),
interpreter: Some("python3".to_string()), },
env: std::env::vars().collect(), working_dir: Some(std::env::current_dir().unwrap()), timeout_ms: Some(30000), output_log_path: None,
metadata: ExecutionMetadata::default(),
};
println!("Executing Python script: {}", python_script_path);
match engine.execute(request).await {
Ok(execution_id) => {
println!("✓ Script started with ID: {}", execution_id);
match engine.wait_for_completion(execution_id).await {
Ok(result) => {
println!("\n=== Execution Result ===");
println!("Status: {:?}", result.status);
println!("Success: {}", result.success);
println!("Exit Code: {}", result.exit_code);
println!("Duration: {:?}", result.duration);
if !result.stdout.is_empty() {
println!("\n--- Output (stdout) ---");
println!("{}", result.stdout);
}
if !result.stderr.is_empty() {
println!("\n--- Errors (stderr) ---");
println!("{}", result.stderr);
}
if let Some(error) = result.error {
println!("\n--- Error Message ---");
println!("{}", error);
}
}
Err(e) => {
println!("✗ Error waiting for completion: {}", e);
}
}
}
Err(e) => {
println!("✗ Failed to start execution: {}", e);
}
}
}