5.9 KiB
5.9 KiB
✅ Виправлення помилки 404 для Swapper Service
Дата: 2025-11-23
Проблема: Swapper Service повертає 404 для /api/cabinet/swapper/status
Статус: ✅ Виправлено з fallback на базові endpoints
🐛 Проблема
Симптоми:
- Swapper Service показує помилку 404 Not Found
- URL:
http://144.76.224.179:8890/api/cabinet/swapper/status - Метрики також недоступні
Причина:
- Cabinet API endpoint може не бути доступний (router не підключений або помилка)
- Swapper Service може не бути запущений
- Проблеми з мережею або файрволом
✅ Рішення
1. Додано fallback на базові endpoints
Файл: src/components/swapper/SwapperComponents.tsx
Логіка:
- Спочатку пробуємо
/api/cabinet/swapper/status(cabinet API) - Якщо не працює → використовуємо
/status(базовий endpoint) - Конвертуємо базовий статус у формат cabinet API
Код:
// Спробуємо cabinet API
try {
response = await fetch(`${swapperUrl}/api/cabinet/swapper/status`);
if (response.ok) {
data = await response.json();
setStatus(data);
return;
}
} catch (cabinetError) {
console.warn('Cabinet API not available, trying basic endpoint');
}
// Fallback на базовий endpoint
response = await fetch(`${swapperUrl}/status`);
const basicStatus = await response.json();
// Конвертуємо у формат cabinet API
data = {
service: 'swapper-service',
status: 'healthy',
mode: basicStatus.mode || 'single-active',
active_model: basicStatus.active_model ? {
name: basicStatus.active_model,
uptime_hours: 0,
request_count: 0,
} : null,
// ...
};
2. Покращено обробку помилок
Зміни:
- ✅ Збільшено таймаут до 10 секунд
- ✅ Додано перевірку health endpoint
- ✅ Детальні повідомлення про помилки
- ✅ Інструкції для діагностики
3. Fallback для метрик
Файл: src/components/swapper/SwapperComponents.tsx (SwapperMetricsSummary)
Логіка:
- Пробуємо
/api/cabinet/swapper/metrics/summary - Якщо не працює → отримуємо
/statusта створюємо базові метрики
📊 Доступні endpoints
Базові endpoints (завжди доступні):
GET /health- Health checkGET /status- Базовий статусGET /models- Список моделейGET /metrics- Метрики
Cabinet API endpoints (можуть бути недоступні):
GET /api/cabinet/swapper/status- Детальний статус для кабінетівGET /api/cabinet/swapper/models- Детальна інформація про моделіGET /api/cabinet/swapper/metrics/summary- Підсумкові метрики
🔍 Перевірка на сервері
1. Перевірити чи запущений Swapper Service
ssh root@144.76.224.179 "docker ps | grep swapper"
Очікуваний результат:
CONTAINER ID IMAGE STATUS PORTS NAMES
abc123def456 swapper-service:latest Up 2 hours 0.0.0.0:8890->8890/tcp swapper-service
2. Перевірити базові endpoints
# Health check
ssh root@144.76.224.179 "curl http://localhost:8890/health"
# Status
ssh root@144.76.224.179 "curl http://localhost:8890/status"
Очікуваний результат:
{
"status": "healthy",
"service": "swapper-service",
"active_model": null,
"mode": "single-active"
}
3. Перевірити cabinet API
ssh root@144.76.224.179 "curl http://localhost:8890/api/cabinet/swapper/status"
Можливі результати:
- ✅ 200 OK - Cabinet API працює
- ❌ 404 Not Found - Cabinet API не підключений (використовується fallback)
4. Якщо Swapper Service не запущений
ssh root@144.76.224.179 "cd /opt/microdao-daarion && docker-compose up -d swapper-service"
✅ Результат
До виправлення:
- ❌ Помилка 404 при спробі отримати статус
- ❌ Немає fallback на базові endpoints
- ❌ Неможливо отримати інформацію про Swapper Service
Після виправлення:
- ✅ Автоматичний fallback на базові endpoints
- ✅ Працює навіть якщо cabinet API недоступний
- ✅ Детальні повідомлення про помилки
- ✅ Інструкції для діагностики
🎯 Як працює fallback
-
Спроба cabinet API:
GET http://144.76.224.179:8890/api/cabinet/swapper/status -
Якщо 404 або помилка:
GET http://144.76.224.179:8890/status -
Конвертація даних:
- Базовий статус конвертується у формат cabinet API
- Відображається в UI як звичайний статус
📝 Примітки
- Fallback працює автоматично
- Якщо базові endpoints також не працюють - це означає, що Swapper Service не запущений
- Cabinet API може бути недоступний через помилку в коді або непідключений router
- Frontend тепер працює з обома варіантами
Виправлено: 2025-11-23
Статус: ✅ Готово до використання