All checks were successful
continuous-integration/drone/push Build is passing
Changes: - Fix nutrition service: add is_active column and Pydantic validation for UUID/datetime - Add location-based alerts feature: users can now see alerts within 1km radius - Fix CORS and response serialization in nutrition service - Add getCurrentLocation() and loadAlertsNearby() functions - Improve UI for nearby alerts display with distance and response count
217 lines
5.4 KiB
Markdown
217 lines
5.4 KiB
Markdown
# 🚀 WebSocket SOS - Быстрый Старт
|
||
|
||
## ⚡ Самый быстрый способ протестировать
|
||
|
||
### 1️⃣ Запустить сервисы (если еще не запущены)
|
||
```bash
|
||
cd /home/trevor/dev/chat
|
||
|
||
# Терминал 1
|
||
python -m services.user_service.main
|
||
|
||
# Терминал 2
|
||
python -m services.emergency_service.main
|
||
```
|
||
|
||
### 2️⃣ Запустить тест (занимает ~20 секунд)
|
||
```bash
|
||
python test_ws_quick.py
|
||
```
|
||
|
||
### ✅ Результат
|
||
```
|
||
✅ Token obtained
|
||
✅ WebSocket connected
|
||
✅ Ping/pong working
|
||
✅ WebSocket connection test completed successfully!
|
||
```
|
||
|
||
---
|
||
|
||
## 📝 Тестовые учетные данные
|
||
|
||
| Параметр | Значение |
|
||
|----------|----------|
|
||
| Email | wstester@test.com |
|
||
| Password | WsTest1234! |
|
||
| User ID | 51 |
|
||
|
||
---
|
||
|
||
## 🔗 WebSocket URL
|
||
|
||
```
|
||
ws://localhost:8002/api/v1/emergency/ws/51?token={JWT_TOKEN}
|
||
```
|
||
|
||
### Как получить JWT_TOKEN
|
||
```bash
|
||
curl -X POST http://localhost:8001/api/v1/auth/login \
|
||
-H "Content-Type: application/json" \
|
||
-d '{"email":"wstester@test.com","password":"WsTest1234!"}'
|
||
```
|
||
|
||
Скопируйте значение `access_token` из ответа.
|
||
|
||
---
|
||
|
||
## 💬 Примеры сообщений
|
||
|
||
### Подключение (отправляется сервером)
|
||
```json
|
||
{
|
||
"type": "connection_established",
|
||
"message": "WebSocket connection established successfully",
|
||
"user_id": 51,
|
||
"timestamp": "2025-12-13T14:15:14.982894"
|
||
}
|
||
```
|
||
|
||
### Ping (отправьте клиент)
|
||
```json
|
||
{"type": "ping"}
|
||
```
|
||
|
||
### Pong (ответ сервера)
|
||
```json
|
||
{"type": "pong"}
|
||
```
|
||
|
||
### SOS Alert (отправляется сервером при создании оповещения)
|
||
```json
|
||
{
|
||
"type": "emergency_alert",
|
||
"alert_id": 123,
|
||
"alert_type": "SOS",
|
||
"latitude": 55.7558,
|
||
"longitude": 37.6173,
|
||
"address": "Location (55.7558, 37.6173)",
|
||
"message": "Экстренная ситуация!",
|
||
"created_at": "2025-12-13T14:15:20.123456",
|
||
"distance_km": 0.5
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 🔧 Тестовые скрипты
|
||
|
||
### test_ws_quick.py - Базовый тест
|
||
```bash
|
||
python test_ws_quick.py
|
||
```
|
||
**Что проверяет:**
|
||
- ✅ Получение JWT токена
|
||
- ✅ Подключение WebSocket
|
||
- ✅ Ping/Pong
|
||
- ✅ Слушание сообщений (30 сек)
|
||
|
||
**Время:** ~30 секунд
|
||
|
||
---
|
||
|
||
### register_test_user.py - Создание пользователя
|
||
```bash
|
||
python register_test_user.py
|
||
```
|
||
**Что делает:**
|
||
- ✅ Регистрирует нового тестового пользователя
|
||
- ✅ Получает JWT токен
|
||
- ✅ Выводит готовый WebSocket URL
|
||
|
||
---
|
||
|
||
### test_ws_full.py - Полное тестирование
|
||
```bash
|
||
python test_ws_full.py
|
||
```
|
||
**Что проверяет:**
|
||
- ✅ Аутентификация
|
||
- ✅ WebSocket подключение
|
||
- ✅ Создание SOS оповещения
|
||
- ✅ Получение уведомления
|
||
- ✅ Множественные клиенты
|
||
|
||
**Время:** ~1-2 минуты
|
||
|
||
---
|
||
|
||
## 🎯 Статус работоспособности
|
||
|
||
| Функция | Статус |
|
||
|---------|--------|
|
||
| WebSocket подключение | ✅ OK |
|
||
| Аутентификация | ✅ OK |
|
||
| Ping/Pong | ✅ OK |
|
||
| Создание SOS | ✅ OK |
|
||
| Получение уведомлений | ✅ OK |
|
||
| Broadcast | ✅ OK |
|
||
|
||
---
|
||
|
||
## 📊 Посмотреть статистику
|
||
|
||
### Все активные соединения
|
||
```bash
|
||
curl -H "Authorization: Bearer YOUR_JWT_TOKEN" \
|
||
http://localhost:8002/api/v1/websocket/stats
|
||
```
|
||
|
||
### Детальная информация
|
||
```bash
|
||
curl -H "Authorization: Bearer YOUR_JWT_TOKEN" \
|
||
http://localhost:8002/api/v1/websocket/connections
|
||
```
|
||
|
||
### Пинг всех подключений
|
||
```bash
|
||
curl -X POST -H "Authorization: Bearer YOUR_JWT_TOKEN" \
|
||
http://localhost:8002/api/v1/websocket/ping
|
||
```
|
||
|
||
---
|
||
|
||
## 🐛 Решение проблем
|
||
|
||
### Проблема: WebSocket не подключается
|
||
```
|
||
Решение:
|
||
1. Проверьте JWT токен (не истек ли)
|
||
2. Убедитесь в правильности user_id
|
||
3. Проверьте что Emergency Service запущена на 8002
|
||
```
|
||
|
||
### Проблема: Плохое соединение
|
||
```
|
||
Решение:
|
||
1. Проверьте интернет (локальное тестирование)
|
||
2. Посмотрите логи сервиса
|
||
3. Попробуйте переподключиться
|
||
```
|
||
|
||
### Проблема: Нет уведомлений о SOS
|
||
```
|
||
Решение:
|
||
1. Убедитесь что Location Service запущена
|
||
2. Проверьте что пользователи находятся в радиусе 1-2 км
|
||
3. Убедитесь что пользователи подключены к WebSocket
|
||
```
|
||
|
||
---
|
||
|
||
## 📚 Дополнительная информация
|
||
|
||
### Подробные отчеты:
|
||
- [WS_SOS_FINAL_REPORT.md](./docs/WS_SOS_FINAL_REPORT.md) - Полный технический отчет
|
||
- [WS_SOS_TEST_REPORT.md](./docs/WS_SOS_TEST_REPORT.md) - Результаты тестирования
|
||
|
||
### Исходный код:
|
||
- `/home/trevor/dev/chat/services/emergency_service/main.py` - WebSocket сервис
|
||
- Класс `WebSocketManager` (строка ~96)
|
||
- Endpoint `websocket_endpoint()` (строка ~393)
|
||
|
||
---
|
||
|
||
**Последнее обновление:** 13 декабря 2025
|
||
**Статус:** ✅ Все работает!
|