undefined

Большая задача: Парсер логов на Java

Java Collections
7 уровень , 15 лекция
Открыта

— Привет, боец!

— Поздравляю тебя с повышением уровня квалификации. Нам нужны отчаянные парни.

— Уверен, у тебя есть еще много нерешенных задач. Самое время решить парочку из них!

undefined
36
Задача
Java Collections,  7 уровень,  15 лекция
Недоступна
Парсер логов (1)
Сегодня мы напишем парсер логов. Лог файл имеет следующий формат: ip username date event status Где: ip - ip адрес с которого пользователь произвел событие. user - имя пользователя (одно или несколько слов разделенные пробелами). date - дата события в формате day.month.year hour:minute:second. event
undefined
36
Задача
Java Collections,  7 уровень,  15 лекция
Недоступна
Парсер логов (2)
Реализуй интерфейс UserQuery у класса LogParser: 2.1. Метод getAllUsers() должен возвращать всех пользователей. 2.2. Метод getNumberOfUsers() должен возвращать количество уникальных пользователей. 2.3. Метод getNumberOfUserEvents() должен возвращать количество событий от определенного пользователя.
undefined
36
Задача
Java Collections,  7 уровень,  15 лекция
Недоступна
Парсер логов (3)
Реализуй интерфейс DateQuery у класса LogParser: 3.1. Метод getDatesForUserAndEvent() должен возвращать даты, когда определенный пользователь произвел определенное событие. 3.2. Метод getDatesWhenSomethingFailed() должен возвращать даты, когда любое событие не выполнилось (статус FAILED). 3.3. Метод
undefined
36
Задача
Java Collections,  7 уровень,  15 лекция
Недоступна
Парсер логов (4)
Реализуй интерфейс EventQuery у класса LogParser: 4.1. Метод getNumberOfAllEvents() должен возвращать количество событий за указанный период. 4.2. Метод getAllEvents() должен возвращать все события за указанный период. 4.3. Метод getEventsForIP() должен возвращать события, которые происходили с указ
undefined
36
Задача
Java Collections,  7 уровень,  15 лекция
Недоступна
Парсер логов (5)
Как ты заметил существует огромное количество комбинаций параметров для выбора определенных записей из лог файла. Покрыть их все соответствующими методами дело не благодарное. Поэтому мы реализуем свой язык запросов (QL). Пример запроса: get ip for user = "Vasya" Такой запрос должен будет вернуть вс
undefined
36
Задача
Java Collections,  7 уровень,  15 лекция
Недоступна
Парсер логов (6)
Давай добавим поддержку параметра запроса в наш QL. Примеры запросов с параметром: 1) get ip for user = "Vasya" 2) get user for event = "DONE_TASK" 3) get event for date = "03.01.2014 03:45:23" Общий формат запроса с параметром: get field1 for field2 = "value1" Где: field1 - одно из полей: ip, user,
undefined
36
Задача
Java Collections,  7 уровень,  15 лекция
Недоступна
Парсер логов (7)
Теперь добавим поддержку дополнительного параметра запроса в наш QL. Дополнительный параметр будет отвечать за диапазон дат, которые нас интересуют. Пример запроса: get ip for user = "Eduard Petrovich Morozko" and date between "11.12.2013 0:00:00" and "03.01.2014 23:59:59". Ожидаемый результат: Set<
undefined
9
Задача
Java Collections,  7 уровень,  15 лекция
Недоступна
Парсер логов (8)
Ты реализовал парсер логов из разных файлов. Помимо парсера, ты реализовал свой собственный язык запросов. Он нужен для того, что бы минимизировать количество методов. Строчка в нашем лог-файле содержала всего 5 параметров плюс один вариативный параметр. При количестве параметров запроса два - это
Комментарии (93)
Чтобы просмотреть все комментарии или оставить свой,
перейдите в полную версию
Flexo 35 уровень, New New York
5 мая 2021
Выживший №1219 🥳 Большое спасибо за эту задачу! На всё ушло, наверное, часов 30. Благодаря ей я перестал бояться погружаться в стримы и регулярные выражения Потому что без них, я бы просто запутался в бесконечных if и for... Возможно, я не освоил эти инструменты от и до, но получил уверенную базу. Ну и паттерн, надеюсь, отложился в голове. Где-то на середине задачи вовремя отрефакторил код и дальше всё пошло как по маслу.
tbcarus 41 уровень, Москва
18 апреля 2021
Задача довольно простая, но ставит перед выбором - писать, как умеешь, используя кучи if и switch, или пытаться пытаться добавить красоты, используя стримы. Я пошёл по первому пути с небольшими включениями второго в самых очевидных местах.
Luicich 39 уровень, Минск
5 марта 2021
стримы и стримы хорошие шпаргалки по стримам
Андрей 41 уровень, Самара
5 февраля 2021
Хорошая задача. Если вы умеете корректно использовать паттерны то долгими местами станут разве что первый и пятый этап. Далее, если все корректно реализовано, то новое легко накладывается на предыдущее. Крайне советую перед решением ознакомиться со Stream API. Очень вам поможет и ужмет код в раза 1.5 минимум. По сути задача на красоту и удобство вашего кода. Ну и для истории 1090-ый, 522 строки кода.
Артур Харатян 41 уровень, Санкт-Петербург
20 января 2021
Наркоманская задача...
Afac 41 уровень, Москва
15 января 2021
за написанием г...кода не заметил, сколько нас добралось до сюда. Люди, которые реализовали парсинг запроса без рефлексии с использование стрим АПИ, и у кого код вместился в "четыре" строчки, дайте знать, как вы это сделали, пожалуйста! 😬😬 в личку, в комментах, как угодно! спасибо заранее! Реализация от джавы раш вяглядит немного громоздкой...
Александр Бордуков 35 уровень, Москва
8 января 2021
1044-ый. Внезапно, очень крутая задача, которая заставила вспомнить почти все, что было в предыдущих курсах и таки ощутить, что реально успел многому научиться. У меня получилось чуть меньше 700 строк кода, которые, при большом желании, думаю, можно было бы ужать раза в два (но желания на этом этапе уже нет :D) Ниже писали про regex'ы, которые, как мне кажется, особого смысла использовать нет (replaceAll отлично удаляет все лишнее из запроса, который потом сплитится на отдельные аргументы). Местами, конечно, очень хотелось придушить валидатор и автора условий, но предыдыщие уровни отлично приучили к смирению :D В общем, удачи всем проходящим (;
Jean Valjean 41 уровень
6 января 2021
так представляешь себе составителя задачи, когда накодил, устал, и посмотрел его решение
Артем В. 41 уровень, Санкт-Петербург
24 декабря 2020
Самый главный совет - сразу делайте метод: "isDateInTheInterval", чтобы узнать попадает выбранная дата в интервал after - before или нет. и сделайте отдельный класс "LogEntry" с полями ip, name, date, event, taskNumber, status, чтобы каждую строчку файла *.log привести к какой-то конкретной "сущности", для более легкого доступа, а он вам точно понадобится.
Evgeniia 41 уровень
16 декабря 2020
1294 на 7й Очень классная задача. Сначала пишешь явно спагетти-код, было очень интересно, что же с этим всем делать, т.к.очевидно что задача не на набор кода :) И в последних задачах хоп хоп и всё заменил на эээ.... ну предполагается, что на изящное решение. Очень круто, что в задаче много вариантов, как писать, я после решения посмотрела секции вопросов и решение от JavaRush, и у меня несколько другая логика построения задачи. Я наполняю список Entry сразу в конструкторе LogParser и дальше уже издеваюсь над ним, как хочу, это удобно, но стоит вспомнить недавно встреченный файл логов аж на 80 Гб, как это уже не кажется таким уж замечательным решением :) Поэтому же подсмотреть "а чо как другие решали" в вопросах оказалось внезапно сложно: открываешь, а там всё вообще по-другому, и чем смотреть, почему у них работает, а у меня - нет, уж проще свой код дебаггером прогнать.