system/bots/monitor/CLAUDE.md

Monitor Bot — Персональный бот-монитор

Версия: 1.0.0
Дата: 2026-01-11
Статус: Ready
Тип: Telegram Bot (long polling)


КОНЦЕПЦИЯ

Персональный Telegram бот для мониторинга и управления системой.

Отличия от monitor/run.py:
- Интерактивный (команды в реальном времени)
- Персональный (только для владельца)
- Мобильный (доступ из Telegram)


АРХИТЕКТУРА

Telegram → Bot API → MonitorBot → Handlers → system/monitor/
   ↓                      ↓            ↓
Owner                Check ID     /status → run.py --quick
                                  /alerts → .monitor/alerts/
                                  /logs   → journalctl

Компоненты:
- bot.py — Главный файл, long polling, маршрутизация
- handlers/ — Обработчики команд
- config.yaml — Настройки


БЕЗОПАСНОСТЬ

1. Access Control

def is_allowed(self, user_id: int) -> bool:
    return user_id == self.owner_id

Только владелец может использовать бота.

2. Whitelist

3. Таймауты

Все subprocess с timeout:
- /status — 30s
- /logs — 10s
- /run — 120s

4. Безопасные команды

/restart — отключена (требует sudo)


ИСПОЛЬЗОВАНИЕ

Запуск

# Установить переменные
export MONITOR_BOT_TOKEN='123456:ABC-DEF...'
export OWNER_TELEGRAM_ID='123456789'

# Запустить
python3 system/bots/monitor/bot.py

Команды в Telegram

/status      — Статус системы
/alerts      — Активные алерты
/last_check  — Последняя проверка
/logs nginx  — Логи nginx
/help        — Справка

ИНТЕГРАЦИЯ

С system/monitor/

# handlers/monitoring.py

def handle_status(bot, args):
    result = subprocess.run([
        "python3",
        str(MONITOR_PATH / "run.py"),
        "--quick",
        "--json"
    ])
    data = json.loads(result.stdout)
    return format_status(data)

С system/scheduler/

# handlers/system.py

def handle_run(bot, args):
    task_name = args[0]
    result = subprocess.run([
        "python3",
        str(WORKSPACE / "system/scheduler/run.py"),
        "--run",
        task_name
    ])
    return f"✅ Задача {task_name} выполнена"

РАСШИРЕНИЕ

Добавить команду

  1. Создать handler в handlers/:
def handle_mycommand(bot, args):
    # Логика
    return "✅ <b>Результат</b>"
  1. Добавить в bot.py:
handlers = {
    '/mycommand': handle_mycommand,
}

Автоматические уведомления

TODO: Интеграция с system/monitor/ для отправки алертов автоматически.

# system/monitor/alerts/telegram.py

def send_alert_to_bot(severity, title, message):
    bot = MonitorBot.from_env()
    bot.send_message(
        f"🚨 <b>{title}</b>\n\n{message}"
    )

ROADMAP

v1.1 — Интерактивность (1-2 часа)

v1.2 — Автоматизация (2-3 часа)

v2.0 — Claude Session (4-5 часов)


ЗАВИСИМОСТИ


СВЯЗИ


Версия: 1.0.0