Парсер логов (6)

  • 36
  • Недоступна
Давай добавим поддержку параметра запроса в наш 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,
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (54)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Наталья Правитель
Уровень 41, Минск, Беларусь
24 августа, 22:21
2 свитча. в первый метод передаю второе поле и его значение, получаю фильтрованный стрим из записей логов с помощью универсального метода фильтрации, написанного для предыдущих интерфейсов. далее во второй метод передаю первое поле и null, если поле 2 пусто, либо стрим из первого метода. таким образом, во второй метод я переписала предыдущую задачу. строчку парсила методами, написанными для файла с логами
Aleksandr Alekseenko Network engineer
24 августа, 05:20
1770 С первого раза прошел валю со страшным говнокодом: 2 свитча Хотя, уже давно нужно было реализовывать различные паттерны Фабрики.
Игорь
Уровень 39, Братск, Россия
13 августа, 08:04
Универсальный геттер, а потом через стримы, самый простой способ и удобный
Судариков Ярослав
Уровень 39, Москва, Россия
11 августа, 11:45
Сделал через рефлексию. Оказалось довольно компактно, минимум логики - всего 2 простеньких if, и, кажется, очень читабельно. 38 строк, считая пробелы для удобства восприятия. Наверняка можно было бы с десяток строк выкинуть, если бы у меня с датами было по-лучше, но уж как есть))) А так, для запроса по полю date, при проверке пришлось значение из value1 парсить в новую дату, а потом при сравнении со значением поля date опять в строку toString. Наконец - то рефлексию освоил😊
Денисян
Уровень 41, Калининград, Россия
10 июля, 18:48
1708 Два дня думал, как решить через стримы. Надоело, плюнул и наговнокодил через switch с первой попытки
Alexander Kusakin
Уровень 41, Astrakhan
11 июля, 17:37
Я для filter() и map() в стримах завёл функции:
Function<Record, Object> mapFunction;
Predicate<Record> filterFunction;
Получилось два свитча с назначением этих функций, потом стрим.
jimaltair
Уровень 41, Калининград, Россия
28 мая, 10:45
После того как решил задачу, заглянул в решение от JR - да, коротко, но читаемости никакой, простыня из if-else с вкраплениями for и try. Какой-то индусский код... может так оно по факту и есть=) Я решил что у нас не 70-е, чтобы экономить память, поэтому решил сделать просто и понятно: два блока switch, в каждом по пять case, внутри которого, в свою очередь, небольшое преобразование с использованием stream api с понятной логикой (пока стримы освоил только на базовом уровне). По итогу 60 строк, но написать с нуля пришлось только около 10-ти, остальное - copy/paste с заменой пары слов. Пол часа на вылавливание ошибок и всё готово! Кто давно хотел освоить стримы, но боялся, вот хороший курс для погружения в тему: Stream API Курс на английском, но не стоит пугаться - он достаточно базовый, так что за компанию учиться и язык) Потом на этой задаче можно отработать приобретённые знания
Питруха
Уровень 41
8 мая, 10:46
Параметр запроса в кавычках.
Flexo Bending Unit #3370318
5 мая, 13:57
1618... Эта задача не щадит никого, похоже, в конце останется только один 🤠 Не слыхал про универсальные геттеры, нет пока времени вникать 2 свича наше всё хотя паттерн матчер я и использовал (задел на будущее, предвкушаю конструирование запросов по многим полям), но пока что не представляю, как можно было без свичей обойтись, видимо в регулярках я ещё ой как плаваю
tbcarus
Уровень 41, Москва
18 апреля, 12:47
Ух, и наговнокодил же я в этой задаче. Хотя уже на второй-третьей начал понимать, что мой первоначальный алгоритм решения подразумевает много такого кода. Я сразу распихал все поля лога по листам, после чего вынимаю нужные номера, но сейчас понятно, что лог надо было читать строками без разбивки по полям, а переписывать уже лень. в этой задаче и вовсе мне пришлось писать с двумя свичами и дополнительным методом. В этой задаче меня сначала ввело в заблуждение условие. Оказалось, что запроса any_user и прочее быть не может. А пример запроса get ip for user = "Vasya", казалось бы, предполагает, что нужно в имени искать вхождение (contains) этого запроса, но нет - имя в запросе должно полностью соответствовать (equals) имени в логах.
Flexo Bending Unit #3370318
5 мая, 13:52
в смысле, без разбивки по полям? List<String>? И какое быстродействие обработки запросов будет у такого парсера? самая удобная структура хранения - лист сущностей, а сущности и хранят все поля но вообще да, я тоже не удержался от искушения и использовал дополнительный список пользователей, а в сущностях хранится только их id... это малёха бессмысленно в такой задаче
N N N
Уровень 41, Брест
18 марта, 14:10
задача решается в одну строчку через универсальный геттер типа стринг и регулярочку, но валидатор не принимает жучара)