Описание проблемы
Некоторые события могут случаться очень часто, хранить информацию о каждом случае события затратно. Удобно хранить информацию о таких происшествиях в виде событий, у которых есть "Время начала", "Время завершения" и "Количество случаев". Например, для веб-приложения можно сделать событие "Пользователь на сайте", которое будет показывать когда пользователь начал работать с сайтом, когда закончил и сколько страниц просмотрел.
Решение
Приложения должны выполнять "склейку" событий и отправлять статистику о событиях в систему мониторинга.
Реализация
Для отправки сведений о событии "Пользователь на сайте", создадим базовый контроллер ControllerBase:
/// <summary> /// Базовый класс всех контроллеров. /// </summary> public abstract class ControllerBase : Controller { protected override void OnActionExecuting(ActionExecutingContext filterContext) { base.OnActionExecuting(filterContext); if (Request.IsAuthenticated) { var user = HttpContext.User.Identity.Name; var ip = Request.UserHostAddress; var message = string.Format( "Пользователь {0} c IP {1}", user, ip); var component = Client.Instance.GetDefaultComponentControl(); component .CreateComponentEvent("Пользователь на сайте", message) .SetImportance(EventImportance.Success) .SetJoinInterval(TimeSpan.FromMinutes(10)) .SetJoinKey(user, ip) .Add(); } } }
При каждом запросе ControllerBase для авторизованных пользователей регистрирует событие "Пользователь на сайте". Интервал склейки (SetJoinInterval) равен 10 минутам, это означает, что если между текущим и прошлым событием прошло менее 10 минут, то новое событие создаваться не будет, а прошлое событие будет продлено. Чтобы события разных пользователей не склеивались между собой, указывается ключ склейки (SetJoinKey). В данном случае события считаются одинаковыми, если у них одинаковый IP и логин пользователя.
Проверим склейку событий
Выполните вход в приложение. Для этого укажите любой логин и пароль 1. После успешно входа походите по страницам "Главная", "О проекте", "Контакты" и "Проверка соединения". Выполните вход под другим пользователем и опять походите по тем же страницам.
Теперь зайдите в личный кабинет системы мониторинга Zidium и посмотрите события с типом "Пользователь на сайте":