animetix-web / scripts /pre_flight_check.py
MissawB's picture
Upload folder using huggingface_hub
6a8fee8 verified
Raw
History Blame Contribute Delete
4 kB
import os
import sys
import logging
import django
from pathlib import Path
# Setup Django environment
PROJECT_ROOT = Path(__file__).resolve().parent.parent
sys.path.append(str(PROJECT_ROOT / "src" / "backend"))
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "animetix_project.settings")
django.setup()
from django.db import connection
from django.core.cache import cache
from animetix.containers import get_container
logging.basicConfig(level=logging.INFO, format="%(levelname)s: %(message)s")
logger = logging.getLogger("pre-flight")
def check_env_vars():
logger.info("πŸ” Checking Environment Variables...")
required = ["DATABASE_URL", "REDIS_URL", "HUGGINGFACE_TOKEN", "SECRET_KEY"]
missing = [v for v in required if not os.getenv(v)]
if missing:
logger.error(f"❌ Missing critical variables: {', '.join(missing)}")
return False
logger.info("βœ… Environment variables OK.")
return True
def check_postgres():
logger.info("🐘 Checking PostgreSQL & PgVector...")
try:
with connection.cursor() as cursor:
cursor.execute("SELECT version();")
version = cursor.fetchone()
logger.info(f"βœ… Postgres Connection OK: {version[0]}")
# Check for pgvector
cursor.execute("SELECT extname FROM pg_extension WHERE extname = 'vector';")
if cursor.fetchone():
logger.info("βœ… pgvector extension is installed.")
else:
logger.warning("⚠️ pgvector extension NOT FOUND. Vector searches will fail.")
return True
except Exception as e:
logger.error(f"❌ PostgreSQL Connection Failed: {e}")
return False
def check_redis():
logger.info("πŸš€ Checking Redis Cache...")
try:
cache.set("preflight_test", "ok", timeout=5)
if cache.get("preflight_test") == "ok":
logger.info("βœ… Redis Connection OK.")
return True
else:
logger.error("❌ Redis write/read failed.")
return False
except Exception as e:
logger.error(f"❌ Redis Connection Failed: {e}")
return False
def check_neo4j():
logger.info("πŸ•ΈοΈ Checking Neo4j Knowledge Graph...")
container = get_container()
if not container.neo4j_manager:
logger.error("❌ Neo4j Manager not found in container.")
return False
status = container.neo4j_manager.check_health()
if status.get("status") == "online":
logger.info("βœ… Neo4j Connection OK.")
return True
else:
logger.error(f"❌ Neo4j Offline: {status.get('reason')}")
return False
def check_ai_engines():
logger.info("🧠 Checking AI Inference Engines...")
container = get_container()
status = container.inference_engine.health_check()
if status.get("status") == "online":
logger.info(f"βœ… AI Engine Online. Adapters: {status.get('adapters')}")
return True
else:
logger.error(f"❌ AI Engine Offline or Degraded: {status}")
return False
def check_dependencies():
logger.info("πŸ“¦ Checking critical Python dependencies...")
try:
import bleach
import pydantic
import yaml
logger.info("βœ… Dependencies (bleach, pydantic, pyyaml) OK.")
return True
except ImportError as e:
logger.error(f"❌ Missing dependency: {e}")
return False
def run_all():
print("\n" + "="*40)
print("πŸš€ ANIMETIX PRE-FLIGHT CHECK πŸš€")
print("="*40 + "\n")
results = [
check_env_vars(),
check_dependencies(),
check_postgres(),
check_redis(),
check_neo4j(),
check_ai_engines()
]
print("\n" + "="*40)
if all(results):
print("🟒 SYSTEM READY FOR DEPLOYMENT!")
sys.exit(0)
else:
print("πŸ”΄ SYSTEM NOT READY. Please fix errors above.")
sys.exit(1)
if __name__ == "__main__":
run_all()