import subprocess
import time
import os
import requests

# Конфигурация
SCRIPTS = [
    '/var/www/html/vera/vera_1_.py',
    '/var/www/html/vera/vera_2_.py',
    '/var/www/html/vera/vera_3_.py',
    '/var/www/html/vera/vera_4_.py',
    '/var/www/html/vera/vera_5_.py'
]
BOT_TOKEN = '8270112599:AAEW3N0uTMy1U9cNmhibqRmZlU3yG6GSsDQ'
YOUR_CHAT_ID = '1349347235'

# Функция для отправки сообщения в Telegram
def send_telegram_message(message):
    url = f"https://api.telegram.org/bot{BOT_TOKEN}/sendMessage"
    data = {"chat_id": YOUR_CHAT_ID, "text": message}
    try:
        response = requests.post(url, data=data)
        if response.status_code == 200 and response.json().get('ok'):
            print(f"Сообщение отправлено в Telegram: {message}")
        else:
            print(f"Не удалось отправить сообщение: {response.text}")
    except Exception as e:
        print(f"Ошибка при отправке сообщения в Telegram: {e}")

# Функция для запуска или перезапуска скрипта
def start_script(script, processes):
    if not os.path.exists(script):
        print(f"Файл {script} не существует")
        send_telegram_message(f"Файл {script} не существует")
        return None
    process = subprocess.Popen(['python3', script], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
    processes[script] = process
    print(f"Запущен {script} с PID {process.pid}")
    return process

# Основная функция
def main():
    processes = {}

    # Первоначальный запуск всех скриптов
    for script in SCRIPTS:
        process = start_script(script, processes)
        if process is None:
            continue  # Пропускаем, если файл не существует

    # Получаем PID самого Supervisor.py
    supervisor_pid = os.getpid()

    # Собираем PID всех запущенных скриптов
    pids = [str(processes[script].pid) for script in SCRIPTS if script in processes and processes[script] is not None]
    pids.append(str(supervisor_pid))  # Добавляем PID Supervisor.py

    # Отправляем сообщение с PID всех скриптов, включая Supervisor.py
    pid_message = " ".join(pids)
    send_telegram_message(pid_message)

    # Бесконечный цикл мониторинга
    while True:
        for script in SCRIPTS:
            if script not in processes or processes[script] is None:
                continue  # Пропускаем, если файл не существует
            process = processes[script]
            if process.poll() is not None:
                print(f"{script} не работает (PID {process.pid}), перезапуск...")
                new_process = start_script(script, processes)
                if new_process is not None:
                    send_telegram_message(f"Скрипт {script} был перезапущен с PID {new_process.pid}")
        time.sleep(60)  # Проверка каждые 60 секунд

if __name__ == "__main__":
    try:
        main()
    except KeyboardInterrupt:
        print("Надзиратель остановлен пользователем")
    except Exception as e:
        print(f"Критическая ошибка в надзирателе: {e}")
        send_telegram_message(f"Надзиратель упал с ошибкой: {e}")