Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (Flatly)
  • No Skin
Collapse
Brand Logo

NetXMS Forum

  1. Home
  2. Support (Russian)
  3. Filtering script for rule in Event Processing Policy

Filtering script for rule in Event Processing Policy

Scheduled Pinned Locked Moved Support (Russian)
18 Posts 3 Posters 17.4k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • E
    E
    enp
    wrote on last edited by
    #1

    Здравствуйте!

    У меня есть правило в Event Processing Policy для отсылки почтовых сообщений о различных событиях. Требуется не отсылать такие сообщения для интерфейсов "Vi*.*". Есть, как я понимаю, единственный способ - Filtering script для правила. Как его писать?

    Никогда этого не делал, подходящей документации тоже не нашел. В http://wiki.netxms.org/wiki/UM:NetXMS_Scripting_Language_(NXSL) описан только синтаксис (да и то не описаны, например, строковые функции: как определить вхождение подстроки в строку?). Но нет описания способов запуска скриптов. В http://wiki.netxms.org/wiki/UM:Event_Processing о написании фильтров тоже ни слова.

    Покажите, пожалуйста, рабочий пример.

    1 Reply Last reply
    0
    • E
      E
      enp
      wrote on last edited by
      #2

      Написал:

      sub main()
      {
        return !index("%m","Interface \"Vi");
      }
      

      Пока понаблюдаю, но написано совершенно по наитию, и уверенности нет. Это положено делать именно так?

      1 Reply Last reply
      0
      • E
        E
        enp
        wrote on last edited by
        #3

        Нет, уже видно что не работает. Как правильно получить в NXSL хотя бы текст обрабатываемого события? Может есть возможность получить некий объект события с полями (код, сообщение и т.д.)? Есть ли возможность протестировать скрипт, т.е. запустить его вручную и на вход подать искусственно сформированное событие?

        1 Reply Last reply
        0
        • E
          E
          enp
          wrote on last edited by
          #4

          Соответствующий объект есть - http://wiki.netxms.org/wiki/NXSL:Event. И чуть раньше было найдено нечто похожее на substring в других языках - http://wiki.netxms.org/wiki/NXSL:index. Очень не хватает ссылок на эти и другие объекты и функции из http://wiki.netxms.org/wiki/UM:NetXMS_Scripting_Language_(NXSL).

          Откуда взять объект Event в Filtering script для правила? Пробую так:

          sub main()
          {
            return !index($1->message,"Interface \"Vi");
          }
          

          Все равно не работает.

          1 Reply Last reply
          0
          • E
            E
            enp
            wrote on last edited by
            #5

            Заработал такой вариант:

            return !index($event->message,"Interface \"Vi");
            

            С main тоже работает, но зачем нужны лишние 3 строчки - этого я не понял

            1 Reply Last reply
            0
            • V
              V
              Victor Kirhenshtein
              wrote on last edited by
              #6

              Когда-то раньше main() был обязателен, теперь уже нет. Но старая форма все равно поддерживается.

              Еще можно использовать регулярные выражения, например так:

              return $event->message ~= ".*Interface \"Vi.*";
              

              Ну и если речь идет о событиях SYS_IF_UP и SYS_IF_DOWN, то имя интерфейса передается как параметр номер 2, и можно сравнивать только его (тогда условие не будет зависеть от того, что текст сообщения поменяют в шаблоне):

              return $2 like "Vi*";
              

              или

              return substr($2, 1, 2) == "Vi";
              

              ну и если в названии могут быть прописные и строчные буквы:

              return upper(substr($2, 1, 2)) == "VI";
              
              1 Reply Last reply
              0
              • E
                E
                enp
                wrote on last edited by
                #7

                Спасибо! Я верно понимаю, все возможные параметры к событиям описаны в Configuration -> Event configuration?

                И вопрос о запуске скриптов вручную по-прежнему актуален.

                1 Reply Last reply
                0
                • V
                  V
                  Victor Kirhenshtein
                  wrote on last edited by
                  #8

                  @enp said in Filtering script for rule in Event Processing Policy:

                  Спасибо! Я верно понимаю, все возможные параметры к событиям описаны в Configuration -> Event configuration?

                  да, верно.

                  @enp said in Filtering script for rule in Event Processing Policy:

                  И вопрос о запуске скриптов вручную по-прежнему актуален.

                  Для проверки обработки событий можно исскуственно создавать события при помощи команды nxevent. Например, для отсылки SYS_IF_DOWN команда может выглядеть так:

                  nxevent -u admin 192.168.64.1 5 101 eth0 10.10.10.2 255.255.255.0 1

                  1 Reply Last reply
                  0
                  • E
                    E
                    enp
                    wrote on last edited by
                    #9

                    А скрипт может что-либо вывести в лог/консоль? Как это увидеть?

                    1 Reply Last reply
                    0
                    • E
                      E
                      enp
                      wrote on last edited by
                      #10

                      Просто ваши примеры не работают - такое ощущение, что в $2 попадает совсем не имя интерфейса

                      1 Reply Last reply
                      0
                      • V
                        V
                        Victor Kirhenshtein
                        wrote on last edited by
                        #11

                        Можно вывести в лог, функцией trace. Например так:

                        trace(0, "$2='" . $2 . "'");

                        1 Reply Last reply
                        0
                        • E
                          E
                          enp
                          wrote on last edited by
                          #12

                          Спасибо!

                          С помощью trace удалось сформулировать правило так:

                          return !($event->name like "SYS_IF_*" && $event->parameters[2] like "Vi*");
                          

                          Наверное, это самый правильный вариант.

                          1 Reply Last reply
                          0
                          • E
                            E
                            enp
                            wrote on last edited by
                            #13

                            А куда и в каких случаях выводит данные функция println?

                            1 Reply Last reply
                            0
                            • V
                              V
                              Victor Kirhenshtein
                              wrote on last edited by
                              #14

                              println выводит данные на консоль, ее имеет смысл использовать либо в тестовых скриптах, которые запускаются из nxscript, либо в скриптах, которые запускаются из дебаг консоли сервера командой exec.

                              1 Reply Last reply
                              0
                              • E
                                E
                                enp
                                wrote on last edited by
                                #15
                                $ nxscript
                                NetXMS Scripting Host  Version 1.2.10
                                Copyright (c) 2005-2013 Victor Kirhenshtein
                                
                                Usage: nxscript [options] script [arg1 [... argN]]
                                
                                Valid options are:
                                   -d         Dump compiled script code
                                   -e <name>  Entry point
                                   -r         Print script return value
                                

                                Что такое entry point? Объекты вроде $event в nxscript передать нельзя?

                                1 Reply Last reply
                                0
                                • G
                                  G
                                  glebofff
                                  wrote on last edited by
                                  #16

                                  enp, настоятельно рекомендую уже быстрее проникнуться концепцией NetXMS.

                                  Передать $event из командной строки нельзя, но можно сгенерировать событие (из скрипта - PostEvent, из командной строки - утилитой nxevent), на которое среагирует обработчик, в котором есть фильтрующий скрипт.

                                  Создай тестовый объект, тестовое событие, тестовый обработчик, и т.д.

                                  1 Reply Last reply
                                  0
                                  • E
                                    E
                                    enp
                                    wrote on last edited by
                                    #17

                                    Не вижу, чем передача $event и любых объектов вообще из командной строки идет поперек концепции. Это просто более прямой способ отладки скриптов. Похоже, он действительно не востребован из-за того, что скрипты обычно маленькие и отлаживать там особо нечего.

                                    Я ж не с претензиями, я всего лишь вопросы задаю 🙂

                                    1 Reply Last reply
                                    0
                                    • G
                                      G
                                      glebofff
                                      wrote on last edited by
                                      #18

                                      nxevent + trace - куда прямее?

                                      1 Reply Last reply
                                      0

                                      Hello! It looks like you're interested in this conversation, but you don't have an account yet.

                                      Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

                                      With your input, this post could be even better 💗

                                      Register Login
                                      Reply
                                      • Reply as topic
                                      Log in to reply
                                      • Oldest to Newest
                                      • Newest to Oldest
                                      • Most Votes


                                      • Login

                                      • Don't have an account? Register

                                      • Login or register to search.
                                      Powered by NodeBB Contributors
                                      • First post
                                        Last post
                                      0
                                      • Categories
                                      • Recent
                                      • Tags
                                      • Popular
                                      • Users
                                      • Groups