modMonitor 2+

Несмотря на то, что в MODX нашлись критические уязвимости, я продолжаю дальше разработку на своей любимой платформе, и надеюсь другие так же будут делать. Лично я ни на минуту не задумался на счет смены движка. Уверен, эти дыры залатаются, и все будут спать спокойно.

Сегодня я выкатил обновленную версию компонента modMonitor, который так же, возможно, кому-нибудь немного расстроил сон. Во всяком случае обсуждений было много.



Итак, что добавилось?

1. Учет вложенности элементов. Вот эта штука изначально планировалась, но являлась одной из двух сложнейших задач. Пример: вызывается у нас сниппет, внутри которого выполняется еще несколько вызовов сниппетов и чанков, а у тех еще вложенные вызовы есть. И вот эту вложенность и хотелось видеть, так как общий список вызванных элементов не очень был информативен, не было понятно где какой вызов выполнялся. Сейчас эту вложенность видно.



Согласитесь, так гораздо удобнее.

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

2. Учет реферальных страниц для ajax-запросов. Это была вторая из сложных задач. Надо было понимать, какие страницы напрямую вызваны, а какие в следствии ajax-запросов. Зачем это нужно? Не раз встречал, что заходя на страницу, с нее отправляются на сервер еще пара-тройка (а то и более), запросов, при чем часто на саму же себя. Пример:



То есть здесь, при заходе на страницу, мы получаем еще три запроса на текущую страницу. Эти запросы видно и по отдельности (с признаком parent), и в раскрываемой информации о запросе (с иконками глобуса — это дочерние ajax-запросы).

Здесь поделюсь очень полезным кодом:
$js = "<script type=\"text/javascript\">
    window.modMonitorObjectId = {$modMonitor->request->id};
    (function(open) { 
        XMLHttpRequest.prototype.open = function(method, url, async, user, pass) {
            open.call(this, method, url, async, user, pass);
            this.setRequestHeader('modmonitor-object-id', window.modMonitorObjectId);
        };
    })(XMLHttpRequest.prototype.open);
</script>";
При вызове данная функция переопределяет метод open родного оконного механизм Ajax-запросов XMLHttpRequest таким образом, чтобы при запросах сразу подставлялся пользовательский параметр в заголовках. Далее уже на стороне сервера я ловлю переданный идентификатор в заголовках, и если он есть, выставляю родителя.

3. Добавились фильтры запросов.
— В строчное поле можно прописать запрос, который учитывается так:
Если это число, то ищет либо запрос с указанным ID, либо документ с указанным ID.
Если это строка, тогда уже идет поиск по строке адреса запроса. Здесь я не стал делать поиск по маске, так как при неточном поиске будет слишком сложно искать более релевантную информацию. То есть если у вас страницы были запрошены по адресу /office/lk/, нельзя их будет увидеть, вбив просто “office”. В таком случае будет выполняться поиск страниц, запрошенных именно по адресу office (такие вряд ли будут когда). Это важно учитывать. Но зато можно использовать родные sql-спецсимволы, такие как % — любое количество любых символов и подчеркивание _ — один любой символ. Так по запросу /office/% будут найдены и /office/, и /office/lk/ и т.п., а по запросу /office_, только /office/. А вот так %office%?% будут найдены документы типа /office/?.. или …../office/….?..
Уверен, вы разберетесь, документация по SQL всегда поможет.
В дальнейшем планирую добавить поддержку регулярных выражений.
— В поле “Время” можно указать время в секундах (можно дробных), чтобы вывести только те запросы, которые по времени выполнялись дольше указанного.
— Кеш. Выпадающий список. Можно отфильтровать только те запросы, которые сформированы из кеша, или наоборот не из кеша.

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

4. Мониторинг теперь работает не только при обработке документов. По сути, он сейчас работает при любом вызове MODX-а. Даже если вы в Console выполните $modx->runSnippet($snippetName);, этот запрос будет зафиксирован и сохранен. Это особенно полезно для мониторинга Ajax-запросов, в том числе на коннекторы.

Здесь только оговорочка: если это выполняется в контексте mgr, то такой запрос может быть не зафиксирован. Об этом подробней в следующем пункте.

5. Добавлена системная настройка modmonitor.exclude_contexts. По умолчанию прописано mgr, но можно очистить ее, или наоборот через запятую перечислить контексты, в которых не будет выполняться сохранение статистики.

6.Добавлена системная настройка modmonitor.min_time_for_save. По умолчанию пустая. Сюда можно указать в секундах время (например, 0.3), и если общее время запроса будет меньше этого времени, то этот запрос не будет сохранен в базу данных, что существенно снизит объем хранящейся в базе информации.
Хотя лично я против этого. Если у вас не будет информации о хороших запросах, то как вы узнаете, что сайт по большей степени хорошо работает? Надо, указав минимальное пороговое время, увидеть всего не более 10% запросов (являющихся проблемными), что будет говорить о нормальном состоянии сайта. А если вы будете видеть только плохие, то не с чем будет сравнивать. Да, информации храниться будет много лишней, но, во-первых, можно фильтровать эту информацию, а во-вторых, и вовсе отключать плагин модмонитора, если вы ведете отладку только в риалтайме.

7. Добавлена таки кнопка очистки собранной статистики.


Статистика очищается через truncate table, так что и быстро получается (несколько сотен тысяч записей должно вообще легко очищать), и счетчик айдишников сбрасывается.

8. Добавлена ссылка с переключением на пользователя.


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

Ну и напоследок несколько кейсов с использованием modMonitor.

1. Глобальное отключение кеширования ресурсов.
Вот это, честно говоря, мне не очень понятно зачем люди делают. Тем не менее за пару недель на тройке сайтов уже встречал. Начинаешь анализировать статистику и видишь там такое:


То есть все документы не из кеша берутся, даже при повторном заходе. Такое сразу в глаза бросается.
В чем же проблема? Народ зачем-то идет в системные настройки и выставляет cache_resource = 0.
Не надо так! В таком случае не просто все элементы на странице не кешируются, но и в целом документ не кешируется (включая настройки политик безопасности, ТВ-поля и т.п.). Из-за этого нагрузка на сервер сильно возрастает. Переживаете за кеширование и хотите чтобы для всех пользователей все элементы вызывались не кешируемые, не жалейте плюсиков, прописывайте их всем элементам. Даже если вообще все элементы у вас будут не кешируемые, разница в нагрузке будет ощутимая, если вы полностью отключаете кеширование документов.

2. Лишние ajax-запросы. Про это я уже выше упоминал. В одном случае их плодит гугл-тагманагер (почему три запроса вместо одного, не знаю, не ковырял еще). В другом случае просто логическая ошибка в пользовательских скриптах, из-за чего одно и то же событие несколько раз вызывалось.

3. Разбор большого количества вызываемых элементов.
Достался сайт на оптимизацию, так там вот такой ужас творится:


Одних только pdoResources 38 вызовов.


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

4. Поиск потерянных элементов.
modMonitor умеет сообщать о вызываемых, но не найденных элементах. Например, вот о таком сообщил один пользователь:
еще ошибка в логе
(ERROR @ /***/www/core/components/modmonitor/model/modmonitor/parser/modmonitorparser.class.php : 79) Не был получен элемент modSnippet [['"±","©","©","®","©","©","®","
"],["±","©","©","®","©","©","®"," "']]
А тут он вот это правило в Jevix воспринимает как снипет
<meta property="og:description" content="[[Jevix? &input=`[[*introtext]]` &cfgAllowTags=`` &cfgSetAutoBrMode=`0` &cfgSetAutoReplace=`[["±","©","©","®","©","©","®","
"],["±","©","©","®","©","©","®"," "]]`]]">
На самом деле совсем не зря MODX-парсер воспринимает это как сниппет, ведь синтаксис соответствует.
Вот мой развернутый ответ на этот счет:
Это не modMonitor ошибается. modMonitor кушает то, что находит MODX-парсер. А он это воспринимает как сниппет. Синтаксис-то соответствует. Просто MODX-парсер работает в двух режимах:
1. Не найденные теги не очищаются.
2. Не найденные теги очищаются.

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

Чтобы нормально работало и все рады были, достаточно пробелы поставить между квадратными скобками, вот так:
[ ["±","©","©","®","©","©","®",""],["±","©","©","®","©","©","®"," "] ]
Кстати, есть еще одна хитрость. Если в настройках включить modmonitor.debug = 1, то в логах можно увидеть такие записи:
[2016-11-13 15:24:53] (ERROR @ /var/www/core/components/modmonitor/model/modmonitor/parser/modmonitorparser.class.php : 85) Не был получен элемент modSnippet 'some_snippet'
А если при этом включить плагин Debug из пакета modxSite, то можно увидеть подобную картину:


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

Вот как-то так. Демо-версия так же доступна на сайте modmonitor.ru/ (регистрируемся во фронте и со своим логином-паролем идем в админку смотреть статистику).

По традиции пакет выходит в статусе beta (просто я так привык), тем не менее основа заложена плотно, предыдущая модель лишь чуть-чуть расширена, так что предыдущая статистика не пропадет.

Если кто обновляется, сразу предупреждаю, что пакет переустановить надо пару раз (просто в менеджере пакетов после установки новой версии еще раз нажать Переустановить). Это отдельная песня. Модуль добавляется в extensionPackages, и в момент установки его модель уже получена MODX-ом. При этом он должен на уже существующие таблицы добавить пару колонок. Но в текущей модели именно в этот момент информации об этих колонках у него нет, потому он их не может создать. При повторной установке модель уже корректно формируется при инициализации MODX-а и колонки новые формируются. В общем, при установке должна быть ругань на то, что не может создать колонки parent и properties, так как они уже существуют. Тогда все ОК уже.
И не забудьте после установки принудительно сбросить кеш сайта.

P.S. Напоминаю, что сегодня последний день продажи компонента со скидкой 30%. Завтра уже будет стоить полную цену и скидок больше не будет. Зато то ли еще будет новенькое в следующих версиях. Держите свои сайты под контролем!
Два пакета уже взяли.

P.P.S. Для, тех, кто все еще считает, что это не стоит 5000: я сегодня просидел к ряду 21 час (с перерывами на покушать и в туалет). Если кто считает, что он легко и быстро такое накатать может и продавать по три рубля (еще и профит получать), повторюсь: первая версия лежит на гитхабе, качайте, прокачивайте, продавайте.

P.P.P.S. Количество продаж уже 4 шт. Компонент получает финансирование и гарантированно будет развиваться.
Fi1osof
13 ноября 2016, 12:51
modx.pro
3
5 526
+14

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

Владимир
13 ноября 2016, 19:59
+1
Спасибо! Фильтр в выборке добавил удобства. Еще бы в этот фильтр отдельно контексты.
    Fi1osof
    14 ноября 2016, 00:36
    +2
    Еще бы в этот фильтр отдельно контексты.
    Выкатил 2.2.1 с фильтром по контекстам.
      Владимир
      14 ноября 2016, 00:45
      +1
      Это же праздник, чесн слово)))
      Спасибо! Очень здорово!
      10 контекстов у меня, теперь все очень удобно мониторить!
        Fi1osof
        14 ноября 2016, 01:52
        +1
        Не за что! :) В обозримом будущем еще графики будут :)
          Антон
          Антон
          14 ноября 2016, 03:40
          0
          А без modxSite будет?
          Мне смарти не нужен, приходится удалять сразу после проверки.
            Fi1osof
            14 ноября 2016, 04:57
            0
            modxSite давно уже не устанавливает никакие пакеты с собой.
            modxSite-1.4.0 ===========================
            1. Remove packages autoinstall

            Но он не обходим, так как в себе несет getdata-процессоры для быстрых выборок.
    Fi1osof
    14 ноября 2016, 05:01
    +3
    Выложил 2.3.0
    Добавлено нормальное отслеживание статусов ответов и фильтры по ним. В статусах даже редиректы учитываются, что очень удобно.



    В фильтрах код ответа можно как точно указывать (например 404), так и маску, например 40. Поиск выполняется like 'status%'.
    Фишка: можно в поиске указывать код с отрицанием, например !200. Тогда будут найдены все запросы со статусом не 200.

    Кстати, здесь SEOшники могут поиграться и поругаться. К примеру, запрос ///catalog//// нормально отдаст страницу, для которой реальный адрес /catalog/. Они скажут «Ага! MODX дубли плодит!».
      Fi1osof
      14 ноября 2016, 09:18
      +2
      Не удержался)) Выложил новую версию.

      В 2.4.0 добавил крайне крутую и важную штуку — логирование критических php-ошибок. Посмотрите какая крутая штука!:


      Подробная информация об ошибке — двойной клик по колонке ошибки.

      Так же добавил фильтр. Можно указать как абсолютное значение, например 4, так и использовать логические (>1, <8, <>4 и т.п.). А можно и вовсе звездочку указать, тогда вообще все ошибки будут найдены.
      Список всех кодов ошибок здесь.

      P.S. На одном проекте выяснилось, что стоит fastFieldParser. Выложил 2.4.1 с поддержкой этого парсера.
        Владимир
        14 ноября 2016, 11:48
        0
        Спасибо за очередные улучшения!
        Кстати, вот часто встречается ошибка:
        Ошибка: session_start(): Session callback expects true/false return value
        Файл: /home/*****/www/core/model/modx/modx.class.php
        Строка: 2270
        PS смотрю, тут эта тема поднималась
          Fi1osof
          14 ноября 2016, 13:08
          0
          Не за что?

          Это уже в модмониторе фиксируется? Можете прислать доступ в админку? Посмотрю что можно сделать.
            Владимир
            14 ноября 2016, 13:12
            0
            Это уже в модмониторе фиксируется
            — да, именно.
            пришлю сегодня
              Fi1osof
              14 ноября 2016, 13:14
              0
              ОК
                Владимир
                14 ноября 2016, 15:04
                0
                Наглядность в отчетах показала массу косяков, например что некоторые документы «пролезли» в другой контекст и прочие- прочие плюхи))
                Видимо план реконструкции теперь будет реальным, а то так черновиком бы и жили еще неопределенное время.
                В общем, это я к тому что мои затраты уже оправдались.
                Доступ пришлю когда согласую с редакторами время, что бы ни кто из них не работал в админке.
                  Fi1osof
                  14 ноября 2016, 15:24
                  0
                  Да, я тоже на некоторых проектах увидел гораздо больше, чем видел раньше. К примеру, при заходе на потерянную страницу вот такая картина возникала: joxi.ru/Y2LjLVESnRQQer
                  Там вообще отдельный шаблон использовался, и в нем куча битых ссылок на контент. Так-то ходишь по нормальным страницам, не видишь. А тут зашел в панель и скопом 15 потерянных к ряду… Кстати, позже добавлю логирование реферера, чтобы было видно с какой страницы подобные запросы валятся.
                    Владимир
                    14 ноября 2016, 15:28
                    0
                    Да, правда, сейчас все 301 и 404 и куча всего, что надо поправить, все видно.
                    Больше вариантов сегментации отчетов!!! )) И все прекрасно.
                      Fi1osof
                      14 ноября 2016, 15:30
                      0
                      Варианты по сегментации отчетов предлагайте.
                        Владимир
                        14 ноября 2016, 15:35
                        0
                        Да, по мере приведения сайта в порядок… Сейчас мрак. Надо убить 90% черновиков)))
                        Я записываю себе, что бы еще хотелось.
                  Fi1osof
                  14 ноября 2016, 19:39
                  0
                  А вот еще совсем свежий кейс:


                  Одна и та же страница для разных пользователей открывается с ошибкой или без. Проблема была в том, что пользователь хоть и был администратором, и у него были права на просмотр закрытой страницы, но не стояла галочка «Неограниченные права», из-за чего плагин не переключал для него скин, и на этой странице для него отсутствовал смарти-шаблон.
          Fi1osof
          14 ноября 2016, 17:59
          +1
          Вот даже какие специфические ошибки ловит :)
          Fi1osof
          16 ноября 2016, 10:00
          +2
          А вот и вышла версия 2.5.0
          Вообще она достойна отдельного топика, но во-первых, быстро слишком много моих анонсов на главной будет за раз, а во-вторых, надо бы пойти поспать, опять не спамши… Но релиз действительно знатный. Добавлен сбор статистики по плагинам, чего лично мне не хватало сильно, и мечтал я об этом не один год. И вот свершилось…

            Владимир
            16 ноября 2016, 12:43
            0
            Доброго дня!
            Обновил, но сам плагин модмонитора стал пожирать время. Откатил назад.
            Можно сделать возможность отключать в настройках например сбор данных по плагинам?
              Fi1osof
              16 ноября 2016, 12:49
              0
              Сколько времени он стал и на какое событие отжирать время?

              P.S. настройку сделаю.
                Владимир
                16 ноября 2016, 13:00
                0
                30 секунд, аж главная стала колом))) Она и так грузится не очень быстро, но я говорил, что все в стадии выхода из черновиков, но одно дело не быстро — это 1.1146 не из кеша, а другое дело 30 секунд. Я откатился, потом попозже снова поставлю и все вам отправлю в modstor и там же напишите мне почту на которою я вам дам доступ.
                  Fi1osof
                  16 ноября 2016, 13:26
                  0
                  Вообще он практически никак не должен влиять на скорость выполнения. Отладка плагинов пишется напрямую в кеш плагинов, то есть сами объекты плагинов никак не модифицируются. А там просто фиксируется время выполнения. Надо будет детальней изучать.
                  почта n.lanets@modxclub.ru
                    Владимир
                    16 ноября 2016, 13:30
                    0
                    Доступ создам и напишу на почту.
                    Да, конечно надо изучить, но по факту отката к предыдущей версии сразу страница стала нормально грузиться.
                    Пока пусть прежняя версия трудится :)
                      Fi1osof
                      16 ноября 2016, 13:41
                      0
                      ОК, скинете, вечером посмотрю.
                        Владимир
                        16 ноября 2016, 14:10
                        0
                        Логи выложил в поддержке компонента на MODSTORE.
                      Василий Наумкин
                      16 ноября 2016, 13:51
                      +2
                      Вообще он практически никак не должен влиять на скорость выполнения
                      Скорее всего из-за сбора данных о плагине он уходит где-то в рекурсию и через 30 сек. процесс PHP прибивается сервером.
                        Владимир
                        16 ноября 2016, 13:57
                        +1
                        Скопиовал для Николая лог медленных операций за сегодня.
                        Выложу в личном кабинете ModStore
                          Fi1osof
                          16 ноября 2016, 14:45
                          0
                          Владимир, проверьте структуру таблиц монитора (modmonitor_request и modmonitor_request_items). Там поля parent случайно не nullable? И нет ли записей с parent = NULL?
                            Владимир
                            16 ноября 2016, 15:11
                            0
                            _monitor_requests
                            _monitor_request_items
                            записей с parent = NULL — нет, только фактические ID
                            могу дампы таблиц скинуть, там же в modstore
                              Fi1osof
                              16 ноября 2016, 15:15
                              0
                              Мне только структуру таблиц надо. Можно в phpMyAdmin сделать экспорт этих таблиц, но только структуру, данные не надо выгружать. Да, туда же закиньте.
                                Владимир
                                16 ноября 2016, 15:29
                                0
                                Загрузил, посмотрите в личном кабинете.
                                PS я весьма понимаю, что разбор любых полетов может быть интересен для других участников сообщества. просто прошу, если я случайно выложу лишние данные- логины на модхосте, префиксы таблиц (не важно, актуально ли это теперь), логины админов, пожалуйста, удалите их, а если это невозможно, скажите мне, что я допустил эту оплошность.
                                Fi1osof
                                16 ноября 2016, 15:35
                                +1
                                Странно, поле не нулевое. Тогда без детального осмотра на стороне проекта ничего точно не получится сказать, пока на других проектах не было прецедентов.
                                Вечером выложу обновленный пакет с настройкой включения-отключения логирования плагинов, но вообще отладка плагинов — очень полезная штука, так что хорошо бы разобраться с ней. Можете обезличенный дамп сайта сделать? (контент и заголовки затереть, а так же емейлы, юзернеймы, комменты и т.п.).

                                P.S. Ок, просьбу учту.
                                Владимир
                                16 ноября 2016, 15:51
                                0
                                Да, ок. От комментов мы когда то отказались (вообще, комменты — удел профессиональных сообществ, но только не новостных сайтов- упаси бог)
                                Сделаю обезличенный дамп.
                                отладка плагинов — очень полезная штука
                                — конечно, лишь бы все работало не нагружая сайт, тем более загрузку с фронта.
                                Fi1osof
                                16 ноября 2016, 16:04
                                0
                                конечно, лишь бы все работало не нагружая сайт, тем более загрузку с фронта.
                                Наверняка объяснение логическое есть. Но что интересно, компонент работает так, что с базой данных работает только когда скрипт полностью отработал, то есть сохранение объекта запроса (и вместе с ним всего остального), выполняется уже когда MODX отправил все данные во фронт и выполняет exit; (навешана функция через register_shutdown_function()).
                                Ради интереса, установите опять новую версию и в файле core/components/modmonitor/model/modmonitor.class.php в методе saveRequest() пропишите сразу return; чтобы тело функции не выполнялось. И если все равно тормозить будет, значит действительно где-то на уровне сбора информации о плагинах (что крайне удивительно будет). А если не будет тормозов, значит рекурсия на уровне получения дочерних элементов запроса, буду запросы изучать дополнительно.
                                Владимир
                                16 ноября 2016, 16:08
                                0
                                Не вопрос, надо только время выбрать, а то сейчас есть посетители, ну как бы не хочется их распугать долгой загрузкой, я потому и снес все мигом. Выберу время, конечно проверю.
                                Fi1osof
                                20 ноября 2016, 02:20
                                0
                                Владимир, выложил я 2.6.0, там добавлена настройка сбора статистики плагинов.
                                А еще вот такой классный функционал добавлен: modxclub.ru/topics/sbor-polzovatelskoj-statistiki-s-pomoshhyu-modmonitor-2242.html
                                Владимир
                                20 ноября 2016, 02:22
                                0
                                Спасибо, сейчас попробую! Статью читаю.
                                Fi1osof
                                20 ноября 2016, 02:23
                                0
                                Не за что!
                              Fi1osof
                              16 ноября 2016, 16:05
                              0
                              записей с parent = NULL — нет, только фактические ID
                              А с parent =0 есть записи? Есть хотя бы процентов 10 от общего количества?
                          Fi1osof
                          16 ноября 2016, 15:10
                          0
                          Из-за самого сбора данных — нет, там механизм простой. Но если поля нулевые, то с этим бага возникает. С этим столкнулся, когда делал вложенность. Я сразу объекты не сохраняю, все набивается через связи в основной объект текущего запроса.
                          $childs = array();
                          $childs[] = $item;
                          $childs[] = $item;
                          // ...
                          $request->Children = $childs;
                          Это позволяет в процессе набивать статистику, но не сохранять ничего, если не сохраняется основной объект запроса. А если уже мы его сохраняем, тогда и все дочерние элементы сохраняются.

                          Но когда сделал вложенность, структура данных получилась такая:
                          $childs = array();
                          $childs[] = $item;
                          
                          $childs_2 = array();
                          $childs_2 [] = $item;
                          $childs_2 [] = $item;
                          
                          $item->Children = $childs_2;
                          
                          $childs[] = $item;
                          // ...
                          $request->Children = $childs;
                          На уровне втором и ниже связь получается не Запрос-Элемент, а Элемент-Элемент, и при сохранении таких элементов id запроса не задается им (так как у них нет прямого родителя Запрос).

                          В итоге я на сохранение элементов прописал типа foreach($this->Children). И вот тут бага и проявилась: null-поля надо проверять именно как is null, а здесь xPDO видимо формирует запрос типа = null или = 0, и в таком случае он получал вообще все элементы, у которых поле parent = null. В таком случае да, если в базе элементов уже дофига, тут просто не хватает ресурсов. Если поле задавать не нулевое и значение по умолчанию задавать 0, тогда такой фигни не происходит.
                Fi1osof
                27 ноября 2016, 14:16
                +1
                Выложил 2.6.3 с данными реферера и юзерагента, и поиска по ним joxi.ru/KAxeRO7c4WXXpr
                Поиск стандартный для SQL: % — любое количество любых символов, _ — один любой символ.
                Можно впереди ставить восклицательный знак, будет расценено как отрицание.
                  Владимир
                  27 ноября 2016, 15:33
                  0
                  Обновился. Шикарно! Спасибо.
                  Владимир
                  27 ноября 2016, 15:38
                  0
                  Но реферер плюс, а IP адресс — минус, не уверен, что это хорошо. Хотя…
                    Fi1osof
                    27 ноября 2016, 16:14
                    +1
                    IP тоже есть, просто несколько полей по умолчанию скрыты. joxi.ru/D2PjRW0SdMzgvr
                      Владимир
                      27 ноября 2016, 17:51
                      0
                      Класс! Спасибо.
                        Fi1osof
                        27 ноября 2016, 18:09
                        +1
                        Не за что!
                        Не забывайте, что скрыть или открыть по умолчанию те или иные поля вы можете самостоятельно на уровне плагина. Пример я описывал здесь. Все колонки дефолтные находятся в массиве $controller->requests_grid_columns
                    Fi1osof
                    28 ноября 2016, 07:43
                    +1
                    Вот еще отличный кейс:
                    Переношу сайт с вордпресса, а там УРЛы были не ЧПУ. На новом сайте они ЧПУ, ну и просто IDшники не совпадают. Сложность еще оказалась в том, что все УРЛы с параметром $_GET['p'] ведут на корень сайта, так что 404-ую это не отдает, просто главная страница и все.
                    Задача состояла в том, чтобы роутер написать (который бы подмену документов делал и отдавал 404-ые для не найденных документов), ну и отслеживать это дело потом, чтобы видеть какие страницы вдруг не были найдены.
                    Визуально получилось вот так: joxi.ru/4Ak3wb9tMxnWWA
                    Можно легко сделать выборку всех страниц с таким параметром, и у которых статус не 200 (то есть не ОК) joxi.ru/Dr8Ke8OIkV5NkA
                    Отличная помощь в отладке проекта. И в ядро компонента не надо лезть, все делается на уровне плагина. Вот плагин вместе с кодом роутинга: gist.github.com/Fi1osof/726cb632b4861c4df8aee00d7863559e
                      Антон
                      Антон
                      13 апреля 2017, 20:55
                      0
                      Как удалить modmonitor чтобы хвостов не оставалось???

                      Вот такие хвосты тянутся
                      (ERROR @ /home/--/public_html/core/xpdo/xpdo.class.php : 503) Path specified for package modmonitor is not a valid or accessible directory: /home/--/public_html/core/components/modmonitor/model/
                      (ERROR @ /home/--/public_html/core/xpdo/xpdo.class.php : 1247) Problem getting service modMonitor, instance of class modMonitor, from path /home/--/public_html/core/components/modmonitor/model/modmonitor/
                      (ERROR @ /home/--/public_html/core/xpdo/xpdo.class.php : 644) Could not load class: modMonitor from modmonitor.
                      Хочу предостеречь народ, чтобы не ставили эту приблуду на рабочий сайт. Лог забиваются мегабайтами ошибок во время работы и… после удаления.
                        Владимир
                        13 апреля 2017, 21:27
                        +1
                        … у меня почему нет такого?
                        Использую на рабочем сайте. Ошибок нет.
                        версия какая у вас (и MODX и modMonitor)
                          Владимир
                          13 апреля 2017, 21:31
                          +1
                          кстати
                          Важно! Для работы компонента требуется компонент modxSite. Установить можно из официального репозитория. Ничего в сайт он не вносит, просто некоторые его процессоры используются модмонитором.
                          modxSite — установлен?
                            Антон
                            Антон
                            14 апреля 2017, 01:52
                            0
                            У меня вопрос был про удаление компонента, а не про работу.
                            Соответственно modxSite мне тоже не нужен после удаления modMonitorа.
                            Fi1osof
                            13 апреля 2017, 22:03
                            +2
                            Проверьте системные настройки, найдите в Пакетах расширений такое: joxi.ru/12M1KMNhM1x7R2
                            Если есть, соответственно удалите и сбросьте кеш. Только не вообще все удалите оттуда (если там помимо монитора еще что-то есть), а только данные о нем.

                            Хочу предостеречь народ, чтобы не ставили эту приблуду на рабочий сайт. Лог забиваются мегабайтами ошибок во время работы и… после удаления.
                            Специально для этого были добавлены настройки, позволяющие исключать отслеживаемые контексты и выставлять минимальное время выполнения запроса, при превышении которого сохраняется информация в БД. При чем информация об ошибках будет сохраняться независимо от этого порога. Таким образом можно поставить порог секунд в 10, и все равно потом видеть ранее возникшие ошибки.

                            P.S. Хочу предостеречь народ, чтобы не летали на самолетах. Опасное это дело. Надежней пешком.

                            А если серьезно, учту, что какие-то вещи не очевидны, и подправлю описание и сам компонент.
                              Антон
                              Антон
                              14 апреля 2017, 02:55
                              0
                              Немного лучше стало, пропала 503 ошибка, но 644 и 1247 остались.
                                Fi1osof
                                14 апреля 2017, 13:15
                                +1
                                Вы перед этим MODX обновляли? Там такая фигня есть, что из настроек расширения загоняются в БД. Выполните в консоли $modx->removeCollection(«modExtensionPackage); и удалите после этого папку core/cache.
                          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                          57