system/scheduler/schedule.yaml
# ═══════════════════════════════════════════════════════════
# Расписание платформы
# ═══════════════════════════════════════════════════════════
#
# Форматы:
#   every: "30m" | "1h" | "6h" | "1d"
#   at: "08:00" | "03:30"
#   cron: "*/5 * * * *"  (для сложных случаев)
#
# ═══════════════════════════════════════════════════════════

tasks:

  # ─────────────────────────────────────────
  # MONITOR — динамическое здоровье системы
  # ─────────────────────────────────────────
  # Частота проверок адаптируется к уровню заполнения диска:
  # < 90%: раз в сутки (12:00 МСК)
  # >= 90%: каждый час
  # >= 95%: каждые 30 минут
  # >= 97%: каждые 10 минут
  # >= 98%: каждые 10 минут + звонок в Telegram

  monitor_dynamic:
    description: "Динамический мониторинг с адаптивной частотой"
    command: "python3 system/monitor/monitor_dynamic.py"
    every: "10m"
    enabled: true

  # ─────────────────────────────────────────
  # ОТЧЁТЫ
  # ─────────────────────────────────────────

  daily_report:
    description: "Ежедневный отчёт оператору"
    command: "python3 system/monitor/run.py --report > .monitor/reports/$(date +%Y-%m-%d).md"
    at: "08:00"
    enabled: true

  # ─────────────────────────────────────────
  # ПОСТАВЩИКИ - парсинг остатков
  # ─────────────────────────────────────────

  gordeev_stock_hot_period:
    description: "Остатки Гордеев (25-31 дек, каждый час 8-20)"
    command: "python3 projects/org/pirotehnika/data/connectors/gordeev_client.py"
    cron: "0 8-20 25-31 12 *"
    enabled: false  # 2026-02-26: отключено до декабря

  gordeev_stock_weekly:
    description: "Остатки Гордеев (еженедельно по понедельникам)"
    command: "python3 projects/org/pirotehnika/data/connectors/gordeev_client.py"
    cron: "0 7 * * 1"  # понедельник в 7:00
    enabled: true

  # ─────────────────────────────────────────
  # ИНФРАСТРУКТУРА — ПРОКСИ
  # ─────────────────────────────────────────

  microsocks_restart:
    description: "Ежесуточный рестарт SOCKS5-прокси (очистка зависших соединений)"
    command: "systemctl restart microsocks"
    at: "04:00"
    enabled: false  # 2026-02-26: отключено — порт 1080 закрыт для внешних IP через UFW

  # ─────────────────────────────────────────
  # БЭКАПЫ ПО СЛОЯМ (L1-L5)
  # ─────────────────────────────────────────

  backup_L1_system:
    description: "L1: ОС конфиги (apt, systemd, nginx, cron, ssh)"
    command: "bash infra/@backup.service/scripts/backup-L1-system.sh"
    cron: "0 2 * * 0"    # воскресенье 02:00
    enabled: true

  backup_L2_docker:
    description: "L2: Docker + дампы БД (PostgreSQL, MariaDB)"
    command: "bash infra/@backup.service/scripts/backup-L2-docker.sh"
    every: "4h"
    enabled: true

  backup_L3_workspace:
    description: "L3: Git bundle + requirements"
    command: "bash infra/@backup.service/scripts/backup-L3-workspace.sh"
    at: "05:00"
    enabled: true

  backup_L4_claude:
    description: "L4: Claude конфиги (~/.claude/, CLAUDE.md)"
    command: "bash infra/@backup.service/scripts/backup-L4-claude.sh"
    every: "6h"
    enabled: true

  backup_sessions:
    description: "Архивирование чатов Claude старше 7 дней"
    command: "bash infra/@backup.service/scripts/backup-sessions.sh"
    cron: "30 4 * * 0"    # воскресенье 04:30
    enabled: true

  backup_rotate:
    description: "Ротация бэкапов (7d/1m/12y)"
    command: "bash infra/@backup.service/scripts/backup-rotate.sh"
    cron: "0 3 * * 0"    # воскресенье 03:00
    enabled: true

  # ─────────────────────────────────────────
  # ОЧИСТКА
  # ─────────────────────────────────────────

  cleanup:
    description: "Автоочистка при заполнении диска >= 90%"
    command: "bash infra/scripts/auto-cleanup.sh"
    every: "1h"
    enabled: true

  archive_logs:
    description: "Еженедельное архивирование логов старше 7 дней"
    command: "bash infra/scripts/archive-logs.sh"
    cron: "0 3 * * 0"    # воскресенье 03:00
    enabled: true

  # ─────────────────────────────────────────
  # СИНХРОНИЗАЦИЯ
  # ─────────────────────────────────────────


  # ─────────────────────────────────────────
  # МОДЕЛИ И БЮДЖЕТ
  # ─────────────────────────────────────────

  models_check:
    description: "Еженедельная проверка моделей, цен, баланса"
    command: "python3 system/scheduler/tasks/models_check.py"
    cron: "0 9 * * 1"    # понедельник 09:00
    enabled: true

  # ─────────────────────────────────────────
  # TELEGRAM BOT — мониторинг
  # ─────────────────────────────────────────

  telegram_bot_balance_check:
    description: "Проверка баланса OpenRouter (алерт если < $5)"
    command: "python3 $WORKSPACE/projects/telegram-chatgpt-bot/scripts/check_openrouter_balance.py"
    every: "1h"
    enabled: true

  telegram_bot_daily_report:
    description: "Telegram Bot - ежедневный отчёт в 12:00"
    command: "python3 $WORKSPACE/projects/telegram-chatgpt-bot/src/monitoring/daily_report.py"
    at: "12:00"
    enabled: true

  # ─────────────────────────────────────────
  # LIDERAVTO - Автоустановка Drupal 11
  # ─────────────────────────────────────────

  lideravto_drupal_auto_install:
    description: "Автоустановка Drupal 11 при MySQL 8.x (после миграции сервера)"
    command: "bash $WORKSPACE/projects/org/lideravto-new/it/lider-drupal/auto-install.sh"
    at: "03:00"
    enabled: false  # 2026-02-26: отключено — MySQL на хостинге не отвечал, скрипт множился