[TASK] improve neighbours stats (+ babel support)
This commit is contained in:
parent
6e745bf78f
commit
99eb11f2ef
@ -30,25 +30,36 @@ func (c *Connection) InsertNode(node *runtime.Node) {
|
||||
fields = append(fields, graphigo.Metric{Name: node_prefix + "." + name, Value: value})
|
||||
}
|
||||
|
||||
vpnInterfaces := make(map[string]bool)
|
||||
for _, mIface := range nodeinfo.Network.Mesh {
|
||||
for _, tunnel := range mIface.Interfaces.Tunnel {
|
||||
vpnInterfaces[tunnel] = true
|
||||
}
|
||||
}
|
||||
|
||||
if neighbours := node.Neighbours; neighbours != nil {
|
||||
vpn := 0
|
||||
if meshvpn := stats.MeshVPN; meshvpn != nil {
|
||||
for _, group := range meshvpn.Groups {
|
||||
for _, link := range group.Peers {
|
||||
if link != nil && link.Established > 1 {
|
||||
vpn++
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
addField("neighbours.vpn", vpn)
|
||||
|
||||
// protocol: Batman Advance
|
||||
batadv := 0
|
||||
for _, batadvNeighbours := range neighbours.Batadv {
|
||||
for mac, batadvNeighbours := range neighbours.Batadv {
|
||||
batadv += len(batadvNeighbours.Neighbours)
|
||||
if _, ok := vpnInterfaces[mac]; ok {
|
||||
vpn += len(batadvNeighbours.Neighbours)
|
||||
}
|
||||
}
|
||||
addField("neighbours.batadv", batadv)
|
||||
|
||||
// protocol: Babel
|
||||
babel := 0
|
||||
for _, babelNeighbours := range neighbours.Babel {
|
||||
babel += len(babelNeighbours.Neighbours)
|
||||
if _, ok := vpnInterfaces[babelNeighbours.LinkLocalAddress]; ok {
|
||||
vpn += len(babelNeighbours.Neighbours)
|
||||
}
|
||||
}
|
||||
addField("neighbours.babel", babel)
|
||||
|
||||
// protocol: LLDP
|
||||
lldp := 0
|
||||
for _, lldpNeighbours := range neighbours.LLDP {
|
||||
@ -56,8 +67,10 @@ func (c *Connection) InsertNode(node *runtime.Node) {
|
||||
}
|
||||
addField("neighbours.lldp", lldp)
|
||||
|
||||
addField("neighbours.vpn", vpn)
|
||||
|
||||
// total is the sum of all protocols
|
||||
addField("neighbours.total", batadv+lldp)
|
||||
addField("neighbours.total", batadv+babel+lldp)
|
||||
}
|
||||
|
||||
if t := stats.Traffic.Rx; t != nil {
|
||||
|
@ -48,7 +48,15 @@ func (conn *Connection) InsertNode(node *runtime.Node) {
|
||||
"memory.available": stats.Memory.Available,
|
||||
}
|
||||
|
||||
vpnInterfaces := make(map[string]bool)
|
||||
|
||||
if nodeinfo := node.Nodeinfo; nodeinfo != nil {
|
||||
for _, mIface := range nodeinfo.Network.Mesh {
|
||||
for _, tunnel := range mIface.Interfaces.Tunnel {
|
||||
vpnInterfaces[tunnel] = true
|
||||
}
|
||||
}
|
||||
|
||||
tags.SetString("hostname", nodeinfo.Hostname)
|
||||
if nodeinfo.System.SiteCode != "" {
|
||||
tags.SetString("site", nodeinfo.System.SiteCode)
|
||||
@ -75,28 +83,30 @@ func (conn *Connection) InsertNode(node *runtime.Node) {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if neighbours := node.Neighbours; neighbours != nil {
|
||||
// VPN Neighbours are Neighbours but includet in one protocol
|
||||
vpn := 0
|
||||
if meshvpn := stats.MeshVPN; meshvpn != nil {
|
||||
for _, group := range meshvpn.Groups {
|
||||
for _, link := range group.Peers {
|
||||
if link != nil && link.Established > 1 {
|
||||
vpn++
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
fields["neighbours.vpn"] = vpn
|
||||
|
||||
// protocol: Batman Advance
|
||||
batadv := 0
|
||||
for _, batadvNeighbours := range neighbours.Batadv {
|
||||
for mac, batadvNeighbours := range neighbours.Batadv {
|
||||
batadv += len(batadvNeighbours.Neighbours)
|
||||
if _, ok := vpnInterfaces[mac]; ok {
|
||||
vpn += len(batadvNeighbours.Neighbours)
|
||||
}
|
||||
}
|
||||
fields["neighbours.batadv"] = batadv
|
||||
|
||||
// protocol: Babel
|
||||
babel := 0
|
||||
for _, babelNeighbours := range neighbours.Babel {
|
||||
babel += len(babelNeighbours.Neighbours)
|
||||
if _, ok := vpnInterfaces[babelNeighbours.LinkLocalAddress]; ok {
|
||||
vpn += len(babelNeighbours.Neighbours)
|
||||
}
|
||||
}
|
||||
fields["neighbours.babel"] = babel
|
||||
|
||||
// protocol: LLDP
|
||||
lldp := 0
|
||||
for _, lldpNeighbours := range neighbours.LLDP {
|
||||
@ -104,8 +114,11 @@ func (conn *Connection) InsertNode(node *runtime.Node) {
|
||||
}
|
||||
fields["neighbours.lldp"] = lldp
|
||||
|
||||
// vpn wait for babel
|
||||
fields["neighbours.vpn"] = vpn
|
||||
|
||||
// total is the sum of all protocols
|
||||
fields["neighbours.total"] = batadv + lldp
|
||||
fields["neighbours.total"] = batadv + babel + lldp
|
||||
}
|
||||
if procstat := stats.ProcStats; procstat != nil {
|
||||
fields["stat.cpu.user"] = procstat.CPU.User
|
||||
|
@ -39,18 +39,6 @@ func TestToInflux(t *testing.T) {
|
||||
MgmtTx: &data.Traffic{Packets: 2327},
|
||||
MgmtRx: &data.Traffic{Bytes: 2331},
|
||||
},
|
||||
MeshVPN: &data.MeshVPN{
|
||||
Groups: map[string]*data.MeshVPNPeerGroup{
|
||||
"ffhb": {
|
||||
Peers: map[string]*data.MeshVPNPeerLink{
|
||||
"vpn01": {Established: 3},
|
||||
"vpn02": {},
|
||||
"trash": nil,
|
||||
"vpn03": {Established: 0},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
Nodeinfo: &data.Nodeinfo{
|
||||
NodeID: "deadbeef",
|
||||
@ -67,6 +55,17 @@ func TestToInflux(t *testing.T) {
|
||||
},
|
||||
Network: data.Network{
|
||||
Mac: "DEADMAC",
|
||||
Mesh: map[string]*data.NetworkInterface{
|
||||
"bat0": {
|
||||
Interfaces: struct {
|
||||
Wireless []string `json:"wireless,omitempty"`
|
||||
Other []string `json:"other,omitempty"`
|
||||
Tunnel []string `json:"tunnel,omitempty"`
|
||||
}{
|
||||
Tunnel: []string{"a-interface-mac", "fe80::1"},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
Software: data.Software{
|
||||
Autoupdater: struct {
|
||||
@ -81,7 +80,7 @@ func TestToInflux(t *testing.T) {
|
||||
Neighbours: &data.Neighbours{
|
||||
NodeID: "deadbeef",
|
||||
Batadv: map[string]data.BatadvNeighbours{
|
||||
"a-interface": {
|
||||
"a-interface-mac": {
|
||||
Neighbours: map[string]data.BatmanLink{
|
||||
"BAFF1E5": {
|
||||
Tq: 204,
|
||||
@ -89,8 +88,18 @@ func TestToInflux(t *testing.T) {
|
||||
},
|
||||
},
|
||||
},
|
||||
Babel: map[string]data.BabelNeighbours{
|
||||
"wg-01": {
|
||||
LinkLocalAddress: "fe80::1",
|
||||
Neighbours: map[string]data.BabelLink{
|
||||
"fe80::2": {
|
||||
Cost: 0,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
LLDP: map[string]data.LLDPNeighbours{
|
||||
"b-interface": {},
|
||||
"b-interface-mac": {},
|
||||
},
|
||||
},
|
||||
}
|
||||
@ -144,9 +153,10 @@ func TestToInflux(t *testing.T) {
|
||||
assert.EqualValues("city", tags["domain"])
|
||||
assert.EqualValues(0.5, fields["load"])
|
||||
assert.EqualValues(0, fields["neighbours.lldp"])
|
||||
assert.EqualValues(1, fields["neighbours.babel"])
|
||||
assert.EqualValues(1, fields["neighbours.batadv"])
|
||||
assert.EqualValues(1, fields["neighbours.vpn"])
|
||||
assert.EqualValues(1, fields["neighbours.total"])
|
||||
assert.EqualValues(2, fields["neighbours.vpn"])
|
||||
assert.EqualValues(2, fields["neighbours.total"])
|
||||
|
||||
assert.EqualValues(uint32(3), fields["wireless.txpower24"])
|
||||
assert.EqualValues(uint32(5500), fields["airtime11a.frequency"])
|
||||
@ -165,7 +175,7 @@ func TestToInflux(t *testing.T) {
|
||||
assert.EqualValues("link", nPoint.Name())
|
||||
assert.EqualValues(map[string]string{
|
||||
"source.id": "deadbeef",
|
||||
"source.addr": "a-interface",
|
||||
"source.addr": "a-interface-mac",
|
||||
"target.id": "foobar",
|
||||
"target.addr": "BAFF1E5",
|
||||
}, tags)
|
||||
|
Loading…
Reference in New Issue
Block a user