From c83aba24b5e948a58c76bbae2a0a7a806205bb69 Mon Sep 17 00:00:00 2001 From: Floke Date: Mon, 18 Aug 2025 10:09:10 +0000 Subject: [PATCH] app.py aktualisiert --- app.py | 47 +++++++++++++++++------------------------------ 1 file changed, 17 insertions(+), 30 deletions(-) diff --git a/app.py b/app.py index 2d8e79af..9cd080a0 100644 --- a/app.py +++ b/app.py @@ -1,29 +1,24 @@ -# app.py (v2.0 - Autark & Transparent) - -from flask import Flask, jsonify, request, render_template_string +# app.py (v2.1 - Final für Docker) +from flask import Flask, jsonify, request import subprocess import sys import os import logging -import uuid -import json from datetime import datetime from pyngrok import ngrok, conf from config import Config -# --- Konfiguration --- logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') app = Flask(__name__) -# Verzeichnis für Statusdateien der laufenden Jobs -STATUS_DIR = "job_status" -os.makedirs(STATUS_DIR, exist_ok=True) +# Der Pfad, in dem sich der Code im Container befindet +# (muss mit WORKDIR im Dockerfile übereinstimmen) +APP_DIR = "/code" -# SCRIPT MAP (Passen Sie hier bei Bedarf die Skriptnamen an, z.B. auf brancheneinstufung2.py) SCRIPT_MAP = { "run_duplicate_check": {"script": "duplicate_checker.py", "args": []}, - "run_reclassify_branches": {"script": "brancheneinstufung.py", "args": ["--mode", "reclassify_branches"]}, - "run_predict_technicians": {"script": "brancheneinstufung.py", "args": ["--mode", "predict_technicians"]}, + "run_reclassify_branches": {"script": "brancheneinstufung2.py", "args": ["--mode", "reclassify_branches"]}, + # ... fügen Sie hier bei Bedarf brancheneinstufung2.py hinzu } def setup_ngrok(): @@ -49,10 +44,6 @@ def setup_ngrok(): @app.route('/run-script', methods=['POST']) def run_script(): - """ - Startet ein Skript als Hintergrundprozess. - NEU: Leitet die Ausgabe des Skripts in eine dedizierte Log-Datei um. - """ action = "unknown" try: data = request.get_json() @@ -64,37 +55,33 @@ def run_script(): script_config = SCRIPT_MAP[action] script_name = script_config["script"] - script_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), script_name) + script_path = os.path.join(APP_DIR, script_name) # Korrekter Pfad im Container + if not os.path.exists(script_path): - logging.error(f"Skript '{script_path}' nicht gefunden.") - return jsonify({"status": "error", "message": f"Server-Fehler: Skript nicht gefunden."}), 500 + return jsonify({"status": "error", "message": f"Server-Fehler: Skript {script_name} nicht gefunden."}), 500 logging.info(f"Aktion '{action}' empfangen. Starte Skript: '{script_name}'...") - python_executable = sys.executable - command = [python_executable, script_path] + script_config["args"] - script_dir = os.path.dirname(os.path.abspath(__file__)) + command = ["python", script_name] + script_config["args"] - # NEU: Dedizierte Log-Datei für den Subprozess erstellen - log_dir = os.path.join(script_dir, "Log") + # Log-Datei für den Subprozess + log_dir = os.path.join(APP_DIR, "Log") os.makedirs(log_dir, exist_ok=True) timestamp = datetime.now().strftime("%Y-%m-%d_%H-%M-%S") process_log_path = os.path.join(log_dir, f"{timestamp}_{action}.log") - logging.info(f"Die Ausgabe des Skripts wird in '{process_log_path}' protokolliert.") - with open(process_log_path, 'w') as log_file: subprocess.Popen( - command, - cwd=script_dir, + command, + cwd=APP_DIR, # Setze das Arbeitsverzeichnis explizit stdout=log_file, stderr=log_file ) - return jsonify({"status": "success", "message": f"Aktion '{action}' wurde erfolgreich gestartet. Details siehe Log-Datei."}), 200 + return jsonify({"status": "success", "message": f"Aktion '{action}' gestartet. Log wird in '{process_log_path}' geschrieben."}), 200 except Exception as e: - logging.error(f"Kritischer Fehler in der run_script-Route bei Aktion '{action}': {e}", exc_info=True) + logging.error(f"Kritischer Fehler in run_script bei Aktion '{action}': {e}", exc_info=True) return jsonify({"status": "error", "message": f"Server-Fehler: {str(e)}"}), 500 @app.route('/get-status', methods=['GET'])