mpi_cluster_tools 0.1.5

A collection of cluster management commands for HPC environments
use crate::config::LoginConfig;
use crate::utils::ssh::{parse_json_relaxed, run_remote};
use serde::de::DeserializeOwned;

pub fn condor_q_for_user<T: DeserializeOwned>(
    login: &LoginConfig,
    username: &str,
    attrs: &str,
) -> Result<Vec<T>, Box<dyn std::error::Error>> {
    let cmd = format!("condor_q {} -json -attributes {}", username, attrs);
    let out = run_remote(login, &cmd)?;
    if !out.status.success() {
        let stderr = String::from_utf8_lossy(&out.stderr);
        return Err(format!("SSH command failed: {}", stderr).into());
    }
    let v: Vec<T> = parse_json_relaxed(&out.stdout)?;
    Ok(v)
}

pub fn condor_history_for_user<T: DeserializeOwned>(
    login: &LoginConfig,
    username: &str,
    attrs: &str,
    limit: usize,
) -> Result<Vec<T>, Box<dyn std::error::Error>> {
    let cmd = format!(
        "condor_history {} -json -attributes {} -limit {}",
        username, attrs, limit
    );
    let out = run_remote(login, &cmd)?;
    if !out.status.success() {
        let stderr = String::from_utf8_lossy(&out.stderr);
        return Err(format!("SSH command failed: {}", stderr).into());
    }
    let v: Vec<T> = parse_json_relaxed(&out.stdout)?;
    Ok(v)
}