JavaRush /Курсы /Java Collections /Большая задача: Парсер логов на Java

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

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

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

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

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

36
Задача
Java Collections, 7 уровень, 15 лекция
Недоступна
Парсер логов (1)
Сегодня мы напишем парсер логов. Лог файл имеет следующий формат: ip username date event status Где: ip - ip адрес с которого пользователь произвел событие. user - имя пользователя (одно или несколько слов разделенные пробелами). date - дата события в формате day.month.year hour:minute:second. event
36
Задача
Java Collections, 7 уровень, 15 лекция
Недоступна
Парсер логов (2)
Реализуй интерфейс UserQuery у класса LogParser: 2.1. Метод getAllUsers() должен возвращать всех пользователей. 2.2. Метод getNumberOfUsers() должен возвращать количество уникальных пользователей. 2.3. Метод getNumberOfUserEvents() должен возвращать количество событий от определенного пользователя.
36
Задача
Java Collections, 7 уровень, 15 лекция
Недоступна
Парсер логов (3)
Реализуй интерфейс DateQuery у класса LogParser: 3.1. Метод getDatesForUserAndEvent() должен возвращать даты, когда определенный пользователь произвел определенное событие. 3.2. Метод getDatesWhenSomethingFailed() должен возвращать даты, когда любое событие не выполнилось (статус FAILED). 3.3. Метод
36
Задача
Java Collections, 7 уровень, 15 лекция
Недоступна
Парсер логов (4)
Реализуй интерфейс EventQuery у класса LogParser: 4.1. Метод getNumberOfAllEvents() должен возвращать количество событий за указанный период. 4.2. Метод getAllEvents() должен возвращать все события за указанный период. 4.3. Метод getEventsForIP() должен возвращать события, которые происходили с указ
36
Задача
Java Collections, 7 уровень, 15 лекция
Недоступна
Парсер логов (5)
Как ты заметил существует огромное количество комбинаций параметров для выбора определенных записей из лог файла. Покрыть их все соответствующими методами дело не благодарное. Поэтому мы реализуем свой язык запросов (QL). Пример запроса: get ip for user = "Vasya" Такой запрос должен будет вернуть вс
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,
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<
9
Задача
Java Collections, 7 уровень, 15 лекция
Недоступна
Парсер логов (8)
Ты реализовал парсер логов из разных файлов. Помимо парсера, ты реализовал свой собственный язык запросов. Он нужен для того, что бы минимизировать количество методов. Строчка в нашем лог-файле содержала всего 5 параметров плюс один вариативный параметр. При количестве параметров запроса два - это
Комментарии (140)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Light_Day :) Уровень 49
13 ноября 2024
25 апреля 2024
Жесть 770 строк кода, как люди вообще решают такое) у вас так много свободного времени! Завидую.
Вадим Уровень 32
22 сентября 2024
там функции на 80% одинаковые . ctrl+c ctrl+v и чуток поменять
oleh ronin Уровень 47
19 марта 2024
Очень важно для валидатора, правильно проверить расширение файла... 30+ попыток убил, что бы понять что надо через конструкцию (File) logFile.toString().toLowerCase().endsWith(".log"), а не через logFile.getPath.endsWith(".log");
И. Ж. Уровень 41
29 января 2024
В 7 й задаче в диапазоне дат нужно не учитывать крайние значения, в условии не сказано, но валидацию по трем пунктам не проходит из за этого! Без комментариев никогда бы не понял в чем дело. Другим на заметку...
Zhandos Уровень 51
16 октября 2024
тоже самое не проходил по 3 пунктам
Alexander Karpeev Уровень 51
18 января 2024
По началу испугался, хотел скипнуть. По итогу решил 6/8. В первой задаче следовало бы прямо написать для таких как я - «реализуйте чтение логов». А то я сидел с час думал откуда логи читать)
Антон Уровень 50
13 ноября 2023
К 6 задаче реализовал то что у них в конце в рекомендациях по улучшению. Валидатор выбесил. Пролистал последние 2 задачи. Кода раза в 2 меньше чем правильном решении и он в 5 раз читабильней. Обидно блин.
wokku Уровень 51
6 сентября 2023
Ой да идите лесом с такими задачами, первая задача - сразу хард и на 200+ строк, это точно для обучающихся задача? Метод readLogs - это вообще что то с чем то, блок try, в котором цикл for, в котором if, в котором блок try, в котором блок while, в котором два if. Вы что курили, когда это составляли?
24 апреля 2024
Это решения автора, если бы авторы хотели, то они бы писали тем кто решил эту задачу своим способом и смотрели в комментах популярное. Там ребята всегда найдутся, которые решат на изи и проще.
Zhandos Уровень 51
10 октября 2024
это для того чтобы пройтись по дереву файлов и поддиректории и искать файлы с расширением .log и далее с ними работать читать содержимое файла парсить на отдельные части в условии сказано что слова разделены символом \t только у некоторых событии есть дополнительный параметр которые разделены пробелом и их тоже нужно распарсить на отдельные элементы
milniy87 Уровень 41
4 июля 2023
Паттерны сила. Все максимально наглядно и логично!
PhanSca Уровень 48
23 мая 2023
Можно было бы сократить первую часть про неправильный код. А вообще задача понравилась - наглядно иллюстрирует, как можно с помощью правильной архитектуры значительно упростить себе жизнь.
Anonymous #3205107 Уровень 44
14 апреля 2023
Не очень понимаю, почему все пишут про использование стримов. Как делал я. 1. Сделал метод, который возвращает List<LogEntry> - записей из файлов логов. 2. Сделал метод, который возвращает урезанный List<LogEntry>, которые укладываются в заданный временной интервал. Все, дальше проходя по листу итерацией можно крутить его как хочешь по любым условия, хочешь ip доставай, хочешь user + status...