add global stats to influxdb
This commit is contained in:
parent
e1b84dc21b
commit
959521b209
|
@ -171,6 +171,36 @@ func (nodes *Nodes) worker() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (nodes *Nodes) GetStats() map[string]interface{} {
|
||||||
|
var nodesCount uint32
|
||||||
|
var clientsCount uint32
|
||||||
|
var clientsWifiCount uint32
|
||||||
|
var clientsWifi24Count uint32
|
||||||
|
var clientsWifi5Count uint32
|
||||||
|
|
||||||
|
nodes.Lock()
|
||||||
|
for _, node := range nodes.List {
|
||||||
|
if node.Flags.Online {
|
||||||
|
nodesCount += 1
|
||||||
|
if stats := node.Statistics; stats != nil {
|
||||||
|
clientsCount += stats.Clients.Total
|
||||||
|
clientsWifi24Count += stats.Clients.Wifi24
|
||||||
|
clientsWifi5Count += stats.Clients.Wifi5
|
||||||
|
clientsWifiCount += stats.Clients.Wifi
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
nodes.Unlock()
|
||||||
|
|
||||||
|
return map[string]interface{}{
|
||||||
|
"nodes": nodesCount,
|
||||||
|
"clients.total": clientsCount,
|
||||||
|
"clients.wifi": clientsWifiCount,
|
||||||
|
"clients.wifi24": clientsWifi24Count,
|
||||||
|
"clients.wifi5": clientsWifi5Count,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (nodes *Nodes) load() {
|
func (nodes *Nodes) load() {
|
||||||
path := nodes.config.Nodes.NodesPath
|
path := nodes.config.Nodes.NodesPath
|
||||||
log.Println("loading", path)
|
log.Println("loading", path)
|
||||||
|
|
14
stats_db.go
14
stats_db.go
|
@ -18,6 +18,7 @@ const (
|
||||||
type StatsDb struct {
|
type StatsDb struct {
|
||||||
points chan *client.Point
|
points chan *client.Point
|
||||||
wg sync.WaitGroup
|
wg sync.WaitGroup
|
||||||
|
nodes *models.Nodes
|
||||||
client client.Client
|
client client.Client
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,6 +37,7 @@ func NewStatsDb() *StatsDb {
|
||||||
db := &StatsDb{
|
db := &StatsDb{
|
||||||
client: c,
|
client: c,
|
||||||
points: make(chan *client.Point, 500),
|
points: make(chan *client.Point, 500),
|
||||||
|
nodes: nodes,
|
||||||
}
|
}
|
||||||
|
|
||||||
// start worker
|
// start worker
|
||||||
|
@ -143,11 +145,21 @@ func (c *StatsDb) worker() {
|
||||||
var err error
|
var err error
|
||||||
var writeNow, closed bool
|
var writeNow, closed bool
|
||||||
timer := time.NewTimer(batchDuration)
|
timer := time.NewTimer(batchDuration)
|
||||||
|
globalDuration := time.Second * time.Duration(config.Nodes.SaveInterval)
|
||||||
|
globalTimer := time.NewTimer(globalDuration)
|
||||||
|
|
||||||
for !closed {
|
for !closed {
|
||||||
|
|
||||||
// wait for new points
|
// wait for new points
|
||||||
select {
|
select {
|
||||||
|
case <-globalTimer.C:
|
||||||
|
point, err := client.NewPoint("global", nil, nodes.GetStats(), time.Now())
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
c.points <- point
|
||||||
|
globalTimer.Reset(globalDuration)
|
||||||
|
log.Print("saving global point")
|
||||||
case point, ok := <-c.points:
|
case point, ok := <-c.points:
|
||||||
if ok {
|
if ok {
|
||||||
if bp == nil {
|
if bp == nil {
|
||||||
|
@ -180,7 +192,7 @@ func (c *StatsDb) worker() {
|
||||||
bp = nil
|
bp = nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
globalTimer.Stop()
|
||||||
timer.Stop()
|
timer.Stop()
|
||||||
c.wg.Done()
|
c.wg.Done()
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue