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:
1 parent
6bdbbea209
commit
70d288fd0f
2 files changed
+11
-2
No files matched your search
@@ -39,6 +39,8 @@ def main():
|
|||||||
p.add_argument('--log-interval', type=float, default=60.0,
|
p.add_argument('--log-interval', type=float, default=60.0,
|
||||||
help='Seconds between capture liveness heartbeat logs '
|
help='Seconds between capture liveness heartbeat logs '
|
||||||
'(default: 60.0)')
|
'(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',
|
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)')
|
help='Directory with the simtrace-analyser PWA static files to serve (default: <repo>/frontend)')
|
||||||
args = p.parse_args()
|
args = p.parse_args()
|
||||||
@@ -56,6 +58,7 @@ def main():
|
|||||||
RequestHandler.db = db
|
RequestHandler.db = db
|
||||||
RequestHandler.capture = capture
|
RequestHandler.capture = capture
|
||||||
RequestHandler.capture_mode = args.capture
|
RequestHandler.capture_mode = args.capture
|
||||||
|
RequestHandler.log_requests = args.log_requests
|
||||||
|
|
||||||
server = HTTPServer((args.host, args.port), RequestHandler)
|
server = HTTPServer((args.host, args.port), RequestHandler)
|
||||||
server.web_dir = args.web_dir
|
server.web_dir = args.web_dir
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ from http.server import HTTPServer, BaseHTTPRequestHandler
|
|||||||
from urllib.parse import urlparse, parse_qs, quote
|
from urllib.parse import urlparse, parse_qs, quote
|
||||||
|
|
||||||
from .database import Database
|
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 ..gsmtap import build_gsmtap_packet, GSMTAP_SIM_ATR, GSMTAP_SIM_APDU
|
||||||
from ..pcap import build_pcap, parse_pcap, parse_pcapng
|
from ..pcap import build_pcap, parse_pcap, parse_pcapng
|
||||||
from .. import __version__
|
from .. import __version__
|
||||||
@@ -42,9 +42,11 @@ class RequestHandler(BaseHTTPRequestHandler):
|
|||||||
db: Database = None
|
db: Database = None
|
||||||
capture: CaptureManager = None
|
capture: CaptureManager = None
|
||||||
capture_mode: str = 'gsmtap'
|
capture_mode: str = 'gsmtap'
|
||||||
|
log_requests: bool = False
|
||||||
|
|
||||||
def log_message(self, fmt, *args):
|
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):
|
def _send_json(self, data, status=200):
|
||||||
body = json.dumps(data, ensure_ascii=False).encode('utf-8')
|
body = json.dumps(data, ensure_ascii=False).encode('utf-8')
|
||||||
@@ -344,6 +346,9 @@ class RequestHandler(BaseHTTPRequestHandler):
|
|||||||
else:
|
else:
|
||||||
self.db.close_session(session_id)
|
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({
|
self._send_json({
|
||||||
'session_id': session_id,
|
'session_id': session_id,
|
||||||
'name': name,
|
'name': name,
|
||||||
@@ -357,6 +362,7 @@ class RequestHandler(BaseHTTPRequestHandler):
|
|||||||
def _handle_delete_session(self, session_id):
|
def _handle_delete_session(self, session_id):
|
||||||
if self.capture and self.capture.session_id == session_id:
|
if self.capture and self.capture.session_id == session_id:
|
||||||
self.capture.stop_session()
|
self.capture.stop_session()
|
||||||
|
_log(f'Session deleted: session={session_id}')
|
||||||
self.db.delete_session(session_id)
|
self.db.delete_session(session_id)
|
||||||
self.db.vacuum()
|
self.db.vacuum()
|
||||||
self._send_json({'ok': True})
|
self._send_json({'ok': True})
|
||||||
|
|||||||
Reference in new issue
Block a user