// Package sysinfo снимает метрики хоста и группы процессов игрового сервера. package sysinfo import "sync" // ProcStats — потребление ресурсов одной группой процессов. type ProcStats struct { // CPUPercent — доля CPU за интервал между двумя снимками; 100% = одно ядро. CPUPercent float64 `json:"cpu_percent"` // RSSBytes — резидентная память всех процессов группы. RSSBytes int64 `json:"rss_bytes"` // Threads — суммарное число потоков. Threads int `json:"threads"` } // HostStats — общее состояние машины. type HostStats struct { MemTotalBytes int64 `json:"mem_total_bytes"` MemAvailableBytes int64 `json:"mem_available_bytes"` Load1 float64 `json:"load1"` CPUCount int `json:"cpu_count"` DiskTotalBytes int64 `json:"disk_total_bytes"` DiskFreeBytes int64 `json:"disk_free_bytes"` } // Sampler считает CPU по разнице между вызовами, поэтому хранит прошлый снимок. type Sampler struct { mu sync.Mutex lastCPU float64 // накопленное CPU-время группы, секунды lastWall float64 // момент снятия, секунды монотонных часов } // NewSampler создаёт счётчик метрик для одной группы процессов. func NewSampler() *Sampler { return &Sampler{} } // Reset забывает предыдущий снимок — вызывается при перезапуске сервера, // иначе первый замер нового процесса посчитается от чужой базы. func (s *Sampler) Reset() { s.mu.Lock() s.lastCPU, s.lastWall = 0, 0 s.mu.Unlock() }