status memory info

This commit is contained in:
2026-01-14 12:09:44 +00:00
parent 69b1411562
commit 9b68c6766d

28
main.go
View File

@@ -11,6 +11,7 @@ import (
"fmt" "fmt"
"io" "io"
"log" "log"
"math"
"math/rand" "math/rand"
"net/http" "net/http"
"os" "os"
@@ -1182,6 +1183,14 @@ func runStatus() error {
printInfo("PID", pid, remoteLineColor) printInfo("PID", pid, remoteLineColor)
} }
if memCurrent, ok := parseSystemdBytes(props["MemoryCurrent"]); ok {
memLine := formatBytes(memCurrent)
if memPeak, ok := parseSystemdBytes(props["MemoryPeak"]); ok {
memLine = fmt.Sprintf("%s (peak: %s)", memLine, formatBytes(memPeak))
}
printInfo("Memory", memLine, remoteLineColor)
}
if started := strings.TrimSpace(props["ActiveEnterTimestamp"]); started != "" { if started := strings.TrimSpace(props["ActiveEnterTimestamp"]); started != "" {
printInfo("Active since", started, localTimeColor) printInfo("Active since", started, localTimeColor)
} }
@@ -1216,7 +1225,7 @@ func statusColorFor(state string) string {
// querySystemdProperties asks systemd for a few service properties. // querySystemdProperties asks systemd for a few service properties.
func querySystemdProperties(ctx *deploymentContext) (map[string]string, error) { func querySystemdProperties(ctx *deploymentContext) (map[string]string, error) {
script := fmt.Sprintf(`set -euo pipefail script := fmt.Sprintf(`set -euo pipefail
systemctl show pb@%s -p ActiveState -p SubState -p ActiveEnterTimestamp -p ActiveEnterTimestampMonotonic -p ExecMainPID systemctl show pb@%s -p ActiveState -p SubState -p ActiveEnterTimestamp -p ActiveEnterTimestampMonotonic -p ExecMainPID -p MemoryCurrent -p MemoryPeak
`, ctx.serviceName) `, ctx.serviceName)
output, err := runSSHCollect(ctx.serverIP, script) output, err := runSSHCollect(ctx.serverIP, script)
if err != nil { if err != nil {
@@ -1225,6 +1234,23 @@ systemctl show pb@%s -p ActiveState -p SubState -p ActiveEnterTimestamp -p Activ
return parseKeyValueLines(output), nil return parseKeyValueLines(output), nil
} }
func parseSystemdBytes(value string) (int64, bool) {
value = strings.TrimSpace(value)
if value == "" || value == "0" {
return 0, false
}
if parsed, err := strconv.ParseInt(value, 10, 64); err == nil && parsed > 0 {
return parsed, true
}
if parsed, err := strconv.ParseUint(value, 10, 64); err == nil && parsed > 0 {
if parsed > math.MaxInt64 {
return 0, false
}
return int64(parsed), true
}
return 0, false
}
func computeUptime(server, startMicro string) time.Duration { func computeUptime(server, startMicro string) time.Duration {
startMicro = strings.TrimSpace(startMicro) startMicro = strings.TrimSpace(startMicro)
if startMicro == "" { if startMicro == "" {