| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 | package analyticimport (	"github.com/0xJacky/Nginx-UI/internal/logger"	"github.com/shirou/gopsutil/v3/net"	"time")type Usage[T uint64 | float64] struct {	Time  time.Time `json:"x"`	Usage T         `json:"y"`}var (	CpuUserRecord   []Usage[float64]	CpuTotalRecord  []Usage[float64]	NetRecvRecord   []Usage[uint64]	NetSentRecord   []Usage[uint64]	DiskWriteRecord []Usage[uint64]	DiskReadRecord  []Usage[uint64]	LastDiskWrites  uint64	LastDiskReads   uint64	LastNetSent     uint64	LastNetRecv     uint64)func init() {	network, _ := net.IOCounters(false)	if len(network) > 0 {		LastNetRecv = network[0].BytesRecv		LastNetSent = network[0].BytesSent	}	LastDiskReads, LastDiskWrites = getTotalDiskIO()	now := time.Now()	// init record slices	for i := 100; i > 0; i-- {		uf := Usage[float64]{Time: now.Add(time.Duration(-i) * time.Second), Usage: 0}		CpuUserRecord = append(CpuUserRecord, uf)		CpuTotalRecord = append(CpuTotalRecord, uf)		u := Usage[uint64]{Time: now.Add(time.Duration(-i) * time.Second), Usage: 0}		NetRecvRecord = append(NetRecvRecord, u)		NetSentRecord = append(NetSentRecord, u)		DiskWriteRecord = append(DiskWriteRecord, u)		DiskReadRecord = append(DiskReadRecord, u)	}}func RecordServerAnalytic() {	logger.Info("RecordServerAnalytic Started")	for {		now := time.Now()		recordCpu(now) // this func will spend more than 1 second.		recordNetwork(now)		recordDiskIO(now)	}}
 |