add succesd Mail
parent
1f282a848a
commit
f27ea51835
|
|
@ -14,7 +14,7 @@ from dotenv import load_dotenv
|
||||||
|
|
||||||
def get_tables_from_db(connection):
|
def get_tables_from_db(connection):
|
||||||
"""
|
"""
|
||||||
Holt die Liste der zu überprüfenden Tabellen, die 'RAW.' im Namen enthalten
|
Holt die Liste der zu überprüfenden Tabellen, die 'history.' im Namen enthalten
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
list: Liste der Tabellennamen
|
list: Liste der Tabellennamen
|
||||||
|
|
@ -48,7 +48,8 @@ def check_timestamp(connection, tables, timestamp_column, email_config, test_mod
|
||||||
"""
|
"""
|
||||||
Überprüft, ob der letzte Zeitstempel in jeder angegebenen Tabelle von gestern ist.
|
Überprüft, ob der letzte Zeitstempel in jeder angegebenen Tabelle von gestern ist.
|
||||||
Sendet eine E-Mail mit den Namen der Tabellen, die nicht aktuell sind oder
|
Sendet eine E-Mail mit den Namen der Tabellen, die nicht aktuell sind oder
|
||||||
gibt die Nachricht auf der Konsole aus, wenn test_mode=True.
|
eine Bestätigungsmail, wenn alle Tabellen aktuell sind. Im Testmodus wird
|
||||||
|
nur auf der Konsole ausgegeben.
|
||||||
"""
|
"""
|
||||||
cursor = connection.cursor()
|
cursor = connection.cursor()
|
||||||
|
|
||||||
|
|
@ -83,37 +84,45 @@ def check_timestamp(connection, tables, timestamp_column, email_config, test_mod
|
||||||
|
|
||||||
except mysql.connector.Error as err:
|
except mysql.connector.Error as err:
|
||||||
print(f"Fehler beim Überprüfen der Tabelle {table}: {err}")
|
print(f"Fehler beim Überprüfen der Tabelle {table}: {err}")
|
||||||
outdated_tables.append(f"{table} (Fehler: {err}")
|
outdated_tables.append(f"{table} (Fehler: {err})")
|
||||||
|
|
||||||
# Cursor schließen
|
# Cursor schließen
|
||||||
cursor.close()
|
cursor.close()
|
||||||
|
|
||||||
# Wenn es nicht aktuelle Tabellen gibt, sende eine E-Mail oder gib Meldung aus
|
# E-Mail Inhalt und Betreff anpassen, je nachdem ob es fehlerhafte Tabellen gibt oder nicht
|
||||||
if outdated_tables:
|
if outdated_tables:
|
||||||
|
subject = f"Warnung: Nicht aktuelle Tabellen in Datenbank {database}"
|
||||||
|
body_intro = (
|
||||||
|
f"Hallo,\n\n"
|
||||||
|
f"die folgenden Tabellen in der Datenbank '{database}' haben keinen aktuellen Zeitstempel von gestern:\n"
|
||||||
|
)
|
||||||
|
body_tables = "\n".join(f"- {table}" for table in outdated_tables)
|
||||||
|
body_footer = "\n\nBitte überprüfen Sie diese Tabellen.\n\nDies ist eine automatisch generierte Nachricht."
|
||||||
|
else:
|
||||||
|
subject = f"Bestätigung: Alle Tabellen in Datenbank {database} sind aktuell"
|
||||||
|
body_intro = (
|
||||||
|
f"Hallo,\n\n"
|
||||||
|
f"alle zu überprüfenden Tabellen in der Datenbank '{database}' enthalten aktuelle Zeitstempel von gestern.\n"
|
||||||
|
)
|
||||||
|
body_tables = ""
|
||||||
|
body_footer = "\n\nDies ist eine automatisch generierte Nachricht."
|
||||||
|
|
||||||
|
# Wenn Testmodus aktiviert, Ausgabe auf Konsole
|
||||||
if test_mode:
|
if test_mode:
|
||||||
print("\n--- TEST MODUS: E-Mail würde gesendet werden ---")
|
print("\n--- TEST MODUS: E-Mail würde gesendet werden ---")
|
||||||
print(f"Betreff: Warnung: Nicht aktuelle Tabellen in Datenbank {database}")
|
print(f"Betreff: {subject}")
|
||||||
print("Inhalt:")
|
print("Inhalt:")
|
||||||
print("Hallo,")
|
print(body_intro + body_tables + body_footer)
|
||||||
print(
|
|
||||||
f"\ndie folgenden Tabellen in der Datenbank '{database}' haben keinen aktuellen Zeitstempel von gestern:")
|
|
||||||
for table in outdated_tables:
|
|
||||||
print(f"- {table}")
|
|
||||||
print("\nBitte überprüfen Sie diese Tabellen.")
|
|
||||||
print("\nDies ist eine automatisch generierte Nachricht.")
|
|
||||||
print("--- ENDE TEST MODUS ---\n")
|
print("--- ENDE TEST MODUS ---\n")
|
||||||
else:
|
else:
|
||||||
send_email(outdated_tables, database, email_config)
|
send_email(subject, body_intro, body_tables, body_footer, email_config)
|
||||||
return False
|
|
||||||
else:
|
return not outdated_tables
|
||||||
print("Alle Tabellen sind aktuell.")
|
|
||||||
send_email(outdated_tables, database, email_config)
|
|
||||||
return True
|
|
||||||
|
|
||||||
|
|
||||||
def send_email(outdated_tables, database, email_config):
|
def send_email(subject, body_intro, body_tables, body_footer, email_config):
|
||||||
"""
|
"""
|
||||||
Sendet eine E-Mail mit der Liste der nicht aktuellen Tabellen.
|
Sendet eine E-Mail mit dem angegebenen Betreff und Inhalt.
|
||||||
"""
|
"""
|
||||||
sender_email = email_config["sender"]
|
sender_email = email_config["sender"]
|
||||||
receiver_email = email_config["receiver"]
|
receiver_email = email_config["receiver"]
|
||||||
|
|
@ -126,30 +135,19 @@ def send_email(outdated_tables, database, email_config):
|
||||||
message = MIMEMultipart()
|
message = MIMEMultipart()
|
||||||
message["From"] = sender_email
|
message["From"] = sender_email
|
||||||
message["To"] = receiver_email
|
message["To"] = receiver_email
|
||||||
message["Subject"] = f"Warnung: Nicht aktuelle Tabellen in Datenbank {database}"
|
message["Subject"] = subject
|
||||||
|
|
||||||
# E-Mail-Inhalt
|
|
||||||
body = f"""
|
|
||||||
Hallo,
|
|
||||||
|
|
||||||
die folgenden Tabellen in der Datenbank '{database}' haben keinen aktuellen Zeitstempel von gestern:
|
|
||||||
|
|
||||||
{chr(10).join('- ' + table for table in outdated_tables)}
|
|
||||||
|
|
||||||
Bitte überprüfen Sie diese Tabellen.
|
|
||||||
|
|
||||||
Dies ist eine automatisch generierte Nachricht.
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
# E-Mail-Inhalt zusammenfügen
|
||||||
|
body = f"{body_intro}{chr(10) if body_tables else ''}{body_tables}{body_footer}"
|
||||||
message.attach(MIMEText(body, "plain"))
|
message.attach(MIMEText(body, "plain"))
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# Verbindung zum SMTP-Server herstellen mit TLS
|
# Verbindung zum SMTP-Server herstellen mit TLS
|
||||||
context = ssl.create_default_context()
|
context = ssl.create_default_context()
|
||||||
server = smtplib.SMTP(smtp_server, smtp_port)
|
server = smtplib.SMTP(smtp_server, smtp_port)
|
||||||
server.ehlo() # Kann bei manchen Servern erforderlich sein
|
server.ehlo()
|
||||||
server.starttls(context=context) # TLS-Verschlüsselung aktivieren mit sicherem Kontext
|
server.starttls(context=context)
|
||||||
server.ehlo() # Nach TLS erneut ehlo senden
|
server.ehlo()
|
||||||
|
|
||||||
# Anmelden (falls erforderlich)
|
# Anmelden (falls erforderlich)
|
||||||
if smtp_password:
|
if smtp_password:
|
||||||
|
|
@ -204,8 +202,7 @@ def main():
|
||||||
|
|
||||||
# Prüfe, ob erforderliche DB-Parameter vorhanden sind
|
# Prüfe, ob erforderliche DB-Parameter vorhanden sind
|
||||||
if not user or not password or not database:
|
if not user or not password or not database:
|
||||||
print(
|
print("Fehler: MySQL-Benutzer, Passwort und Datenbankname müssen entweder in der .env-Datei oder als Parameter angegeben werden!")
|
||||||
"Fehler: MySQL-Benutzer, Passwort und Datenbankname müssen entweder in der .env-Datei oder als Parameter angegeben werden!")
|
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
# Verbindung zur Datenbank herstellen
|
# Verbindung zur Datenbank herstellen
|
||||||
|
|
@ -236,12 +233,11 @@ def main():
|
||||||
# Wenn nicht im Testmodus, prüfe ob E-Mail-Parameter angegeben wurden
|
# Wenn nicht im Testmodus, prüfe ob E-Mail-Parameter angegeben wurden
|
||||||
if not test_mode:
|
if not test_mode:
|
||||||
if not email_config["sender"] or not email_config["receiver"]:
|
if not email_config["sender"] or not email_config["receiver"]:
|
||||||
print(
|
print("Fehler: E-Mail-Absender und -Empfänger müssen entweder in der .env-Datei oder als Parameter angegeben werden!")
|
||||||
"Fehler: E-Mail-Absender und -Empfänger müssen entweder in der .env-Datei oder als Parameter angegeben werden!")
|
|
||||||
connection.close()
|
connection.close()
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
# Tabellen aus der Datenbanktabelle holen
|
# Tabellen aus der Datenbank holen
|
||||||
tables = get_tables_from_db(connection)
|
tables = get_tables_from_db(connection)
|
||||||
|
|
||||||
if not tables:
|
if not tables:
|
||||||
|
|
@ -253,7 +249,7 @@ def main():
|
||||||
timestamp_column = args.timestamp_column
|
timestamp_column = args.timestamp_column
|
||||||
print(f"Überprüfe Zeitstempel in Spalte: {timestamp_column}")
|
print(f"Überprüfe Zeitstempel in Spalte: {timestamp_column}")
|
||||||
|
|
||||||
# Timestamp-Überprüfung durchführen
|
# Timestamp-Überprüfung durchführen und entsprechende E-Mail senden
|
||||||
check_timestamp(
|
check_timestamp(
|
||||||
connection,
|
connection,
|
||||||
tables,
|
tables,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue