Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

id #17

Closed
wants to merge 52 commits into from
Closed

id #17

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
e27ef76
Merge pull request #1 from FreiFunkMuenster/advanced_stats
descilla Feb 27, 2016
e373a87
Added function for enable advanced stats via setting nodeid in file
Feb 28, 2016
97d4675
Umstellung auf Graphite auf der Service-VM
Fungur69 Mar 23, 2016
024e6eb
Added nodes to nodeslist. Removed error message.
Apr 13, 2016
79258b4
Removed unneeded print command
Apr 13, 2016
c6d664a
Fixed stats for wifi and batadv
Apr 14, 2016
75004df
Added new nodes to node-stats
Apr 17, 2016
3fd2593
Added new nodes to node-stats
Apr 17, 2016
73ea384
fsd-muenster.de hinzugefügt
Parad0xMS Apr 26, 2016
482a1ac
Für Timo Billardcafe Effet hinzugefügt
Parad0xMS May 18, 2016
3fd61b1
Knoten von corny456 hinzugefügt.
HellMar May 18, 2016
1397799
Merge pull request #2 from HellMar/patch-1
Parad0xMS May 18, 2016
4183806
Added bezreg kvm
descilla Aug 13, 2016
b761c3d
Added node to advnodes
descilla Aug 20, 2016
81e1c52
Added nodes to advnodes
descilla Aug 26, 2016
159e806
Added ZIV-Testknoten to advnodes
descilla Aug 28, 2016
ddf4ca9
3 Knoten von corny456 Hinzugefügt.
HellMar Sep 5, 2016
6ba4d98
Merge pull request #4 from HellMar/patch-1
MPW1412 Sep 5, 2016
d814e14
Doppelten Knoten von Corny456 Entfernt.
HellMar Sep 6, 2016
8f95c24
Node TanzresidenzMuenster hinzugefügt
Parad0xMS Sep 10, 2016
ad81137
Knoten von Parad0x hinzugefügt
Parad0xMS Oct 22, 2016
4eb0722
Added nodes to advnodes list
descilla Nov 23, 2016
1ff3791
Added clients_per_node metric.
descilla Nov 28, 2016
95d5f78
Added BEZ-KVMs to adv nodes
Dec 14, 2016
a9deb6c
Minor tweaks:
Dec 18, 2016
a392254
Minor fix.
descilla Dec 18, 2016
ad20145
Changed bat id to simply hex.
descilla Dec 19, 2016
4ab1865
Added nodes to advnodes list
descilla Dec 19, 2016
4ceb879
Added nodes to advnodes list.
descilla Dec 19, 2016
b161342
Added burse nodes to advnodes list.
descilla Dec 19, 2016
19c8c85
Added bez test vm to advnodes.
descilla Dec 20, 2016
443890e
ffst-grottenkamp-00x hinzugefügt
Parad0xMS Dec 21, 2016
00d4c5a
Merge pull request #5 from HellMar/patch-2
Parad0xMS Dec 21, 2016
130a491
Knoten von DippyDipp eingetragen
HellMar Jan 11, 2017
7e580dd
Merge pull request #6 from HellMar/patch-3
descilla Jan 11, 2017
fdc6440
Knoten der Rathaus-Installation in Borken aufgenommen.
HellMar Jan 23, 2017
079f64a
Merge pull request #7 from HellMar/patch-1
descilla Jan 23, 2017
d106ea1
Vergessenen Knoten der Rathaus-Installation in Borken aufgenommen.
HellMar Jan 23, 2017
201fae1
Merge pull request #8 from HellMar/patch-2
MPW1412 Jan 23, 2017
6f7f085
Knoten Ruben aufnehmen
TinoM Feb 25, 2017
ee09b52
Updated advnodes list.
descilla Mar 3, 2017
19e8b1a
Changed target host.
descilla Mar 4, 2017
5cc35ef
Merge branch 'master' into master
descilla Mar 10, 2017
03e6ee9
Merge pull request #10 from TinoM/master
descilla Mar 10, 2017
cc06f70
Update advnodes
SilversurferCH Mar 20, 2017
f89767e
Removed update.sh files, because they are part of our Ansible repo now.
descilla Mar 20, 2017
bb8fbdc
Update advnodes
jotzt Apr 1, 2017
7fe30fa
Merge pull request #12 from jotzt/patch-1
HellMar Apr 1, 2017
63c56d0
Update advnodes
BauerJup Apr 8, 2017
5d56bf9
Merge pull request #16 from BauerJup/patch-1
MPW1412 Apr 8, 2017
cf8c684
Meine Meshknoten hinzugefügt
FanLin-ffms Apr 12, 2017
0eb42bd
Merge pull request #18 from FanLin-ffms/patch-1
MPW1412 Apr 12, 2017
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
@@ -1,3 +1,4 @@
.idea/
*.json
*.pyc
__pycache__/
1 change: 1 addition & 0 deletions GraphiteManager.py
Expand Up @@ -35,6 +35,7 @@ def prepareMessage(self, data):
self.__addSingleMessage__("nodes."+self.domain+".location.count",data['locationcount'])
self.__addSingleMessage__("nodes."+self.domain+".total.count",data['nodecount'])
self.__addSingleMessage__("nodes."+self.domain+".totalclient.count",data['totalclients'])
self.__addSingleMessage__("nodes."+self.domain+"clients_per_node",data['totalclients']/float(data['nodecount']))

def send(self):
sock = socket.socket()
Expand Down
115 changes: 68 additions & 47 deletions JsonManager.py
Expand Up @@ -14,8 +14,7 @@
#

from subprocess import check_output
import json
import sys
import json, sys, os.path

class JsonManager:
def __init__(self):
Expand All @@ -24,7 +23,7 @@ def __init__(self):
self.json159 = []
self.json160 = []
self.result = {}
pass
self.__readAdvancedNodesFile__('/usr/src/node-stats/advnodes')


def loadJson(self):
Expand Down Expand Up @@ -52,16 +51,14 @@ def processJson158(self):
self.result["autoupdate"] = 0
for id in self.json158:
node = self.json158[id]
nodeID = id.replace(':','')

# Check for advanced-stats feature
self.advStats[id] = {
'enabled' : False
}
try:
if node['advanced-stats']['store-stats'] == True:
self.advStats[id]['enabled'] = True
except:
pass
if nodeID not in self.advStats:
if 'advanced-stats' in node and 'store-stats' in node['advanced-stats'] and node['advanced-stats']['store-stats'] == True:
self.__addNode__(nodeID, True)
else:
self.__addNode__(nodeID, False)

# Nodes/Firmware
if 'software' in node:
Expand All @@ -82,14 +79,14 @@ def processJson158(self):
self.__incCounter__('locationcount')

# do advanced stats stuff in 158
if self.advStats[id]['enabled'] == True:
if self.advStats[nodeID]['enabled'] == True:

# generate mapping for interface names
if 'network' in node and 'mesh' in node['network'] and 'bat0' in node['network']['mesh'] and 'interfaces' in node['network']['mesh']['bat0']:
self.advStats[id]['if_mapping'] = {}
self.advStats[nodeID]['if_mapping'] = {}
for k, v in node['network']['mesh']['bat0']['interfaces'].iteritems():
for i, mac in enumerate(v):
self.advStats[id]['if_mapping'][mac] = k + '_' + str(i)
self.advStats[nodeID]['if_mapping'][mac] = k + '_' + str(i)



Expand Down Expand Up @@ -117,46 +114,24 @@ def processJson159(self):
sys.stderr.write("Error %s" % sys.exc_info()[0])

try:
if id in self.advStats and self.advStats[id]['enabled'] == True:
if nodeID in self.advStats and self.advStats[nodeID]['enabled'] == True:
self.result['nodes'][nodeID].update(self.processAdvancedStats159(node))
except:
sys.stderr.write("Error %s" % sys.exc_info()[0])


def processJson160(self):
for id, node in self.json160.iteritems():
if id in self.advStats and self.advStats[id]['enabled'] == True:
node_id = node['node_id']
nodeID = id.replace(':','')
if nodeID in self.advStats and self.advStats[nodeID]['enabled'] == True:
try:
if 'wifi' in node:
self.result['nodes'][node_id]['wifi'] = self.__wifiAndBatmanStats__(id, node['wifi'], ['noise', 'inactive', 'signal'])
self.result['nodes'][nodeID]['wifi'] = self.__wifiAndBatmanStats__(nodeID, node['wifi'], ['noise', 'inactive', 'signal'])
if 'batadv' in node:
self.result['nodes'][node_id]['batadv'] = self.__wifiAndBatmanStats__(id, node['batadv'], ['tq', 'lastseen'])
self.result['nodes'][nodeID]['batadv'] = self.__wifiAndBatmanStats__(nodeID, node['batadv'], ['tq', 'lastseen'])
except:
sys.stderr.write("Error %s" % sys.exc_info()[0])


def __getIfName__(self, id, ifmac):
if ifmac in self.advStats[id]['if_mapping']:
return self.advStats[id]['if_mapping'][ifmac]
else:
return ifmac.replace(':', '_')

def __wifiAndBatmanStats__(self, id, data, keys):
dataStats = {
'count' : 0
}
for if_id, if_val in data.iteritems():
if_id_print = self.__getIfName__(id, if_id)
dataStats[if_id_print] = {
'count' : 0
}
if if_val and 'neighbours' in if_val:
for neigh_id, neigh_val in data[if_id]['neighbours'].iteritems():
dataStats['count'] += 1
dataStats[if_id_print]['count'] += 1
dataStats[if_id_print][neigh_id.replace(':','_')] = self.__cherryPickEntries__(neigh_val, keys)
return dataStats
pass
# sys.stderr.write("Error %s" % sys.exc_info()[0])


def processAdvancedStats159(self, node):
Expand Down Expand Up @@ -186,7 +161,8 @@ def processAdvancedStats159(self, node):
'running',
'total'
]
]
],
'rootfs_usage'
]

advancedStats.update(self.__cherryPickEntries__(node,entries))
Expand All @@ -195,7 +171,7 @@ def processAdvancedStats159(self, node):
if 'traffic' in node:
advancedStats['traffic'] = {}
if 'rx' in node['traffic'] and 'tx' in node['traffic']:
advancedStats['traffic']['all'] = self.__ifStats__(node['traffic']['rx'], node['traffic']['tx'])
advancedStats['traffic']['node'] = self.__ifStats__(node['traffic']['rx'], node['traffic']['tx'])
if 'mgmt_rx' in node['traffic'] and 'mgmt_tx' in node['traffic']:
advancedStats['traffic']['managed'] = self.__ifStats__(node['traffic']['mgmt_rx'], node['traffic']['mgmt_tx'])
if 'forward' in node['traffic']:
Expand All @@ -204,7 +180,9 @@ def processAdvancedStats159(self, node):
if 'mesh_vpn' in node:
advancedStats['mesh_vpn'] = self.__vpnStats__(node['mesh_vpn'])
if 'gateway' in node:
advancedStats['bat_gw_id'] = node['gateway'].split(':')[-1]
advancedStats['bat_gw_id'] = node['gateway'].replace(':','')
if 'gateway_nexthop' in node:
advancedStats['bat_gw_next_hop_id'] = node['gateway_nexthop'].replace(':','')
return advancedStats


Expand Down Expand Up @@ -254,6 +232,49 @@ def __cherryPickEntries__(self, data, entries):
return dataStats


def __getIfName__(self, id, ifmac):
if ifmac in self.advStats[id]['if_mapping']:
return self.advStats[id]['if_mapping'][ifmac]
else:
return ifmac.replace(':', '_')


def __wifiAndBatmanStats__(self, id, data, keys):
dataStats = {
'count' : 0
}
#print("mark", self.result['nodes'][id])
gwid = self.result['nodes'][id]['bat_gw_id'] if 'bat_gw_id' in self.result['nodes'][id] else None
for if_id, if_val in data.iteritems():
if_id_print = self.__getIfName__(id, if_id)
if if_val and 'neighbours' in if_val:
for neigh_id, neigh_val in data[if_id]['neighbours'].iteritems():
dataStats['count'] += 1
if gwid == neigh_id.replace(':',''):
if 'gateways' not in dataStats:
dataStats['gateways'] = {'count' : 0}
dataStats['gateways']['count'] += 1
dataStats['gateways'][neigh_id.replace(':','_')] = self.__cherryPickEntries__(neigh_val, keys)
else:
if if_id_print not in dataStats:
dataStats[if_id_print] = {'count' : 0}
dataStats[if_id_print]['count'] += 1
dataStats[if_id_print][neigh_id.replace(':','_')] = self.__cherryPickEntries__(neigh_val, keys)
return dataStats


def __readAdvancedNodesFile__(self,filename):
if os.path.isfile(filename):
with open(filename) as f:
for line in f:
self.__addNode__(line.strip(),True)

def __addNode__(self,nodeID,advStats = False):
if nodeID not in self.advStats:
self.advStats[nodeID] = {
'enabled' : advStats
}

def __incCounter__(self, key, value=None):

if value is None:
Expand All @@ -275,4 +296,4 @@ def ___cleanstr___(self, cleanstr):
for char in specialChars:
cleanstr = cleanstr.replace(char,"_")
cleanstr = cleanstr.replace(":","")
return cleanstr
return cleanstr
114 changes: 114 additions & 0 deletions advnodes
@@ -0,0 +1,114 @@
f4f26d303de6
60e327d61254
30b5c2bd7162
c4e984f7bc52
0418d6ad9dcc
0418d6ad9ccc
0418d6ad9f3f
0418d6ad9c62
0418d6ad9dc9
0418d6ad9f3e
6872512ee40d
0050fc5a94d1
e8de27dd7524
c4e984b5c9ae
f4f26d3fdd90
24a43cdfa10e
14cc20709f02
e894f66d40a8
e894f62a03cc
60e327ed9ce6
c46e1f878558
a42bb0b49a72
c46e1f7a9a00
60e3279ae306
f81a67873615
60e327cef960
60e327b2d5a2
60e327ceced0
60e327ced0a4
30b5c2216d04
52540044d942
6872514e97ae
a0f3c15b4180
c4e984b0d8ec
c4e984b0b798
c4e9846d8fd2
00199968f41f
14cc2097f6fc
5254009c34a4
c4e984be268c
60e3278139e6
6872512ee0a3
f4f26d499114
f4f26d68ca2e
ec086ba4dd28
525400ceedc5
525400751a8d
98ded0d5b790
f4f26d357d78
24a43cd88ed6
c4e984b607ca
e894f6428f86
0418d66d054a
e894f69084b8
0418d60ba795
c46e1ffeb440
14cc206e122e
c46e1fa23450
c46e1ff4d9fa
c46e1ff4d6e0
c46e1fa23498
c46e1ff4d9b2
c46e1f8cef60
c46e1f8ceed2
c46e1fa232d0
f81a678c76f6
c46e1fa233a2
c46e1fa2344e
e894f6518a3e
525400e6d519
e894f6521862
c46e1f2b8abc
60e327cce6f2
6872516867ff
30b5c2b0492c
802aa8c20ec1
802aa8c2032e
802aa8c20ae2
802aa8c21051
802aa8c20f22
802aa8c20762
802aa8c20762
802aa89ba508
802aa89ba667
802aa89ba6f8
802aa89ba69c
802aa8c2214e
802aa89ba5bd
802aa8c2235e
802aa8c2213a
802aa89ba682
802aa89ba516
802aa8c222d0
802aa89ba5e6
802aa89ba6ed
802aa8c21823
802aa89ba50a
f4f26d5280e6
c46e1fbd19c4
5254005a363b
52540011ebd6
14cc2097d1f2
68725128a438
6872512063f9
60e327c783cc
c46e1ffe44e6
60e327c78374
44d9e7ace223
60e32776947a
60e327cee38e
c46e1fb2c802
687251206213
6872510886fc
24a43c92be8d
5 changes: 0 additions & 5 deletions update.sh

This file was deleted.

4 changes: 0 additions & 4 deletions update_legacy.sh

This file was deleted.