diff options
| author | zwlucas <lucas.fariamo08@gmail.com> | 2026-05-29 20:41:33 +0000 |
|---|---|---|
| committer | zwlucas <lucas.fariamo08@gmail.com> | 2026-05-29 20:41:33 +0000 |
| commit | 9218d22954d61296a32c49373ab0f17f0be59cfe (patch) | |
| tree | 595b94ce7c2b5eed9760f79e7781653d6b554d18 /backend/internal/servermetrics | |
| parent | d186a989b6808ff39fcd43a9f0b478aebc4aa346 (diff) | |
| download | yaum-9218d22954d61296a32c49373ab0f17f0be59cfe.tar.gz yaum-9218d22954d61296a32c49373ab0f17f0be59cfe.zip | |
feat: add SSL info tracking and server metrics collection
Signed-off-by: zwlucas <lucas.fariamo08@gmail.com>
Diffstat (limited to 'backend/internal/servermetrics')
| -rw-r--r-- | backend/internal/servermetrics/collector.go | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/backend/internal/servermetrics/collector.go b/backend/internal/servermetrics/collector.go new file mode 100644 index 0000000..6c85582 --- /dev/null +++ b/backend/internal/servermetrics/collector.go @@ -0,0 +1,84 @@ +package servermetrics + +import ( + "context" + "log" + "sync" + "time" + + "github.com/shirou/gopsutil/v4/cpu" + "github.com/shirou/gopsutil/v4/disk" + "github.com/shirou/gopsutil/v4/mem" +) + +type Stats struct { + CPUPercent float64 `json:"cpu_percent"` + MemoryUsed uint64 `json:"memory_used"` + MemoryTotal uint64 `json:"memory_total"` + MemoryPct float64 `json:"memory_percent"` + DiskUsed uint64 `json:"disk_used"` + DiskTotal uint64 `json:"disk_total"` + DiskPct float64 `json:"disk_percent"` +} + +type Collector struct { + mu sync.RWMutex + last Stats + diskPath string +} + +func New(diskPath string) *Collector { + return &Collector{diskPath: diskPath} +} + +func (c *Collector) Start(ctx context.Context) { + c.collectOnce(ctx, 500*time.Millisecond) + ticker := time.NewTicker(30 * time.Second) + defer ticker.Stop() + for { + select { + case <-ticker.C: + c.collectOnce(ctx, 0) + case <-ctx.Done(): + return + } + } +} + +func (c *Collector) collectOnce(ctx context.Context, cpuInterval time.Duration) { + cpuPct, err := cpu.PercentWithContext(ctx, cpuInterval, false) + if err != nil { + log.Printf("[servermetrics] erro cpu: %v", err) + return + } + + memStat, err := mem.VirtualMemoryWithContext(ctx) + if err != nil { + log.Printf("[servermetrics] erro mem: %v", err) + return + } + + diskStat, err := disk.UsageWithContext(ctx, c.diskPath) + if err != nil { + log.Printf("[servermetrics] erro disk: %v", err) + return + } + + c.mu.Lock() + c.last = Stats{ + CPUPercent: cpuPct[0], + MemoryUsed: memStat.Used, + MemoryTotal: memStat.Total, + MemoryPct: memStat.UsedPercent, + DiskUsed: diskStat.Used, + DiskTotal: diskStat.Total, + DiskPct: diskStat.UsedPercent, + } + c.mu.Unlock() +} + +func (c *Collector) Get() Stats { + c.mu.RLock() + defer c.mu.RUnlock() + return c.last +} |