- name: datasets
- user: datasets
- password: datasets
- user: guest
- password: guest
- port: 5672
Установка зависимостей:
pip install -r requirements.txt
Применение миграций БД:
python manage.py migrate
Загрузка тестовых данных в БД:
python manage.py loaddata datasets
Создание переводов:
python manage.py compilemessages
Запуск приложения:
honcho start
Адрес приложения - http://127.0.0.1:8000/
Адрес админки - http://127.0.0.1:8000/admin/
Мониторинг фоновых задач - http://127.0.0.1:5555/
Одно из крупнейших НИИ занимается разработкой функции, которая производит вычисления для массива пар простых чисел a и b типа Int. У них возникла потребность в периодическом тестировании этой функции на различных наборах данных. Постепенно они накапливают массивы входных данных, на которых хотят тестировать свою функцию. Цель тестирования - ручная проверка обработанных данных в интерфейсе и проверка отсутствия эксепшенов на всех наборах данных.
Функция принимает и возращает JSON. Формат входного набора данных - масcив из словарей чисел а и b
[
{
"a": 1,
"b": 2
}
]
Формат выходных данных - словарь с результатом работы функции:
{
"result": 0
}
Таким образом, необходимо:
- принимать наборы данных через интерфейс
- сохранять наборы данных в БД
- запускать обработку всех наборов данных нажатием кнопки в интерфейсе
- если в процессе обработки возникает эксепшен - нужно сохранять его в БД
- сохранять в БД результат для каждого набора данных
- показывать общий статус последней проверки функции: если были эксепшены - True, иначе - False
- показывать последние результаты обработки для кажого набора данных
- показывать список эксепшенов
- Приложение должно быть реализовано на языке python с использованием фрэймворка django. Все зависимости должны быть установлены с помощью pip, в корне проекта хранить requirements
- Для работы с БД использовать django-orm, бэкенд ORM - Postgres
- Для организации работы фоновых задач использовать RabbitMQ и celery.
- Для мониторинга фоновых задач использовать celery-flower
- Обработка одного набора данных должна производиться в цепочке из трех задач:
- вычитывание из БД и формирование JSON запроса
- вызов функции обработки JSON запроса и формирование JSON ответа
- сохранение JSON ответа в БД
- Каждая задача цепочки должна выполняться в отдельном воркере, это позволит размещать их на разных серверах. Через интерфейс celery flower можно управлять количеством параллельных процессов в каждом воркере, это позволит равномерно распределять нагрузку.
- Тестируемая функция должна быть задачей celery (т.е. быть второй задачей в цепочке из п.1)
Пример тестируемой функции:
def test_func(json):
import json
d = json.loads(json)
return {‘result’: d['a'] + d['b']}
Приложение разрабатывать в git репозитории.