Подходя к решению этого задания я не имел опыта в postgreSQL, работал с MySQL. Что касательно фреймворка ExtJS, с ним вообще столкнулся впервые, с учётом общих знаний JS.
Так как не было чёткого формата логов и уникальности значений в том или ином файле (как правило в логах данные повторяются), а также размерности входных и выходных данных, таблицы решил делать аналогичные без нормализации.
Как сказано выше, раз манипулировать с данными не стал, то и загрузку из реализовал быстрым нативным методом. Первоначально идея была парсить логи регулярным выражением. Даля большей защиты и стандартизации. Но опять же в виду не явных данных по формату, отказался от этой идеи. Решение реализовано для первого лога и оставлено в коде.
Плюс ручного метода парсинга, если в логах встречается неформатная запись, отбраковывается только она, нативная загрузка бракует весь файл.
Как я понял из задания, получить все данные в уже готовом формате надо на уровне одного запроса в базу. Так и реализовал. Запрос можно посмотреть через GUI.
GUI реализовано как указано в задании по средством ExtJS за версией 6.0.2. Как оказалось, информации по этому фреймворку в интернете не много. И по обзорам он не в почёте из-за сложного вхождения. Вы видите результат после изучения его двух дней.
Так же на его основе реализована задача фильтрации по IP в одноимённой колонке.
Сам движок ExtJS добавлен в исключения в виду размера. На него есть ссылки только в файле index.php, из нужно будет поправить в соответствии с вашей версией.