- 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
7.7 KiB
7.7 KiB
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 та статистика для кожної моделі
📁 Створені файли
- ✅
src/pages/NodesPage.tsx- основна сторінка - ✅
src/styles/nodes.css- стилі для сторінки - ✅ Оновлено
src/App.tsx- додано маршрути - ✅ Оновлено
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
...
)
📋 Наступні кроки (опціонально)
-
Додати фільтрацію:
- Фільтр по статусу Ноди
- Фільтр по типу моделей
- Пошук по назві моделі
-
Додати графіки:
- Графік uptime моделей
- Графік request count
- Історія завантаження/вивантаження
-
Додати Node Registry інтеграцію:
- Автоматичне виявлення Нод
- Динамічне додавання нових Нод
- Heartbeat моніторинг
✅ Готово!
Nodes Cabinet повністю інтегровано! 🎉
- ✅ Сторінка створена
- ✅ Таблиця підключень відображається
- ✅ Керування моделями працює
- ✅ Автоматичне оновлення налаштовано
Можна використовувати!
Last Updated: 2025-11-22
Status: ✅ Готово до використання
URL: http://localhost:3000/nodes