diff --git a/simtrace2_pysniff/server/__main__.py b/simtrace2_pysniff/server/__main__.py index 8743b34..b99d51c 100644 --- a/simtrace2_pysniff/server/__main__.py +++ b/simtrace2_pysniff/server/__main__.py @@ -39,6 +39,8 @@ def main(): p.add_argument('--log-interval', type=float, default=60.0, help='Seconds between capture liveness heartbeat logs ' '(default: 60.0)') + p.add_argument('--log-requests', action='store_true', default=False, + help='Log every HTTP request (off by default)') p.add_argument('--web-dir', default=_default_web_dir(), metavar='PATH', help='Directory with the simtrace-analyser PWA static files to serve (default: /frontend)') args = p.parse_args() @@ -56,6 +58,7 @@ def main(): RequestHandler.db = db RequestHandler.capture = capture RequestHandler.capture_mode = args.capture + RequestHandler.log_requests = args.log_requests server = HTTPServer((args.host, args.port), RequestHandler) server.web_dir = args.web_dir diff --git a/simtrace2_pysniff/server/server.py b/simtrace2_pysniff/server/server.py index 8faa434..32559df 100644 --- a/simtrace2_pysniff/server/server.py +++ b/simtrace2_pysniff/server/server.py @@ -10,7 +10,7 @@ from http.server import HTTPServer, BaseHTTPRequestHandler from urllib.parse import urlparse, parse_qs, quote from .database import Database -from .capture import CaptureManager, GsmtapListener, DirectSniffer +from .capture import CaptureManager, GsmtapListener, DirectSniffer, _log from ..gsmtap import build_gsmtap_packet, GSMTAP_SIM_ATR, GSMTAP_SIM_APDU from ..pcap import build_pcap, parse_pcap, parse_pcapng from .. import __version__ @@ -42,9 +42,11 @@ class RequestHandler(BaseHTTPRequestHandler): db: Database = None capture: CaptureManager = None capture_mode: str = 'gsmtap' + log_requests: bool = False def log_message(self, fmt, *args): - print(f'[{self.log_date_time_string()}] {args[0]}', file=sys.stderr) + if self.log_requests: + print(f'[{self.log_date_time_string()}] {args[0]}', file=sys.stderr) def _send_json(self, data, status=200): body = json.dumps(data, ensure_ascii=False).encode('utf-8') @@ -344,6 +346,9 @@ class RequestHandler(BaseHTTPRequestHandler): else: self.db.close_session(session_id) + _log(f'Session imported: session={session_id} ' + f'name={name or "(untitled)"} messages={len(packets)} ' + f'bytes={sum(len(p) for _, _, p, _ in packets)}') self._send_json({ 'session_id': session_id, 'name': name, @@ -357,6 +362,7 @@ class RequestHandler(BaseHTTPRequestHandler): def _handle_delete_session(self, session_id): if self.capture and self.capture.session_id == session_id: self.capture.stop_session() + _log(f'Session deleted: session={session_id}') self.db.delete_session(session_id) self.db.vacuum() self._send_json({'ok': True})