- 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
243 lines
6.6 KiB
Markdown
243 lines
6.6 KiB
Markdown
# ✅ Monitor Agent - Real-time інтеграція завершена
|
|
|
|
**Дата:** 2025-11-22
|
|
**Статус:** ✅ Готово до використання
|
|
|
|
---
|
|
|
|
## 🎉 Виконано
|
|
|
|
### ✅ 1. Event Logging System
|
|
- ✅ Автоматичне логування всіх змін
|
|
- ✅ Зберігання останніх 1000 подій
|
|
- ✅ API endpoint: `/api/events`
|
|
- ✅ Очищення логу: `POST /api/events/clear`
|
|
|
|
### ✅ 2. Real-time Updates
|
|
- ✅ WebSocket endpoint: `/ws/events`
|
|
- ✅ Server-Sent Events: `/api/events/stream`
|
|
- ✅ Автоматичне підключення при завантаженні dashboard
|
|
- ✅ Автоматичне переподключення
|
|
|
|
### ✅ 3. Автоматичний моніторинг
|
|
- ✅ Background task запускається при старті
|
|
- ✅ Перевірка нод кожні 30 секунд
|
|
- ✅ Перевірка Swapper Service кожні 30 секунд
|
|
- ✅ Автоматичне виявлення змін
|
|
|
|
### ✅ 4. Event Log на Dashboard
|
|
- ✅ Секція "System Activity Log"
|
|
- ✅ Останні 20 подій
|
|
- ✅ Real-time оновлення через WebSocket
|
|
- ✅ Polling fallback кожні 10 секунд
|
|
- ✅ Візуальні індикатори (Agent/Node/System)
|
|
|
|
---
|
|
|
|
## 🔄 Автоматичні правила
|
|
|
|
### 1. Моніторинг нод
|
|
**Правило:** Перевіряти статус кожної ноди кожні 30 секунд
|
|
|
|
**Дії:**
|
|
- Перевірка health endpoint
|
|
- Порівняння з попереднім статусом
|
|
- Логування змін статусу
|
|
- Broadcast події через WebSocket
|
|
|
|
**Приклад події:**
|
|
```json
|
|
{
|
|
"type": "node",
|
|
"action": "status_changed",
|
|
"message": "Статус ноди NODE 1 (Production) змінено на offline",
|
|
"details": {
|
|
"node_id": "node-1",
|
|
"previous_status": "online",
|
|
"new_status": "offline"
|
|
}
|
|
}
|
|
```
|
|
|
|
### 2. Моніторинг агентів
|
|
**Правило:** Логувати всі зміни в агентах
|
|
|
|
**Дії:**
|
|
- Створення/оновлення агента
|
|
- Додавання/видалення з команди
|
|
- Зміна system prompt
|
|
|
|
**Приклад події:**
|
|
```json
|
|
{
|
|
"type": "agent",
|
|
"action": "sub_agent_added",
|
|
"message": "Додано агента 'Product Manager' в команду GREENFOOD Assistant",
|
|
"details": {
|
|
"agent_id": "greenfood",
|
|
"agent_name": "GREENFOOD Assistant",
|
|
"sub_agent": {
|
|
"name": "Product Manager",
|
|
"role": "Manages products"
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
### 3. Моніторинг Swapper Service
|
|
**Правило:** Перевіряти Swapper Service кожні 30 секунд
|
|
|
|
**Дії:**
|
|
- Перевірка статусу Swapper Service
|
|
- Відстеження змін активної моделі
|
|
- Логування оновлень
|
|
|
|
**Приклад події:**
|
|
```json
|
|
{
|
|
"type": "node",
|
|
"action": "swapper_updated",
|
|
"message": "Оновлено Swapper Service на ноді NODE 2 (Local)",
|
|
"details": {
|
|
"node_id": "node-2",
|
|
"previous_model": null,
|
|
"current_model": "deepseek-r1-70b"
|
|
}
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## 📊 Event Log на Dashboard
|
|
|
|
### Відображення
|
|
|
|
1. **Секція "System Activity Log":**
|
|
- Розташована перед картками нод
|
|
- Максимальна висота: 256px (max-h-64)
|
|
- Автоматичне прокручування
|
|
|
|
2. **Формат події:**
|
|
- 🔵 Agent events (blue icon)
|
|
- 🟢 Node events (green icon)
|
|
- 🟣 System events (purple icon)
|
|
- Час події
|
|
- Деталі (якщо є)
|
|
|
|
3. **Real-time оновлення:**
|
|
- WebSocket для миттєвих оновлень
|
|
- Polling кожні 10 секунд (fallback)
|
|
- Анімація pulse для нових подій
|
|
|
|
---
|
|
|
|
## 🔧 Технічні деталі
|
|
|
|
### Event Log Structure
|
|
|
|
```python
|
|
EVENT_LOG = deque(maxlen=1000) # Останні 1000 подій
|
|
```
|
|
|
|
### Event Format
|
|
|
|
```python
|
|
{
|
|
"timestamp": "2025-11-22T12:34:56.789",
|
|
"type": "agent" | "node" | "system",
|
|
"action": "created" | "updated" | "deleted" | "status_changed" | ...,
|
|
"message": "Human-readable message",
|
|
"details": {
|
|
# Деталі події
|
|
}
|
|
}
|
|
```
|
|
|
|
### WebSocket Connection
|
|
|
|
```javascript
|
|
const ws = new WebSocket('ws://localhost:8899/ws/events');
|
|
ws.onmessage = (event) => {
|
|
const eventData = JSON.parse(event.data);
|
|
addEventToLog(eventData);
|
|
};
|
|
```
|
|
|
|
---
|
|
|
|
## 🧪 Тестування
|
|
|
|
### 1. Перевірити Event Log API
|
|
|
|
```bash
|
|
# Отримати останні події
|
|
curl 'http://localhost:8899/api/events?limit=10'
|
|
|
|
# Очистити лог
|
|
curl -X POST http://localhost:8899/api/events/clear
|
|
```
|
|
|
|
### 2. Створити тестову подію
|
|
|
|
1. Відкрити кабінет оркестратора: `/agent/greenfood`
|
|
2. Додати агента в команду
|
|
3. Перевірити відображення в Event Log на dashboard
|
|
|
|
### 3. Перевірити real-time оновлення
|
|
|
|
1. Відкрити dashboard
|
|
2. Відкрити DevTools → Network → WS
|
|
3. Підключитися до `/ws/events`
|
|
4. Створити подію (додати агента)
|
|
5. Перевірити отримання події через WebSocket
|
|
|
|
---
|
|
|
|
## 📋 Автоматичні правила (як працюють)
|
|
|
|
### Правило 1: Моніторинг змін статусу нод
|
|
```
|
|
IF node.status != previous_status THEN
|
|
log_event("node", "status_changed", {...})
|
|
broadcast_event(event)
|
|
END
|
|
```
|
|
|
|
### Правило 2: Моніторинг змін в агентах
|
|
```
|
|
WHEN agent.updated OR agent.sub_agent_added OR agent.sub_agent_removed THEN
|
|
log_event("agent", action, {...})
|
|
broadcast_event(event)
|
|
END
|
|
```
|
|
|
|
### Правило 3: Моніторинг Swapper Service
|
|
```
|
|
IF swapper.active_model != previous_active_model THEN
|
|
log_event("node", "swapper_updated", {...})
|
|
broadcast_event(event)
|
|
END
|
|
```
|
|
|
|
---
|
|
|
|
## ✅ Готово!
|
|
|
|
**Monitor Agent автоматично інтегровано з системою!** 🎉
|
|
|
|
- ✅ Автоматичне логування всіх змін
|
|
- ✅ Real-time оновлення через WebSocket
|
|
- ✅ Event Log на dashboard
|
|
- ✅ Автоматичний моніторинг нод та агентів
|
|
- ✅ Background task для відстеження змін
|
|
- ✅ Автоматичні правила для виявлення змін
|
|
|
|
**Можна використовувати прямо зараз!**
|
|
|
|
---
|
|
|
|
**Last Updated:** 2025-11-22
|
|
**Status:** ✅ Готово до використання
|
|
**URL:** `http://localhost:8899`
|
|
|