npm install
prisma generate
cp .env.example .env
node index.js
Необходимо обработать данные из БД по описанному алгоритму. Язык разработки - nodejs
- Получить список городов и каналов для формирования данных. Тестовые дампы баз прилагаются к задаче, объем реальных баз значительно больше.
select geoID, tvID, mh_city_id_timeshift
from otr_map
order by geoID;
- Получить данные по каждому из городов из БД запросом вида:
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 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
-
Результаты сохранять в файлы с указанием в названии суток и id города.
-
Результат также отправляется в json на url заказчика методом POST
Для авторизации в заголовок запроса добавляем поле Authorization: xxxxxxx
Сохранить в БД ответ полученный от внешнего апи, статус ответа http, время выполнения запроса
Предусмотреть возможность недоступности внешнего апи, в случае любой ошибки отправлять данные до получения подтверждения - ответа с http кодом 200 Необходимо учитывать, что отправка может занять длительное время, и скрипт должен корректно возобновить отправку данных в случае его перезапуска.
Для тестирования в качестве адреса внешнего API можно использовать https://noob.mediahills.ru/ API может отдавать как код успешного ответа, так и ошибку сервера