alex-net / callmedia-test-job

Тестовое задание по вакансии "Старший PHP разработчик" от компании Callmedia

Home Page:https://docs.google.com/document/d/1366r8Q-I0lZfc42aOKmRnvVHLMhu0_Wrr7oLdkhLDRs

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Тестовое задание для Callmedia KMA (version 2)

Можно использовать только библиотеку php-amqplib. Фреймворки запрещены. Библиотеки для подключения к базам запрещены.

Все должно быть завернуто в docker для быстрого запуска и проверки вашего решения.

Задание:

  • Создать массив из 10 URLs
  • Отправить по очереди каждый элемент массива с задержкой от 5 до 30 секунд в RabbitMq.
  • В очереди запросить этот url и получить длину контента. Сохранить их в MariaDB и ClickHouse. Допускаются репликации.
  • Сделать запрос с использованием PHP к MariaDB и ClickHouse на выборку. Сгруппировать по минуте все строки. Результат должен содержать следующие данные:
  1. Вывести сколько строк за минуту
  2. Вывести минуту группировки
  3. Вывести среднюю длину контента
  4. Вывести когда было сохранено первое сообщение в минуте и последнее

Весь код выложить на GitHub. ZIP архивы не допускаются. Можно задавать уточняющие вопросы. Если вы не можете выполнить какой то из этапов то опишите причину.

Развёртывание

  • выкачать проект при помощи команды git clone
  • перейти в корень репозитария и запустить связку контейнеров командой docker compose up -d
  • Зайти в контейнер php при помощи команды docker exec -ti [имя контенера php] sh. и внутри установить покеты php при помощи команды composer i
  • Далее можно перейти в браузер по адресу контейнера SwaggerUI и потестить доступный функционал ... Для упрощения реализации все запросы работают через get

Реализация

Данное тестовое задание было реализоано на сборке docker-compose состоящей из 7 контейнеров. После запуска докера в браузере можно посмотреть/потыкать следующие контейнера:

  • nginx - основной сервер проекта ..
  • RabbitMQ - сервер брокера сообщений RabbitMQ/ с админкой. Доступ внутрь = логин: user, пароль: pass
  • Swagger UI - тут можно потыкать вживую реализацию проекта
  • Adminer - обзор базы mysql Можно зайти на сервер базы данных. Доступ: сервер: db; логин: root; пароль: test

About

Тестовое задание по вакансии "Старший PHP разработчик" от компании Callmedia

https://docs.google.com/document/d/1366r8Q-I0lZfc42aOKmRnvVHLMhu0_Wrr7oLdkhLDRs


Languages

Language:PHP 97.6%Language:Dockerfile 2.4%