Skip to content

Telmann/task-python

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Вакансия :: Программист Python

(Для корректной работы приложения - состояние/status сервиса необходимо прописывать как up/down/unstable)

Тестовое задание

Решение принимается в виде PR к текущему проекту.

Есть несколько рабочих сервисов, у каждого сервиса есть состояние работает/не работает/работает нестабильно.

Требуется написать API который:

  1. Получает и сохраняет данные: имя, состояние, описание
  2. Выводит список сервисов с актуальным состоянием
  3. По имени сервиса выдает историю изменения состояния и все данные по каждому состоянию

Дополнительным плюсом будет

  1. По указанному интервалу выдается информация о том сколько не работал сервис и считать SLA в процентах до 3-й запятой

Вывод всех данных должен быть в формате JSON

Стек

  • FastAPI Для создания API/backend на Python.
    • 🧰 SQLAlchemy Для взаимодействия с базой данных (ORM).
    • 🔍 Pydantic, используется FastAPI для валидации данных и управления настройками.
    • 💾 PostgreSQL в качестве SQL БД.
    • 🦄 Uvicorn, Веб-сервер ASGI для Python. (при запуске приложения/сервиса через docker используется gunicorn)
    • pip в качестве стандартного пакетного менеджера. Зависимости зафиксированы
    • yapf для автоматического форматирования кода в проекте.
    • 🐋Docker Запуск сервиса и инфраструктуры проводится в docker контейнерах.

Инструкция по запуску сервиса с помощью 🐋Docker🐋

1. Клонируйте репозиторий

bash команда: git clone https://github.com/Telmann/task-python.git

2. Далее для запуска приложения

выполните: docker compose up --build app

3. Готово! Приложение будет доступно по адресу: http://127.0.0.1:9990/docs#/

Интерактивная документация по API

image

Кратко про существующие эндпоинты:

- POST /services: Создает/обновляет информацию о сервисе в базе данных. При успешном выполнении возвращает сообщение об успешном создании/обновлении.
- GET /services: Получает список всех сервисов из базы данных. Если в БД нет сервисов на данный момент, возвращает сообщение о том, что в БД нет сервисов.
- GET /services/{service_name}/history: Получает историю изменений для указанного сервиса по его имени. Если сервис не найден/у него нет истории, возвращает сообщение об этом.
- GET /services/{service_id}/SLA_downtime_info: Рассчитывает время даунтайма для указанного сервиса (по id) в заданном временном диапазоне. Возвращает данные о времени даунтайма и процент SLA, либо поднимает ошибку о неверном формате даты-времени.

About

Вакансия :: Backend-программист

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 97.4%
  • Dockerfile 2.6%