diff --git a/agent/src/collectors/service.rs b/agent/src/collectors/service.rs index 6c79776..9af2f78 100644 --- a/agent/src/collectors/service.rs +++ b/agent/src/collectors/service.rs @@ -261,15 +261,26 @@ impl ServiceCollector { } async fn get_service_disk_usage(&self, service: &str) -> Result { - // Only check the most likely path to avoid multiple du calls - let primary_path = format!("/var/lib/{}", service); + // Map service names to their actual data directories + let data_path = match service { + "immich-server" => "/var/lib/immich", // Immich server uses /var/lib/immich + "gitea" => "/var/lib/gitea", + "postgresql" | "postgres" => "/var/lib/postgresql", + "mysql" | "mariadb" => "/var/lib/mysql", + "unifi" => "/var/lib/unifi", + "vaultwarden" => "/var/lib/vaultwarden", + service_name => { + // Default: /var/lib/{service_name} + return self.get_directory_size(&format!("/var/lib/{}", service_name)).await; + } + }; // Use a quick check first - if directory doesn't exist, don't run du - if tokio::fs::metadata(&primary_path).await.is_err() { + if tokio::fs::metadata(data_path).await.is_err() { return Ok(0.0); } - self.get_directory_size(&primary_path).await + self.get_directory_size(data_path).await } async fn get_directory_size(&self, path: &str) -> Result { @@ -370,7 +381,7 @@ impl ServiceCollector { "gitea" => Ok(100.0), // NixOS sets 100GB quota for gitea "postgresql" | "postgres" => Ok(50.0), // Reasonable database quota "mysql" | "mariadb" => Ok(50.0), // Reasonable database quota - "immich-server" => Ok(200.0), // Large photo storage needs + "immich-server" => Ok(500.0), // NixOS sets 500GB quota for immich "unifi" => Ok(10.0), // Network management data "docker" => Ok(100.0), // Container storage _ => Err(CollectorError::ParseError {