16 KiB
🔧 Отладка настроек сервера WellShe
🎯 Цель
Диагностировать и исправить проблему со сбросом настроек сервера после перезапуска приложения + добавить мониторинг здоровья серверов.
📊 Проблема (РЕШЕНА ✅)
Запросы периодически возвращались на старый сервер (http://192.168.0.112:8000) вместо нового (http://10.0.2.2:8000), что указывало на проблемы с сохранением настроек.
🎉 НОВАЯ ФУНКЦИОНАЛЬНОСТЬ: Мониторинг здоровья серверов
📡 Health Check система
Приложение теперь автоматически проверяет доступность и производительность серверов через эндпоинт /api/v1/health.
Индикаторы состояния:
- 🟢 Отлично (< 10мс) - Зеленый индикатор
- 🟡 Хорошо (10-200мс) - Желтый индикатор
- 🟠 Медленно (200-600мс) - Оранжевый индикатор
- 🔴 Очень медленно (600мс+) - Красный индикатор
- ⚫ Недоступен - Серый индикатор
Что проверяется:
- Доступность сервера - отвечает ли сервер на запросы
- Время отклика - скорость ответа (пинг)
- Статус здоровья - возвращает ли сервер
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)
- ➕ Кнопка обновления статуса серверов
- 📊 Отображение статуса каждого сервера
- ⏱️ Индикатор загрузки во время проверки
- 📖 Легенда со значениями статусов
🔄 Как это работает
- При открытии диалога настроек автоматически запускается проверка всех серверов
- Параллельная проверка - все серверы проверяются одновременно
- Визуальная обратная связь - индикаторы загрузки и цветные статусы
- Кнопка обновления - возможность перепроверить статус вручную
- Таймауты - максимум 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: Откройте диалог настроек сервера
- Нажмите ⚙️ на экране входа
- Наблюдайте автоматическую проверку серверов
Ожидаемые логи:
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
Причины:
- Сервер не отвечает на
/api/v1/health - Неправильный формат ответа
- Сетевые проблемы
Решение:
- Проверить доступность эндпоинта в браузере
- Убедиться что сервер возвращает JSON с полем
status - Проверить сетевое подключение
Проблема 2: Все серверы показывают "Недоступен"
Симптомы: Все индикаторы серые ⚫
Причины:
- Проблемы с сетью
- Блокировка запросов firewall'ом
- Неправильные URL серверов
Решение:
- Проверить подключение к интернету
- Проверить настройки сети эмулятора
- Убедиться что URL серверов корректны
Проблема 3: Медленная проверка
Симптомы: Долгая проверка (> 5 секунд)
Причины:
- Медленная сеть
- Перегруженные серверы
- Таймауты
Решение:
- Увеличить таймауты в
ServerHealthRepository - Проверить производительность сети
- Использовать более быстрые серверы
🔍 Теги логов для поиска
Фильтруйте логи по следующим тегам:
ServerPreferences- операции с настройкамиRetrofitProvider- создание/обновление RetrofitWellSheApplication- инициализация приложения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
🎯 Ожидаемый результат
После внедрения новой системы должно работать:
- ✅ Автоматическая проверка здоровья серверов
- ✅ Визуальные индикаторы состояния
- ✅ Информация о времени отклика
- ✅ Возможность выбора лучшего сервера
- ✅ Настройки сохраняются корректно
- ✅ После перезапуска загружается правильный URL
- ✅ Retrofit создается с новым baseUrl
- ✅ HTTP запросы идут на правильный сервер
- ✅ Нет сброса настроек между сессиями
🌟 Дополнительные возможности
Будущие улучшения:
- Периодическая проверка - автоматическое обновление статуса каждые N минут
- Уведомления - предупреждения о недоступности текущего сервера
- Автопереключение - автоматический выбор лучшего доступного сервера
- История статусов - отслеживание изменений состояния серверов
- Региональные серверы - группировка серверов по географическому признаку
📞 Обратная связь
Если проблема сохраняется, предоставьте:
- Полные логи с перечисленными тегами
- Шаги воспроизведения
- Версию Android и тип устройства (эмулятор/физическое)
- Скриншоты диалога настроек с индикаторами статуса
// В 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: Смените сервер
- Нажмите ⚙️ на экране входа
- Выберите новый сервер
- Нажмите "Сохранить"
Ожидаемые логи:
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- создание/обновление RetrofitWellSheApplication- инициализация приложения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
🎯 Ожидаемый результат
После исправления должно работать:
- ✅ Настройки сохраняются корректно
- ✅ После перезапуска загружается правильный URL
- ✅ Retrofit создается с новым baseUrl
- ✅ HTTP запросы идут на правильный сервер
- ✅ Нет сброса настроек между сессиями
📞 Обратная связь
Если проблема сохраняется, предоставьте:
- Полные логи с перечисленными тегами
- Шаги воспроизведения
- Версию Android и тип устройства (эмулятор/физическое)