use execution_engine::*;
use std::sync::Arc;
use std::collections::HashMap;
#[tokio::main]
async fn main() {
println!("=== Execution Engine - Standalone Example ===\n");
let config = ExecutionConfig {
log_dir: Some(PathBuf::from("/tmp/execution-logs")),
..Default::default()
};
let engine = Arc::new(ExecutionEngine::new(config).unwrap());
engine.clone().start_cleanup_task();
println!("✓ Engine created and cleanup started\n");
println!("Test 1: Simple echo command");
let request = ExecutionRequest {
id: uuid::Uuid::new_v4(),
command: Command::Shell {
command: "echo 'Hello from Execution Engine!'".to_string(),
shell: "/bin/bash".to_string(),
},
timeout_ms: Some(5000),
env: HashMap::new(),
working_dir: None,
output_log_path: None,
metadata: Default::default(),
};
let execution_id = engine.execute(request).await.unwrap();
println!(" Execution ID: {}", execution_id);
tokio::time::sleep(tokio::time::Duration::from_secs(1)).await;
let result = engine.get_result(execution_id).await.unwrap();
println!(" Success: {}", result.success);
println!(" Output: {}", result.stdout);
println!();
println!("Test 2: Concurrency metrics");
let max_concurrent = engine.config().max_concurrent_executions;
let currently_running = engine.running_count().await;
let available_permits = engine.available_permits();
println!(" Max concurrent: {}", max_concurrent);
println!(" Currently running: {}", currently_running);
println!(" Available slots: {}", available_permits);
println!();
println!("Test 3: List executions");
let executions = engine.list_executions().await;
println!(" Total in memory: {}", executions.len());
println!();
println!("Test 4: Run simple-test.sh script");
let request = ExecutionRequest {
id: uuid::Uuid::new_v4(),
command: Command::Shell {
command: "bash test-scripts/simple-test.sh".to_string(),
shell: "/bin/bash".to_string(),
},
timeout_ms: Some(5000),
env: HashMap::new(),
working_dir: None,
output_log_path: None,
metadata: Default::default(),
};
let execution_id = engine.execute(request).await.unwrap();
println!(" Script execution ID: {}", execution_id);
let result = engine.wait_for_completion(execution_id).await.unwrap();
println!(" Success: {}", result.success);
println!(" Exit code: {}", result.exit_code);
if !result.stdout.is_empty() {
println!(" Stdout:\n{}", result.stdout);
}
if !result.stderr.is_empty() {
println!(" Stderr:\n{}", result.stderr);
}
println!();
println!("=== All tests completed ===");
}