Log sessions by default, HTTP requests opt-in via --log-requests

- HTTP request logging now off by default (log_message guarded by
  RequestHandler.log_requests); --log-requests enables it
- Add session lifecycle logging: POST /api/sessions/import and
  DELETE /api/sessions/<id> emit session+name+messages/bytes or
  session= lines via the shared _log() helper
- Capture start/stop and periodic status keep logging as before
This commit is contained in:
catarrh committed 2026-09-05 23:36:14 +03:00
1 parent 6bdbbea209
commit 70d288fd0f
2 files changed
+10 -1

No files matched your search

+3
View File
@@ -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: <repo>/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
+7 -1
View File
@@ -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,8 +42,10 @@ class RequestHandler(BaseHTTPRequestHandler):
db: Database = None
capture: CaptureManager = None
capture_mode: str = 'gsmtap'
log_requests: bool = False
def log_message(self, fmt, *args):
if self.log_requests:
print(f'[{self.log_date_time_string()}] {args[0]}', file=sys.stderr)
def _send_json(self, data, status=200):
@@ -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})