diff --git a/Cargo.lock b/Cargo.lock index b512da4..8b41bda 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -279,7 +279,7 @@ checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d" [[package]] name = "cm-dashboard" -version = "0.1.171" +version = "0.1.172" dependencies = [ "anyhow", "chrono", @@ -301,7 +301,7 @@ dependencies = [ [[package]] name = "cm-dashboard-agent" -version = "0.1.171" +version = "0.1.172" dependencies = [ "anyhow", "async-trait", @@ -324,7 +324,7 @@ dependencies = [ [[package]] name = "cm-dashboard-shared" -version = "0.1.171" +version = "0.1.172" dependencies = [ "chrono", "serde", diff --git a/agent/Cargo.toml b/agent/Cargo.toml index 02934d4..187405c 100644 --- a/agent/Cargo.toml +++ b/agent/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cm-dashboard-agent" -version = "0.1.171" +version = "0.1.172" edition = "2021" [dependencies] diff --git a/agent/src/collectors/systemd.rs b/agent/src/collectors/systemd.rs index 0636f04..ee8457d 100644 --- a/agent/src/collectors/systemd.rs +++ b/agent/src/collectors/systemd.rs @@ -117,20 +117,8 @@ impl SystemdCollector { } } - if service_name.contains("docker") && active_status == "active" { - let docker_containers = self.get_docker_containers(); - for (container_name, container_status) in docker_containers { - // For now, docker containers have no additional metrics - // Future: could add memory_mb, cpu_percent, restart_count, etc. - let metrics = Vec::new(); - - sub_services.push(SubServiceData { - name: container_name.clone(), - service_status: self.calculate_service_status(&container_name, &container_status), - metrics, - }); - } - } + // Docker containers are now collected as top-level services below + // Keeping nginx as sub-services for now // Create complete service data let service_data = ServiceData { @@ -151,7 +139,22 @@ impl SystemdCollector { } } } - + + // Collect Docker containers as top-level services + let docker_containers = self.get_docker_containers(); + for (container_name, container_status) in docker_containers { + let service_data = ServiceData { + name: container_name.clone(), + memory_mb: 0.0, // TODO: Could add container memory via docker stats + disk_gb: 0.0, // TODO: Could add container disk usage + user_stopped: false, + service_status: self.calculate_service_status(&container_name, &container_status), + sub_services: Vec::new(), + }; + agent_data.services.push(service_data.clone()); + complete_service_data.push(service_data); + } + // Update cached state { let mut state = self.state.write().unwrap(); @@ -757,8 +760,9 @@ impl SystemdCollector { let mut containers = Vec::new(); // Check if docker is available (use sudo for permissions) + // Use -a to show ALL containers (running and stopped) let output = Command::new("sudo") - .args(&["docker", "ps", "--format", "{{.Names}},{{.Status}}"]) + .args(&["docker", "ps", "-a", "--format", "{{.Names}},{{.Status}}"]) .output(); let output = match output { @@ -783,10 +787,10 @@ impl SystemdCollector { let container_status = if status_str.contains("Up") { "active" - } else if status_str.contains("Exited") { - "warning" // Match original: Exited → Warning, not inactive + } else if status_str.contains("Exited") || status_str.contains("Created") { + "inactive" // Stopped/created containers are inactive } else { - "failed" // Other states → failed + "failed" // Other states (restarting, paused, dead) → failed }; containers.push((format!("docker_{}", container_name), container_status.to_string())); diff --git a/dashboard/Cargo.toml b/dashboard/Cargo.toml index b82d8d1..73da373 100644 --- a/dashboard/Cargo.toml +++ b/dashboard/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cm-dashboard" -version = "0.1.171" +version = "0.1.172" edition = "2021" [dependencies] diff --git a/shared/Cargo.toml b/shared/Cargo.toml index 29ac1ae..948d700 100644 --- a/shared/Cargo.toml +++ b/shared/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cm-dashboard-shared" -version = "0.1.171" +version = "0.1.172" edition = "2021" [dependencies]