Initial test for http-server..
This commit is contained in:
98
test.py
Executable file
98
test.py
Executable file
@@ -0,0 +1,98 @@
|
|||||||
|
#!/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.DEBUG,
|
||||||
|
datefmt='%Y-%m-%d %H:%M:%S')
|
||||||
|
|
||||||
|
class RequestHandler(SimpleHTTPRequestHandler):
|
||||||
|
def serve_png(self):
|
||||||
|
logging.debug('serve_png')
|
||||||
|
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=/opt/test.rrd:net_dnat:MAX", "DEF:out=/opt/test.rrd:loc-net:MAX", "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", "800", "--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 == '/':
|
||||||
|
logging.debug('do_get /')
|
||||||
|
#Simple, that's here:)
|
||||||
|
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("</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