use crate::constants::env::system;
use std::collections::HashMap;
use std::process::{Command, Stdio};
pub fn get_process_id() -> u32 {
std::process::id()
}
pub fn get_process_info() -> HashMap<String, String> {
let mut info = HashMap::new();
info.insert("pid".to_string(), get_process_id().to_string());
if let Ok(cwd) = std::env::current_dir() {
info.insert("cwd".to_string(), cwd.to_string_lossy().to_string());
}
if let Ok(exe) = std::env::current_exe() {
info.insert("exe".to_string(), exe.to_string_lossy().to_string());
}
info
}
pub fn is_running_in_container() -> bool {
std::env::var(system::DOCKER_CONTAINER).is_ok()
|| std::env::var(system::KUBERNETES_SERVICE_HOST).is_ok()
|| std::path::Path::new("/.dockerenv").exists()
}
pub fn get_parent_process_id() -> Option<u32> {
#[cfg(unix)]
{
use std::os::unix::process::CommandExt;
None
}
#[cfg(not(unix))]
{
None
}
}
pub fn run_command(cmd: &str, args: &[&str]) -> Result<String, String> {
let output = Command::new(cmd)
.args(args)
.stdout(Stdio::piped())
.stderr(Stdio::piped())
.output()
.map_err(|e| e.to_string())?;
if output.status.success() {
Ok(String::from_utf8_lossy(&output.stdout).to_string())
} else {
Err(String::from_utf8_lossy(&output.stderr).to_string())
}
}