Browse Source

initial (currently running) version of status daemon

Helge Jung 9 years ago
commit
fb1c64b47f
3 changed files with 78 additions and 0 deletions
  1. 2 0
      .gitignore
  2. 12 0
      ffstatus-daemon.py
  3. 64 0
      ffstatus.py

+ 2 - 0
.gitignore

@@ -0,0 +1,2 @@
+*.log
+*.pyc

+ 12 - 0
ffstatus-daemon.py

@@ -0,0 +1,12 @@
+#!/usr/bin/python
+
+import daemon
+import ffstatus
+
+a = ffstatus.AlfredParser()
+
+with daemon.DaemonContext():
+	while True:
+		a.execute()
+		time.sleep(15)
+

+ 64 - 0
ffstatus.py

@@ -0,0 +1,64 @@
+#!/usr/bin/python
+
+from __future__ import print_function
+import io
+import json
+import socket
+import subprocess
+import time
+import StringIO
+
+class AlfredParser:
+	prefix = "ffpb.nodes."
+	target_host = "fdca:ffee:ff12:a254::da7a"
+	target_port = 2003
+	alfred_dump = '/www/alfred.json'
+	whitelist = [ "24:a4:3c:f8:5e:fa", "24:a4:3c:f8:5e:db", "24:a4:3c:d9:4f:69", "24:a4:3c:a3:67:f0", "24:a4:3c:a3:68:07", "24:a4:3c:d2:21:d5" ]
+
+	def execute(self):
+		rawdata = subprocess.check_output(['alfred-json', '-z', '-r', '158'])
+
+		data = json.loads(rawdata)
+		ts = int(time.time())
+
+		if not self.alfred_dump is None:
+			f = io.open(self.alfred_dump, 'w')
+			f.write(unicode(rawdata))
+			f.close()
+
+		output = StringIO.StringIO()
+		for nodeid in data:
+			if (not self.whitelist is None) and (not nodeid in self.whitelist):
+				#print("Skipping node {0} as it is not in the configured whitelist.".format(nodeid))
+				continue
+
+
+			nodeinfo = data[nodeid]
+			nodestats = None
+			if "statistics" in nodeinfo: nodestats = nodeinfo["statistics"]
+
+			if not nodestats is None:
+				print(self.prefix, nodeid, ".uptime", " ", int(float(nodestats["uptime"])), " ", ts, sep='', file=output)
+				traffic = None
+				if "traffic" in nodestats: traffic = nodestats["traffic"]
+				if not traffic is None:
+					print(self.prefix, nodeid, ".rxbytes", " ", int(traffic["rx"]["bytes"]), " ", ts, sep='', file=output)
+					print(self.prefix, nodeid, ".rxpackets", " ", int(traffic["rx"]["packets"]), " ", ts, sep='', file=output)
+					print(self.prefix, nodeid, ".txbytes", " ", int(traffic["tx"]["bytes"]), " ", ts, sep='', file=output)
+					print(self.prefix, nodeid, ".txpackets", " ", int(traffic["tx"]["packets"]), " ", ts, sep='', file=output)
+			else:
+				print("Node {0} does not provide statistics information.".format(nodeid))
+
+		s = socket.socket(socket.AF_INET6, socket.SOCK_STREAM)
+		s.connect((self.target_host, self.target_port))
+		all_output = output.getvalue()
+		print(all_output)
+		s.sendall(all_output)
+		s.shutdown(socket.SHUT_WR)
+		s.close()
+
+		output.close()
+
+if __name__ == "__main__":
+	a = AlfredParser()
+	a.execute()