Zidium

Исходные коды примеров находятся в архиве API

Описание проблемы

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

Решение

Приложения должны выполнять "склейку" событий и отправлять статистику о событиях в систему мониторинга.

Реализация

Для отправки сведений о событии "Пользователь на сайте", создадим базовый контроллер 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 = ZidiumHelper.GetWebSiteComponent();
			component
				.CreateComponentEvent("Пользователь на сайте", message)
				.SetImportance(EventImportance.Success)
				.SetJoinInterval(TimeSpan.FromMinutes(10))
				.SetActualInterval(TimeSpan.FromMinutes(1))
				.SetJoinKey(user, ip)                   
				.Add();
		}
	}
}

При каждом запросе ControllerBase для авторизованных пользователей регистрирует событие "Пользователь на сайте". Интервал склейки (SetJoinInterval) равен 10 минутам, это означает, что если между текущим и прошлым событием прошло менее 10 минут, то новое событие создаваться не будет, а прошлое событие будет продлено. Чтобы события разных пользователей не склеивались между собой, указывается ключ склейки (SetJoinKey). В данном случае события считаются одинаковыми, если у них одинаковый IP и логин пользователя.

Проверим склейку событий

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

Теперь зайдите в личный кабинет системы мониторинга Zidium и посмотрите события с типом "Пользователь на сайте":