fix(agent): detection robuste du statut instances avec fallback ps -q (v0.2.1)

This commit is contained in:
root
2026-06-12 19:25:23 +00:00
parent c9ca22bafc
commit 2dc9ba7b55
2 changed files with 35 additions and 28 deletions
+1 -1
View File
@@ -1,7 +1,7 @@
#!/bin/bash #!/bin/bash
set -e set -e
VERSION="0.2.0" VERSION="0.2.1"
LDFLAGS="-X main.version=${VERSION}" LDFLAGS="-X main.version=${VERSION}"
echo "Building EduBox Agent v${VERSION}..." echo "Building EduBox Agent v${VERSION}..."
+20 -13
View File
@@ -85,23 +85,18 @@ func getInstanceStatus(dataDir, instanceID string) string {
} }
engine := getContainerEngine() engine := getContainerEngine()
// Try modern JSON format first
cmd := exec.Command(engine, "compose", "-f", composeFile, "ps", "--format", "json") cmd := exec.Command(engine, "compose", "-f", composeFile, "ps", "--format", "json")
out, err := cmd.Output() out, err := cmd.Output()
if err != nil { if err == nil {
return "error"
}
outStr := strings.TrimSpace(string(out)) outStr := strings.TrimSpace(string(out))
if outStr == "" || outStr == "[]" { if outStr == "" || outStr == "[]" {
return "stopped" return "stopped"
} }
// Docker compose JSON output can be a single object or an array
if strings.HasPrefix(outStr, "[") { if strings.HasPrefix(outStr, "[") {
var containers []map[string]interface{} var containers []map[string]interface{}
if err := json.Unmarshal(out, &containers); err != nil { if err := json.Unmarshal(out, &containers); err == nil {
return "error"
}
for _, c := range containers { for _, c := range containers {
state, _ := c["State"].(string) state, _ := c["State"].(string)
if state == "running" { if state == "running" {
@@ -110,14 +105,26 @@ func getInstanceStatus(dataDir, instanceID string) string {
} }
return "stopped" return "stopped"
} }
} else {
var c map[string]interface{} var c map[string]interface{}
if err := json.Unmarshal(out, &c); err != nil { if err := json.Unmarshal(out, &c); err == nil {
return "error"
}
state, _ := c["State"].(string) state, _ := c["State"].(string)
if state == "running" { if state == "running" {
return "running" return "running"
} }
return "stopped" return "stopped"
}
}
}
// Fallback: use "ps -q" which is supported by all docker-compose versions
cmd = exec.Command(engine, "compose", "-f", composeFile, "ps", "-q")
out, err = cmd.Output()
if err != nil {
return "error"
}
if strings.TrimSpace(string(out)) != "" {
return "running"
}
return "stopped"
} }