Skip to content

pavelsklyar/beeline-kpi

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Технические характеристики

Сайт тестировался на локальном сервере Vagrant (Laravel homestead) на Apache с PHP 7.3 и базой данных MySQL.

Установка

  1. Настройте сервер так, чтобы он смотрел на файл public/index.php.
  2. В файле config/config.ini укажите данные от БД.
  3. Настройте структуру базы данных (файл beeline_2019-10-25.sql содержит структуру и тестовые данные, на которых проверялась работа).
  4. Получение данных происходит по адресу /data/get/, за это отвлечает controllers/DataController.php. Изначально он настроен на отправку GET-запроса, но если нужно поменять на POST, раскомментируйте 14-16 строки и закомментируйте 13. Комментарии в коде помогут разобраться.
  5. Опционально. Если нужно настроить получение данных, добавьте в планировщик файл cron.php, предварительно изменив в нём адрес локального сайта.

Работа

  1. Авторизуйтесь на сайте, используя почту и пароль.
  2. После авторизации вас должно перекинуть на страницу /?time=minutes.
  3. У вас откроется график с минутной шкалой.
  4. Шкалу времени можно переключить через поле select.
  5. Данные можно обновить, нажав кнопку "обновить". Она перезагрузит страницу и при наличии новых данных в БД, они подхватятся.

Структура сервера

  • app/
  • app/common/ - классы, для которых я не выделил отдельную категорию
  • app/controllers/ - контроллеры
  • app/database/ - всё, что связано с базой данных
  • app/interfaces/ - пробовал сделать через интерфейсы пару моментов, но оно отказалось работать. Проект их почему-то не видел и выдавал ошибку, что таких интерфейсов нет, хотя в autoload я эту папку добавлял
  • app/model/ - модели
  • app/security/ - вся логика безопасности, так сказать
  • app/autoload.php - название говорит само за себя
  • app/Connector.php - класс для подключения папок и файлов в них
  • config/
  • config/config.ini - конфигурационный файл, пока что в нём только данные от БД
  • config/modules.php - логика роутинга
  • public/
  • views/ - все вьюхи
  • cron.php - если нужно автополучение данных, укажите этот скрипт

Как оно работает

Все запросы отправляются на index.php. В нём подключается роутинг из config/modules.php. В модулях определяется контроллер и функция, которая будет отвечать за обработку конкретной страницы. Настроено пока что под конкретный сайт, но можно и расширить функционал. Далее уже в классе контроллера мы определяем, что будет выводиться и какую вьюху будем грузить.

Как обрабатываются данные для графика?

Обработку данных под график я сделал на бэкенде. Если нам надо получить минуты, тут всё элементарно, мы просто берём последние N записей и выводим их на график. Если нам надо получить средние данные по часам и дням, придётся попотеть. Я делаю выборку из БД под конкретное время (12 часов или 12 дней). Дальше эта выборка делится на часы. Я создаю временнОй массив, куда помещаю интервалы времени, в которые должны входить данные. Дальше я прохожу по каждому элементу большого массива из БД и делю его на N частей (12 в нашем случае). Когда я подхожу к концу одной части (следующее значение не входит в этот интервал), я делю получившиеся значения по каждому оператору на количество этих элементов.

Всю логику этого безобразия можно посмотреть в app/common/SplitArray.php. Там есть повторение кода для функционала с часами и днями, это можно поправить, если посидеть чуть дольше.

Определение, что и в каком количестве нужно получить и как это отправить на вьюху, происходит в app/controllers/MainController.php. Вьюха, куда это всё переходит - views/index.php.

About

Тестовое задание в Билайн

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published