137 lines
3.9 KiB
Python
137 lines
3.9 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
|
|
"""
|
|
Orchestrator for all PRAVIDELNE scripts in exact order.
|
|
"""
|
|
|
|
import time, socket
|
|
for _ in range(30):
|
|
try:
|
|
socket.create_connection(("192.168.1.76", 3307), timeout=3).close()
|
|
break
|
|
except OSError:
|
|
time.sleep(10)
|
|
|
|
import sys
|
|
import subprocess
|
|
from pathlib import Path
|
|
from datetime import datetime
|
|
|
|
# =====================================================================
|
|
# Import EXACT Functions.py from: C:\Reporting\Fio\Functions.py
|
|
# This bypasses all other Functions.py files in the system.
|
|
# =====================================================================
|
|
|
|
import importlib.util
|
|
|
|
FUNCTIONS_FILE = Path(r"C:\Reporting\Fio\Functions.py")
|
|
|
|
spec = importlib.util.spec_from_file_location("Functions_FIO", FUNCTIONS_FILE)
|
|
Functions_FIO = importlib.util.module_from_spec(spec)
|
|
sys.modules["Functions_FIO"] = Functions_FIO
|
|
spec.loader.exec_module(Functions_FIO)
|
|
|
|
# correct WhatsApp function
|
|
SendWhatsAppMessage = Functions_FIO.SendWhatsAppMessage
|
|
|
|
|
|
# =====================================================================
|
|
# General Orchestrator Settings
|
|
# =====================================================================
|
|
|
|
# folder where orchestrator + sub-scripts live
|
|
BASE_DIR = Path(__file__).resolve().parent
|
|
|
|
SCRIPTS_IN_ORDER = [
|
|
"PRAVIDELNE_0_READ_ALL_ACTIVE_POZADAVKY.py",
|
|
"PRAVIDELNE_1_ReadLast300DonePozadavku.py",
|
|
"PRAVIDELNE_2_ReadPoznamky.py",
|
|
"PRAVIDELNE_3_StahniKomunikaci.py",
|
|
"PRAVIDELNE_4_StahniPrilohyUlozDoMySQL.py",
|
|
"PRAVIDELNE_5_SaveToFileSystem incremental.py",
|
|
]
|
|
|
|
LOG_FILE = BASE_DIR / "PRAVIDELNE_log.txt"
|
|
|
|
|
|
# =====================================================================
|
|
# Logging + WhatsApp wrappers
|
|
# =====================================================================
|
|
|
|
def log(msg: str):
|
|
ts = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
|
line = f"[{ts}] {msg}"
|
|
print(line)
|
|
try:
|
|
with LOG_FILE.open("a", encoding="utf-8") as f:
|
|
f.write(line + "\n")
|
|
except:
|
|
pass
|
|
|
|
|
|
def whatsapp_notify(text: str):
|
|
"""WhatsApp message wrapper — never allowed to crash orchestrator"""
|
|
try:
|
|
SendWhatsAppMessage(text)
|
|
except:
|
|
pass
|
|
|
|
|
|
# =====================================================================
|
|
# Main orchestrator
|
|
# =====================================================================
|
|
|
|
def main():
|
|
log("=== START pravidelného běhu ===")
|
|
whatsapp_notify("🏁 *PRAVIDELNÉ skripty: START*")
|
|
|
|
for script_name in SCRIPTS_IN_ORDER:
|
|
script_path = BASE_DIR / script_name
|
|
|
|
if not script_path.exists():
|
|
err = f"❌ Skript nenalezen: {script_path}"
|
|
log(err)
|
|
whatsapp_notify(err)
|
|
continue
|
|
|
|
log(f"▶ Spouštím: {script_path.name}")
|
|
whatsapp_notify(f"▶ *Spouštím:* {script_path.name}")
|
|
|
|
try:
|
|
result = subprocess.run(
|
|
[sys.executable, str(script_path)],
|
|
cwd=str(BASE_DIR),
|
|
capture_output=True,
|
|
text=True,
|
|
encoding="utf-8",
|
|
errors="ignore",
|
|
)
|
|
except Exception as e:
|
|
err = f"💥 Chyba při spouštění {script_path.name}: {e}"
|
|
log(err)
|
|
whatsapp_notify(err)
|
|
continue
|
|
|
|
# return code
|
|
rc_msg = f"↳ {script_path.name} return code: {result.returncode}"
|
|
log(rc_msg)
|
|
whatsapp_notify(rc_msg)
|
|
|
|
# stderr (warnings/errors)
|
|
if result.stderr:
|
|
err_msg = f"⚠ stderr v {script_path.name}:\n{result.stderr.strip()}"
|
|
log(err_msg)
|
|
whatsapp_notify(err_msg)
|
|
|
|
log("=== KONEC pravidelného běhu ===")
|
|
whatsapp_notify("✅ *PRAVIDELNÉ skripty: KONEC*\n")
|
|
|
|
|
|
# =====================================================================
|
|
# Entry point
|
|
# =====================================================================
|
|
|
|
if __name__ == "__main__":
|
|
main()
|