use std::path::PathBuf;
const PRODUCT: &str = "running-process";
pub fn socket_path(scope_hash: Option<&str>) -> String {
if crate::platform::ipc::endpoint_is_filesystem_backed() {
let _ = crate::broker::secure_dir::ensure_private_dir(&runtime_dir());
}
socket_path_view(scope_hash)
}
pub fn socket_path_view(scope_hash: Option<&str>) -> String {
let suffix = match scope_hash {
Some(h) => format!("-{h}"),
None => String::new(),
};
if crate::platform::ipc::endpoint_is_filesystem_backed() {
return format!("{}/daemon{suffix}.sock", runtime_dir().display());
}
let username = crate::env_vars::USERNAME
.text()
.unwrap_or_else(|| "unknown".into());
format!(r"\\.\pipe\running-process-daemon-{username}{suffix}")
}
pub fn make_socket_endpoint(path: &str) -> std::io::Result<crate::platform::ipc::Endpoint> {
crate::platform::ipc::Endpoint::new(path)
}
pub fn pid_file_path(scope_hash: Option<&str>) -> PathBuf {
let path = pid_file_path_view(scope_hash);
if let Some(parent) = path.parent() {
let _ = std::fs::create_dir_all(parent);
}
path
}
pub fn pid_file_path_view(scope_hash: Option<&str>) -> PathBuf {
let suffix = match scope_hash {
Some(h) => format!("-{h}"),
None => String::new(),
};
runtime_dir().join(format!("daemon{suffix}.pid"))
}
pub fn db_path(scope_hash: Option<&str>) -> PathBuf {
let path = db_path_view(scope_hash);
if let Some(parent) = path.parent() {
let _ = std::fs::create_dir_all(parent);
}
path
}
pub fn db_path_view(scope_hash: Option<&str>) -> PathBuf {
let suffix = match scope_hash {
Some(h) => format!("-{h}"),
None => String::new(),
};
data_dir().join(format!("tracked-pids{suffix}.sqlite3"))
}
pub fn shadow_dir() -> PathBuf {
let dir = shadow_dir_view();
let _ = std::fs::create_dir_all(&dir);
dir
}
pub fn shadow_dir_view() -> PathBuf {
crate::platform::fs::user_run_data_root(PRODUCT).join("run")
}
pub fn data_dir() -> PathBuf {
crate::platform::fs::user_state_dir(PRODUCT)
}
fn runtime_dir() -> PathBuf {
crate::platform::fs::user_runtime_dir(PRODUCT)
}