From 480d6e9a11a857de5423a71413e3c06cd3018e2a Mon Sep 17 00:00:00 2001 From: Sebastian Serfling Date: Wed, 29 Oct 2025 09:53:41 +0100 Subject: [PATCH] Add Main.py --- main.py | 87 +++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 76 insertions(+), 11 deletions(-) diff --git a/main.py b/main.py index 3debef9..b43f632 100644 --- a/main.py +++ b/main.py @@ -1,15 +1,80 @@ -## Main File für die Controller -import exporter -import importer -import errorhandler -import mail -import mssqlconnector -## Import von Connector - -import sys +import schedule +import time +import subprocess +import datetime import os -import datetime as dt -import dotenv +import psutil +from dotenv import load_dotenv + +load_dotenv() + +MAIN_DIR = os.getcwd() +LOG_DIR = os.path.join(MAIN_DIR, 'Logs') +os.makedirs(LOG_DIR, exist_ok=True) + +logfile_path = os.path.join(LOG_DIR, f"main_schedule_log_{datetime.datetime.now().strftime('%Y-%m-%d')}.txt") + +def write_log(line): + """Schreibt eine Zeile mit aktuellem Zeitstempel ins Logfile""" + timestamp = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') + log_entry = f"[{timestamp}] {line}" + print(log_entry) + with open(logfile_path, 'a', encoding='utf-8') as f: + f.write(log_entry + '\n' + '-' * 60 + '\n') +def kill_existing_process(name): + """Beendet alle laufenden Prozesse mit passendem Namen (case-insensitive, mit/ohne .exe)""" + killed = False + base_name = name.lower().replace('.exe', '') + for proc in psutil.process_iter(['name']): + try: + pname = proc.info['name'].lower().replace('.exe', '') + if pname == base_name: + proc.kill() + killed = True + except (psutil.NoSuchProcess, psutil.AccessDenied): + pass + return killed + +def run_exe(name): + """Startet eine EXE und loggt Erfolg/Fehler""" + write_log(f"Starte {name}...") + + if kill_existing_process(name): + write_log(f"Vorherige Instanz von {name} wurde beendet.") + + try: + result = subprocess.run([name], capture_output=True, text=True, check=False) + if result.returncode != 0: + write_log(f"Fehler bei {name}: {result.stderr.strip()}") + else: + output = result.stdout.strip() + if output: + write_log(f"{name} erfolgreich: {output}") + else: + write_log(f"{name} erfolgreich beendet (kein Output).") + except FileNotFoundError: + write_log(f"Fehler: {name} wurde nicht gefunden!") + except Exception as e: + write_log(f"Unerwarteter Fehler bei {name}: {e}") + + +# Konfiguration +exporter_time = int(os.getenv('EXPORTER_TIME', '10')) # Minuten +importer_time_of_day = os.getenv('IMPORTER_TIME_OF_DAY', '23:30') + +# Tasks registrieren +schedule.every(exporter_time).minutes.do(lambda: run_exe('exporter.exe')) +schedule.every().day.at(importer_time_of_day).do(lambda: run_exe('importer.exe')) + +# Startmeldung +write_log("Starte Task-Scheduler...") +write_log(f"SDF - Export-Intervall: alle {exporter_time} Minuten") +write_log(f"SDF - Import-Zeit: {importer_time_of_day}") + +# Endlosschleife +while True: + schedule.run_pending() + time.sleep(10)