aboutsummaryrefslogtreecommitdiff
path: root/backend/internal/servermetrics/collector.go
diff options
context:
space:
mode:
authorzwlucas <lucas.fariamo08@gmail.com>2026-05-29 20:41:33 +0000
committerzwlucas <lucas.fariamo08@gmail.com>2026-05-29 20:41:33 +0000
commit9218d22954d61296a32c49373ab0f17f0be59cfe (patch)
tree595b94ce7c2b5eed9760f79e7781653d6b554d18 /backend/internal/servermetrics/collector.go
parentd186a989b6808ff39fcd43a9f0b478aebc4aa346 (diff)
downloadyaum-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/collector.go')
-rw-r--r--backend/internal/servermetrics/collector.go84
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
+}