Code Monkey home page Code Monkey logo

tjfgpb's Introduction

Test job for GPB

Тестовое задание Выполнить разбор файла почтового лога, залить данные в БД и организовать поиск по адресу получателя. Исходные данные:

  1. Файл лога maillog
  2. Схема таблиц в БД (допускается использовать postgresql или mysql):
CREATE TABLE message (
	`created` TIMESTAMP NOT NULL,
	`id` VARCHAR(16) NOT NULL,
	`int_id` CHAR(16) NOT NULL,
	`str` VARCHAR(256) NOT NULL,
	`status` BOOL, CONSTRAINT message_id_pk PRIMARY KEY(id)
);
CREATE INDEX message_created_idx ON message (`created`);
CREATE INDEX message_int_id_idx ON message (`int_id`);
CREATE TABLE log (
	`created` TIMESTAMP NOT NULL,
	`int_id` CHAR(16) NOT NULL,
	`str` VARCHAR(256),
	`address` VARCHAR(256)
);
CREATE INDEX log_address_idx USING hash ON `log` (`address`);

Пояснения: В качестве разделителя в файле лога используется символ пробела. Значения первых полей:

  • дата
  • время
  • внутренний id сообщения
  • флаг
  • адрес получателя (либо отправителя)
  • другая информация

В качестве флагов используются следующие обозначения:

  • <= прибытие сообщения (в этом случае за флагом следует адрес отправителя)
  • => нормальная доставка сообщения
  • -> дополнительный адрес в той же доставке
  • ** доставка не удалась
  • == доставка задержана (временная проблема)

В случаях, когда в лог пишется общая информация, флаг и адрес получателя не указываются.

Задачи:

1.

Выполнить разбор предлагаемого файла лога с заполнением таблиц БД: В таблицу message должны попасть только строки прибытия сообщения (с флагом <=). Поля таблицы должны содержать следующую информацию:

  • created - timestamp строки лога
  • id - значение поля id=xxxx из строки лога
  • int_id - внутренний id сообщения
  • str - строка лога (без временной метки)

В таблицу log записываются все остальные строки:

  • created - timestamp строки лога
  • int_id - внутренний id сообщения
  • str - строка лога (без временной метки)
  • address - адрес получателя

2.

Создать html-страницу с поисковой формой, содержащей одно поле (type="text") для ввода адреса получателя.

Результатом отправки формы должен являться список найденных записей ' <строка лога>' из двух таблиц, отсортированных по идентификаторам сообщений (int_id) и времени их появления в логе.

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

Решение

Данные для подключения к базе зашиты в пакете TJFGPB::Utils. Зависимости перечислены в cpanfile.

Задание №1

Ожидается, что лог-файл с исходными данными находится в корне проекта и называется out. Для выполнения разбора необходимо запустить скрипт parse_log.pl из директории bin:

perl ./bin/parse_log.pl

В результате работы будут добавлены записи в базу.

Задание №2

Адрес скрипта: /cgi-bin/search.pl.

Меня немного сбивает с толку формулирование задачи: указано что поиск необходимо проводить по адресу получателя, но при этом указано что искать надо в двух таблицах. Насколько понял из описания, отправитель может быть только в таблице log. Обычно, условия можно уточнить у заказчика, но... Так или иначе, сделал поиск по двум таблицам. Если это не верно, то я бы переписал запрос без части union, только по таблице log.

tjfgpb's People

Contributors

cynovg avatar

Watchers

 avatar

Forkers

gpbtest

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.