# 🔧 Отладка настроек сервера 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`) ```kotlin 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`) ```kotlin interface HealthApi { @GET("api/v1/health") suspend fun getHealth(): Response } ``` #### 3. Репозиторий (`ServerHealthRepository.kt`) - Проверка здоровья отдельных серверов - Массовая проверка всех серверов - Таймауты и обработка ошибок - Детальное логирование #### 4. UI компоненты (`ServerStatusIndicator.kt`) - `ServerStatusIndicator` - цветной индикатор состояния - `ServerStatusRow` - строка сервера с информацией о статусе - Отображение времени отклика и статуса #### 5. Обновленный диалог (`ServerSettingsDialog.kt`) - ➕ Кнопка обновления статуса серверов - 📊 Отображение статуса каждого сервера - ⏱️ Индикатор загрузки во время проверки - 📖 Легенда со значениями статусов ### 🔄 Как это работает 1. **При открытии диалога** настроек автоматически запускается проверка всех серверов 2. **Параллельная проверка** - все серверы проверяются одновременно 3. **Визуальная обратная связь** - индикаторы загрузки и цветные статусы 4. **Кнопка обновления** - возможность перепроверить статус вручную 5. **Таймауты** - максимум 5 секунд на проверку каждого сервера ## 🛠️ Добавленные улучшения отладки ### 1. Детальное логирование в ServerPreferences ```kotlin // Добавлены логи для отслеживания: - Получения URL сервера: "Getting server URL: ..." - Сохранения URL: "Setting server URL: ..." - Проверки успешности: "Server URL saved successfully: ..." - Отладочная информация: debugSettings() ``` ### 2. Отслеживание в RetrofitProvider ```kotlin // Логирование создания Retrofit: - "Getting Retrofit for serverUrl: ..." - "Creating new Retrofit instance. Old URL: ..., New URL: ..." - "Retrofit instance created successfully with baseUrl: ..." ``` ### 3. Диагностика при запуске приложения ```kotlin // В WellSheApplication.onCreate(): - Логирование настроек при старте приложения - Отслеживание ошибок инициализации ``` ### 4. Health Check логирование ```kotlin // В 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 для отладки ```bash # Очистить данные приложения 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. Скриншоты диалога настроек с индикаторами статуса ```kotlin // В WellSheApplication.onCreate(): - Логирование настроек при старте приложения - Отслеживание ошибок инициализации ``` ### 4. Улучшенные Toast сообщения ```kotlin // Теперь показывает: "✅ Сервер изменён! Старый: 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 для отладки ```bash # Очистить данные приложения 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 и тип устройства (эмулятор/физическое)