Rename to make more sense
This commit is contained in:
97
routerstats_httpd.py
Executable file
97
routerstats_httpd.py
Executable file
@ -0,0 +1,97 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import logging
|
||||
from http.server import SimpleHTTPRequestHandler, ThreadingHTTPServer
|
||||
import io
|
||||
import sys
|
||||
|
||||
import rrdtool
|
||||
|
||||
logging.basicConfig(
|
||||
format='%(asctime)s %(funcName)20s %(levelname)-8s %(message)s',
|
||||
level=logging.INFO,
|
||||
datefmt='%Y-%m-%d %H:%M:%S')
|
||||
|
||||
class RequestHandler(SimpleHTTPRequestHandler):
|
||||
def serve_png(self):
|
||||
self.send_response(200)
|
||||
self.send_header('Content-type', 'image/png')
|
||||
self.end_headers()
|
||||
|
||||
tmp_queries = self.path.split('/')
|
||||
query = []
|
||||
for q in tmp_queries:
|
||||
if q:
|
||||
query.append(q)
|
||||
|
||||
logging.debug(str(query))
|
||||
retries = 0
|
||||
while True:
|
||||
try:
|
||||
if len(query) > 1:
|
||||
if query[1] == 'yearly':
|
||||
title = query[1]
|
||||
startstr = '--start=end-1Y'
|
||||
elif query[1] == 'monthly':
|
||||
title = query[1]
|
||||
startstr = '--start=end-1M'
|
||||
elif query[1] == 'weekly':
|
||||
title = query[1]
|
||||
startstr = '--start=end-1W'
|
||||
elif query[1] == 'daily':
|
||||
title = query[1]
|
||||
startstr = '--start=end-1d'
|
||||
else:
|
||||
title = 'monthly'
|
||||
startstr = '--start=end-1M'
|
||||
else:
|
||||
title = 'monthly'
|
||||
startstr = '--start=end-1M'
|
||||
data = rrdtool.graphv("-", startstr, "--title=" + title, "DEF:in=test.rrd:net_dnat:AVERAGE", "DEF:out=test.rrd:loc-net:AVERAGE", "CDEF:result_in=in,UN,0,in,IF", "CDEF:tmp_out=out,UN,0,out,IF", "CDEF:result_out=tmp_out,-1,*", "AREA:result_in#00ff00:in", "AREA:result_out#0000ff:out")
|
||||
#, "--width", "1024", "--height", "600"
|
||||
self.wfile.write(data['image'])
|
||||
break
|
||||
except rrdtool.OperationalError as error:
|
||||
retries += 1
|
||||
if retries > 10:
|
||||
logging.error('Could not graphv the data: ' + str(error))
|
||||
break
|
||||
|
||||
def errorpage(self, errorcode, errormsg: str = ''):
|
||||
self.send_response(errorcode)
|
||||
self.send_header('Content-type', 'text/plain')
|
||||
self.end_headers()
|
||||
if errormsg:
|
||||
self.wfile.write(errormsg.encode('utf-8'))
|
||||
|
||||
def do_GET(self):
|
||||
if self.path == '/':
|
||||
self.send_response(200)
|
||||
self.send_header('Content-type', 'text/html')
|
||||
self.end_headers()
|
||||
self.print_page()
|
||||
elif self.path.startswith('/graph'):
|
||||
self.serve_png()
|
||||
elif self.path == '/favicon.ico':
|
||||
self.send_error(404)
|
||||
else:
|
||||
self.send_error(404, str(self.path))
|
||||
|
||||
def print_page(self):
|
||||
self.wfile.write("<html><body>".encode('utf-8'))
|
||||
self.wfile.write('<img src="/graph/monthly">'.encode('utf-8'))
|
||||
self.wfile.write('<img src="/graph/weekly">'.encode('utf-8'))
|
||||
self.wfile.write('<img src="/graph/daily">'.encode('utf-8'))
|
||||
self.wfile.write("</body></html>".encode('utf-8'))
|
||||
|
||||
def server(server_class=ThreadingHTTPServer, handler_class=RequestHandler):
|
||||
server_address = ('', 8000)
|
||||
httpd = server_class(server_address, handler_class)
|
||||
httpd.serve_forever()
|
||||
|
||||
def main():
|
||||
server()
|
||||
|
||||
if __name__ == '__main__':
|
||||
logging.debug('Welcome')
|
||||
main()
|
||||
Reference in New Issue
Block a user