fix: harden events log — non-dict ring entries, off-loop journal reads, no default-config singleton

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-10 15:51:34 -04:00
co-authored by Claude Fable 5
parent 00fdbcaa5b
commit 92982c0ca7
4 changed files with 24 additions and 6 deletions
+8 -4
View File
@@ -389,10 +389,14 @@ async def start(
ej = journal_mod.get_events_journal(config)
if ej.enabled and ej.journal_path.is_file():
events, more = journal_mod.read_events(
ej.journal_dir, ej.journal_file,
limit=limit, before=before, host=host_f, level=level_f, q=q_f,
predicate=visible,
# File scan can be large; keep it off the loop that services UDP/WS
events, more = await asyncio.get_running_loop().run_in_executor(
None,
lambda: journal_mod.read_events(
ej.journal_dir, ej.journal_file,
limit=limit, before=before, host=host_f, level=level_f, q=q_f,
predicate=visible,
),
)
else:
# Journal disabled or not yet written: serve the in-memory ring
+2
View File
@@ -379,6 +379,8 @@ def filter_events(
q_l = q.lower() if q else None
out: List[Dict[str, Any]] = []
for ev in events:
if not isinstance(ev, dict):
continue
ts = ev.get('ts')
if before is not None and (not isinstance(ts, (int, float)) or ts >= before):
continue
+2 -2
View File
@@ -142,8 +142,8 @@ def _journal_event(msg: dict):
if _loop is None or not _loop.is_running():
return
from . import journal as journal_mod
ej = journal_mod.get_events_journal()
if not ej.enabled:
ej = journal_mod._events_journal_instance
if ej is None or not ej.enabled:
return
try:
asyncio.run_coroutine_threadsafe(ej.log_event(msg), _loop)
+12
View File
@@ -220,6 +220,18 @@ def test_filter_events_over_in_memory_ring():
assert more is True
def test_filter_events_skips_non_dict_entries():
ring = [
{"ts": 1.0, "host": "h", "level": "INFO", "service": None, "message": "a"},
"legacy string entry",
None,
{"ts": 2.0, "host": "h", "level": "INFO", "service": None, "message": "b"},
]
events, more = journal.filter_events(reversed(ring), limit=10)
assert [e["ts"] for e in events] == [2.0, 1.0]
assert more is False
# ---- eventlog wiring --------------------------------------------------------