Skip to content

bblackcblackc/ubrrtest

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ubrrtest

ubrr test challenge

Установка

Для установки понадобится docker, docker-compose, git. Используется TCP порт 8080. Команды выполнять из корня проекта, если не указано иное.

  • Установить docker, docker-compose, git
  • Клонировать репозиторий
git clone https://github.com/bblackcblackc/ubrrtest.git
  • Скопировать файл initdb.sql из корня проекта в data/db
  • Запустить контейнер с БД
docker-compose up mariadb
  • Подождать инициализации БД
  • Запустить в контейнере импорт из следующего sql скрипта. ПАРОЛЬ-БД -- root пароль от базы данных, можно найти в файле конфигурации docker-compose.yml
docker-compose exec mariadb bash
cd /var/lib/mysql
mysql -u root -p
Enter password: ПАРОЛЬ-БД
MariaDB [none]> source ./initdb.sql
  • Остановить контейнер mariadb и запустить все контейнеры
docker-compose down
docker-compose up
  • Возможно, для некоторых систем, резолвер которых не сконфигурирован для поддержки поддоменов localhost как собственно localhost (т.е. для поддержки имен вида api0.localhost, api1.localhost, и т.д.), придется внести изменения в файл /etc/hosts, добавить следующие строки
api1.localhost      127.0.0.1
api2.localhost      127.0.0.1
api3.localhost      127.0.0.1
api4.localhost      127.0.0.1
api5.localhost      127.0.0.1

Проверить необходимость изменений можно запустив пинг на любой подддомен localhost, например

ping asdfg.localhost

Если пинг проходит успешно -- изменения не требуются.

  • Теперь на хост машине по URL http://localhost:8080 должен быть доступен веб интерфейс. Там отображается статус очереди и можно сделать тестовый запрос, нажав на кнопку. Статус очереди обновляется каждую секунду.
  • В файле http://localhost:8080/js/ad_caller.js определена функция advertCall(id,data). В id передается идентификатор рекламного материала, в data - JSON объект, который будет сохранен на сервере. В консоль функция напишет ответ от сервера -- ид сохраненной записи. Эта функция вызывает PHP скрипт localhost:8080/api/ad_caller.php методом POST и передает ему на вход JSON с параметрами вызова advertCall.
  • PHP скрипт qm/queue_processor.php в контейнере php -- менеджер очереди. Для процессинга данных его необходимо запустить следующим образом
docker-compose exec php bash
cd /usr/share/nginx/html/qm/
php queue_processor.php
  • Для каждой записи вызывается скрипт localhost:8080/api/data_processor.php, эмулирующий длительную обработку данных. Он принимает JSON объект следующего вида
{
  "number": UINT32,
  "data": object
}

методом POST, делает паузу от 10 до 20 секунд и отдает результирующий JSON следующего вида

{
    "number": number из запроса,
    "data": {
        "number": number из запроса * 2,
        ...
        остальное содержимое объекта data из запроса
        ...
      }
}

Данные, полученные от этого метода записываются в таблицу processed_info вместе с оригинальным ид запроса.

  • В data/www/api/config.php можно указать сколько процессов обработки максимально будет запущено и сколько максимум процессов можно стартовать за одну итерацию. Итерация -- 1 секунда.

About

ubrr test challenge

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors