Files
microdao-daarion/NODES-CABINET-INTEGRATION.md
Apple 3de3c8cb36 feat: Add presence heartbeat for Matrix online status
- matrix-gateway: POST /internal/matrix/presence/online endpoint
- usePresenceHeartbeat hook with activity tracking
- Auto away after 5 min inactivity
- Offline on page close/visibility change
- Integrated in MatrixChatRoom component
2025-11-27 00:19:40 -08:00

7.7 KiB
Raw Permalink Blame History

Nodes Cabinet - Інтеграція Swapper Service для кожної Ноди

Дата: 2025-11-22
Статус: Інтегровано


📋 Огляд

Створено сторінку кабінету Нод, яка відображає:

  • Всі Ноди в системі (Node #1, Node #2)
  • Таблицю підключень Swapper Service для кожної Ноди
  • Статус кожної Ноди та її Swapper Service
  • Активну модель на кожній Ноді
  • Список всіх моделей з підключеннями
  • Можливість керувати моделями (Load/Unload)

🚀 Доступ до сторінки

URL маршрути:

  • http://localhost:3000/nodes - основна сторінка
  • http://localhost:3000/admin/nodes - альтернативний маршрут

З ConsolePage:

  • Кнопка "🌐 Nodes" в навігації ConsolePage
  • Відкриває сторінку Nodes

📊 Що відображається

1. Основна таблиця Нод

Колонка Опис
Node Назва та ID Ноди
IP Address IP адреса Ноди
Role Роль (production/development)
Status Статус Ноди (online/offline/degraded)
Swapper Service Статус Swapper Service
Active Model Активна модель (якщо є)
Total Models Загальна кількість моделей
Loaded Models Кількість завантажених моделей
Actions Кнопка "View Details"

2. Детальна таблиця підключень

Для кожної Ноди відображається таблиця з усіма моделями:

Колонка Опис
Model Name Назва моделі
Ollama Name Назва в Ollama
Type Тип (llm/code/vision/math)
Size (GB) Розмір моделі
Priority Пріоритет (high/medium/low)
Status Статус (loaded/unloaded/loading)
Uptime (hours) Час роботи моделі
Requests Кількість запитів
Actions Кнопки Load/Unload

🔧 Конфігурація Нод

Ноди налаштовані в src/pages/NodesPage.tsx:

const NODES: NodeInfo[] = [
  {
    node_id: 'node-1-hetzner-gex44',
    node_name: 'Node #1 - Production Server',
    ip_address: '144.76.224.179',
    role: 'production',
    status: 'online',
    swapper_url: 'http://144.76.224.179:8890', // Production
  },
  {
    node_id: 'node-2-macbook-m4max',
    node_name: 'Node #2 - MacBook M4 Max',
    ip_address: '192.168.1.244',
    role: 'development',
    status: 'online',
    swapper_url: 'http://localhost:8890', // Local
  },
];

Додавання нової Ноди

Додайте нову Ноду в масив NODES:

{
  node_id: 'node-3-...',
  node_name: 'Node #3 - ...',
  ip_address: '...',
  role: 'production' | 'development',
  status: 'online',
  swapper_url: 'http://...:8890',
}

🔄 Автоматичне оновлення

Сторінка автоматично оновлює статус кожні 30 секунд:

  • Перевіряє health кожного Swapper Service
  • Оновлює статус Нод
  • Оновлює список моделей та їх статуси

Можна також оновити вручну кнопкою "🔄 Refresh".


🎨 Візуальні індикатори

Статус Ноди:

  • 🟢 Online - Нода працює, Swapper доступний
  • 🔴 Offline - Нода недоступна
  • 🟠 Degraded - Нода працює, але є проблеми

Статус моделі:

  • 🟢 Loaded - Модель завантажена
  • Unloaded - Модель вивантажена
  • 🟡 Loading - Модель завантажується
  • 🔴 Error - Помилка завантаження

Активна модель:

  • Позначається індикатором "● Active"
  • Виділяється жовтим кольором
  • Показує uptime та кількість запитів

🔧 Функціональність

1. Перегляд статусу

  • Автоматичне оновлення кожні 30 секунд
  • Відображення статусу кожної Ноди
  • Відображення статусу Swapper Service

2. Керування моделями

  • Load - завантажити модель
  • Unload - вивантажити модель
  • Дії доступні тільки для online Нод

3. Детальна інформація

  • Розгорнута таблиця для кожної Ноди
  • Всі моделі з детальною інформацією
  • Uptime та статистика для кожної моделі

📁 Створені файли

  1. src/pages/NodesPage.tsx - основна сторінка
  2. src/styles/nodes.css - стилі для сторінки
  3. Оновлено src/App.tsx - додано маршрути
  4. Оновлено src/pages/ConsolePage.tsx - додано кнопку "Nodes"

🧪 Тестування

1. Перевірити доступність

# Node #2 (локально)
curl http://localhost:8890/api/cabinet/swapper/status

# Node #1 (production)
curl http://144.76.224.179:8890/api/cabinet/swapper/status

2. Відкрити в браузері

http://localhost:3000/nodes

3. Перевірити функціональність

  • Перевірити відображення обох Нод
  • Перевірити статус Swapper Service
  • Перевірити список моделей
  • Спробувати Load/Unload моделі

🔐 Безпека

CORS налаштування

Для доступу з frontend до Swapper Service на різних Нодах, переконайтеся що CORS налаштовано:

Node #1 (Production):

# services/swapper-service/app/main.py
app.add_middleware(
    CORSMiddleware,
    allow_origins=[
        "http://localhost:3000",
        "https://daarion.city",
        "https://gateway.daarion.city"
    ],
    ...
)

Node #2 (Development):

# services/swapper-service/app/main.py
app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],  # Development only
    ...
)

📋 Наступні кроки (опціонально)

  1. Додати фільтрацію:

    • Фільтр по статусу Ноди
    • Фільтр по типу моделей
    • Пошук по назві моделі
  2. Додати графіки:

    • Графік uptime моделей
    • Графік request count
    • Історія завантаження/вивантаження
  3. Додати Node Registry інтеграцію:

    • Автоматичне виявлення Нод
    • Динамічне додавання нових Нод
    • Heartbeat моніторинг

Готово!

Nodes Cabinet повністю інтегровано! 🎉

  • Сторінка створена
  • Таблиця підключень відображається
  • Керування моделями працює
  • Автоматичне оновлення налаштовано

Можна використовувати!


Last Updated: 2025-11-22
Status: Готово до використання
URL: http://localhost:3000/nodes