|
1 | | -# scripts/py/func/checks/run_auto_zip_random_quick_check.py |
| 1 | +# scripts/py/func/checks/trigger_aura_maintenance.py |
2 | 2 | import threading |
3 | 3 | import random |
4 | 4 | import time |
5 | 5 | import shutil |
6 | 6 |
|
7 | 7 | from pathlib import Path |
8 | 8 |
|
9 | | -from scripts.py.func.audio_manager import speak_fallback |
| 9 | +import subprocess |
| 10 | +import sys |
10 | 11 |
|
11 | | -# --- KONFIGURATION (unabhängig) --- |
| 12 | +# scripts/py/func/checks/trigger_aura_maintenance.py:12 |
| 13 | +REPO_ROOT = Path(__file__).resolve().parents[4] |
12 | 14 | TEST_ROOTS = [ |
13 | 15 | Path("config/maps/plugins/git/de-DE/self_test_zip_tmp"), |
14 | 16 | Path("config/maps/plugins/self_test_zip_tmp"), |
15 | 17 | Path("config/maps/self_test_zip_tmp"), |
16 | 18 | ] |
17 | 19 | EXPECTED_ZIP_NAME = "locked_folder.zip" |
18 | 20 | LAST_CHECK_FILE = Path("/tmp/sl5_aura/last_smoke_zip_check") |
19 | | -ZIP_TEST_TIMER = None |
20 | 21 |
|
| 22 | +radio_script = REPO_ROOT / "config/maps/plugins/z_fallback_llm/de-DE/radio_deep_dive.py" |
21 | 23 |
|
22 | | -def trigger_background_zip_check(logger): |
23 | | - """Wird von Aura aufgerufen. Startet den Test nach 4 Sek. Stille.""" |
24 | | - global ZIP_TEST_TIMER |
25 | | - if ZIP_TEST_TIMER: |
26 | | - ZIP_TEST_TIMER.cancel() |
| 24 | +MAINTENANCE_TIMER = None |
27 | 25 |
|
28 | | - # Timer für 4 Sekunden Stille |
29 | | - ZIP_TEST_TIMER = threading.Timer(4.0, _execute_smoke_test, args=[logger]) |
30 | | - ZIP_TEST_TIMER.daemon = True |
31 | | - ZIP_TEST_TIMER.start() |
| 26 | +def trigger_aura_maintenance(logger): |
| 27 | + from scripts.py.func.audio_manager import speak_fallback |
| 28 | + """Triggered by Aura. Starts maintenance tasks after 4s of silence.""" |
| 29 | + global MAINTENANCE_TIMER |
| 30 | + if MAINTENANCE_TIMER: |
| 31 | + MAINTENANCE_TIMER.cancel() |
| 32 | + logger.info("Maintenance: Timer scheduled (4s silence)...") |
| 33 | + speak_fallback("Maintenance: Timer scheduled (4s silence)...", 'de-DE') |
32 | 34 |
|
33 | | - # Optionale Ansage, dass der Test in Warteschlange ist (kann man auch weglassen) |
34 | | - # speak_fallback("Zip Test geplant", 'de-DE') |
| 35 | + MAINTENANCE_TIMER = threading.Timer(4.0, _execute_maintenance_tasks, args=[logger]) |
| 36 | + MAINTENANCE_TIMER.daemon = True |
| 37 | + MAINTENANCE_TIMER.start() |
35 | 38 |
|
36 | 39 |
|
37 | | -def _execute_smoke_test(logger): |
38 | | - """Die eigentliche Test-Logik (läuft im Hintergrund-Thread).""" |
| 40 | +def _execute_maintenance_tasks(logger): |
| 41 | + from scripts.py.func.audio_manager import speak_fallback |
| 42 | + logger.info("!!! Maintenance Task Started !!!") |
| 43 | + |
| 44 | + """Zentraler Manager für Hintergrund-Aufgaben.""" |
39 | 45 | try: |
40 | 46 | # 1. Throttling: Nur alle 10 Minuten einen Test machen |
41 | 47 | now = time.time() |
42 | 48 | if LAST_CHECK_FILE.exists(): |
43 | 49 | try: |
44 | 50 | last_time = float(LAST_CHECK_FILE.read_text()) |
45 | | - if now - last_time < 600: # 10 Min |
| 51 | + if now - last_time < 60 * 2: |
46 | 52 | return |
47 | 53 | except Exception: |
48 | 54 | pass |
49 | 55 |
|
50 | | - LAST_CHECK_FILE.parent.mkdir(parents=True, exist_ok=True) |
51 | | - LAST_CHECK_FILE.write_text(str(now)) |
| 56 | + # 2. RADIO-AURA CACHE GENERIERUNG |
| 57 | + logger.info(f"Maintenance: Checking Path: {radio_script}") |
| 58 | + |
| 59 | + if radio_script.exists(): |
| 60 | + # Wir nutzen subprocess, um die venv-Umgebung und das if-main-Handling sauber zu trennen |
| 61 | + |
| 62 | + result = subprocess.run([sys.executable, str(radio_script)], capture_output=True, text=True, check=False) |
52 | 63 |
|
53 | | - # 2. Zufälligen Pfad auswählen |
| 64 | + output = result.stdout.strip() |
| 65 | + logger.info(f"Radio Generator Output: {output}") |
| 66 | + |
| 67 | + if "All documents are up to date" in output: |
| 68 | + logger.info("Maintenance: Radio Cache is already current.") |
| 69 | + speak_fallback("Maintenance: Radio Cache is already current.", 'de-DE') |
| 70 | + |
| 71 | + else: |
| 72 | + logger.info("Maintenance: Radio-Aura Cache wurde aktualisiert.") |
| 73 | + speak_fallback("Maintenance: Radio-Aura Cache wurde aktualisiert", 'de-DE') |
| 74 | + |
| 75 | + # subprocess.run([sys.executable, str(radio_script)], check=False) |
| 76 | + logger.info("Maintenance: Radio-Aura Cache fertig.") |
| 77 | + speak_fallback("Maintenance: Radio-Aura Cache fertig.", 'de-DE') |
| 78 | + |
| 79 | + else: |
| 80 | + logger.error(f"Maintenance: PATH NOT FOUND: {radio_script}") |
| 81 | + |
| 82 | + # 3. SMOKE-ZIP TEST |
54 | 83 | root = random.choice(TEST_ROOTS) |
55 | 84 | folder_nickname = root.parent.name if root.parent.name != "self_test_zip_tmp" else "Root" |
| 85 | + logger.info(f"Maintenance: Starting Smoke-Zip Test for: {root}") |
56 | 86 |
|
57 | | - logger.info(f"Auto-Zip: 🎲 Random Smoke Test startet für: {root}") |
58 | | - speak_fallback(f"Auto-Zip Test startet in Ordner {folder_nickname}", 'de-DE') |
59 | | - |
60 | | - # 3. Test-Ordner erstellen |
61 | 87 | if _setup_scenario(root, logger): |
62 | 88 | # 4. Warten und Prüfen (Aura zippt im Vorbeigehen) |
63 | 89 | success = False |
@@ -132,4 +158,4 @@ def _cleanup(root, logger): |
132 | 158 | shutil.rmtree(root) |
133 | 159 | logger.info(f"Auto-Zip: Cleaned up {root}") |
134 | 160 | except Exception as e: |
135 | | - logger.error(f"Auto-Zip: Cleanup failed for {root}: {e}") |
| 161 | + logger.error(f"Maintenance Fehler: {e}") |
0 commit comments