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

392 lines
16 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 🔧 Отладка настроек сервера 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 и тип устройства (эмулятор/физическое)