The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Домашнее задание на Python"
Отправлено Dimon2016, 27-Апр-16 08:54 
Устраиваюсь на работу в одну компанию, так вот мне дали задание (сроки выполнения неделя) написать программу на 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

Помогите кто чем может, хотя бы с разработкой алгоритма на псевдокоде, буду очень признателен любой помощи!

 

Ваше сообщение
Имя*:
EMail:
Для отправки новых сообщений в текущей нити на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
  Введите код, изображенный на картинке: КОД
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру