diff options
-rw-r--r-- | extras/misc/varnish.vcl | 10 | ||||
-rwxr-xr-x | templating/templating.py | 64 |
2 files changed, 49 insertions, 25 deletions
diff --git a/extras/misc/varnish.vcl b/extras/misc/varnish.vcl index fe8e675..dd71a31 100644 --- a/extras/misc/varnish.vcl +++ b/extras/misc/varnish.vcl @@ -32,11 +32,6 @@ sub vcl_recv { return (synth(418,"LOLOLOL")); } - if (req.method != "GET" && req.method != "HEAD") { - /* We only deal with GET and HEAD by default */ - return (pass); - } - if (req.url ~ "/render") { set req.backend_hint = graphite; } @@ -45,6 +40,11 @@ sub vcl_recv { set req.backend_hint = templating; } + if (req.method != "GET" && req.method != "HEAD") { + /* We only deal with GET and HEAD by default */ + return (pass); + } + # Brukes ikke. Cookies er for nubs. unset req.http.Cookie; diff --git a/templating/templating.py b/templating/templating.py index 832beab..d4cb7f8 100755 --- a/templating/templating.py +++ b/templating/templating.py @@ -1,14 +1,15 @@ -#!/usr/bin/env python3.4 +#!/usr/bin/env python3 import requests,traceback from jinja2 import Template,Environment,FileSystemLoader import json +import http.server endpoints = "read/oplog read/snmp read/switches-management public/config public/dhcp public/dhcp-summary public/ping public/switches public/switch-state".split() objects = dict() def getEndpoint(endpoint): - r = requests.get("http://gondul-front:/api/%s" % endpoint) + r = requests.get("http://gondul-front/api/%s" % endpoint) if (r.status_code != 200): raise Exception("Bad status code for endpoint %s: %s" % (endpoint, r.status_code)) return r.json() @@ -19,36 +20,59 @@ def updateData(): env = Environment(loader=FileSystemLoader(['templates/','/opt/gondul/web/templates']),lstrip_blocks=True, trim_blocks=True) -import http.server class MyHandler(http.server.BaseHTTPRequestHandler): - def do_GET(self): - print (self.path[1:]) - updateData() + + body = "" + options = dict() + + def parse_options(self): url = self.path[1:] - options = dict() + self.url = url if url.find("?") != -1: - (url, tmpoptions) = url.split("?") - print (tmpoptions) + (self.url, tmpoptions) = url.split("?") tmptuples = tmpoptions.split("&") - print (tmptuples) for a in tmptuples: (x,y) = a.split("=") - options[x] = y - + self.options[x] = y + + def finalize_reply(self): + self.send_header('Content-Length', int(len(self.body))) + self.end_headers() + self.wfile.write(self.body) + self.wfile.flush() + + def do_GET(self): + updateData() + self.parse_options() try: - template = env.get_template(url) - body = template.render(objects=objects, options=options).encode('UTF-8') + template = env.get_template(self.url) + self.body = template.render(objects=objects, options=self.options).encode('UTF-8') self.send_response(200) self.send_header('Cache-Control','max-age=30, s-maxage=5') except Exception as err: - body = ("Templating of %s failed to render. Most likely due to an error in the template. Error transcript:\n\n%s\n----\n\n%s\n" % (url, err, traceback.format_exc())).encode('UTF-8') + self.body = ("Templating of %s failed to render. Most likely due to an error in the template. Error transcript:\n\n%s\n----\n\n%s\n" % (self.url, err, traceback.format_exc())).encode('UTF-8') self.send_response(500) self.send_header('Cache-Control','max-age=1, s-maxage=1') - self.send_header('Content-Length', int(len(body))) - self.end_headers() - self.wfile.write(body) - self.wfile.flush() - + self.finalize_reply() + + def do_POST(self): + updateData() + self.parse_options() + try: + length = self.headers.get('content-length') + if not length: + length = 0 + content = self.rfile.read(int(length)).decode('UTF-8') + template = Template(content) + self.body = template.render(options=self.options).encode('UTF-8') + self.send_response(200) + self.send_header('Cache-Control','max-age=30, s-maxage=5') + except Exception as err: + self.body = ("Templating of %s failed to render. Most likely due to an error in the template. Error transcript:\n\n%s\n----\n\n%s\n" % (self.url, err, traceback.format_exc())).encode('UTF-8') + self.send_response(500) + self.send_header('Cache-Control','max-age=1, s-maxage=1') + self.finalize_reply() + def run(server_class=http.server.HTTPServer, handler_class=http.server.BaseHTTPRequestHandler): server_address = ('', 8080) httpd = server_class(server_address, handler_class) |