Files
mqtt_explorer/backend/internal/sysinfo/sysinfo.go
Gilles Soulier 383ad292d3 first
2025-12-24 14:47:39 +01:00

56 lines
1.0 KiB
Go

package sysinfo
import (
"strings"
"sync"
)
type Snapshot struct {
Version string `json:"version"`
Clients string `json:"clients"`
MsgReceived string `json:"msgReceived"`
MsgSent string `json:"msgSent"`
MsgStored string `json:"msgStored"`
Subscriptions string `json:"subscriptions"`
}
type Store struct {
mu sync.RWMutex
data Snapshot
}
func NewStore() *Store {
return &Store{}
}
func (s *Store) Update(topic string, payload string) {
trimmed := strings.TrimSpace(payload)
if trimmed == "" {
return
}
key := strings.TrimPrefix(topic, "$SYS/broker/")
s.mu.Lock()
defer s.mu.Unlock()
switch key {
case "version":
s.data.Version = trimmed
case "clients/connected":
s.data.Clients = trimmed
case "messages/received":
s.data.MsgReceived = trimmed
case "messages/sent":
s.data.MsgSent = trimmed
case "messages/stored":
s.data.MsgStored = trimmed
case "subscriptions/count":
s.data.Subscriptions = trimmed
}
}
func (s *Store) Snapshot() Snapshot {
s.mu.RLock()
defer s.mu.RUnlock()
return s.data
}