Files
microdao-daarion/NODE-INVENTORY-COMPLETE.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

8.3 KiB
Raw Permalink Blame History

Інвентаризація нод - Завершено

Дата: 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. Перейти на вкладку "Інвентаризація"

  1. Відкрити кабінет ноди
  2. Натиснути на вкладку "Інвентаризація"
  3. Переглянути всі встановлені компоненти

📊 Структура даних

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 → Вкладка "Інвентаризація"