- 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
8.3 KiB
8.3 KiB
✅ Інвентаризація нод - Завершено
Дата: 2025-11-23
Статус: ✅ Готово до використання
🎉 Що реалізовано
✅ 1. Додано вкладку "Інвентаризація" в кабінет ноди
Файл: src/pages/NodeCabinetPage.tsx
Зміни:
- ✅ Додано нову вкладку "Інвентаризація" між "Сервіси" та "Плагіни"
- ✅ Відображення всіх встановлених компонентів на ноді
- ✅ Автоматичне оновлення кожну хвилину
✅ 2. Створено API для інвентаризації
Файл: src/api/nodeInventory.ts
Функціонал:
- ✅
getNodeInventory(nodeId)- отримати повну інвентаризацію ноди - ✅ Підтримка для НОДА1 та НОДА2
- ✅ Mock data для тестування (готово для заміни на реальний API)
Інтерфейси:
DockerContainer- інформація про Docker контейнерDockerImage- інформація про Docker образSystemPackage- системний пакетSystemdService- systemd сервісFileStructure- файлова структураNodeInventory- повна інвентаризація ноди
✅ 3. Відображення інвентаризації
Секції в кабінеті ноди:
3.1. 🐳 Docker контейнери
Підсекції:
- MicroDAO сервіси - таблиця з усіма MicroDAO контейнерами
- Назва, образ, порти, статус
- Інфраструктурні сервіси - таблиця з інфраструктурними контейнерами
- Telegram Bot API, Nginx, Redis, Weaviate тощо
- Зупинені контейнери - grid з зупиненими контейнерами
- Milvus, Neo4j, Grafana (якщо зупинені)
Приклад для НОДА1:
- dagi-router (9102)
- dagi-gateway (9300)
- dagi-rbac (9200)
- dagi-crewai (9010)
- dagi-devtools (8008)
- dagi-postgres (5432)
- dagi-nats (4222, 6222, 8222)
- dagi-node-registry (9205)
- swapper-service (8890)
- dagi-parser-service (9400)
- dagi-stt-service (9401)
- dagi-prometheus (9090)
- dagi-image-gen (9600)
3.2. 📦 Docker образи
- Grid з усіма Docker образами
- Назва, tag, розмір
3.3. 🤖 Ollama моделі
- Grid з встановленими AI моделями
- Назва, розмір, дата оновлення
НОДА1:
- qwen2.5:14b (8.5GB)
- qwen2.5:7b (4.5GB)
- qwen2.5:3b (2.0GB)
- qwen3:8b (5.0GB)
НОДА2:
- deepseek-r1:70b (40GB)
- mistral-22b (12GB)
3.4. ⚙️ Systemd сервіси
- Grid з системними сервісами
- Назва, статус, опис
Приклад:
- docker.service (active) - Docker Application Container Engine
- ssh.service (active) - OpenBSD Secure Shell server
- cron.service (active) - Regular background program processing daemon
3.5. 📚 Встановлені системні пакети
- Flex wrap з усіма встановленими пакетами
- Назва, версія
Приклад:
- git (2.34.1)
- curl (7.81.0)
- wget (1.21.2)
- nano (6.2)
- vim (8.2)
- ufw (0.36)
- unattended-upgrades (2.8)
3.6. 💻 Встановлене програмне забезпечення
- Grid з встановленим ПЗ
- Назва, версія, тип (docker/system/python/node)
Приклад:
- Docker (24.0.7) - system
- Docker Compose (2.21.0) - system
- Python (3.12.3) - system
- Node.js (20.10.0) - node
- Ollama (0.1.0) - system
3.7. 📁 Файлова структура
- Дерево файлів та директорій
- Проєкт:
/opt/microdao-daarion - Іконки для файлів (📄) та папок (📁)
- Розміри файлів
🚀 Як використати
1. Відкрити кабінет ноди
# НОДА1
http://localhost:8899/nodes/node-1-hetzner-gex44
# НОДА2
http://localhost:8899/nodes/node-2
2. Перейти на вкладку "Інвентаризація"
- Відкрити кабінет ноди
- Натиснути на вкладку "Інвентаризація"
- Переглянути всі встановлені компоненти
📊 Структура даних
interface NodeInventory {
node_id: string;
node_name: string;
docker_containers: {
microdao: DockerContainer[];
infrastructure: DockerContainer[];
stopped: DockerContainer[];
};
docker_images: DockerImage[];
system_packages: SystemPackage[];
systemd_services: SystemdService[];
file_structure: FileStructure;
ollama_models?: Array<{
name: string;
size: string;
modified: string;
}>;
installed_software?: Array<{
name: string;
version: string;
type: 'docker' | 'system' | 'python' | 'node';
}>;
}
🔧 Налаштування
Environment Variables
# URLs для кожної ноди
VITE_NODE1_URL=http://144.76.224.179
VITE_NODE2_URL=http://192.168.1.244
API Endpoint (майбутнє)
GET /api/node/{node_id}/inventory
Response:
{
"node_id": "node-1-hetzner-gex44",
"node_name": "НОДА1",
"docker_containers": {
"microdao": [...],
"infrastructure": [...],
"stopped": [...]
},
"docker_images": [...],
"system_packages": [...],
"systemd_services": [...],
"file_structure": {...},
"ollama_models": [...],
"installed_software": [...]
}
📝 Наступні кроки (опціонально)
1. Реальний API endpoint
Створити backend endpoint для отримання інвентаризації:
@app.get("/api/node/{node_id}/inventory")
async def get_node_inventory(node_id: str):
# Отримати Docker контейнери
containers = await get_docker_containers()
# Отримати Docker образи
images = await get_docker_images()
# Отримати системні пакети
packages = await get_system_packages()
# Отримати systemd сервіси
services = await get_systemd_services()
# Отримати Ollama моделі
models = await get_ollama_models()
return {
"node_id": node_id,
"docker_containers": containers,
"docker_images": images,
"system_packages": packages,
"systemd_services": services,
"ollama_models": models,
# ...
}
2. Реальний збір даних
- Використовувати SSH для збору даних з нод
- Або NodeAgent для автоматичного збору
- Зберігати в базі даних для швидкого доступу
3. Фільтрація та пошук
- Додати пошук по контейнерах
- Фільтрація по статусу
- Сортування
✅ Статус
Готово:
- ✅ Вкладка "Інвентаризація" додано
- ✅ API для отримання інвентаризації
- ✅ Відображення Docker контейнерів
- ✅ Відображення Docker образів
- ✅ Відображення Ollama моделей
- ✅ Відображення systemd сервісів
- ✅ Відображення системних пакетів
- ✅ Відображення встановленого ПЗ
- ✅ Відображення файлової структури
Результат:
- ✅ Вся інформація про встановлене на ноді в одному місці
- ✅ Зручна навігація та структура
- ✅ Відокремлена інформація по НОДАХ
Інвентаризація нод повністю реалізована! 🎉
Доступ:
- НОДА1:
http://localhost:8899/nodes/node-1-hetzner-gex44→ Вкладка "Інвентаризація" - НОДА2:
http://localhost:8899/nodes/node-2→ Вкладка "Інвентаризація"