Skip to content

Commit 89b7471

Browse files
authored
feat: improve docs
1 parent 4c235e1 commit 89b7471

1 file changed

Lines changed: 63 additions & 54 deletions

File tree

README.md

Lines changed: 63 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,96 +1,104 @@
11
# telemetry-api
22
![Python](https://img.shields.io/badge/Python-ffffff?logo=python&style=for-the-badge&color=ffffff&logoColor=3776AB) ![FastAPI](https://img.shields.io/badge/FastAPI-ffffff?logo=fastapi&style=for-the-badge&color=ffffff&logoColor=009688) ![PostgreSQL](https://img.shields.io/badge/PostgreSQL-ffffff?logo=postgresql&style=for-the-badge&color=ffffff&logoColor=4169E1) ![Redis](https://img.shields.io/badge/Redis-ffffff?logo=redis&style=for-the-badge&color=ffffff&logoColor=DC382D) ![Celery](https://img.shields.io/badge/Celery-ffffff?logo=celery&style=for-the-badge&color=ffffff&logoColor=37814A) ![Locust](https://img.shields.io/badge/Locust-ffffff?style=for-the-badge&color=ffffff) ![Docker](https://img.shields.io/badge/Docker-ffffff?logo=docker&style=for-the-badge&color=ffffff&logoColor=2496ED)
33

4-
> **telemetry-api** - сервис для сбора, хранения и аналитики телеметрии с устройств с функционалом фоновых вычислений и привязкой к пользователям. Сервис реализован на Python и представляет собой REST Api, написанную с использованием фреймворка FastAPI. Хранение данных в PostgreSQL, фоновые вычисления при помощи Celery, кэширование и backend для фоновых вычислений — Redis.
4+
**telemetry-api** — асинхронный REST API сервис для сбора, хранения и анализа телеметрии с устройств. Включает в себя механизмы фоновых вычислений, кэширования, валидацию данных и систему управления пользователями.
55

6-
#### [Техническое задание](task.md)
6+
* #### [Техническое задание](task.md)
7+
8+
Основная логика разделена на два сценария. Синхронный эндпоинт используется для быстрой обработки небольших данных. Для тяжелых аналитик реализован запуск фоновой задачи через **Celery + Redis**, что позволяет не блокировать основной пул потоков HTTP-запросов. Результаты задач кэшируются с пагинацией.
79

810
## Структура проекта:
9-
```
11+
```text
1012
.
11-
├── .github # CI/CD для удалённого тестирования
12-
   └── workflows
13-
   └── ci.yml
13+
├── .github # CI/CD для автоматического тестирования
14+
└── workflows
15+
└── ci.yml
1416
├── 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 # Инициализация приложения и подключение роутеров
19+
├── analytics.py
20+
├── devices.py
21+
└── users.py
22+
├── database # Конфигурация подключения к БД
23+
├── database.py
24+
└── models.py # ORM-модели SQLAlchemy
25+
├── schemas # Pydantic-модели (валидация, сериализация/десериализация)
26+
├── analytics.py
27+
├── devices.py
28+
└── users.py
29+
├── worker
30+
│ ├── celery_app.py # Конфигурация брокера и бэкенда Celery
31+
│ └── tasks
32+
│ └── device_analytics.py # Таски для фоновых вычислений аналитики
33+
├── config.py # Валидация переменных окружения (pydantic-settings)
34+
└── main.py # Точка входа
35+
├── tests # Интеграционные и юнит-тесты (Pytest)
36+
│ ├── conftest.py # Асинхронные фикстуры и настройка тестовой БД
3537
│ ├── test_analytics.py
3638
│ ├── test_devices.py
3739
│ └── test_users.py
38-
├── docker-compose.yml # Развёртывания БД, Redis, Celery-worker и сервиса
40+
├── locustfile.py # Сценарии нагрузочного тестирования (Locust)
41+
├── pyproject.toml # Конфигурация проекта (Poetry)
42+
├── poetry.lock
43+
├── .env.example # Шаблон переменных окружения
3944
├── Dockerfile
40-
├── .env.example # Шаблонный файл переменных окружения
45+
├── docker-compose.yml # Оркестрация (API, PostgreSQL, Redis, Celery-worker)
46+
├── pytest.ini # Конфигурация тестирования
47+
├── setup.cfg # Конфигурация шаблонного проекта
4148
├── .gitignore
42-
├── locustfile.py # Реализация нагрузочного тестирования через locust
43-
├── poetry.lock
4449
├── .pre-commit-config.yaml
45-
├── pyproject.toml # Настройка проекта и библиотек
46-
├── pytest.ini
4750
├── README.md # Описание проекта
48-
├── setup.cfg
49-
└── task.md # Техническое задание
51+
└── task.md # Техническое задание
5052
```
5153

52-
## Endpoints:
53-
Базовый префикс API: `/api`
54-
Текущая версия: `/v1`
54+
## Endpoints
55+
56+
> *Полная спецификация, схемы и примеры данных доступны локально по адресу:* `http://localhost:{PORT}/docs` *(Swagger UI).*
57+
58+
Базовый префикс API: `/api` ; Текущая версия: `/v1`
59+
60+
### Пользователи (`Users`)
5561

5662
* `POST`: `/api/v1/users/` — Создание нового пользователя
5763
* `GET`: `/api/v1/users/{user_id}` — Получение пользователя по id
58-
* `PATCH`: `/api/v1/users/{user_id}` — Частичное обновление данных пользователя
64+
* `PATCH`: `/api/v1/users/{user_id}` — Частичное обновление данных пользователя (с валидацией уникальности)
5965
* `DELETE`: `/api/v1/users/{user_id}` — Удаление пользователя
6066
* `GET`: `/api/v1/users/` — Получение списка пользователей с пагинацией
61-
<br>
6267

63-
* `POST`: `/api/v1/devices/` — Создание нового устройства (с возможностью привязки к пользователю)
68+
### Устройства (`Devices`)
69+
70+
* `POST`: `/api/v1/devices/` — Создание нового устройства (с возможностью привязки к `user_id`)
6471
* `GET`: `/api/v1/devices/{device_id}` — Получение устройства по id
6572
* `PATCH`: `/api/v1/devices/{device_id}` — Частичное обновление данных устройства (включая смену владельца)
6673
* `DELETE`: `/api/v1/devices/{device_id}` — Удаление устройства
6774
* `GET`: `/api/v1/devices/` — Получение списка устройств с пагинацией
68-
<br>
75+
76+
### Аналитика (`Analytics`)
6977

7078
* `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}` — Получение статуса или готового результата (с пагинацией) фоновой задачи
7582

76-
* `GET`: `/docs/` — Подробная документация с описанием нетривиальных функций и примерами данных
83+
## Требования
7784

78-
## Требования:
7985
* Python 3.13.11+
8086
* Poetry
8187
* Docker & Docker Compose
8288
* PostgreSQL
8389
* Redis
8490
* Celery
8591

86-
## Использование:
87-
Необходимо указать переменные окружения в `.env` [*(Шаблон)*](.env.example):
92+
## Развертывание и использование
93+
94+
1. Склонируйте репозиторий и укажите переменные окружения в файле `.env` на основе шаблона *[(.env.example)](https://www.google.com/search?q=.env.example)*:
95+
8896
```env
8997
# Common
90-
DEBUG=True # Режим отладки. Используется SQLite
91-
HOST=0.0.0.0
98+
DEBUG=True # Режим отладки (Используется in-memory SQLite)
99+
HOST=0.0.0.0
92100
PORT=8000
93-
CELERY_RESULT_EXPIRES=43200 # Таймаут, после которого удаляется результат выполнения таски Celery
101+
CELERY_RESULT_EXPIRES=43200 # Время жизни результатов тасок Celery в Redis (в секундах)
94102
95103
# PostgreSQL
96104
POSTGRES_USER=
@@ -105,7 +113,8 @@ REDIS_PORT=
105113
REDIS_DB=
106114
```
107115

108-
Развёртывание при помощи `docker-compose`:
109-
```
116+
2. Запустите проект при помощи `docker-compose`:
117+
118+
```bash
110119
docker compose up -d --build
111120
```

0 commit comments

Comments
 (0)