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:
+5
-1
@@ -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(
|
||||
# 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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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 --------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user