first
This commit is contained in:
55
backend/internal/sysinfo/sysinfo.go
Normal file
55
backend/internal/sysinfo/sysinfo.go
Normal file
@@ -0,0 +1,55 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user