NodeRRD: add many more DS, rrd.py: generate neighbor counts
parent
43e70191f1
commit
7075d8481c
31
NodeRRD.py
31
NodeRRD.py
|
@ -7,6 +7,19 @@ class NodeRRD(RRD):
|
||||||
ds_list = [
|
ds_list = [
|
||||||
DS('upstate', 'GAUGE', 120, 0, 1),
|
DS('upstate', 'GAUGE', 120, 0, 1),
|
||||||
DS('clients', 'GAUGE', 120, 0, float('NaN')),
|
DS('clients', 'GAUGE', 120, 0, float('NaN')),
|
||||||
|
DS('neighbors', 'GAUGE', 120, 0, float('NaN')),
|
||||||
|
DS('vpn_neighbors', 'GAUGE', 120, 0, float('NaN')),
|
||||||
|
DS('loadavg', 'GAUGE', 120, 0, float('NaN')),
|
||||||
|
DS('rx_bytes', 'DERIVE', 120, 0, float('NaN')),
|
||||||
|
DS('rx_packets', 'DERIVE', 120, 0, float('NaN')),
|
||||||
|
DS('tx_bytes', 'DERIVE', 120, 0, float('NaN')),
|
||||||
|
DS('tx_packets', 'DERIVE', 120, 0, float('NaN')),
|
||||||
|
DS('mgmt_rx_bytes', 'DERIVE', 120, 0, float('NaN')),
|
||||||
|
DS('mgmt_rx_packets', 'DERIVE', 120, 0, float('NaN')),
|
||||||
|
DS('mgmt_tx_bytes', 'DERIVE', 120, 0, float('NaN')),
|
||||||
|
DS('mgmt_tx_packets', 'DERIVE', 120, 0, float('NaN')),
|
||||||
|
DS('forward_bytes', 'DERIVE', 120, 0, float('NaN')),
|
||||||
|
DS('forward_packets', 'DERIVE', 120, 0, float('NaN')),
|
||||||
]
|
]
|
||||||
rra_list = [
|
rra_list = [
|
||||||
RRA('AVERAGE', 0.5, 1, 120), # 2 hours of 1 minute samples
|
RRA('AVERAGE', 0.5, 1, 120), # 2 hours of 1 minute samples
|
||||||
|
@ -30,7 +43,23 @@ class NodeRRD(RRD):
|
||||||
return os.path.basename(self.filename).rsplit('.', 2)[0] + ".png"
|
return os.path.basename(self.filename).rsplit('.', 2)[0] + ".png"
|
||||||
|
|
||||||
def update(self):
|
def update(self):
|
||||||
super().update({'upstate': 1, 'clients': self.node.clients})
|
values = {
|
||||||
|
'upstate': 1,
|
||||||
|
'clients': float(self.node.clients),
|
||||||
|
'neighbors': float(self.node.neighbors),
|
||||||
|
'vpn_neighbors': float(self.node.vpn_neighbors),
|
||||||
|
'loadavg': float(self.node.statistics['loadavg']),
|
||||||
|
}
|
||||||
|
for item in ('rx', 'tx', 'mgmt_rx', 'mgmt_tx', 'forward'):
|
||||||
|
try:
|
||||||
|
values['%s_bytes' % item] = int(self.node.statistics['traffic'][item]['bytes'])
|
||||||
|
except TypeError:
|
||||||
|
pass
|
||||||
|
try:
|
||||||
|
values['%s_packets' % item] = int(self.node.statistics['traffic'][item]['packets'])
|
||||||
|
except TypeError:
|
||||||
|
pass
|
||||||
|
super().update(values)
|
||||||
|
|
||||||
def graph(self, directory, timeframe):
|
def graph(self, directory, timeframe):
|
||||||
"""
|
"""
|
||||||
|
|
1
node.py
1
node.py
|
@ -12,6 +12,7 @@ class NoneDict:
|
||||||
__bool__ = lambda self: False
|
__bool__ = lambda self: False
|
||||||
__getitem__ = lambda self, k: NoneDict()
|
__getitem__ = lambda self, k: NoneDict()
|
||||||
__json__ = lambda self: None
|
__json__ = lambda self: None
|
||||||
|
__float__ = lambda self: float('NaN')
|
||||||
def __setitem__(self, key, value):
|
def __setitem__(self, key, value):
|
||||||
raise RuntimeError("NoneDict is readonly")
|
raise RuntimeError("NoneDict is readonly")
|
||||||
|
|
||||||
|
|
10
rrd.py
10
rrd.py
|
@ -33,7 +33,9 @@ class rrd:
|
||||||
if node.flags['online']:
|
if node.flags['online']:
|
||||||
if not node.flags['client']:
|
if not node.flags['client']:
|
||||||
nodes[node.id] = node
|
nodes[node.id] = node
|
||||||
node.clients = 0;
|
node.clients = 0
|
||||||
|
node.neighbors = 0
|
||||||
|
node.vpn_neighbors = 0
|
||||||
if 'legacy' in node.flags and node.flags['legacy']:
|
if 'legacy' in node.flags and node.flags['legacy']:
|
||||||
clientCount -= 1
|
clientCount -= 1
|
||||||
else:
|
else:
|
||||||
|
@ -45,6 +47,12 @@ class rrd:
|
||||||
nodes[source].clients += 1
|
nodes[source].clients += 1
|
||||||
elif target in nodes and not source in nodes:
|
elif target in nodes and not source in nodes:
|
||||||
nodes[target].clients += 1
|
nodes[target].clients += 1
|
||||||
|
elif source in nodes and target in nodes:
|
||||||
|
nodes[source].neighbors += 1
|
||||||
|
nodes[target].neighbors += 1
|
||||||
|
if link.type == 'vpn':
|
||||||
|
nodes[target].vpn_neighbors += 1
|
||||||
|
nodes[source].vpn_neighbors += 1
|
||||||
|
|
||||||
self.globalDb.update(len(nodes), clientCount)
|
self.globalDb.update(len(nodes), clientCount)
|
||||||
for node in nodes.values():
|
for node in nodes.values():
|
||||||
|
|
Loading…
Reference in New Issue