(Для корректной работы приложения - состояние/status сервиса необходимо прописывать как up/down/unstable)
Решение принимается в виде PR к текущему проекту.
Есть несколько рабочих сервисов, у каждого сервиса есть состояние работает/не работает/работает нестабильно.
Требуется написать API который:
- Получает и сохраняет данные: имя, состояние, описание
- Выводит список сервисов с актуальным состоянием
- По имени сервиса выдает историю изменения состояния и все данные по каждому состоянию
Дополнительным плюсом будет
- По указанному интервалу выдается информация о том сколько не работал сервис и считать SLA в процентах до 3-й запятой
Вывод всех данных должен быть в формате JSON
- ⚡ FastAPI Для создания API/backend на Python.
- 🧰 SQLAlchemy Для взаимодействия с базой данных (ORM).
- 🔍 Pydantic, используется FastAPI для валидации данных и управления настройками.
- 💾 PostgreSQL в качестве SQL БД.
- 🦄 Uvicorn, Веб-сервер ASGI для Python. (при запуске приложения/сервиса через docker используется gunicorn)
- pip в качестве стандартного пакетного менеджера.
- yapf для автоматического форматирования кода в проекте.
- 🐋Docker Запуск сервиса и инфраструктуры проводится в docker контейнерах.
bash команда: git clone https://github.com/Telmann/task-python.git
выполните: docker compose up --build app
3. Готово! Приложение будет доступно по адресу: http://127.0.0.1:9990/docs#/
- POST /services: Создает/обновляет информацию о сервисе в базе данных. При успешном выполнении возвращает сообщение об успешном создании/обновлении.
- GET /services: Получает список всех сервисов из базы данных. Если в БД нет сервисов на данный момент, возвращает сообщение о том, что в БД нет сервисов.
- GET /services/{service_name}/history: Получает историю изменений для указанного сервиса по его имени. Если сервис не найден/у него нет истории, возвращает сообщение об этом.
- GET /services/{service_id}/SLA_downtime_info: Рассчитывает время даунтайма для указанного сервиса (по id) в заданном временном диапазоне. Возвращает данные о времени даунтайма и процент SLA, либо поднимает ошибку о неверном формате даты-времени.
