fix(agent): detection robuste du statut instances avec fallback ps -q (v0.2.1)
This commit is contained in:
+1
-1
@@ -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
@@ -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"
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user