1
0
mirror of https://github.com/tw93/Mole.git synced 2026-03-24 01:30:07 +00:00

feat(status): alert on persistent high-cpu processes (#602)

* feat(status): alert on persistent high-cpu processes

* refactor(status): keep high-cpu alerts read-only

* fix(status): address lint and sudo test regressions

---------

Co-authored-by: Tw93 <hitw93@gmail.com>
This commit is contained in:
Felix
2026-03-21 08:22:01 +08:00
committed by GitHub
parent a99f9f97f2
commit 82e25632e0
9 changed files with 577 additions and 54 deletions

View File

@@ -3,6 +3,7 @@ package main
import (
"os"
"testing"
"time"
)
func TestShouldUseJSONOutput_ForceFlag(t *testing.T) {
@@ -42,3 +43,50 @@ func TestShouldUseJSONOutput_NonTTYFile(t *testing.T) {
t.Fatalf("expected file stdout to use JSON mode")
}
}
func TestProcessWatchOptionsFromFlags(t *testing.T) {
oldThreshold := *procCPUThreshold
oldWindow := *procCPUWindow
oldAlerts := *procCPUAlerts
defer func() {
*procCPUThreshold = oldThreshold
*procCPUWindow = oldWindow
*procCPUAlerts = oldAlerts
}()
*procCPUThreshold = 125
*procCPUWindow = 2 * time.Minute
*procCPUAlerts = false
opts := processWatchOptionsFromFlags()
if opts.CPUThreshold != 125 {
t.Fatalf("CPUThreshold = %v, want 125", opts.CPUThreshold)
}
if opts.Window != 2*time.Minute {
t.Fatalf("Window = %v, want 2m", opts.Window)
}
if opts.Enabled {
t.Fatal("Enabled = true, want false")
}
}
func TestValidateFlags(t *testing.T) {
oldThreshold := *procCPUThreshold
oldWindow := *procCPUWindow
defer func() {
*procCPUThreshold = oldThreshold
*procCPUWindow = oldWindow
}()
*procCPUThreshold = -1
*procCPUWindow = 5 * time.Minute
if err := validateFlags(); err == nil {
t.Fatal("expected negative threshold to fail validation")
}
*procCPUThreshold = 100
*procCPUWindow = 0
if err := validateFlags(); err == nil {
t.Fatal("expected zero window to fail validation")
}
}