Skip to content

Commit c3b7dee

Browse files
authored
fix: parse supervisor uptime with optional days segment (#12713)
1 parent 51252a1 commit c3b7dee

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
@@ -636,8 +636,7 @@ func getProcessStatus(config *response.SupervisorProcessConfig, containerName st
636636
Status: fields[1],
637637
}
638638
if fields[1] == "RUNNING" {
639-
status.PID = strings.TrimSuffix(fields[3], ",")
640-
status.Uptime = fields[5]
639+
status.PID, status.Uptime = parseSupervisorRunningDetails(fields)
641640
} else {
642641
status.Msg = strings.Join(fields[2:], " ")
643642
}
@@ -646,3 +645,19 @@ func getProcessStatus(config *response.SupervisorProcessConfig, containerName st
646645
}
647646
return nil
648647
}
648+
649+
func parseSupervisorRunningDetails(fields []string) (string, string) {
650+
var pid, uptime string
651+
if len(fields) > 3 && fields[2] == "pid" {
652+
pid = strings.TrimSuffix(fields[3], ",")
653+
}
654+
for i := 4; i < len(fields); i++ {
655+
if strings.TrimSuffix(fields[i], ",") == "uptime" {
656+
if i+1 < len(fields) {
657+
uptime = strings.Join(fields[i+1:], " ")
658+
}
659+
break
660+
}
661+
}
662+
return pid, uptime
663+
}
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)