/mediahills

Primary LanguageJavaScript

Запуск

Prerequriments

npm install

prisma generate

cp .env.example .env

Run

node index.js

Задание

Необходимо обработать данные из БД по описанному алгоритму. Язык разработки - nodejs

  1. Получить список городов и каналов для формирования данных. Тестовые дампы баз прилагаются к задаче, объем реальных баз значительно больше.

select geoID, tvID, mh_city_id_timeshift

from otr_map

order by geoID;

  1. Получить данные по каждому из городов из БД запросом вида:

select b.num_key, a.sTimeMsk, a.dur

from stat_y2021m02_geo13 a # здесь имя базы и имя таблицы это маски, где месяц определяется по отчетным суткам, город на конце таблицы из запроса выше join num_keys b on b.num = a.num

where 1 and sTimeMsk between '2021-02-01 00:00:00' and '2021-02-01 23:59:59' # сюда отчетные сутки and tvID in (107) #сюда список tvID для города из запроса выше

  1. полученные данные нужно обработать создав массив объектов следующего формата, по одной записи на каждую минуту дня: Номер города: из пункта 1 geoID, Местные Датавремя: sTimeMsk + mh_city_id_timeshift часов, (начало минуты, т.е. для "2021-02-01 14:58:14" сохранять "2021-02-01 14:58:00") Московские Датавремя: sTimeMsk, (аналогично, начало минуты) mc_keys: Массив id-номеров (num_key) устройств смотревших передачу в эту минуту

Для каждой минуты по полю sTimeMsk нужно составить список mc_key,

например, для исходной записи { num_key: 13816988 sTimeMsk: "2021-02-01 14:58:14" dur: 79 }

num_key 13816988 начал смотреть тв в 2021-02-01 14:58:14 и смотрел его 79 сек, значит получится в результате 2 минуты просмотра: 2021-02-01 14:58:00 2021-02-01 14:59:00 Для каждой из этих минут исходный mc_key должен присутстовать в массиве mc_keys

  1. Результаты сохранять в файлы с указанием в названии суток и id города.

  2. Результат также отправляется в json на url заказчика методом POST

Для авторизации в заголовок запроса добавляем поле Authorization: xxxxxxx

Сохранить в БД ответ полученный от внешнего апи, статус ответа http, время выполнения запроса

Предусмотреть возможность недоступности внешнего апи, в случае любой ошибки отправлять данные до получения подтверждения - ответа с http кодом 200 Необходимо учитывать, что отправка может занять длительное время, и скрипт должен корректно возобновить отправку данных в случае его перезапуска.

Для тестирования в качестве адреса внешнего API можно использовать https://noob.mediahills.ru/ API может отдавать как код успешного ответа, так и ошибку сервера