Приложение состоит из трех сервисов:
- Сервис1,
admin_area
- админка, отвечает за взаимодействие с пользователем, хранение и отображение пользователю информации о введенных функциях и сгенерированных графиках. - Сервис2,
data-generator
- генератор данных, отвечает за генерацию данных для графика. Принимает текстовое описание функции, генерирует по ним массив [(x, y)]. - Сервис3,
graph-generator
- генератор изображений, генерирует изображение по подготовленным данным.
Сценарий взаимодействия при добавлении новой функции:
- Сервис1 сохраняет инфу о функции в БД и запускает операцию получения изображения.
- Операция получения изображения сервиса1 обращается в сервис2 через REST API, передавая функцию в текстовом виде и параметры.
- Сервис2 обрабатывает запрос, генерирует точки для графика по переданным данным.
- Сервис1 получает точки и передает их в сервис3 по REST API.
- Сервис3 принимает набор точек и возвращает изображение.
- Сервис1 получает изображение и сохраняет в БД, обновляет дату обновления.
Сценарий параллельного обновления через действие в админке:
- Сервис1 асинхронно запускает операцию получения изображения для сохранённой в БД функции и параметров.
- Операция получения изображения сервиса1 обращается в сервис2 через REST API, передавая функцию в текстовом виде и параметры.
- Сервис2 обрабатывает запрос, генерирует точки для графика по переданным данным.
- Сервис1 получает точки и передает их в сервис3 по REST API.
- Сервис3 принимает набор точек и возвращает изображение.
- Сервис1 получает изображение и сохраняет в БД, обновляет дату обновления.
Для запуска используется docker-compose. В переменных окружения для корректного запуска должно быть определено следующее:
ADMIN_EMAIL
- почтовый адрес учётки администратора для входа в админку.ADMIN_PASSWORD
- пароль учётки администратора для входа в админку.SECRET_KEY
- соответствующая настройка Django; для генерации можно воспользоваться сервисом https://www.miniwebtool.com/django-secret-key-generator . Также опционально может быть определено имя пользователя учётки для входа в админку через переменнуюADMIN_USER
; имя пользователя по умолчаниюadmin
.