[siteStatistics] ip, referer и user-agent

В новой версии сделаны небольшие, но приятные доработки. Начнём по порядку.





Поля ip, referer и user-agent

В таблице пользователей появились эти три поля. Лично мне особенно интересно поле referer. Видно откуда человек пришёл. Остальные два поля тоже пригодятся. По ним, например, можно вычислить дубли. Иногда, почему-то они появляются. У меня на сайте, если открыть главную страницу в хроме, то статистика почему-то задваивается. В других браузерах такой странности не наблюдается.
Реферер и юзер-агент на всегда полностью помещаются в поле. Чтобы не мучиться с размерами колонок посмотреть их можно по двойному клику.

Другие доработки

Ещё для фильтрации пользователей добавлено 2 системные настройки:
  • stat.not_allowed_ip — список ip адресов через запятую, для которых статистика учитываться не будет.
  • stat.not_allowed_user_agents — то же, что и предыдущая настройка, только для юзер-агентов. Например, для отсечения ботов можно указать «bot,spider,slurp». Поиск идет через preg_match().
Я первую настройку использую для отсечения запросов с h3.modhost.pro (мой провайдер), который каждые 10 минут стучится на главную страницу.

В списке пользователей теперь есть возможность их удаления. При удалении будет предложено 2 варианта:
  1. Удалить пользователя и статистику его просмотров.
  2. Удалить пользователя, а статистику оставить.

В сниппете siteOnlineUsers добавлено 2 свойства:
  • fullMode — режим вывода информации о текущих пользователях — короткий (false) или полный (true).
  • tplItem — шаблон для вывода списка текущих пользователей (для полного режима). По-умолчанию, [[+stat.fullname]]
Короткий режим —

В полном режиме выводится поименный список пользователей. Имена берутся из поля fullname профиля.

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

Ну и напоследок приведу пример сортировки статей по количеству просмотров с использованием сниппета pdoResource из библиотеки pdoTools.
[[!pdoResources?
    &parents=`0`
    &limit=`0`
	&loadModels=`sitestatistics`
	&tpl=`@INLINE [[+id]]. [[+pagetitle]] - [[+views]]`
	&leftJoin=`{
		"Statistics": {
		    "class": "PageStatistics",
			"on": "modResource.id = Statistics.rid"
		}
	}`
	&select=`{
	    "modResource": "*",
	    "Statistics": "IFNULL(SUM(views),0) as views"
	}`
	&groupby=`modResource.id`
	&sortby=`views`
]]

Тоже самое, только для фильтра mFilter2.
[[!mFilter2?
    &class=`msProduct`
    &element=`msProducts`
    &loadModels=`sitestatistics`
    &leftJoin=`{
        "Statistics":{"class":"PageStatistics","on":"msProduct.id=Statistics.rid"}
    }`
    &select=`{
        "msProduct":"*",
        "Statistics":"IFNULL(SUM(views),0) as views"
    }`
    &groupby=`msProduct.id`
    &sortby=`views`
]]

Полная документация.

П.С. Теперь в списке пользователей периодически наблюдаю попытки подбора адреса админки, так как при переадресации на страницу 404 в поле реферер пишется набранный адрес. Прикольно.
Сергей Шлоков
06 мая 2016, 04:31
2
1 780
+8

Комментарии: 32

Владимир
06 мая 2016, 11:52
+1
Спасибо! Теперь знаю и какие роботы постоянно тусуются и что их интересует, т.е. в ЯМетрике то этого нет, а иногда полезно знать. Например, как часто и когда Яндекс новости читают предназначенный для них feed, сколько висит постоянно «читателей» на общем RSS и многое другое.
Николаевич
29 июля 2016, 20:34
0
Было бы здорово группировать результаты по parents и иметь возможность фильтровать их с определенной даты. К примеру, вывести общее количество просмотров всех страниц, у которых parents=1 и дата отсчета статистики с 29.07.2016
nweb
30 сентября 2016, 13:52
0
Подскажите, как вывести статистику по определенному пользователю за определенный период? На фронте.
    Сергей Шлоков
    01 октября 2016, 10:11
    1
    +2
    Как-то так
    [[!pdoUsers?
        &tpl=`@INLINE <p>[[+username]] - [[+views]].</p>`
        &loadModels=`sitestatistics`
        &innerJoin=`{
            "UserStat":{"class":"UserStatistics","on":"modUser.id=UserStat.uid"},
            "PageStat":{"class":"PageStatistics","on":"UserStat.user_key=PageStat.user_key"}
        }`
         &select=`{
            "PageStat": "IFNULL(SUM(PageStat.views),0) as views"
        }`
        &groupby=`UserStat.uid`
        &where=`["UserStat.uid = 1 AND PageStat.date BETWEEN '2016-01-01' and '2016-06-31' "]`
    ]]
    В параметре where указывается id пользователя и период.
      nweb
      01 октября 2016, 11:04
      0
      Спасибо!
nweb
01 октября 2016, 21:02
0
Снимаю галочки с показа некоторых столбцов в бэкенде. Но при обновлении страницы они все же остаются. Можно ли как-нибудь «запоминать» это?
    Сергей Шлоков
    02 октября 2016, 09:04
    0
    Наверно можно.
      nweb
      02 октября 2016, 09:41
      0
      Этого не планируется в следующих версиях?
nweb
01 октября 2016, 21:24
0
Еще вопрос. Как открыть доступ для других пользователей к статистике в бэкенде?
    Сергей Шлоков
    02 октября 2016, 09:07
    0
    В следующей версии добавлю политики. А пока можно в процессорах закомментировать переменную $permission.
      nweb
      02 октября 2016, 09:45
      0
      Вообще, я хотел бы дать доступ только одному пользователю из группы Users и, естестественно, оставить для админа. Можно ли это сделать сейчас каким-нибудь костылем? А в новой версии уже настроить политику.
        Сергей Шлоков
        02 октября 2016, 09:53
        0
        Посмотреть в процессорах права и добавить их в систему в «Настройке доступа». А потом назначить эти права пользователю.
          Андрей Шевяков
          28 августа 2018, 10:55
          0
          Помогите настроить доступ Пользователю группы Manager. Где что прописать?
Lem
Lem
09 октября 2018, 18:41
0
Не могу понять. Не работает «stat.not_allowed_user_agents». Нужно писать туда «bot,spider,slurp» или полную запись для каждого бота вида «Mozilla/5.0 (compatible; SemrushBot/2~bl; +http://www.semrush.com/bot.html)»?
    Сергей Шлоков
    09 октября 2018, 19:49
    0
    «bot,spider,slurp»
      Lem
      Lem
      09 октября 2018, 19:51
      0
      Почему тогда в «Онлайн» и в «Пользователи» постоянно тусуются боты? :)
        Сергей Шлоков
        09 октября 2018, 20:03
        0
        Боюсь, разочарую, но несмотря на годы практики мне так и не открылся дар телепатии.
          Lem
          Lem
          09 октября 2018, 20:08
          0
          Ну это понятно.
          Я к тому, что может ещё где какие доп. настройки надо делать?
          Стоит MODX Revo 2.6.1. После установки плагина кеш чистил. На страницах выводит статистику, в админке показывает, но вот ботов игнорить отказывается.
            Сергей Шлоков
            09 октября 2018, 20:12
            0
            Что указано в настройке? Какие юзер-агенты у ботов?
              Lem
              Lem
              09 октября 2018, 20:16
              0
              В настройке поставил, то что написано в инструкции: bot,spider,slurp
              В админке в «Онлайн» вижу:
              — Mozilla/5.0 (compatible; YandexAccessibilityBot/3.0; +http://yandex.com/bots)
              — Mozilla/5.0 (compatible; SemrushBot/2~bl; +http://www.semrush.com/bot.html)
              — Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
              — Mozilla/5.0 (compatible; DotBot/1.1; www.opensiteexplorer.org/dotbot, help@moz.com)
              и т.д.

              Ещё вопрос. Эта настройка не учитывает статистику только для показа в админке или на сайте количество посещений будет тоже без ботов учитываться?
                Сергей Шлоков
                09 октября 2018, 20:25
                0
                Так в админке они берутся из таблиц статистики. Боты отсекаются в плагине.Попробуйте подебажить. У меня кроме RSS ридеров ни один бот не пролазит.
                  Lem
                  Lem
                  09 октября 2018, 20:29
                  0
                  Заглянул в лог. А там беда.
                  (ERROR @ /.../core/cache/includes/elements/modplugin/18.include.cache.php: 9) PHP warning: preg_match(): Unknown modifier '2'
                  [2018-10-05 21:37:02]
                  Вот такие записи каждые 1-4 минуты, начиная с даты установки плагина.
                    Сергей Шлоков
                    09 октября 2018, 20:35
                    0
                    Судя по всему в системной настройке ботов есть слеш.
Виталий
06 декабря 2018, 16:27
0
Спасибо за компонент!
Есть вопрос. Возможно ли отфильтровать данные по диапозонам ip адресов?
Например есть массив с диапозоннами [«31.173.80.0/21»,«85.26.232.0/22»].
Как получить статистику например увидеть на каких страницах были клиенты?
    Сергей Шлоков
    06 декабря 2018, 22:22
    0
    Есть вопрос. Возможно ли отфильтровать данные по диапозонам ip адресов?
    siteStatistics ведёт статистику. А вот анализом придётся заняться самому. Можно через pdoResources.

    Как получить статистику например увидеть на каких страницах были клиенты?
    Открываете список пользователей и кликаете на кнопку «Статистика по ресурсам».
Виталий
12 декабря 2018, 14:54
0
Подскажите где находится функция которая определяет ip адрес клиента?

Потому что свой ip я не нахожу хотя сижу онлайн на сайте. Возможно из-за того что сайт работает через cloudflare неправильно определяются ip.