Устраиваюсь на работу в одну компанию, так вот мне дали задание (сроки выполнения неделя) написать программу на Python по парсингу лога, будущий работодатель в курсе из моего резюме, что я не знаю Python да и вообще очень слаб в программировании, но не смотря на это мне все равно поставили задачу.Имя входного файла: input .txt
Имя выходного файла: output. txt
Сервис состоит из фронтенда и бекендов. Бекенды бывают нескольких типов. Для увеличения отказоустойчивости бекенды одного типа реплицированы и составляют группу реплик (далее ГР). Бекенды из одной ГР одинаковы, и для формирования выдачи фронтенду достаточно получить от¬вет хотя бы с одного бекенда из каждой ГР. Фронтенд может сделать несколько попыток обращения к бекендам ГР, пока не получит результат.
У фронтенда есть три фазы обработки запроса:
1) Опрос бекендов
2) Мерджинг результатов, полученных с бэкендов
3) Отправка результатов пользователю
В случае, когда фаза опроса бекендов занимает слишком много времени, фронтенд может при¬нудительно завершить опрос и перейти к фазе мерджинга результатов с неполным набором данных. В процессе работы фронтенд пишет в лог файл события, возникающие при обработке запроса. Вам нужно по данному логу событий посчитать:
1. 95-й перцентиль времени обработки запросов фронтендом
2. Найдите 10 запросов, в которых фаза отправки результатов пользователю была максимальной. В качестве ответа выдайте 10 идентификаторов запросов.
3. Для каждого бекенда, отметившегося в логе, посчитайте количество обращений к нему, коли¬чество и типы ошибок, возникших при работе с ним.
4. Посчитайте количество запросов к фронтенду на которые фронтенд не смог собрать данные со всех ГР.
Формат входных данных
Входной файл состоит из строчек в формате: <время события> <идентификатор запроса на фронтенд> <тип события> [<дополнительные параметры>]
Разделителем полей выступает символ табуляции.
Строки отсортированы по времени события — UNIX timestamp в микросекундах. Идентификатор запроса это уникальное целое число. Отфильтровав лог по записям с выбран¬ным идентификатором запроса можно узнать всё об обработке соответствующего пользовательского запроса.
Типы событий:
StartRequest
Начало обработки запроса
BackendConnect
Установка tcp соединения с бекендом.
Дополнительные параметры: <номер ГР> <URL запроса на бекенд>
BackendRequest
Отправка запроса на бекенд. Дополнительные параметры: <номер ГР>
BackendOk
Отметка успешного получения ответа с бекенда. Работа с ГР завершается. Дополнительные параметры: <номер ГР>
BackendError
Ошибка работы с бекендом. Следует после BackendConnect или BackendRequest. Дополнительные параметры: <номер ГР> <строка с текстом возникшей ошибки>
StartMerge
Означает конец фазы опроса бекендов и начало фазы мерджа результатов.
Start SendResult
Означает конец фазы мерджа и начало отправки результата пользователю.
Finis hRequest
Конец обработки запроса.
Формат выходных данных
Выведите в свободной фоме ответ на поставленные вопросы.
Время обработки пользовательского запроса вычисляется как время между событиями StartRequest и FinishRequest. Подсмотреть, что такое 95-й перцентиль можно тут: ru.wikipedia.org/wiki/Квантиль
Время ответа пользователю можно вычислить как разницу времени между событиями Start SendResult и FinishRequest.
Бекенды, с которыми производилась работа можно узнать разобрав URL в событии BackendConnect. В качестве типа ошибки можно использовать строковое представление ошиб¬ки в событии BackendError.
Запросы, на которые ответили не все ГР не имеют событий BackendOK хотя бы для одной из своих ГР.
Система оценки
Мы ожидаем, что решение будет оформленно на Python 2.7.
Модно пользоваться любыми библиотеками с pypi, но не забудьте описать зависимости в pip-requirements.txt Также, мы будем признательны, если, при прочих равных, вы выберете pure python библиотеки себе в зависимости — нам это сильно упрощает проверку.
Вобщем случае событийный лог может быть большим, программа не должна зачитывать весь лог в память.
Постарайтесь оптимизировать свою программу по памяти и процессору.
И приложены несколько файлов с логами, вот примерные строчки одного из них:
1390137366792361 3 BackendConnect 9 http://backend9-011.yandex.ru:1612/search?
1390137366792367 3 BackendConnect 19 http://backend19-004.yandex.ru:1247/search?
1390137366792392 2 BackendConnect 5 http://backend5-008.yandex.ru:1611/search?
1390137366792407 3 BackendConnect 16 http://backend16-014.yandex.ru:1120/search?
1390137366792410 3 BackendConnect 1 http://backend1-006.yandex.ru:1924/search?
1390137366792421 2 BackendConnect 15 http://backend15-013.yandex.ru:1334/search?
1390137366792467 3 BackendConnect 17 http://backend17-011.yandex.ru:1197/search?
1390137366792469 3 BackendConnect 6 http://backend6-004.yandex.ru:1347/search?
1390137366792480 3 BackendConnect 11 http://backend11-013.yandex.ru:1457/search?
1390137366792481 3 BackendConnect 0 http://backend0-007.yandex.ru:1080/search?
1390137366792516 3 BackendConnect 3 http://backend3-007.yandex.ru:1203/search?
1390137366792517 4 StartRequest
1390137366792524 3 BackendConnect 8 http://backend8-006.yandex.ru:1373/search?
1390137366792622 3 BackendConnect 12 http://backend12-006.yandex.ru:1028/search?
1390137366792627 3 BackendConnect 4 http://backend4-009.yandex.ru:1959/search?
1390137366792662 3 BackendConnect 10 http://backend10-013.yandex.ru:1888/search?
1390137366792731 3 BackendConnect 5 http://backend5-001.yandex.ru:1268/search?
1390137366792745 3 BackendConnect 18 http://backend18-004.yandex.ru:1605/search?
1390137366792896 3 BackendConnect 14 http://backend14-006.yandex.ru:1730/search?
1390137366794324 4 BackendConnect 13 http://backend13-006.yandex.ru:1103/search?
1390137366794346 4 BackendConnect 18 http://backend18-003.yandex.ru:1852/search?
1390137366794361 4 BackendConnect 12 http://backend12-012.yandex.ru:1910/search?
1390137366794364 4 BackendConnect 17 http://backend17-010.yandex.ru:1518/search?
1390137366794374 4 BackendConnect 19 http://backend19-011.yandex.ru:1276/search?
1390137366794379 4 BackendConnect 11 http://backend11-013.yandex.ru:1457/search?
1390137366794409 4 BackendConnect 6 http://backend6-001.yandex.ru:1590/search?
1390137366794438 4 BackendConnect 2 http://backend2-008.yandex.ru:1199/search?
1390137366794448 4 BackendConnect 7 http://backend7-005.yandex.ru:1103/search?
1390137366794461 4 BackendConnect 8 http://backend8-010.yandex.ru:1171/search?
1390137366794565 4 BackendConnect 9 http://backend9-008.yandex.ru:1060/search?
1390137366794597 4 BackendConnect 5 http://backend5-004.yandex.ru:1121/search?
1390137366794602 4 BackendConnect 4 http://backend4-007.yandex.ru:1172/search?
1390137366794628 4 BackendConnect 0 http://backend0-007.yandex.ru:1080/search?
1390137366794657 4 BackendConnect 15 http://backend15-012.yandex.ru:1776/search?
1390137366794659 4 BackendConnect 14 http://backend14-009.yandex.ru:1036/search?
1390137366794662 4 BackendConnect 16 http://backend16-008.yandex.ru:1349/search?
1390137366794694 4 BackendConnect 3 http://backend3-008.yandex.ru:1008/search?
1390137366794727 4 BackendConnect 10 http://backend10-005.yandex.ru:1086/search?
1390137366794829 4 BackendConnect 1 http://backend1-010.yandex.ru:1746/search?
1390137366797781 5 StartRequest
Помогите кто чем может, хотя бы с разработкой алгоритма на псевдокоде, буду очень признателен любой помощи!