Giter VIP home page Giter VIP logo

farbrique's Introduction

Mailing service (test task)


Загрузка

git clone https://gitlab.com/Asada_rain/fabrique.git
cd fabrique

Настройка зависимостей

Cкопировать содержимое .env.example в файл .env и указать зависмости

touch .env
cp example.env .env

Запуск

docker compose up --build 

Супер пользователь создается автоматически, нужно указать его параметры в файле .env


Enpoints:

My image

prometheus metrics:

http://localhost:9090/

Prometheus

admin page

http://localhost:8000/admin/

Prometheus

Дополнительные требования (8/12)

  • Организовать тестирование написанного кода
  • Обеспечить автоматическую сборку/тестирование с помощью GitLab CI
  • Подготовить docker-compose для запуска всех сервисов проекта одной командой
  • Написать конфигурационные файлы (deployment, ingress, …) для запуска проекта в kubernetes и описать как их применить к работающему кластеру
  • сделать так, чтобы по адресу /docs/ открывалась страница со Swagger UI и в нём отображалось описание разработанного API. Пример: https://petstore.swagger.io
  • реализовать администраторский Web UI для управления рассылками и получения статистики по отправленным сообщениям
  • обеспечить интеграцию с внешним OAuth2 сервисом авторизации для административного интерфейса. Пример: https://auth0.com
  • реализовать дополнительный сервис, который раз в сутки отправляет статистику по обработанным рассылкам на email
  • удаленный сервис может быть недоступен, долго отвечать на запросы или выдавать некорректные ответы. Необходимо организовать обработку ошибок и откладывание запросов при неуспехе для последующей повторной отправки. Задержки в работе внешнего сервиса никак не должны оказывать влияние на работу сервиса рассылок. - id рассылки - все логи по конкретной рассылке (и запросы на api и внешние запросы на отправку конкретных сообщений)
  • реализовать отдачу метрик в формате prometheus и задокументировать эндпоинты и экспортируемые метрики
  • реализовать дополнительную бизнес-логику: добавить в сущность "рассылка" поле "временной интервал", в котором можно задать промежуток времени, в котором клиентам можно отправлять сообщения с учётом их локального времени. Не отправлять клиенту сообщение, если его локальное время не входит в указанный интервал.
  • обеспечить подробное логирование на всех этапах обработки запросов, чтобы при эксплуатации была возможность найти в логах всю информацию по
    • id рассылки - все логи по конкретной рассылке (и запросы на api и внешние запросы на отправку конкретных сообщений)
    • id сообщения - по конкретному сообщению (все запросы и ответы от внешнего сервиса, вся обработка конкретного сообщения)
    • id клиента - любые операции, которые связаны с конкретным клиентом (добавление/редактирование/отправка сообщения/…)

Stack: Django, DRF, Postgres, Celery, Redis

farbrique's People

Contributors

asada19 avatar

Watchers

 avatar

farbrique's Issues

code_review

❌ вложенный импорт
❌ у Message.status есть TextChoices, но при фильтрации используются не переменная, а строки типа 'SENT'
❌ много неиспользуемых импортов
❌ логика отправки не вынесена из celery задач, всё тело функции обёрнуто в try
❌ в send_statistic_to_mail не используется prefetch_related("messages") при выборке рассылок, так было бы меньше запросов лишних

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.