Skip to content

Commit 7d2a162

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

2 files changed

Lines changed: 69 additions & 2 deletions

File tree

agent/app/service/host_tool.go

Lines changed: 17 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,19 @@ 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+
if len(fields) > 3 && fields[2] == "pid" {
629+
pid = strings.TrimSuffix(fields[3], ",")
630+
}
631+
for i := 4; i < len(fields); i++ {
632+
if strings.TrimSuffix(fields[i], ",") == "uptime" {
633+
if i+1 < len(fields) {
634+
uptime = strings.Join(fields[i+1:], " ")
635+
}
636+
break
637+
}
638+
}
639+
return pid, uptime
640+
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
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+
name: "process name is uptime",
35+
line: "uptime RUNNING pid 123, uptime 0:12:34",
36+
wantPID: "123",
37+
wantUptime: "0:12:34",
38+
},
39+
}
40+
41+
for _, tt := range tests {
42+
t.Run(tt.name, func(t *testing.T) {
43+
pid, uptime := parseSupervisorRunningDetails(strings.Fields(tt.line))
44+
if pid != tt.wantPID {
45+
t.Fatalf("pid = %q, want %q", pid, tt.wantPID)
46+
}
47+
if uptime != tt.wantUptime {
48+
t.Fatalf("uptime = %q, want %q", uptime, tt.wantUptime)
49+
}
50+
})
51+
}
52+
}

0 commit comments

Comments
 (0)