Сайт тестировался на локальном сервере Vagrant (Laravel homestead) на Apache с PHP 7.3 и базой данных MySQL.
- Настройте сервер так, чтобы он смотрел на файл public/index.php.
- В файле config/config.ini укажите данные от БД.
- Настройте структуру базы данных (файл beeline_2019-10-25.sql содержит структуру и тестовые данные, на которых проверялась работа).
- Получение данных происходит по адресу /data/get/, за это отвлечает controllers/DataController.php. Изначально он настроен на отправку GET-запроса, но если нужно поменять на POST, раскомментируйте 14-16 строки и закомментируйте 13. Комментарии в коде помогут разобраться.
- Опционально. Если нужно настроить получение данных, добавьте в планировщик файл cron.php, предварительно изменив в нём адрес локального сайта.
- Авторизуйтесь на сайте, используя почту и пароль.
- После авторизации вас должно перекинуть на страницу /?time=minutes.
- У вас откроется график с минутной шкалой.
- Шкалу времени можно переключить через поле select.
- Данные можно обновить, нажав кнопку "обновить". Она перезагрузит страницу и при наличии новых данных в БД, они подхватятся.
- 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.