56 lines
1.0 KiB
Go
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
|
|
}
|