diff --git a/simtrace2_pysniff/server/database.py b/simtrace2_pysniff/server/database.py index 486705c..38a3059 100644 --- a/simtrace2_pysniff/server/database.py +++ b/simtrace2_pysniff/server/database.py @@ -4,6 +4,7 @@ import os import sqlite3 import time from contextlib import contextmanager +from datetime import datetime, timedelta DEFAULT_DB_DIR = os.path.expanduser('~/.simtrace-analyser') DEFAULT_DB_PATH = os.path.join(DEFAULT_DB_DIR, 'sessions.db') @@ -68,10 +69,16 @@ class Database: self._conn.commit() return cur.lastrowid - def close_session(self, session_id): + def close_session(self, session_id, duration_secs=None): + if duration_secs is not None and duration_secs > 0: + started = self._conn.execute( + 'SELECT started FROM sessions WHERE id=?', (session_id,)).fetchone()[0] + ended = (datetime.fromisoformat(started) + timedelta(seconds=duration_secs)).isoformat() + else: + ended = _iso_now() self._conn.execute( 'UPDATE sessions SET ended=? WHERE id=? AND ended IS NULL', - (_iso_now(), session_id)) + (ended, session_id)) self._conn.commit() def set_session_times_from_ts(self, session_id, first_ts, last_ts): diff --git a/simtrace2_pysniff/server/server.py b/simtrace2_pysniff/server/server.py index 9c42547..22d85ec 100644 --- a/simtrace2_pysniff/server/server.py +++ b/simtrace2_pysniff/server/server.py @@ -346,7 +346,8 @@ class RequestHandler(BaseHTTPRequestHandler): if first_ts is not None and first_ts > _REAL_TS_MIN: self.db.set_session_times_from_ts(session_id, first_ts, last_ts) else: - self.db.close_session(session_id) + duration = (last_ts - first_ts) if last_ts is not None and first_ts is not None else 0 + self.db.close_session(session_id, duration) _log(f'Session imported: session={session_id} ' f'name={name or "(untitled)"} messages={len(packets)} '