2016-05-01 1 views
-1

Пусть имеется некоторая система, в которой строки в базе данных заполнены, когда что-то случается:Какой шаблон или метод следует использовать для создания отчета из событий?

  • , когда пользователь просто входит в систему, строка вставляется в базу данных с типом входа и времени в таблице user_logins.
  • когда оператор делает вызов к пользователю, строку с оператором идентификатор, идентификатор пользователя и дату insertted в базе данных в таблице outgoing_calls
  • , когда оператор не отвечает на пользовательский вызов, в строке с датой, идентификатор пользователя и тип звонок, введенный в базу данных

Затем, по прошествии некоторого времени, скажем, месяца, нам нужен отчет о том, кто звонил, кому, на сколько звонков не было ответа и т. д. Какой шаблон следует использовать для организации этой функции ?

На первый взгляд этот процесс, похоже, много регистрируется, но ведение журнала - это процесс, когда мы храним сообщение с некоторым форматом (date-processId-messageWithPlaceHolders). Поэтому использование системы регистрации для этого не очень подходит.

С другой стороны, это выглядит как обработка событий, но нет необходимости делать какие-либо действия, когда происходит «событие», нет прослушивателей, нет очередей. Простое хранение базы данных для дальнейшей отчетности.

Итак, какой шаблон или метод следует использовать для эффективной реализации этой функции?

ответ

1

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

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

  • Вам нужно создать отчет ежемесячно
  • Для этого нужно выполнить задание, которое генерирует результат по крайней мере, раз в месяц
  • Для этого вам необходимо сохранить свои события в формате, который может быть понят вашей работой.

Таким образом, хорошим решением является периодическая периодическая работа. Это может быть процесс java для запуска вручную, задание cron, задача hadoop, ... зависит от вашего стека технологий. Ваши события должны храниться в то время, когда они происходят. Опять же, в зависимости от вашего стека, это может быть реляционная база данных, хранилище ключевых значений, файл с линиями журналов ..., с чем проще всего работать в вашем стеке технологий.

Все эти варианты могут быть хорошими, но некоторые из них, вероятно, лучше. Например, я рекомендую не использовать чистое протоколирование строк. Вам нужно извлечь структурированные атрибуты, такие как время, цифры и т. Д., Поэтому предпочитайте формат, который поможет вам сохранить безопасность типов.

0

Я хотел бы использовать шаблон точно реализовать, это в Вашем бизнес-сервис:

void login(User user) { 
    entityManager.persist(new UserLogin(user)); 
} 

void call(Operator op, User user) { 
    entityManager.persist(new PhoneCall(op, user)); 
} 

void missedCall(User user, Operator op) { 
    entityManager.persist(new MissedCall(user, op)); 
} 

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

void answeredCall(UserCall call, Operator op) { 
    entityManager.merge(call).setAnsweredBy(op); 
} 

и сообщать вызовы, когда call.answeredBy is null.

В любом случае, я бы сделал отчетность, запросив базу данных.

Alternative

Если большинство операций в вашем бизнес-услуг должны быть записаны так, я мог бы автоматизировать этот процесс, используя перехватчик АОП.

Смежные вопросы