You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
> **telemetry-api**- сервис для сбора, хранения и аналитики телеметрии с устройств с функционалом фоновых вычислений и привязкой к пользователям. Сервис реализован на Python и представляет собой REST Api, написанную с использованием фреймворка FastAPI. Хранение данных в PostgreSQL, фоновые вычисления при помощи Celery, кэширование и backend для фоновых вычислений — Redis.
4
+
**telemetry-api**— асинхронный REST API сервис для сбора, хранения и анализа телеметрии с устройств. Включает в себя механизмы фоновых вычислений, кэширования, валидацию данных и систему управления пользователями.
5
5
6
-
#### [Техническое задание](task.md)
6
+
*#### [Техническое задание](task.md)
7
+
8
+
Основная логика разделена на два сценария. Синхронный эндпоинт используется для быстрой обработки небольших данных. Для тяжелых аналитик реализован запуск фоновой задачи через **Celery + Redis**, что позволяет не блокировать основной пул потоков HTTP-запросов. Результаты задач кэшируются с пагинацией.
7
9
8
10
## Структура проекта:
9
-
```
11
+
```text
10
12
.
11
-
├── .github # CI/CD для удалённого тестирования
12
-
│ └── workflows
13
-
│ └── ci.yml
13
+
├── .github # CI/CD для автоматического тестирования
14
+
│ └── workflows
15
+
│ └── ci.yml
14
16
├── telemetry_api
15
-
│├── api/v1 # Основные роутеры
16
-
│ │ ├── __init__.py # Инициализация FastAPI и подключение роутеров
17
-
│ │ ├── analytics.py
18
-
│ │ ├── devices.py
19
-
│ │ └── users.py
20
-
│├── database # Инициализация БД исходя из режима
21
-
│ │ ├── database.py
22
-
│ │ └── models.py # Модели БД
23
-
│├── schemas # Pydanticмодели для сериализации и десериализации входных и выходных данных
24
-
│ │ ├── analytics.py
25
-
│ │ ├── devices.py
26
-
│ │ └── users.py
27
-
│ ├── worker
28
-
││ ├── celery_app.py # Конфигурация Celery
29
-
│ │ └── tasks
30
-
││ └── device_analytics.py # Такси для фоновых вычислений аналитики
31
-
│├── config.py # Конфиг, основанный на переменных окружения
32
-
│└── main.py # Инициализация БД, моделей и запуск сервиса
33
-
├── tests # Тестирование основных роутеров и эндпоинтов
34
-
│ ├── conftest.py # Настройка и инициализация фикстур
17
+
│├── api/v1 # Основные роутеры 1-й версии API
18
+
│ │ ├── __init__.py # Инициализация приложения и подключение роутеров
*`GET`: `/api/v1/users/` — Получение списка пользователей с пагинацией
61
-
<br>
62
67
63
-
*`POST`: `/api/v1/devices/` — Создание нового устройства (с возможностью привязки к пользователю)
68
+
### Устройства (`Devices`)
69
+
70
+
*`POST`: `/api/v1/devices/` — Создание нового устройства (с возможностью привязки к `user_id`)
64
71
*`GET`: `/api/v1/devices/{device_id}` — Получение устройства по id
65
72
*`PATCH`: `/api/v1/devices/{device_id}` — Частичное обновление данных устройства (включая смену владельца)
66
73
*`DELETE`: `/api/v1/devices/{device_id}` — Удаление устройства
67
74
*`GET`: `/api/v1/devices/` — Получение списка устройств с пагинацией
68
-
<br>
75
+
76
+
### Аналитика (`Analytics`)
69
77
70
78
*`POST`: `/api/v1/analytics/{device_id}/data` — Добавление одного измерения для конкретного устройства
71
-
*`GET`: `/api/v1/analytics/` — Получение агрегированной аналитики по устройству или пользователю (с возможностью фильтрации по времени и пагинацией)
72
-
*`POST`: `/api/v1/analytics/generate` — Запуск фоновой задачи через Celery для генерации аналитики асинхронно
73
-
*`GET`: `/api/v1/analytics/tasks/{task_id}` — Получение статуса или готового (пагинированного) результата фоновой задачи генерации аналитики
74
-
<br>
79
+
*`GET`: `/api/v1/analytics/` — Получение агрегированной аналитики (min, max, count, sum, median) по устройству или пользователю (с фильтрацией по времени и пагинацией)
80
+
*`POST`: `/api/v1/analytics/generate` — Запуск фоновой задачи через Celery для асинхронной генерации аналитики
81
+
*`GET`: `/api/v1/analytics/tasks/{task_id}` — Получение статуса или готового результата (с пагинацией) фоновой задачи
75
82
76
-
*`GET`: `/docs/` — Подробная документация с описанием нетривиальных функций и примерами данных
83
+
## Требования
77
84
78
-
## Требования:
79
85
* Python 3.13.11+
80
86
* Poetry
81
87
* Docker & Docker Compose
82
88
* PostgreSQL
83
89
* Redis
84
90
* Celery
85
91
86
-
## Использование:
87
-
Необходимо указать переменные окружения в `.env`[*(Шаблон)*](.env.example):
92
+
## Развертывание и использование
93
+
94
+
1. Склонируйте репозиторий и укажите переменные окружения в файле `.env` на основе шаблона *[(.env.example)](https://www.google.com/search?q=.env.example)*:
95
+
88
96
```env
89
97
# Common
90
-
DEBUG=True # Режим отладки. Используется SQLite
91
-
HOST=0.0.0.0
98
+
DEBUG=True # Режим отладки (Используется in-memory SQLite)
99
+
HOST=0.0.0.0
92
100
PORT=8000
93
-
CELERY_RESULT_EXPIRES=43200 # Таймаут, после которого удаляется результат выполнения таски Celery
101
+
CELERY_RESULT_EXPIRES=43200 # Время жизни результатов тасок Celery в Redis (в секундах)
0 commit comments