use trusty_mpm_core::lock_file_path;
pub fn write_lock(addr: &str, tailscale_addr: Option<&str>) {
let path = lock_file_path();
if let Some(parent) = path.parent() {
let _ = std::fs::create_dir_all(parent);
}
let pid = std::process::id();
let ts_line = tailscale_addr
.map(|a| format!("\ntailscale_addr = \"{a}\""))
.unwrap_or_default();
let started_at = chrono::Utc::now().to_rfc3339();
let content =
format!("pid = {pid}\naddr = \"{addr}\"{ts_line}\nstarted_at = \"{started_at}\"\n");
if let Err(e) = std::fs::write(&path, content) {
tracing::warn!("failed to write daemon lock file {}: {e}", path.display());
} else {
tracing::debug!("lock file written: {}", path.display());
}
}
pub fn remove_lock() {
let path = lock_file_path();
match std::fs::remove_file(&path) {
Ok(()) => tracing::debug!("lock file removed"),
Err(e) if e.kind() == std::io::ErrorKind::NotFound => {}
Err(e) => tracing::warn!("failed to remove lock file: {e}"),
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn write_and_remove_round_trip() {
write_lock("http://127.0.0.1:7880", None);
remove_lock();
}
}