from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler from threading import Thread from datetime import datetime from urlparse import parse_qs from models import BrowserEvent class MyHandler(BaseHTTPRequestHandler): def do_POST(self): length = int(self.headers['Content-Length']) data = parse_qs(self.rfile.read(length)) data = {key: data[key][0].decode("utf8") for key in data.iterkeys()} time = datetime.utcfromtimestamp(int(data["time"]) / 1000.) if data["url"][0] == "null": url, title = None, None else: try: url, title = (data["url"], data["title"]) except KeyError: print data event = BrowserEvent(time=time, url=url, title=title, browser_key=data["key"]) self.server.logger.info(event) self.send_response(202) self.end_headers() return def log_request(self, code): pass class MyServer(HTTPServer): def __init__(self, addr, handler, logger): HTTPServer.__init__(self, addr, handler) self.logger = logger class ServerThread(Thread): def __init__(self, logger): Thread.__init__(self) self.server = MyServer(("localhost", 8080), MyHandler, logger) def run(self): self.server.serve_forever() def stop(self): self.server.shutdown()