Rename to make more sense

This commit is contained in:
2024-05-20 16:30:35 +02:00
parent e6ecf5e76d
commit 4da81276d5

97
routerstats_httpd.py Executable file
View 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()