File: //opt/af/scripts/test_connections.py
#!/usr/bin/env python
"""
Führt Verbindungstests für MySQL und SFTP durch.
Liest die Konfiguration aus der .env-Datei im Stammverzeichnis des Projekts.
Stellt sicher, dass die notwendigen Umgebungsvariablen gesetzt sind.
"""
import sys
import os
# Füge das Projekt-Stammverzeichnis zum Python-Pfad hinzu
# Dies ermöglicht den Import von Modulen aus src/
project_root = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))
sys.path.insert(0, project_root)
# Lade Umgebungsvariablen *bevor* Module importiert werden, die sie benötigen
from dotenv import load_dotenv
load_dotenv(dotenv_path=os.path.join(project_root, '.env'))
import logging
from src.database import test_mysql_connection
from src.sftp import test_sftp_connection
# Logging konfigurieren (konsistent mit connection Modulen)
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
def run_tests():
""" Führt die Verbindungs-Tests aus. """
logging.info("Starte Verbindungstests...")
# Überprüfe notwendige Umgebungsvariablen (optional, aber hilfreich)
required_mysql_vars = ["MYSQL_HOST", "MYSQL_USER", "MYSQL_PASSWORD", "MYSQL_DATABASE", "MYSQL_PORT"]
required_sftp_vars = ["SFTP_HOST", "SFTP_USER"]
# SFTP braucht entweder Passwort oder Schlüssel
sftp_auth_vars_present = os.getenv("SFTP_PASSWORD") or os.getenv("SFTP_KEY_PATH")
if not all(os.getenv(var) for var in required_mysql_vars):
logging.warning("Einige MySQL Umgebungsvariablen fehlen in .env. Test wird möglicherweise fehlschlagen.")
if not all(os.getenv(var) for var in required_sftp_vars) or not sftp_auth_vars_present:
logging.warning("Einige SFTP Umgebungsvariablen (Host, User, Password/Key) fehlen in .env. Test wird möglicherweise fehlschlagen.")
mysql_ok = False
sftp_ok = False
# Teste MySQL
logging.info("--- Teste MySQL Verbindung ---")
try:
mysql_ok = test_mysql_connection()
except Exception as e:
logging.error(f"Fehler beim Ausführen des MySQL-Tests: {e}", exc_info=True)
# Teste SFTP
logging.info("--- Teste SFTP Verbindung ---")
try:
sftp_ok = test_sftp_connection()
except Exception as e:
logging.error(f"Fehler beim Ausführen des SFTP-Tests: {e}", exc_info=True)
logging.info("--- Testergebnisse ---")
logging.info(f"MySQL Verbindung: {'OK' if mysql_ok else 'FEHLGESCHLAGEN'}")
logging.info(f"SFTP Verbindung: {'OK' if sftp_ok else 'FEHLGESCHLAGEN'}")
if mysql_ok and sftp_ok:
logging.info("Alle Verbindungstests erfolgreich.")
return True
else:
logging.error("Ein oder mehrere Verbindungstests sind fehlgeschlagen.")
return False
if __name__ == "__main__":
if not run_tests():
sys.exit(1) # Beende mit Fehlercode, falls Tests fehlschlagen