Files
microdao-daarion/SWAPPER-SERVICE-404-FIX.md
Apple 744c149300
Some checks failed
Build and Deploy Docs / build-and-deploy (push) Has been cancelled
Add automated session logging system
- Created logs/ structure (sessions, operations, incidents)
- Added session-start/log/end scripts
- Installed Git hooks for auto-logging commits/pushes
- Added shell integration for zsh
- Created CHANGELOG.md
- Documented today's session (2026-01-10)
2026-01-10 04:53:17 -08:00

5.9 KiB
Raw Permalink Blame History

Виправлення помилки 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

Логіка:

  1. Спочатку пробуємо /api/cabinet/swapper/status (cabinet API)
  2. Якщо не працює → використовуємо /status (базовий endpoint)
  3. Конвертуємо базовий статус у формат 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)

Логіка:

  1. Пробуємо /api/cabinet/swapper/metrics/summary
  2. Якщо не працює → отримуємо /status та створюємо базові метрики

📊 Доступні endpoints

Базові endpoints (завжди доступні):

  • GET /health - Health check
  • GET /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

  1. Спроба cabinet API:

    GET http://144.76.224.179:8890/api/cabinet/swapper/status
    
  2. Якщо 404 або помилка:

    GET http://144.76.224.179:8890/status
    
  3. Конвертація даних:

    • Базовий статус конвертується у формат cabinet API
    • Відображається в UI як звичайний статус

📝 Примітки

  • Fallback працює автоматично
  • Якщо базові endpoints також не працюють - це означає, що Swapper Service не запущений
  • Cabinet API може бути недоступний через помилку в коді або непідключений router
  • Frontend тепер працює з обома варіантами

Виправлено: 2025-11-23
Статус: Готово до використання