Описание проблемы
Некоторые события могут случаться очень часто, хранить информацию о каждом случае события затратно. Удобно хранить информацию о таких происшествиях в виде событий, у которых есть "Время начала", "Время завершения" и "Количество случаев". Например, для веб-приложения можно сделать событие "Пользователь на сайте", которое будет показывать когда пользователь начал работать с сайтом, когда закончил и сколько страниц просмотрел.
Решение
Приложения должны выполнять "склейку" событий и отправлять статистику о событиях в систему мониторинга.
Реализация
Для отправки сведений о событии "Пользователь на сайте", создадим базовый контроллер 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 и посмотрите события с типом "Пользователь на сайте":