style: apply cargo fmt across entire Rust codebase
- Remove Rust formatting check from CI workflow since formatting is now applied - Standardize import ordering and organization throughout codebase - Fix indentation, spacing, and line breaks for consistency - Clean up trailing whitespace and formatting inconsistencies - Apply rustfmt to all Rust source files including checkpoint, sandbox, commands, and test modules This establishes a consistent code style baseline for the project.
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
use chrono::{DateTime, Utc};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use std::collections::HashMap;
|
||||
use std::sync::{Arc, Mutex};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use tokio::process::Child;
|
||||
use chrono::{DateTime, Utc};
|
||||
|
||||
/// Information about a running agent process
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
@@ -50,7 +50,7 @@ impl ProcessRegistry {
|
||||
child: Child,
|
||||
) -> Result<(), String> {
|
||||
let mut processes = self.processes.lock().map_err(|e| e.to_string())?;
|
||||
|
||||
|
||||
let process_info = ProcessInfo {
|
||||
run_id,
|
||||
agent_id,
|
||||
@@ -84,7 +84,10 @@ impl ProcessRegistry {
|
||||
#[allow(dead_code)]
|
||||
pub fn get_running_processes(&self) -> Result<Vec<ProcessInfo>, String> {
|
||||
let processes = self.processes.lock().map_err(|e| e.to_string())?;
|
||||
Ok(processes.values().map(|handle| handle.info.clone()).collect())
|
||||
Ok(processes
|
||||
.values()
|
||||
.map(|handle| handle.info.clone())
|
||||
.collect())
|
||||
}
|
||||
|
||||
/// Get a specific running process
|
||||
@@ -96,8 +99,8 @@ impl ProcessRegistry {
|
||||
|
||||
/// Kill a running process with proper cleanup
|
||||
pub async fn kill_process(&self, run_id: i64) -> Result<bool, String> {
|
||||
use log::{info, warn, error};
|
||||
|
||||
use log::{error, info, warn};
|
||||
|
||||
// First check if the process exists and get its PID
|
||||
let (pid, child_arc) = {
|
||||
let processes = self.processes.lock().map_err(|e| e.to_string())?;
|
||||
@@ -107,9 +110,12 @@ impl ProcessRegistry {
|
||||
return Ok(false); // Process not found
|
||||
}
|
||||
};
|
||||
|
||||
info!("Attempting graceful shutdown of process {} (PID: {})", run_id, pid);
|
||||
|
||||
|
||||
info!(
|
||||
"Attempting graceful shutdown of process {} (PID: {})",
|
||||
run_id, pid
|
||||
);
|
||||
|
||||
// Send kill signal to the process
|
||||
let kill_sent = {
|
||||
let mut child_guard = child_arc.lock().map_err(|e| e.to_string())?;
|
||||
@@ -128,52 +134,50 @@ impl ProcessRegistry {
|
||||
false // Process already killed
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
if !kill_sent {
|
||||
return Ok(false);
|
||||
}
|
||||
|
||||
|
||||
// Wait for the process to exit (with timeout)
|
||||
let wait_result = tokio::time::timeout(
|
||||
tokio::time::Duration::from_secs(5),
|
||||
async {
|
||||
loop {
|
||||
// Check if process has exited
|
||||
let status = {
|
||||
let mut child_guard = child_arc.lock().map_err(|e| e.to_string())?;
|
||||
if let Some(child) = child_guard.as_mut() {
|
||||
match child.try_wait() {
|
||||
Ok(Some(status)) => {
|
||||
info!("Process {} exited with status: {:?}", run_id, status);
|
||||
*child_guard = None; // Clear the child handle
|
||||
Some(Ok::<(), String>(()))
|
||||
}
|
||||
Ok(None) => {
|
||||
// Still running
|
||||
None
|
||||
}
|
||||
Err(e) => {
|
||||
error!("Error checking process status: {}", e);
|
||||
Some(Err(e.to_string()))
|
||||
}
|
||||
let wait_result = tokio::time::timeout(tokio::time::Duration::from_secs(5), async {
|
||||
loop {
|
||||
// Check if process has exited
|
||||
let status = {
|
||||
let mut child_guard = child_arc.lock().map_err(|e| e.to_string())?;
|
||||
if let Some(child) = child_guard.as_mut() {
|
||||
match child.try_wait() {
|
||||
Ok(Some(status)) => {
|
||||
info!("Process {} exited with status: {:?}", run_id, status);
|
||||
*child_guard = None; // Clear the child handle
|
||||
Some(Ok::<(), String>(()))
|
||||
}
|
||||
Ok(None) => {
|
||||
// Still running
|
||||
None
|
||||
}
|
||||
Err(e) => {
|
||||
error!("Error checking process status: {}", e);
|
||||
Some(Err(e.to_string()))
|
||||
}
|
||||
} else {
|
||||
// Process already gone
|
||||
Some(Ok(()))
|
||||
}
|
||||
};
|
||||
|
||||
match status {
|
||||
Some(result) => return result,
|
||||
None => {
|
||||
// Still running, wait a bit
|
||||
tokio::time::sleep(tokio::time::Duration::from_millis(100)).await;
|
||||
}
|
||||
} else {
|
||||
// Process already gone
|
||||
Some(Ok(()))
|
||||
}
|
||||
};
|
||||
|
||||
match status {
|
||||
Some(result) => return result,
|
||||
None => {
|
||||
// Still running, wait a bit
|
||||
tokio::time::sleep(tokio::time::Duration::from_millis(100)).await;
|
||||
}
|
||||
}
|
||||
}
|
||||
).await;
|
||||
|
||||
})
|
||||
.await;
|
||||
|
||||
match wait_result {
|
||||
Ok(Ok(_)) => {
|
||||
info!("Process {} exited gracefully", run_id);
|
||||
@@ -189,19 +193,19 @@ impl ProcessRegistry {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Remove from registry after killing
|
||||
self.unregister_process(run_id)?;
|
||||
|
||||
|
||||
Ok(true)
|
||||
}
|
||||
|
||||
/// Kill a process by PID using system commands (fallback method)
|
||||
pub fn kill_process_by_pid(&self, run_id: i64, pid: u32) -> Result<bool, String> {
|
||||
use log::{info, warn, error};
|
||||
|
||||
use log::{error, info, warn};
|
||||
|
||||
info!("Attempting to kill process {} by PID {}", run_id, pid);
|
||||
|
||||
|
||||
let kill_result = if cfg!(target_os = "windows") {
|
||||
std::process::Command::new("taskkill")
|
||||
.args(["/F", "/PID", &pid.to_string()])
|
||||
@@ -211,22 +215,25 @@ impl ProcessRegistry {
|
||||
let term_result = std::process::Command::new("kill")
|
||||
.args(["-TERM", &pid.to_string()])
|
||||
.output();
|
||||
|
||||
|
||||
match &term_result {
|
||||
Ok(output) if output.status.success() => {
|
||||
info!("Sent SIGTERM to PID {}", pid);
|
||||
// Give it 2 seconds to exit gracefully
|
||||
std::thread::sleep(std::time::Duration::from_secs(2));
|
||||
|
||||
|
||||
// Check if still running
|
||||
let check_result = std::process::Command::new("kill")
|
||||
.args(["-0", &pid.to_string()])
|
||||
.output();
|
||||
|
||||
|
||||
if let Ok(output) = check_result {
|
||||
if output.status.success() {
|
||||
// Still running, send SIGKILL
|
||||
warn!("Process {} still running after SIGTERM, sending SIGKILL", pid);
|
||||
warn!(
|
||||
"Process {} still running after SIGTERM, sending SIGKILL",
|
||||
pid
|
||||
);
|
||||
std::process::Command::new("kill")
|
||||
.args(["-KILL", &pid.to_string()])
|
||||
.output()
|
||||
@@ -246,7 +253,7 @@ impl ProcessRegistry {
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
match kill_result {
|
||||
Ok(output) => {
|
||||
if output.status.success() {
|
||||
@@ -271,11 +278,11 @@ impl ProcessRegistry {
|
||||
#[allow(dead_code)]
|
||||
pub async fn is_process_running(&self, run_id: i64) -> Result<bool, String> {
|
||||
let processes = self.processes.lock().map_err(|e| e.to_string())?;
|
||||
|
||||
|
||||
if let Some(handle) = processes.get(&run_id) {
|
||||
let child_arc = handle.child.clone();
|
||||
drop(processes); // Release the lock before async operation
|
||||
|
||||
|
||||
let mut child_guard = child_arc.lock().map_err(|e| e.to_string())?;
|
||||
if let Some(ref mut child) = child_guard.as_mut() {
|
||||
match child.try_wait() {
|
||||
@@ -329,20 +336,20 @@ impl ProcessRegistry {
|
||||
pub async fn cleanup_finished_processes(&self) -> Result<Vec<i64>, String> {
|
||||
let mut finished_runs = Vec::new();
|
||||
let processes_lock = self.processes.clone();
|
||||
|
||||
|
||||
// First, identify finished processes
|
||||
{
|
||||
let processes = processes_lock.lock().map_err(|e| e.to_string())?;
|
||||
let run_ids: Vec<i64> = processes.keys().cloned().collect();
|
||||
drop(processes);
|
||||
|
||||
|
||||
for run_id in run_ids {
|
||||
if !self.is_process_running(run_id).await? {
|
||||
finished_runs.push(run_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Then remove them from the registry
|
||||
{
|
||||
let mut processes = processes_lock.lock().map_err(|e| e.to_string())?;
|
||||
@@ -350,7 +357,7 @@ impl ProcessRegistry {
|
||||
processes.remove(run_id);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Ok(finished_runs)
|
||||
}
|
||||
}
|
||||
@@ -368,4 +375,4 @@ impl Default for ProcessRegistryState {
|
||||
fn default() -> Self {
|
||||
Self(Arc::new(ProcessRegistry::new()))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user