Ad Widget

Collapse

Сложные условия в триггерах с текстовыми

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • chipoza
    Junior Member
    • Jan 2017
    • 7

    #1

    Сложные условия в триггерах с текстовыми

    День добрый.
    Столкнулся с проблемой, не отрабатывает условие (and\or) в триггере содержащим текстовые данные.
    Например:
    {MS SQL Always On:mssqlaon.group[{#GROUP}].str("NOT_HEALTHY")}=1 and {MS SQL Always On:mssqlaon.group[{#GROUP}].str("PARTIALLY_HEALTHY")}=1

    По отдельности каждое из этих условий отрабатывает нормально
    Это какойто баг или особенность, или же я чтото делаю не правильно, но с числовыми данными всё работает на ура.
  • Kos
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • Aug 2015
    • 3404

    #2
    Я правильно понимаю, что Вы хотите отловить ситуацию, когда последнее значение элемента данных содержит одновременно и строку "not_healthy", и строку "partially_healthy" (ну, только в верхнем регистре - это глючный движок форума переводит всё в lowercase)?

    Comment

    • chipoza
      Junior Member
      • Jan 2017
      • 7

      #3
      Originally posted by Kos
      Я правильно понимаю, что Вы хотите отловить ситуацию, когда последнее значение элемента данных содержит одновременно и строку "not_healthy", и строку "partially_healthy" (ну, только в верхнем регистре - это глючный движок форума переводит всё в lowercase)?
      Извиняюсь наложал)
      Вот такое условие:
      {MS SQL Always On TEST Temlate:mssqlaon.group[{#GROUP}].prev("HEALTHY_NOT_PRIMARY")}=1 and {MS SQL Always On TEST Temlate:mssqlaon.group[{#GROUP}].str("HEALTHY")}=1

      Тоесть если предыдущее значение HEALTHY_NOT_PRIMARY, и текущее HEALTHY срабатываем

      Такое условие никак не хочет отрабатывать, в итоге сделал вот такой костыль:

      {MS SQL Always On:mssqlaon.group[{#GROUP}].strlen(#2)}=19 and {MS SQL Always On:mssqlaon.group[{#GROUP}].strlen()}=7

      Если длина строки предыдущего значения 19 (HEALTHY_NOT_PRIMARY), а текущая 7 (HEALTHY) то срабатываем

      Comment

      • Kos
        Senior Member
        Zabbix Certified SpecialistZabbix Certified Professional
        • Aug 2015
        • 3404

        #4
        Originally posted by chipoza
        Извиняюсь наложал)
        Вот такое условие:
        {MS SQL Always On TEST Temlate:mssqlaon.group[{#GROUP}].prev("HEALTHY_NOT_PRIMARY")}=1 and {MS SQL Always On TEST Temlate:mssqlaon.group[{#GROUP}].str("HEALTHY")}=1

        Тоесть если предыдущее значение HEALTHY_NOT_PRIMARY, и текущее HEALTHY срабатываем
        Да уж

        У функции prev() нет текстовых параметров; да и, по правде говоря, вообще никаких параметров нет. Поскольку, по документации, prev() - это ничто иное как last(#2).

        Видимо, Вам нужно что-то вроде такого:
        Code:
        {MS SQL Always On TEST Temlate:mssqlaon.group[{#GROUP}].str("HEALTHY_NOT_PRIMARY",#2)}=1 and {MS SQL Always On TEST Temlate:mssqlaon.group[{#GROUP}].str("HEALTHY")}=1

        Comment

        • chipoza
          Junior Member
          • Jan 2017
          • 7

          #5
          Originally posted by Kos
          Да уж

          У функции prev() нет текстовых параметров; да и, по правде говоря, вообще никаких параметров нет. Поскольку, по документации, prev() - это ничто иное как last(#2).

          Видимо, Вам нужно что-то вроде такого:
          Code:
          {MS SQL Always On TEST Temlate:mssqlaon.group[{#GROUP}].str("HEALTHY_NOT_PRIMARY",#2)}=1 and {MS SQL Always On TEST Temlate:mssqlaon.group[{#GROUP}].str("HEALTHY")}=1
          Спасибо попробую так.
          Но условие (or) также с текстовыми значениями не отпрабатывало:
          {MS SQL Always On TEST Temlate:mssqlaon.group[{#GROUP}].str("text1")}=1 or {MS SQL Always On TEST Temlate:mssqlaon.group[{#GROUP}].str("text2")}=1

          Comment

          Working...