fix: prevent duplicate host_silence problems per host (0.4.8)
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -82,6 +82,43 @@ def test_scan_does_not_duplicate_open_problem(db_session, scan_settings):
|
||||
assert len(problems) == 1
|
||||
|
||||
|
||||
def test_scan_does_not_duplicate_after_correlation_window(db_session, scan_settings, monkeypatch):
|
||||
"""host_silence — одна open-проблема на хост, даже если прошло > correlation window."""
|
||||
monkeypatch.setenv("SAC_PROBLEM_CORRELATION_WINDOW_MINUTES", "60")
|
||||
get_settings.cache_clear()
|
||||
|
||||
hb = _ingest(
|
||||
db_session,
|
||||
type="agent.heartbeat",
|
||||
category="agent",
|
||||
severity="info",
|
||||
title="hb",
|
||||
summary="heartbeat",
|
||||
)
|
||||
hb.received_at = datetime.now(timezone.utc) - timedelta(hours=2)
|
||||
db_session.flush()
|
||||
|
||||
t0 = datetime.now(timezone.utc)
|
||||
first = run_host_silence_scan(db_session, now=t0)
|
||||
assert first[0].created is True
|
||||
first[0].problem.last_seen_at = t0 - timedelta(hours=2)
|
||||
db_session.flush()
|
||||
|
||||
later = run_host_silence_scan(db_session, now=t0 + timedelta(hours=3))
|
||||
assert len(later) == 1
|
||||
assert later[0].created is False
|
||||
assert later[0].problem.id == first[0].problem.id
|
||||
|
||||
problems = db_session.scalars(
|
||||
select(Problem).where(
|
||||
Problem.host_id == hb.host_id,
|
||||
Problem.rule_id == RULE_HOST_SILENCE,
|
||||
Problem.status == "open",
|
||||
)
|
||||
).all()
|
||||
assert len(problems) == 1
|
||||
|
||||
|
||||
def test_scan_skips_host_without_heartbeat(db_session, scan_settings):
|
||||
_ingest(
|
||||
db_session,
|
||||
|
||||
Reference in New Issue
Block a user