airtime + no panic on lost of influxdb connection

This commit is contained in:
Martin Geno 2016-07-04 14:39:48 +02:00
parent 5011719fdf
commit 93fe0fadb5
4 changed files with 40 additions and 4 deletions

2
.gitignore vendored
View File

@ -23,5 +23,5 @@ _testmain.go
*.test *.test
*.prof *.prof
respond-collector respond-collector
webroot/ webroot
config.yml config.yml

View File

@ -9,3 +9,17 @@ type Wireless struct {
type SwitchPort struct { type SwitchPort struct {
Speed uint32 `json:"speed"` Speed uint32 `json:"speed"`
} }
type WirelessStatistics struct {
Airtime24 *WirelessAirtime `json:"airtime24,omitempty"`
Airtime5 *WirelessAirtime `json:"airtime5,omitempty"`
}
type WirelessAirtime struct {
Active uint64 `json:"active"`
Busy uint64 `json:"busy"`
Rx uint64 `json:"rx"`
Tx uint64 `json:"tx"`
Noise uint32 `json:"noise"`
Frequency uint32 `json:"frequency"`
}

View File

@ -26,7 +26,8 @@ type Statistics struct {
MgmtTx *Traffic `json:"mgmt_tx"` MgmtTx *Traffic `json:"mgmt_tx"`
MgmtRx *Traffic `json:"mgmt_rx"` MgmtRx *Traffic `json:"mgmt_rx"`
} `json:"traffic,omitempty"` } `json:"traffic,omitempty"`
Switch map[string]*SwitchPort `json:"switch,omitempty"` Switch map[string]*SwitchPort `json:"switch,omitempty"`
Wireless *WirelessStatistics `json:"wireless,omitempty"`
} }
type MeshVPNPeerLink struct { type MeshVPNPeerLink struct {

View File

@ -2,6 +2,7 @@ package main
import ( import (
"log" "log"
"strconv"
"sync" "sync"
"time" "time"
@ -83,6 +84,26 @@ func (c *StatsDb) Add(stats *data.Statistics) {
fields["traffic.mgmt_tx.bytes"] = int64(t.Bytes) fields["traffic.mgmt_tx.bytes"] = int64(t.Bytes)
fields["traffic.mgmt_tx.packets"] = t.Packets fields["traffic.mgmt_tx.packets"] = t.Packets
} }
if w := stats.Wireless; w != nil {
if time := w.Airtime24; time != nil {
fields["airtime24.active"] = time.Active
fields["airtime24.busy"] = time.Busy
fields["airtime24.tx"] = time.Tx
fields["airtime24.rx"] = time.Rx
fields["airtime24.noise"] = time.Noise
fields["airtime24.frequency"] = time.Frequency
tags["frequency24"] = strconv.Itoa(int(time.Frequency))
}
if time := w.Airtime5; time != nil {
fields["airtime5.active"] = time.Active
fields["airtime5.busy"] = time.Busy
fields["airtime5.tx"] = time.Tx
fields["airtime5.rx"] = time.Rx
fields["airtime5.noise"] = time.Noise
fields["airtime5.frequency"] = time.Frequency
tags["frequency5"] = strconv.Itoa(int(time.Frequency))
}
}
point, err := client.NewPoint("node", tags, fields, time.Now()) point, err := client.NewPoint("node", tags, fields, time.Now())
if err != nil { if err != nil {
@ -119,7 +140,7 @@ func (c *StatsDb) worker() {
// create new batch // create new batch
timer.Reset(batchDuration) timer.Reset(batchDuration)
if bp, err = client.NewBatchPoints(bpConfig); err != nil { if bp, err = client.NewBatchPoints(bpConfig); err != nil {
panic(err) log.Fatal(err)
} }
} }
bp.AddPoint(point) bp.AddPoint(point)
@ -139,7 +160,7 @@ func (c *StatsDb) worker() {
log.Println("saving", len(bp.Points()), "points") log.Println("saving", len(bp.Points()), "points")
if err = c.client.Write(bp); err != nil { if err = c.client.Write(bp); err != nil {
panic(err) log.Fatal(err)
} }
writeNow = false writeNow = false
bp = nil bp = nil