package systemMonitor

import (
	"sun-panel/global"
	"sun-panel/lib/cache"
	"sun-panel/lib/monitor"
	"time"
)

func Start(cacher cache.Cacher[global.ModelSystemMonitor], interval time.Duration) {
	go func() {

		ticker := time.NewTicker(interval)
		defer ticker.Stop()

		for {
			select {
			case <-ticker.C:
				go func() {
					monitorInfo := GetInfo()
					// jsonByte, _ := json.Marshal(monitorInfo)
					// fmt.Println("系统监控:", string(jsonByte))
					cacher.SetDefault("value", monitorInfo)
				}()
			}
		}

	}()

}

func GetInfo() global.ModelSystemMonitor {

	var modelSystemMonitor global.ModelSystemMonitor

	if cpuInfo, err := monitor.GetCPUInfo(); err == nil {
		modelSystemMonitor.CPUInfo = cpuInfo
	}

	if v, err := monitor.GetDiskInfo(); err == nil {
		modelSystemMonitor.DiskInfo = v
	}

	if v, err := monitor.GetNetIOCountersInfo(); err == nil {
		modelSystemMonitor.NetIOCountersInfo = v
	}

	if v, err := monitor.GetMemoryInfo(); err == nil {
		modelSystemMonitor.MemoryInfo = v
	}

	return modelSystemMonitor
}