Files
WellShe/docs/server_settings_debugging.md
2025-11-06 07:11:15 +09:00

16 KiB
Raw Blame History

🔧 Отладка настроек сервера WellShe

🎯 Цель

Диагностировать и исправить проблему со сбросом настроек сервера после перезапуска приложения + добавить мониторинг здоровья серверов.

📊 Проблема (РЕШЕНА )

Запросы периодически возвращались на старый сервер (http://192.168.0.112:8000) вместо нового (http://10.0.2.2:8000), что указывало на проблемы с сохранением настроек.

🎉 НОВАЯ ФУНКЦИОНАЛЬНОСТЬ: Мониторинг здоровья серверов

📡 Health Check система

Приложение теперь автоматически проверяет доступность и производительность серверов через эндпоинт /api/v1/health.

Индикаторы состояния:

  • 🟢 Отлично (< 10мс) - Зеленый индикатор
  • 🟡 Хорошо (10-200мс) - Желтый индикатор
  • 🟠 Медленно (200-600мс) - Оранжевый индикатор
  • 🔴 Очень медленно (600мс+) - Красный индикатор
  • Недоступен - Серый индикатор

Что проверяется:

  1. Доступность сервера - отвечает ли сервер на запросы
  2. Время отклика - скорость ответа (пинг)
  3. Статус здоровья - возвращает ли сервер status: "healthy" или status: "ok"

🔧 Новые компоненты

1. Модели данных (ServerHealth.kt)

data class ServerHealthResponse(
    val status: String,
    val timestamp: String? = null,
    val version: String? = null
)

data class ServerStatus(
    val url: String,
    val isHealthy: Boolean,
    val pingMs: Long,
    val status: HealthStatus,
    val error: String? = null
)

enum class HealthStatus {
    EXCELLENT, GOOD, POOR, BAD, OFFLINE
}

2. API интерфейс (HealthApi.kt)

interface HealthApi {
    @GET("api/v1/health")
    suspend fun getHealth(): Response<ServerHealthResponse>
}

3. Репозиторий (ServerHealthRepository.kt)

  • Проверка здоровья отдельных серверов
  • Массовая проверка всех серверов
  • Таймауты и обработка ошибок
  • Детальное логирование

4. UI компоненты (ServerStatusIndicator.kt)

  • ServerStatusIndicator - цветной индикатор состояния
  • ServerStatusRow - строка сервера с информацией о статусе
  • Отображение времени отклика и статуса

5. Обновленный диалог (ServerSettingsDialog.kt)

  • Кнопка обновления статуса серверов
  • 📊 Отображение статуса каждого сервера
  • ⏱️ Индикатор загрузки во время проверки
  • 📖 Легенда со значениями статусов

🔄 Как это работает

  1. При открытии диалога настроек автоматически запускается проверка всех серверов
  2. Параллельная проверка - все серверы проверяются одновременно
  3. Визуальная обратная связь - индикаторы загрузки и цветные статусы
  4. Кнопка обновления - возможность перепроверить статус вручную
  5. Таймауты - максимум 5 секунд на проверку каждого сервера

🛠️ Добавленные улучшения отладки

1. Детальное логирование в ServerPreferences

// Добавлены логи для отслеживания:
- Получения URL сервера: "Getting server URL: ..."
- Сохранения URL: "Setting server URL: ..."
- Проверки успешности: "Server URL saved successfully: ..." 
- Отладочная информация: debugSettings()

2. Отслеживание в RetrofitProvider

// Логирование создания Retrofit:
- "Getting Retrofit for serverUrl: ..."
- "Creating new Retrofit instance. Old URL: ..., New URL: ..."
- "Retrofit instance created successfully with baseUrl: ..."

3. Диагностика при запуске приложения

// В WellSheApplication.onCreate():
- Логирование настроек при старте приложения
- Отслеживание ошибок инициализации

4. Health Check логирование

// В ServerHealthRepository:
- "Checking health for server: ..."
- "Health check for ... completed in ...ms"
- "Server ... is healthy/unhealthy, ping: ...ms"
- "Health check completed for all servers"

🕵️ Инструкции по диагностике

Шаг 1: Установите обновленную версию

Соберите и установите приложение с новой функциональностью health check'а.

Шаг 2: Запустите приложение

При запуске в логах должно появиться:

WellSheApplication: WellShe Application starting...
ServerPreferences: === Debug Server Settings ===
ServerPreferences: Current server URL: [текущий URL]
ServerSettingsViewModel: ServerSettingsViewModel initialized
ServerHealthRepository: Checking health for X servers
WellSheApplication: Application started successfully

Шаг 3: Откройте диалог настроек сервера

  1. Нажмите ⚙️ на экране входа
  2. Наблюдайте автоматическую проверку серверов

Ожидаемые логи:

ServerHealthRepository: Checking health for server: http://10.0.2.2:8000
ServerHealthRepository: Health check for http://10.0.2.2:8000 completed in XXXms
ServerHealthRepository: Server http://10.0.2.2:8000 is healthy, ping: XXXms
ServerHealthRepository: Health check completed for all servers

Шаг 4: Проверьте визуальные индикаторы

  • Зеленые круги 🟢 для быстрых серверов (< 10мс)
  • Желтые круги 🟡 для нормальных серверов (10-200мс)
  • Красные круги 🔴 для медленных серверов (600мс+)
  • Серые круги для недоступных серверов

Шаг 5: Выберите сервер и сохраните

Выберите сервер с лучшим статусом и сохраните настройки.

Шаг 6: Проверьте запрос авторизации

Попробуйте войти в систему.

Ожидаемые логи:

RetrofitProvider: Getting Retrofit for serverUrl: http://10.0.2.2:8000/api/v1/
okhttp.OkHttpClient: --> POST http://10.0.2.2:8000/api/v1/auth/login

🚨 Возможные проблемы и решения

Проблема 1: Health check не работает

Симптомы:

ServerHealthRepository: Error checking health for http://...: Connection failed

Причины:

  1. Сервер не отвечает на /api/v1/health
  2. Неправильный формат ответа
  3. Сетевые проблемы

Решение:

  1. Проверить доступность эндпоинта в браузере
  2. Убедиться что сервер возвращает JSON с полем status
  3. Проверить сетевое подключение

Проблема 2: Все серверы показывают "Недоступен"

Симптомы: Все индикаторы серые

Причины:

  1. Проблемы с сетью
  2. Блокировка запросов firewall'ом
  3. Неправильные URL серверов

Решение:

  1. Проверить подключение к интернету
  2. Проверить настройки сети эмулятора
  3. Убедиться что URL серверов корректны

Проблема 3: Медленная проверка

Симптомы: Долгая проверка (> 5 секунд)

Причины:

  1. Медленная сеть
  2. Перегруженные серверы
  3. Таймауты

Решение:

  1. Увеличить таймауты в ServerHealthRepository
  2. Проверить производительность сети
  3. Использовать более быстрые серверы

🔍 Теги логов для поиска

Фильтруйте логи по следующим тегам:

  • ServerPreferences - операции с настройками
  • RetrofitProvider - создание/обновление Retrofit
  • WellSheApplication - инициализация приложения
  • ServerSettingsViewModel - состояние диалога настроек
  • ServerHealthRepository - проверка здоровья серверов

📱 Команды ADB для отладки

# Очистить данные приложения
adb shell pm clear kr.smartsoltech.wellshe

# Посмотреть логи health check'а
adb logcat | grep -E "(ServerHealth|HealthApi)"

# Посмотреть все настройки сервера
adb logcat | grep -E "(ServerPreferences|RetrofitProvider|ServerSettingsViewModel)"

# Экспорт логов в файл
adb logcat -d | grep -E "(ServerHealth|ServerPreferences)" > server_health_debug.log

🎯 Ожидаемый результат

После внедрения новой системы должно работать:

  1. Автоматическая проверка здоровья серверов
  2. Визуальные индикаторы состояния
  3. Информация о времени отклика
  4. Возможность выбора лучшего сервера
  5. Настройки сохраняются корректно
  6. После перезапуска загружается правильный URL
  7. Retrofit создается с новым baseUrl
  8. HTTP запросы идут на правильный сервер
  9. Нет сброса настроек между сессиями

🌟 Дополнительные возможности

Будущие улучшения:

  1. Периодическая проверка - автоматическое обновление статуса каждые N минут
  2. Уведомления - предупреждения о недоступности текущего сервера
  3. Автопереключение - автоматический выбор лучшего доступного сервера
  4. История статусов - отслеживание изменений состояния серверов
  5. Региональные серверы - группировка серверов по географическому признаку

📞 Обратная связь

Если проблема сохраняется, предоставьте:

  1. Полные логи с перечисленными тегами
  2. Шаги воспроизведения
  3. Версию Android и тип устройства (эмулятор/физическое)
  4. Скриншоты диалога настроек с индикаторами статуса
// В WellSheApplication.onCreate():
- Логирование настроек при старте приложения
- Отслеживание ошибок инициализации

4. Улучшенные Toast сообщения

// Теперь показывает:
"✅ Сервер изменён!
Старый: http://192.168.0.112:8000
Новый: http://10.0.2.2:8000"

🕵️ Инструкции по диагностике

Шаг 1: Установите обновленную версию

Соберите и установите приложение с новым логированием.

Шаг 2: Запустите приложение

При запуске в логах должно появиться:

WellSheApplication: WellShe Application starting...
ServerPreferences: === Debug Server Settings ===
ServerPreferences: Current server URL: [текущий URL]
WellSheApplication: Application started successfully

Шаг 3: Смените сервер

  1. Нажмите ⚙️ на экране входа
  2. Выберите новый сервер
  3. Нажмите "Сохранить"

Ожидаемые логи:

ServerPreferences: Setting server URL: http://10.0.2.2:8000
ServerPreferences: Server URL saved successfully: http://10.0.2.2:8000
ServerPreferences: Verification - saved URL: http://10.0.2.2:8000

Шаг 4: Проверьте запрос авторизации

Попробуйте войти в систему.

Ожидаемые логи:

RetrofitProvider: Getting Retrofit for serverUrl: http://10.0.2.2:8000/api/v1/
okhttp.OkHttpClient: --> POST http://10.0.2.2:8000/api/v1/auth/login

Шаг 5: Перезапустите приложение

Закройте и снова откройте приложение.

Критическая проверка:

ServerPreferences: Getting server URL: http://10.0.2.2:8000
(НЕ http://192.168.0.112:8000!)

🚨 Возможные проблемы и решения

Проблема 1: Настройки не сохраняются

Симптомы:

ServerPreferences: Setting server URL: http://10.0.2.2:8000
ServerPreferences: Failed to save server URL: http://10.0.2.2:8000

Решение: Проверить права доступа к SharedPreferences

Проблема 2: Загружается старый URL

Симптомы:

ServerPreferences: Getting server URL: http://192.168.0.112:8000
ServerPreferences: Verification - saved URL: http://10.0.2.2:8000

Решение: Конфликт значений по умолчанию, нужно изменить DEFAULT_SERVER_URL

Проблема 3: Retrofit не обновляется

Симптомы:

RetrofitProvider: Reusing existing Retrofit instance with baseUrl: http://192.168.0.112:8000

Решение: Не вызывается recreateRetrofit() после смены настроек

🔍 Теги логов для поиска

Фильтруйте логи по следующим тегам:

  • ServerPreferences - операции с настройками
  • RetrofitProvider - создание/обновление Retrofit
  • WellSheApplication - инициализация приложения
  • ServerSettingsViewModel - состояние диалога настроек

📱 Команды ADB для отладки

# Очистить данные приложения
adb shell pm clear kr.smartsoltech.wellshe

# Посмотреть логи в реальном времени
adb logcat | grep -E "(ServerPreferences|RetrofitProvider|WellSheApplication)"

# Экспорт логов в файл
adb logcat -d | grep -E "(ServerPreferences|RetrofitProvider)" > server_debug.log

🎯 Ожидаемый результат

После исправления должно работать:

  1. Настройки сохраняются корректно
  2. После перезапуска загружается правильный URL
  3. Retrofit создается с новым baseUrl
  4. HTTP запросы идут на правильный сервер
  5. Нет сброса настроек между сессиями

📞 Обратная связь

Если проблема сохраняется, предоставьте:

  1. Полные логи с перечисленными тегами
  2. Шаги воспроизведения
  3. Версию Android и тип устройства (эмулятор/физическое)