Skip to content

Commit 15db36b

Browse files
committed
fix: parse supervisor uptime with optional days segment
1 parent 20f09b3 commit 15db36b

2 files changed

Lines changed: 66 additions & 2 deletions

File tree

agent/app/service/host_tool.go

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -613,8 +613,7 @@ func getProcessStatus(config *response.SupervisorProcessConfig, containerName st
613613
Status: fields[1],
614614
}
615615
if fields[1] == "RUNNING" {
616-
status.PID = strings.TrimSuffix(fields[3], ",")
617-
status.Uptime = fields[5]
616+
status.PID, status.Uptime = parseSupervisorRunningDetails(fields)
618617
} else {
619618
status.Msg = strings.Join(fields[2:], " ")
620619
}
@@ -623,3 +622,22 @@ func getProcessStatus(config *response.SupervisorProcessConfig, containerName st
623622
}
624623
return nil
625624
}
625+
626+
func parseSupervisorRunningDetails(fields []string) (string, string) {
627+
var pid, uptime string
628+
for i, field := range fields {
629+
field = strings.TrimSuffix(field, ",")
630+
switch field {
631+
case "pid":
632+
if i+1 < len(fields) {
633+
pid = strings.TrimSuffix(fields[i+1], ",")
634+
}
635+
case "uptime":
636+
if i+1 < len(fields) {
637+
uptime = strings.Join(fields[i+1:], " ")
638+
}
639+
return pid, uptime
640+
}
641+
}
642+
return pid, uptime
643+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package service
2+
3+
import (
4+
"strings"
5+
"testing"
6+
)
7+
8+
func TestParseSupervisorRunningDetails(t *testing.T) {
9+
tests := []struct {
10+
name string
11+
line string
12+
wantPID string
13+
wantUptime string
14+
}{
15+
{
16+
name: "short uptime",
17+
line: "test:test_00 RUNNING pid 123, uptime 0:12:34",
18+
wantPID: "123",
19+
wantUptime: "0:12:34",
20+
},
21+
{
22+
name: "single day uptime",
23+
line: "test:test_00 RUNNING pid 123, uptime 1 day, 0:12:34",
24+
wantPID: "123",
25+
wantUptime: "1 day, 0:12:34",
26+
},
27+
{
28+
name: "multiple days uptime",
29+
line: "test:test_00 RUNNING pid 123, uptime 103 days, 0:12:34",
30+
wantPID: "123",
31+
wantUptime: "103 days, 0:12:34",
32+
},
33+
}
34+
35+
for _, tt := range tests {
36+
t.Run(tt.name, func(t *testing.T) {
37+
pid, uptime := parseSupervisorRunningDetails(strings.Fields(tt.line))
38+
if pid != tt.wantPID {
39+
t.Fatalf("pid = %q, want %q", pid, tt.wantPID)
40+
}
41+
if uptime != tt.wantUptime {
42+
t.Fatalf("uptime = %q, want %q", uptime, tt.wantUptime)
43+
}
44+
})
45+
}
46+
}

0 commit comments

Comments
 (0)