server selection
This commit is contained in:
391
docs/server_settings_debugging.md
Normal file
391
docs/server_settings_debugging.md
Normal file
@@ -0,0 +1,391 @@
|
||||
# 🔧 Отладка настроек сервера 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<ServerHealthResponse>
|
||||
}
|
||||
```
|
||||
|
||||
#### 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 и тип устройства (эмулятор/физическое)
|
||||
Reference in New Issue
Block a user