В поставку СУБД Cache, кроме самого сервера базы данных, входит технология для «real-time» бизнес-аналитики DeepSee. Её использование – это наиболее быстрый способ добавить OLAP функциональность к вашему приложению на Cache.

Другим элементом установки является подсистема аудита с web-интерфейсом, возможностью расширения собственными типами событий и API для использования в прикладном коде.

Под катом – небольшой пример совместного использования этих подсистем, позволяющий ответить на вопросы — кто, что, когда делал в информационной системе?

Подсистема аудита


Предназначена для регистрации происходящих в системе событий. В системном портале управления Cache есть готовый web-интерфейс — поиск, фильтрация, экспорт, очистка и т.д. Использовать аудит в прикладном коде можно с помощью API — классы Security.Events — для регистрации типов событий, %SYS.Audit — самих событий, %SYSTEM.Security:Audit() – удобный метод для регистрации события. По умолчанию подсистема аудита неактивна, запускается через: Портал управления — Администрирование системы — Безопасность — Аудит.

Ниже, пример страницы с несколькими кнопками, нажатия на которых регистрируются в базе аудита.
Пример использования аудита в прикладном коде
/// Пример использования подсистемы аудита в прикладном коде
Class habra.audit Extends %CSP.Page {

/// Регистрация прикладных ( пользовательских ) типов событий 
ClassMethod EventTypesRegister() As %Status {
#; Типы событий регистрируются через класс из системной области %SYS
set ns $namespace$namespace "%SYS"

#; set status = ##class(Security.Events).Create( Source, Type, Name, Description )
set statusC ##class(Security.Events).Create«habra»«audit»«create», «Create event example» 
set statusR ##class(Security.Events).Create«habra»«audit»«read», «Read event example» )
set statusU ##class(Security.Events).Create«habra»«audit»«update», «Update event example» )
set statusD ##class(Security.Events).Create«habra»«audit»«delete», «Delete event example» )

set $namespace ns
set status ( statusC && statusR && statusU && statusD )

Quit status
}

/// Простая страница с несколькими кнопками
ClassMethod OnPage() As %Status {
 
 &html<<!DOCTYPE html><html><head></head><body>

<h3>Hello, #($username)#!</h3><hr>

<form method='post'>
<button name='create'>Create</button>
<button name='read'  >Read </button>
<button name='update'>Update</button>
<button name='delete'>Delete</button>
</form>

</body></html>>

 Quit 1
}

/// Разбираем параметры формы
ClassMethod OnPreHTTP() As %Boolean ServerOnly = 1 ] {

#; форма отправит на сервер единственный параметр — имя кнопки
#; http://[server]/[app]/[class]?name=
set name $order( %request.Data("") ) ; узнаем какая кнопка вызвала отправку

#; сохраняем в журнал аудита ( Source, Type, Name, EventData, Description )
set status ##class(%SYSTEM.Security).Audit«habra»«audit», name, «нажал кнопку»«1984» )

Quit 1
}

}



Технология бизнес-аналитики DeepSee


DeepSee включает в себя разнообразные средства для построения хранилищ данных, анализа и визуализации данных, пользовательский портал, отчеты, печать, экспорт и т.д. Использует подсистемы безопасности и аудита Cache. Есть различные способы организовать интеграцию DeepSee практически с любым приложением – от терминала до web.

Одной из особенностей DeepSee является возможность аналитики на оперативных данных. Достигается за счет фоновой синхронизации куба с данными вашего приложения. Для этого в классе данных определяют параметры DSTIME и DSINTERVAL. При компиляции класса Cache генерирует дополнительный код регистрации изменений. При запуске синхронизации обновляется только незначительная часть данных куба, при этом синхронизация может выполняться непосредственно сразу после изменений в OLTP классах, что позволяет говорить о “real-time” бизнес-анализе.

Для использования фонового обновления куба в нашем примере, необходимо добавить параметры DSTIME и DSINTERVAL в системный класс %SYS.Audit и скомпилировать его.
Изменения в %SYS.Audit


Всё вместе


После предварительной настройки области ( необходимо включить отображения глобала ^CacheAuditD ) и соответствующей настройки веб-приложения для работы с DeepSee, приступаем к определению куба.

Укажем исходный класс с данными. Свойства класса станут основой для определения измерений куба. В классе %SYS.Audit свойства Username, Event, UTCTimeStamp хранят информацию для ответа на поставленные в начале статьи вопросы. На основании свойства Username определим измерение Кто, свойства Event – измерение Что, свойства UTCTimeStamp – измерение Когда. В качестве меры по умолчанию используется количество записей.

После компиляции и первоначального заполнения куба, в DeepSee Analyzer настраивают различные срезы данных (сводные таблицы). Они, в свою очередь, становятся источником данных для визуальных компонентов — виджетов. Виджеты объединяют в индикаторные панели (dashboard) и предоставляют к ним доступ для пользователей. Пользовательский портал позволяет без программирования организовать работу пользователей с индикаторными панелями.


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


Полезные ссылки:
еще о DeepSee
исходники примера
отображение портала DeepSee на мобильных устройствах

Комментарии (1)


  1. morisson
    05.06.2015 16:10

    Все получается. Один нюанс: класс %SYS.Audit как источник данных для куба нужно вводить вручную (как и показано на видео) — в окне выбора не показывается, как и все системные классы.