use crate::core::NormalizedPath;
pub use crate::core::crash::{
check_previous_crashes, clear_crash_dumps, list_crash_dumps, CrashGuard,
};
pub fn install_panic_hook() {
let _ = crate::core::crash::install("zccache-daemon");
}
#[must_use]
pub fn install_minidump_handler() -> Option<MinidumpHandle> {
let guard = crate::core::crash::install("zccache-daemon");
Some(MinidumpHandle { _guard: guard })
}
pub struct MinidumpHandle {
#[allow(dead_code)]
_guard: CrashGuard,
}
pub fn write_crash_dump(panic_info: &str, backtrace: &str) -> Option<NormalizedPath> {
let crash_dir = crate::core::config::crash_dump_dir();
std::fs::create_dir_all(&crash_dir).ok()?;
let timestamp = std::time::SystemTime::now()
.duration_since(std::time::UNIX_EPOCH)
.unwrap_or_default()
.as_secs();
let filename = format!("crash-{timestamp}-zccache-daemon-panic.txt");
let path = crash_dir.join(&filename);
let content = format!(
"zccache zccache-daemon crash report (panic)\n\
===========================================\n\
Version: {version}\n\
Binary: zccache-daemon\n\
OS: {os}\n\
Arch: {arch}\n\
PID: {pid}\n\
Time: {timestamp}\n\
\n\
Panic:\n\
{panic_info}\n\
\n\
Backtrace:\n\
{backtrace}\n",
version = env!("CARGO_PKG_VERSION"),
os = std::env::consts::OS,
arch = std::env::consts::ARCH,
pid = std::process::id(),
);
std::fs::write(&path, content).ok()?;
Some(path)
}