Статистика

В некоторых ситуация встроенных статистических отчетов может оказаться недостаточно и возникнет необходимость обращения к сырым логам для построения специализированных отчетов.

Статистика строится на записях событий в таблицы баз данных. События скачивания книг и лог поисковых запросов всегда сохраняется в таблицу основной СУБД Drupal. Логи постраничного просмотра могут храниться как в СУБД Drupal, так и в MongoDB, инсталлируемой специально для хранения логов и высокоскоростной их обработки в условиях большого числа конкурентных подключений к книгам с включенным контролем конкурентных лицензий.

Статистика сессий плееров

Когда пользователь в браузере открывает плеер документа, запускается счетчик статистики на JavaScript, который раз в 15 секунд сохраняет информацию о просмотре документа в таблицу elis_play_log.

В таблице хранится информация:

play_id - идентификатор сессии плеера. Каждое открытие плеера создает новую сессию.

nid - идентификатор ноды документа. Для книг подставляется nid книги, а не страницы.

start_timestamp - метка времени в unixtime когда плеер был открыт.

end_timestamp - метка времени в unixtime когда плеер был закрыт с точностью 15 секунд.

uid - идентификатор пользователя или 0 если пользователь не авторизован.

sid - хеш идентификатора сессии пользователя. Сессией может быть один из идентификаторов: user->sid, user->ssid, elis_sid, ip + php_sid.

device_id - идентификатор устройства, если просмотр осуществляется из приложения ELiS.

data_count - абстрактный счетчик объема просмотренного документа. Смысл зависит от типа ресурса, так для книг это число просмотренных страниц, для видео число просмотренных секунд и т.д.

format - формат данных, в котором просмотрен ресурс (формат изображения и т.п.), на сегодня не используется.

org_id - идентификатор организации (идентификатор термина из словаря организации) с которой ассоциирован пользователь. Если пользователь ассоциирован с несколькими организациями, подставлена будет одна из них.

binary_ip - ip-адрес пользователя в бинарном формате.

data - сериализованный средствами PHP объект, в котором хранится расширенная информация по сессии работы с документом. Для десериализации используйте PHP-функцию unserialize. Смысл хранящихся данных зависит от типа ресурса и версии плеера.

access - имеет ли пользователь доступ к контенту. ‘1’ - доступ разрешен. ‘0’ - доступ ограничен.

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

События в сессиях плеера

В таблице elis_play_log в поле data сохраняются в сериализованном виде информация о сессии (см. выше).

После десериализации в поле data.events будет находиться массив событий. События типизованы и имеют вид:

event.type (строка, обязательное) - тип события.

event.value (строка, опционально) - значение события, зависит от типа.

event.time (вещественное, обязательно) - время события с момента инициализации плеера. Время заданно в секундах и может иметь дробную часть (отвечающую за миллисекунды).

event.eventData (объект, опционально) - структура, более детально описывающая событие, чем может event.type. Конкретная структура зависит от типа события. Для некоторых типов событий event.eventData имеет обязательные элементы.

Допустимые типы событий в event.type:

init - событие инициализации плеера, в данных содержит в CamelCase значения браузерных значений referrer, navigator, screen, location (см. примеры: https://elibsystem.ru/node/447).

infoLoaded - событие загрузки информации для плеера. Позволяет узнать сколько времени потребовалось на загрузку информации. Определено не для всех плееров.

openToc - событие открытия в плеере таблицы контента. Определено для плеера PDF.

setPlayerSize - событие установки размера плеера. eventData.playerWidth, eventData.playerHeight - обязательные параметры.

setUsername - событие назначения имени пользователя. Может применяться в ситуации заданий H5P, когда пользователя просят ввести имя или идентификатор. В value находится имя пользователя или иной идентификатор.

openFragment - открыт некоторый фрагмент ресурса, например страница книги или слайд презентации. В value находится открытый фрагмент. В eventData.viewTime может находиться время просмотра фрагмента в секундах (параметр может быть вычислен не для всех фрагментов или может быть вычислен не для всех фрагментов в рамках сессии).

setViewMode - режим просмотра плеера. В value находится имя режима. Обычно ‘full’ или ‘embed’.

setViewState - установка состояния отображения плеера. Value содержим имя режима, например: ‘onePage’, ‘twoPage’, ‘scrollOneColumn’ для книги в PDF.

download - Скачивание файла. Value содержит URL скачиваемого файла.

Статистика запуска приложений ELiS

Когда пользователь в приложении ELiS впервые после запуска открывает каталог библиотеки, в таблицу device_elis_stats заносится соответствующие событие. В таблице хранится следующая информация:

deviceCookieId - уникальный идентификатор приложения.

uid - идентификатор пользователя Drupal.

timestamp - время занесения записи в unixtime

mac - мак адрес устройства. На данную информацию опираться не стоит, т.к. iOS7+ и Android6+ всегда будут отдавать приложению фиктивный адрес 020000000000.

manufactured - операционная система пользователя. Соответственно, может быть iOS, Android, Windows.

width - ширина устройства в момент входа.

height - высота устройства в момент входа.

os - версия операционной системы. Может быть Windows, iPhone OS, Linux.

applicationVersion - версия приложения ELiS.

При отображении статистики каждая запись в этой таблице приравнивается к пользовательской сессии.

По адресу http://example.com/device/logs/run доступен лог запуска приложений ELiS. По нему в удобной форме можно отслеживать как часто используют приложения ELiS для входа в вашу библиотеку. Статистика из этой таблицы также попадает в виджет.

Скачанные книги

Статистика по скачанным книгам собирается только при активированном модуле Ebooks DRM.

Скачивание исходного файла книги (для которого разрешение скачивание без DRM) или скачивание защищенной книги попадает в таблицу основной СУБД Drupal ebooks_drm.

В таблице содержатся поля:

nid - идентификатор ноды скачанной книги.

uid - идентификатор пользователя. Будет равен нуля для неавторизованного пользователя.

time_update - зарезервировано.

time_expire - время истечения срока на который была скачана книга в unixtime

recall - зарезервировано.

time_download - время скачивания в unixtime.

format - формат книги (pdf или epub).

drm_enabled - включена ли DRM-защита на скачанной книге. 1 - включена и 0 если разрешено скачивание исходного файла.

В случае если DRM не активирован, время чтения книги устанавливается равным 6 месяцам.

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

Статистика поисковых запросов

Все выполненные через интерфейс ELiS поисковые запросы попадают в таблицу statistics_elis_search основной СУБД Drupal.

Поля таблицы:

uid - идентификатор пользователя. Ноль для анонимного зарпоса.

sid - идентификатор сессии пользователя. Идентификатор сессии отличет от NULL только если поисковый запрос выполняется из браузера. Будет NULL при поиске из приложений или по протоколу OpenSearch.

date - время запроса в unixtime.

text - текст поискового запроса.

nid - идентификатор ноды, с которой сделан запрос. Если NULL - поисковый запрос выполняется по всей библиотеке. Если идентификатор принадлежит ноде типа книга или страница книги - поиск осуществляется по книге. Если принадлежит ноде типа каталог (subj), поиск ведется в ветке каталога.

Логи просмотров страниц в PDF

Каждый просмотр страницы PDF-книги с сайта попадает в данные логи. На основе этих логов вычисляется книговыдача с сайта. Из них же считается страницевыдача.

Данные логи могут храниться в таблице statistics_ebook в основной СУБД Drupal или в отдельных коллекциях (аналог таблиц) в MongoDB. При этом на каждый час в MongoDB создается новая коллекция, что позволяет уменьшить нагрузку на базу данных при подсчете занятых конкурентных лицензий чтением книг с сайта.

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

nid - идентификатор страницы (ноды)

uid - идентификатор пользователя. Равен нулю если пользователь не авторизован.

sid - сессия пользователя. Может быть пустой или NULL, если пользователь просматривает страницу из приложения и он в нем авторизован.

date - время добавления записи в unixtime.

format - формат страницы. Может быть jpg, png, webp, svg, pdf.

parent_nid - идентификатор ноды книги.

Если вы хотите получить логи из MongoDB, рекомендуется изучить работу класса ElisStatMongo, находящегося обычно в подпапке модуля статистики /var/www/vh/library/sites/all/modules/elis_stats/class/ElisStatMongo.php

Warning

В данную статистику не попадают просмотры обложки и страниц в разрешении менее 300 пикселей по ширине. Соответственно, такие просмотры не учитываются в конкурентых лицензиях. Таким способом предотвращается ситуация, когда просмотр обложек в каталоге попадает в книговыдачу с просмотром одной страницы.

Note

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

Note

В данную статистику не попадают пользователи с ролью (правами) librarian и администратор сайта с uid 1, что предотвращает учет служебных обращений.

Warning

Логика записи данных в sid может поменяться в дальнейшем. Нельзя считать число сессий простым суммированием уникальных значений sid.

Note

При использовании упреждающего кеширования со стороны клиентского плеера, возможно некоторое завышение отчетности по страницевыдачи.

При скачивании исходной книги в виде файла, скачанные страницы в статистике не отображаются.

При скачивании книги защищенной DRM в приложении ELiS, скачанные и просмотренные страницы из приложения на любом устройстве в котором авторизован пользователь не учитываются. Просмотренные страницы на сайте при этом попадают в статистику как обычно.

Установите MongoDB не ниже 3 версии.

Настройте MongoDB на использование движка WiredTiger согласно документации к базе данных. Для этого в файле /etc/mongod.conf добавьте или раскомментируйте строку storageEngine=wiredTiger.

Запустите сервер MongoDB и настройте сервер на автоматический запуск при загрузке сервера.

Установите модуль MongoDB.

Warning

Не рекомендуется использовать MongoDB для переноса части полей Drupal в эту базу данных из основной СУБД. Нельзя переносить поля Drupal привязанные к типам материалов управляемых ELiS в MongoDB. MongoDB рекомендуется использовать только для хранения логов просмотров страниц.

Активируйте модуль MongoDB. Дополнительные модули (MongoDB Block, MongoDB Block UI и т.д.) можно не активировать.

Сконфигурируйте сервер MongoDB на использование с ELiS. Для этого следует добавить или расскомментировать в файле конфигурации Drupal /var/www/vh/library/sites/default/files/settings.php следующие строчки:

$conf['mongodb_connections'] = array(
  'default' => array(
    'host' => 'mongodb://127.0.0.1',
    'db' => 'elis',
  ),
  'dayLog' => array(
    'host' => 'mongodb://127.0.0.1',
    'db' => 'elisDayLog',
  ),
  'userLog' => array(
    'host' => 'mongodb://127.0.0.1',
    'db' => 'elisUserLog',
  ),
);

#connections configuration

$conf['mongodb_collections'] = array(
  'dayLog' => array(
    'db_connection' => 'dayLog',
  ),
  'userLogs' => array(
    'db_connection' => 'userLog',
  ),
);

ELiS автоматически обнаружит появление данной конфигурации и переключит хранение логов на MongoDB.

Warning

При переключении на MongoDB необходимо провести процедуру миграции логов, либо зафиксировать посещаемость на начало года для корректного годового статистического отчета.

Warning

Для повышения производительности, не используйте авторизацию в MongoDB. Однако, в этом случае, вам следует запускать MongoDB только на локальной машине без предоставление доступа к базе по сети, либо, если MongoDB вынесена на отдельный сервер, использовать для фильтрации файервол.

Статистика по активностям пользователей

По адресу reports/elis/users есть статистика по активностям пользователей.

В ней два отчета: сколько каждым пользователем создано ресурсов и сколько открыто.

Открытие ресурсов считается простым суммированием логов ELiS PlayLogs. Т.е. фактически это количество сессий, записаных в таблицу elis_play_log.

Если задать GET-параметр format=json, вывод будет в JSON вместо HTML.

Так как этот отчет не обезличен, для доступа к нему роли пользователя надо дать права “Access ELiS users reports”.

Внешняя статистика

В ELiS имеется возможность подключать внешние статистические аналитические системы, такие как Yandex.Metrika и Google Analytics.

Эти системы дополняют статистику ELiS тем, что позволяют точнее определить число уникальных посетителей, их пол, возраст, города, страны, разрешения экранов, типы устройств (смартфоны, планшеты, настольные ПК), источники переходов на сайт, время посещений, доступные технологии, версии браузеров и многое другое.

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

ELiS не ставит долгоживущие куки в браузер, поэтому если пользователь не авторизован, ELiS сложно сказать, заходил ли он вчера на сайт. В связи с этим ELiS не считает число пользователей, посетивших библиотеку за заданный период. Зато этот показатель считают внешние статистические системы.

Разница между внешней статистикой и ELiS в том, что ELiS чётко знает что такое документ-плеер и умеет считать показатели воспроизведения документов в плеере и статистика ELiS во многом ориентированна именно на то, как документ в плеере воспроизводился. Внешние системы ничего не знают о плеере и не могут учесть, например, число просмотренных страниц в книге. Зато внешние системы считают множество других показателей, связанных с сеансом взаимодействия не с отдельным документ-плеером, а с сайтом целиком.

Внешняя статистика дополняет статистику ELiS и их рекомендуется использовать совместно.

Вы можете задать один идентификатор Google Analytics на сайт целиком в настройках модуля ELiS Stats (admin/config/content/elis_stats).

Больше ничего настраивать не надо и отдельный внешний модуль Google Analytics для Drupal также устанавливать не надо.

Яндекс.Метрика может быть установлена как на сайт целиком, так и в виде отдельного счётчика на каждую организацию.

Для работы счётчика на сайте целиком, идентификатор счётчика надо указать в настройках модуля ELiS Stats (admin/config/content/elis_stats).

Для организаций идентификатор счётчика опционален, пишется в текстовое поле field_yandex_metrika, прикреплённого к сущности организации (если поля нет - создайте) и активируйте модули ELiS Stats и ELiS Organization. Больше ничего для настройки не требуется.

Активация счётчика организации происходит либо если пользователь находится в сети организации, либо ассоциирован с организацией (профиль пользователя имеет ассоциацию с сущностью организации). Если пользователь ассоциирован с несколькими организациями, активируются счётчики сразу всех из них + счётчик сайта (если есть).

Подробнее о счётчике Яндекс.Метрики для организаций можно прочитать в блоге: https://elibsystem.ru/node/203.