Имеется веб-сервер, который способен обрабатывать GET и POST запросы. В POST запросе приходит лог переписки в виде json:
[
{
"time": 1551179712,
"sender": "i.petrov",
"message": "Раз-два, проверка связи"
},
{
"time": 1551179749,
"sender": "m.vasiljeva",
"message": "Проверка пройдена, всё работает"
},
{
"time": 1551179831,
"sender": "i.petrov",
"message": "Отлично"
}
]
Количество отдельных сообщений в списке может быть любым. Поле time
содержит
unix timestamp.
В базе данных (MySQL 5.7) имеется таблица со статистикой:
create table dialogs(
id int(11) auto_increment,
start_time timestamp not null,
end_time timestamp not null,
message_count int(11) not null,
primary key (id)
);
Где:
- start_time - время начала диалога (первое сообщение)
- end_time - время окончания диалога (последнее сообщение)
- message_count - количество сообщений в диалоге
На сервере уже настроена маршрутизация запросов и имеется базовый класс App
для
обработки входящих HTTP запросов.
Следующее задание является обязательным для выполнения.
Необходимо дополнить реализацию класса App, чтобы он выполнял следующие функции:
- При получении POST запроса с данными необходимо сформировать по нему статистику
и сохранить в БД в таблицу
dialogs
. - Диалог из POST-запроса сохранить в текстовый файл по одной строке на сообщение. Формат строки: Отправитель - Дата и Время - Текст сообщения. Дата и время должны быть представлены в человекопонятном формате. Путь к файлу сохранения значения не имеет.
- При получении GET запроса сервер должен вернуть из БД список диалогов с параметрами в простом текстовом формате, удобном для чтения, по одной строке на запись. Даты и время необходимо представить в человекопонятном формате. Пример ответа:
Запись 1: Сообщений - 3 шт с 26.02.2019 11:15:12 по 26.02.2019 11:17:11
Запись 2: Сообщений - 5 шт с 26.02.2019 13:27:09 по 26.02.2019 13:34:28
Использование ORM (SQLAlchemy и др.) для работы с БД не допускается.
Следующие задания не являются обязательными и имеют повышенную сложность, однако их выполнение является желаемым. Можно выполнить только некоторые из них.
- Параметры подключения к БД вынести в отдельный файл.
- Выделить логику взаимодействия с БД и файлами диалогов в отдельные классы.
- Реализовать обработку ошибок в процессе работы приложения, их логгирование и установку соответствующих кодов ответа в HTTP в случае ошибки.
- Реализовать функционал вывода списком нарушителей режима сна: людей, которые в период времени 22:00 - 06:00 спали менее шести часов. Формат списка: Имя (ник) и перечисление дат, когда был нарушен режим.
Для проверки работы можно использовать REST-клиенты, например Insomnia, Postman или иные.
Необходимые внешние пакеты необходимо добавить в requirements.txt
Для запуска сервера необходимо запустить в интерпретаторе файл index.py