2 Commits

Author SHA1 Message Date
5f7a98f21c chore: bump version to 1.7.4
All checks were successful
CI / lint-and-test (push) Successful in 28s
Release / build-and-push (push) Successful in 1m30s
2026-04-22 14:57:06 +02:00
19ed231a31 fix: prevent duplicate default rules on multi-worker startup
- Replace insert_many with replace_one(..., upsert=True) keyed by rule name
- Safe for concurrent startup with multiple gunicorn workers
2026-04-22 14:56:53 +02:00
2 changed files with 16 additions and 10 deletions

View File

@@ -1 +1 @@
1.7.3 1.7.4

View File

@@ -136,10 +136,7 @@ def _create_alert(rule: dict, event: dict):
def seed_default_rules(): def seed_default_rules():
"""Insert pre-built admin-ops rule templates if the collection is empty.""" """Upsert pre-built admin-ops rule templates. Safe for concurrent startup."""
if rules_collection.count_documents({}) > 0:
return
defaults = [ defaults = [
{ {
"name": "Failed Conditional Access", "name": "Failed Conditional Access",
@@ -261,8 +258,17 @@ def seed_default_rules():
}, },
] ]
try: inserted = 0
rules_collection.insert_many(defaults) for rule in defaults:
logger.info("Default admin-ops rules seeded", count=len(defaults)) try:
except Exception as exc: result = rules_collection.replace_one(
logger.warning("Failed to seed default rules", error=str(exc)) {"name": rule["name"]},
rule,
upsert=True,
)
if result.upserted_id:
inserted += 1
except Exception as exc:
logger.warning("Failed to seed rule", rule=rule["name"], error=str(exc))
if inserted:
logger.info("Default admin-ops rules seeded", inserted=inserted, total=len(defaults))