class HTTPLogServer(threading.Thread): class RequestHandler(BaseHTTPRequestHandler): INDENT = 4 def do_GET(self): if self.path == "/summary": self.send_response(200) self.end_headers() with self.server.state_lock: status = { "complete": self.server.state["complete"], "running" : self.server.state["running"], "total" : self.server.state["total"], "results" : self.server.state["summary"], } self.wfile.write(json.dumps(status, indent=self.INDENT)) else: self.send_response(404) self.end_headers() def __init__(self, state, state_lock): super(HTTPLogServer, self).__init__() port = int(PIGLIT_CONFIG.safe_get("http", "port", fallback=8080)) self._httpd = HTTPServer(("", port), HTTPLogServer.RequestHandler) self._httpd.state = state self._httpd.state_lock = state_lock def run(self): while True: with self._httpd.state_lock: # stop handling requests after the request for the final results if self._httpd.state["complete"] == self._httpd.state["total"]: break; self._httpd.handle_request()
class HTTPLogServer(threading.Thread): class RequestHandler(BaseHTTPRequestHandler): INDENT = 4 def do_GET(self): if self.path == "/summary": self.send_response(200) self.end_headers() with self.server.state_lock: status = { "complete": self.server.state["complete"], "running" : self.server.state["running"], "total" : self.server.state["total"], "results" : self.server.state["summary"], } self.wfile.write(json.dumps(status, indent=self.INDENT)) else: self.send_response(404) self.end_headers() def __init__(self, state, state_lock): super(HTTPLogServer, self).__init__() port = int(PIGLIT_CONFIG.safe_get("http", "port", fallback=8080)) self._httpd = HTTPServer(("", port), HTTPLogServer.RequestHandler) self._httpd.state = state self._httpd.state_lock = state_lock def run(self): while True: with self._httpd.state_lock: # stop handling requests after the request for the final results if self._httpd.state["complete"] == self._httpd.state["total"]: break; self._httpd.handle_request()
class AuthServer(QtCore.QObject): response = QtCore.pyqtSignal(dict) def __init__(self, *args, **kwds): super(AuthServer, self).__init__(*args, **kwds) self.server = HTTPServer(('127.0.0.1', 0), RequestHandler) self.port = self.server.server_port self.server.timeout = 1 self.server.response = self.response self.running = True @QtCore.pyqtSlot() @catch_all def start(self): while self.running: self.server.handle_request() self.server.server_close()
class SimpleWebServer(object): """A very basic web server.""" def __init__(self, host=DEFAULT_HOST, port=DEFAULT_PORT): self.stop_serving = False host = host port = port while True: try: self.server = HTTPServer( (host, port), HtmlOnlyHandler) self.host = host self.port = port break except socket.error: log.debug("port %d is in use, trying to next one" % port) port += 1 self.thread = threading.Thread(target=self._run_web_server) def _run_web_server(self): """Runs the server loop.""" log.debug("web server started") while not self.stop_serving: self.server.handle_request() self.server.server_close() def start(self): """Starts the server.""" self.thread.start() def stop(self): """Stops the server.""" self.stop_serving = True try: # This is to force stop the server loop URLopener().open("http://%s:%d" % (self.host, self.port)) except IOError: pass log.info("Shutting down the webserver") self.thread.join() def where_is(self, path): return "http://%s:%d/%s" % (self.host, self.port, path)