Skip to content

nnrudakov/ratio

Repository files navigation

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

Задача ­ написать программу ­— фоновый обработчик. При работе с веб­-приложением часто возникают такие задачи, которые нежелательно выполнять во время HTTP­-запроса, а лучше отложить для обработки в фоне.

Такой обработчик и предстоит написать. Для этого мы создали табличку в MySQL под названием task (dump на второй странице). Каждая задача описывается одной записью в БД. Относится к одной из категорий ­ поле task (напр. messages) и поле action (напр. sms), где task определяет название класса который будет использован, а action — название его метода. Классы относятся к пространству \Plp\Task, а методы являются статическими.

Все данные по задаче хранятся в поле data в формате JSON. В поле status указывается статус задачи (int).

Обработчик должен взять задачу из базы, выполнить нужный класс+метод, передав ему значение поля data (декодированное через json_decode). Результат, возвращенный от метода записать в БД в поле result (закодировать в JSON). Отметить задачу как выполненную.

Важно сделать обработку ошибок. Выполняемые классы могут бросить два типа исключений: \Plp\Task\UserException —­ текст ошибки нужно записать в поле result, и попробовать выполнить задачу позже, но не более 3-х раз. \Plp\Task\FatalException —­ текст ошибки с бэктрейсом скинуть в error_log и пометить задачу, как невозможную к выполнению. Оба исключения унаследованы от \Exception.

Итоговый файл должен запускаться из консоли, выводить в stdout отладочную информацию о каждой выполняемой задаче (дата­время, id, task, action и результат). Код выполнения самих классов можно закомментировать. Скрипт продолжает работать и обращаться к базе до бесконечности, пока не будет убит.

Установка

Установка может быть произведена либо клонированием репозитория, либо скачиванием архива и его последующая распаковка в любой директории.

Базы данных (основная и тестовая) должны быть создана вами самостоятельно.

Файлы, относящиеся к функционалу:

  config/db.php                                     конфигурационный файл подключения к основной БД
  config/params.php                                 параметры приложения (указывается количество попыток выполнения задачи)
  migrations/                                       директория с миграциями
  models/Plp/Task.php                               модель таблицы `task`
  models/Plp/Task/                                  директория с классами для выполнения задания
  tests/codeception/config/config.php               конфигурационный файл подключения тестовой БД               
  tests/codeception/fixtures/                       фикстуры тестов
  tests/codeception/unit/ClassMethodTest.php        тесты проверки исключений
  tests/codeception/unit/TaskExecutionTest.php      тесты проверки выполнения задач
  README.md                                         этот файл

После создания БД, доступы к ним должны быть прописаны в соответствующих конфигурационных файлах.

Далее необходимо выполнить миграции для обоих БД командами (выполняются из корневой директории):

  php yii migrate
  php tests/codeception/bin/yii migrate

Требования

Версия PHP 5.4 и выше.

Версия MySQL 5.5 и выше.

Опционально проверить требования фреймворка Yii (создание виртуального сервера для проверки не входит в данное руководство), проверить которые можно по локальной ссылке установки Yii2:

  http://hostname/YiiPath/requirements/index.php

Запуск

Функционал выполняет скрипт yii, расположенный в корне. Запуск скрипта проводится командой (из корневой директории):

    php yii ratio

Запуск тестов (также из корневой директории):

    php vendor/bin/codecept run -c tests unit

About

Обработчик задач

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages