fix(api): handle Neo4j unavailability during app initialization (#9827)

Co-authored-by: Josema Camacho <josema@prowler.com>
This commit is contained in:
César Arroba
2026-01-20 12:22:41 +01:00
committed by GitHub
parent a0166aede7
commit 5be4ec511f
6 changed files with 31 additions and 8 deletions
+21 -2
View File
@@ -1,5 +1,5 @@
import logging
import atexit
import logging
import os
import sys
from pathlib import Path
@@ -41,7 +41,26 @@ class ApiConfig(AppConfig):
if "manage.py" not in sys.argv or os.environ.get("RUN_MAIN"):
self._ensure_crypto_keys()
if not getattr(settings, "TESTING", False):
# Commands that don't need Neo4j
SKIP_NEO4J_DJANGO_COMMANDS = [
"migrate",
"makemigrations",
"check",
"help",
"showmigrations",
"check_and_fix_socialaccount_sites_migration",
]
if getattr(settings, "TESTING", False) or (
"manage.py" in sys.argv
and len(sys.argv) > 1
and sys.argv[1] in SKIP_NEO4J_DJANGO_COMMANDS
):
logger.info(
"Skipping Neo4j initialization because of the current Django command or testing"
)
else:
graph_database.init_driver()
atexit.register(graph_database.close_driver)
+6 -2
View File
@@ -368,8 +368,12 @@ def perform_scan_summary_task(tenant_id: str, scan_id: str):
return aggregate_findings(tenant_id=tenant_id, scan_id=scan_id)
# TODO: This task must be queued at the `attack-paths` queue, don't forget to add it to the `docker-entrypoint.sh` file
@shared_task(base=RLSTask, bind=True, name="attack-paths-scan-perform", queue="scans")
@shared_task(
base=RLSTask,
bind=True,
name="attack-paths-scan-perform",
queue="attack-paths-scans",
)
def perform_attack_paths_scan_task(self, tenant_id: str, scan_id: str):
"""
Execute an Attack Paths scan for the given provider within the current tenant RLS context.