diff --git a/internal/nodes/task_trim_disks.go b/internal/nodes/task_trim_disks.go index 4b3b671..31550a3 100644 --- a/internal/nodes/task_trim_disks.go +++ b/internal/nodes/task_trim_disks.go @@ -24,15 +24,17 @@ func NewTrimDisksTask() *TrimDisksTask { // Start the task func (this *TrimDisksTask) Start() { // execute once - err := this.loop() - if err != nil { - remotelogs.Warn("TRIM_DISKS", "trim disks failed: "+err.Error()) + if idles.IsMinHour() { + err := this.loop() + if err != nil { + remotelogs.Warn("TRIM_DISKS", "trim disks failed: "+err.Error()) + } } var ticker = time.NewTicker(2 * 24 * time.Hour) // every 2 days idles.RunTicker(ticker, func() { // run the task - err = this.loop() + err := this.loop() if err != nil { remotelogs.Warn("TRIM_DISKS", "trim disks failed: "+err.Error()) } diff --git a/internal/utils/idles/run.go b/internal/utils/idles/run.go index 0f65bfd..ef0635c 100644 --- a/internal/utils/idles/run.go +++ b/internal/utils/idles/run.go @@ -11,6 +11,7 @@ import ( "github.com/shirou/gopsutil/v3/load" "math" "os" + "slices" "sort" "time" ) @@ -124,6 +125,11 @@ func RunTicker(ticker *time.Ticker, f func()) { } } +func IsMinHour() bool { + var minLoadHours = sharedMinLoadHours // copy + return len(minLoadHours) > 0 && slices.Contains(minLoadHours, time.Now().Hour()) +} + func calculateMinLoadHours() { var allLoads = []*HourlyLoad{} for _, v := range hourlyLoadMap { diff --git a/internal/utils/idles/run_test.go b/internal/utils/idles/run_test.go index 8aeae47..100f4f2 100644 --- a/internal/utils/idles/run_test.go +++ b/internal/utils/idles/run_test.go @@ -44,3 +44,7 @@ func TestRunTicker(t *testing.T) { t.Log(timeutil.Format("H:i:s"), "run once") }) } + +func TestIsMinHour(t *testing.T) { + t.Log(idles.IsMinHour()) +}