diff options
| author | UltraQbik <no1skill@yandex.ru> | 2024-08-28 19:56:59 +0300 |
|---|---|---|
| committer | UltraQbik <no1skill@yandex.ru> | 2024-08-28 19:56:59 +0300 |
| commit | 1c830f9d95117cdafd3840f4590b9d1fdb87f04f (patch) | |
| tree | b0dc0a1133cc06bf4553b0c537c3f24c94971e39 | |
| parent | b557d5266b61cfd105e322ca3f0a46cb68412053 (diff) | |
| download | httpy-1c830f9d95117cdafd3840f4590b9d1fdb87f04f.tar.gz httpy-1c830f9d95117cdafd3840f4590b9d1fdb87f04f.zip | |
Add proper logging
Now any exception that is not related to sockets will be logged Threads should still clear themselves even after exception
| -rw-r--r-- | main.py | 48 |
1 files changed, 27 insertions, 21 deletions
diff --git a/main.py b/main.py index e6a7b9f..3c7a1fe 100644 --- a/main.py +++ b/main.py @@ -9,7 +9,6 @@ import signal import logging import argparse import threading -import traceback from src import APIv1 from src import file_man from src.config import * @@ -19,6 +18,16 @@ from src.status_code import * # typing _usocket = socket.socket | ssl.SSLSocket +# logging +logging.basicConfig( + level=logging.INFO, + format="%(asctime)s [%(levelname)s] %(message)s", + handlers=[ + logging.FileHandler("runtime.log"), + logging.StreamHandler() + ] +) + # parser _parser = argparse.ArgumentParser( prog="httpy", @@ -50,17 +59,6 @@ _parser.add_argument("-v", "--verbose", action="store_true") ARGS = _parser.parse_args() -# logging -logging.basicConfig( - level=logging.INFO, - format="%(asctime)s [%(levelname)s] %(message)s", - handlers=[ - logging.FileHandler("runtime.log"), - logging.StreamHandler() - ] -) - - class HTTPServer: """ The mightier HTTP server! @@ -125,18 +123,23 @@ class HTTPServer: self.sock.setblocking(False) self.sock.listen() - # listen and respond handler - while not self.stop_event.is_set(): - # accept new client + def _accept_client(): client = self._accept() if client is None: - continue + return # create thread for new client and append it to the list th = threading.Thread(target=self._client_thread, args=[client]) self.client_threads.append(th) th.start() + # loop + while not self.stop_event.is_set(): + try: + _accept_client() + except Exception as e: + logging.warning(f"ignoring exception:", exc_info=e) + # close server socket self.sock.close() @@ -147,11 +150,14 @@ class HTTPServer: """ self.semaphore.acquire() - client.setblocking(False) - request = self._recv_request(client) - # logging.info(f"ip: {client.getpeername()[0]}\n{request}") - if request is not None: - self._client_request_handler(client, request) + + try: + client.setblocking(False) + request = self._recv_request(client) + if request is not None: + self._client_request_handler(client, request) + except Exception as e: + logging.warning("ignoring error:", exc_info=e) # Remove self from thread list and close the connection self.client_threads.remove(threading.current_thread()) |