# noinspection PyUnresolvedReferences import future import socket from http.server import BaseHTTPRequestHandler, HTTPServer from threading import Thread from .logsList import logs_list from .persistentFlags import persistent_flags class ListenerHandler(BaseHTTPRequestHandler): def do_POST(self): try: content_length = int(self.headers.get("Content-Length")) all_logs = self.rfile.read(content_length).decode("utf-8").split('\n') if len(all_logs) == 0: self._set_response(400, "Bad Request", b"Bad request you got there, pal") return for log in all_logs: if log != "": if persistent_flags.get_server_error(): self._set_response(500, "Issue!!!!!!!", b"Not good, not good at all.") return logs_list.list.append(log) self._set_response(200, "OK", b"Shabam! got logs.") return except IndexError: self._set_response(400, "Bad Request", b"Bad request you got there, pal") return def _set_response(self, http_code, http_description, byte_body): self.send_response(http_code, http_description) self.send_header('Content-type', 'text/html') self.end_headers() self.wfile.write(byte_body) class MockLogzioListener: def __init__(self): self.port = _find_available_port() self.host = "localhost" self.server = HTTPServer((self.host, self.port), ListenerHandler) self.listening_thread = Thread(target=self._start_listening) self.listening_thread.daemon = True self.listening_thread.name = "mock-logzio-listener" self.listening_thread.start() self.logs_list = logs_list.list self.persistent_flags = persistent_flags def _start_listening(self): self.server.serve_forever() def get_port(self): return self.port def get_host(self): return self.host def find_log(self, search_log): for current_log in self.logs_list: if search_log in current_log: return True return False def get_number_of_logs(self): return len(self.logs_list) def clear_logs_buffer(self): self.logs_list = [] def set_server_error(self): self.persistent_flags.set_server_error() def clear_server_error(self): self.persistent_flags.clear_server_error() def _find_available_port(): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.bind(("", 0)) sock.listen(1) port = sock.getsockname()[1] sock.close() return port