Files
microdao-daarion/NODES-GPU-METRICS-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

7.5 KiB
Raw Blame History

GPU метрики в загальній сторінці нод - Завершено

Дата: 2025-11-23
Статус: Готово до використання


🎉 Що реалізовано

1. Додано GPU метрики до інтерфейсу NodeInfo

Файл: src/pages/NodesPage.tsx

Зміни:

  • Додано інтерфейс GPUInfo з метриками:
    • name - назва GPU
    • usage_percent - використання GPU (%)
    • memory_used_mb - використана пам'ять (MB)
    • memory_total_mb - загальна пам'ять (MB)
    • temperature - температура (°C)
    • power_watts - споживання потужності (W)
  • Додано поле gpu до NodeInfo (може бути одна GPU або масив GPU)

2. Додано функцію отримання GPU метрик

Функція: fetchGPUInfo(nodeId, ipAddress)

Функціонал:

  • Для НОДА1 (Hetzner) - повертає null (немає GPU)
  • Для НОДА2 (MacBook M4 Max) - повертає GPU інформацію:
    • Назва: Apple M4 Max GPU
    • Пам'ять: 12GB unified memory
    • Mock дані для тестування (готово для заміни на реальний API)

3. Оновлено відображення GPU метрик

Секція в картці ноди:

┌─────────────────────────────────────┐
│ GPU метрики                          │
├─────────────────────────────────────┤
│ ⚡ Apple M4 Max GPU                  │
│                                     │
│ Використання: 15%                   │
│ ████████░░░░░░░░░░░░ (15%)          │
│                                     │
│ Пам'ять: 2.0 / 12.0 GB              │
│ Температура: 45°C                   │
│ Потужність: 25W                     │
└─────────────────────────────────────┘

Особливості:

  • Відображається тільки якщо є GPU
  • Підтримка множинних GPU (масив)
  • Кольорове кодування використання:
    • Зелений: < 50%
    • Жовтий: 50-80%
    • Червоний: > 80%
  • Детальна інформація: пам'ять, температура, потужність

📊 Структура відображення

Картка ноди з GPU:

┌─────────────────────────────────────┐
│ НОДА2                               │
│ node-2-macbook-m4max                │
│ ● Онлайн                            │
├─────────────────────────────────────┤
│ IP адреса: 192.168.1.244            │
│ Роль: Development                   │
│ Активна модель: qwen3:8b            │
│ Всього моделей: 5                   │
│                                     │
│ ⚡ GPU метрики                      │
│ ┌─────────────────────────────────┐ │
│ │ Apple M4 Max GPU                │
│ │ Використання: 15%                │
│ │ Пам'ять: 2.0 / 12.0 GB           │
│ │ Температура: 45°C                │
│ │ Потужність: 25W                  │
│ └─────────────────────────────────┘ │
│                                     │
│ [Відкрити кабінет →]                │
└─────────────────────────────────────┘

🚀 Як використати

1. Відкрити сторінку нод

http://localhost:8899/nodes

2. Переглянути GPU метрики

  1. Відкрити сторінку нод
  2. Знайти картку ноди з GPU (НОДА2)
  3. Переглянути GPU метрики в секції "GPU метрики"

🔧 Налаштування

Environment Variables

# API для отримання GPU метрик (майбутнє)
VITE_GPU_METRICS_API=http://localhost:8899/api/gpu/metrics

API Endpoint (майбутнє)

GET /api/node/{node_id}/gpu

Response:

{
  "gpu": {
    "name": "Apple M4 Max GPU",
    "usage_percent": 15,
    "memory_used_mb": 2048,
    "memory_total_mb": 12288,
    "temperature": 45,
    "power_watts": 25
  }
}

Або для множинних GPU:

{
  "gpu": [
    {
      "name": "GPU 0",
      "usage_percent": 15,
      ...
    },
    {
      "name": "GPU 1",
      "usage_percent": 20,
      ...
    }
  ]
}

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

1. Реальний API для GPU метрик

Створити backend endpoint для отримання GPU метрик:

@app.get("/api/node/{node_id}/gpu")
async def get_node_gpu(node_id: str):
    # Для НОДА2 (MacBook) - використовувати системні команди
    if node_id == 'node-2-macbook-m4max':
        # Використати powermetrics або інші інструменти macOS
        gpu_info = get_macos_gpu_metrics()
        return {"gpu": gpu_info}
    
    # Для НОДА1 (Hetzner) - немає GPU
    return {"gpu": None}

2. Реальний збір GPU метрик

Для macOS (НОДА2):

# Використати powermetrics
sudo powermetrics --samplers gpu_power -i 1000 -n 1

# Або через Activity Monitor API

Для Linux (НОДА1):

# nvidia-smi (якщо є NVIDIA GPU)
nvidia-smi --query-gpu=utilization.gpu,memory.used,memory.total,temperature.gpu,power.draw --format=csv

# Або через /sys/class/drm/

3. Оновлення в реальному часі

  • Додати WebSocket для real-time оновлення GPU метрик
  • Оновлювати кожні 5-10 секунд
  • Показувати історію використання

Статус

Готово:

  • GPU метрики додано до інтерфейсу NodeInfo
  • Функція отримання GPU метрик
  • Відображення GPU метрик в картках нод
  • Підтримка множинних GPU
  • Кольорове кодування використання
  • Детальна інформація (пам'ять, температура, потужність)

Результат:

  • GPU метрики обов'язково відображаються для нод з GPU
  • Зручне відображення з деталями
  • Готово для інтеграції з реальним API

GPU метрики повністю інтегровані в загальну сторінку нод! 🎉

Доступ:

  • Сторінка нод: http://localhost:8899/nodes
  • GPU метрики відображаються для НОДА2 (MacBook M4 Max)