Ad Widget

Collapse

Lld внешним скриптом

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • NvAriec
    Member
    • Jan 2012
    • 67

    #1

    Lld внешним скриптом

    Добрый день.
    Нигде не нашёл информации как делать LLD внешним скриптом.
    В документации написано
    Хотя детали этого формата важны только для создателей собственных проверок обнаружения, всё же всем необходимо знать, что возвращаемое значение содержит список из пар: макрос → значение. Например, элемент данных “net.if.discovery” может вернуть две пары: “{#IFNAME}” → “lo” и “{#IFNAME}” → “eth0”.
    Я получил с оборудования oneware список адресов в массиве.
    Сделал для этого массива json_encode() и получил на выходе следующее:

    Array
    (
    [0] => Array
    (
    [0] => 4100000338A46028
    [1] => 3000000339719028
    [2] => 1300000337DAD028
    [3] => 5D00000337D9D028
    [4] => 79000003381FD028
    [5] => 5F00000337C3B028
    [6] => DA000003380D7028
    [7] => 32000003396BF028
    [8] => D600000340364828
    [9] => 3B00000338B12828
    [10] => 7500000337CD5828
    [11] => 4E00000340363828
    [12] => 7B000003378A7828
    [13] => FD00000337D84428
    [14] => 350000033FD0C428
    [15] => F700000337CEC428
    [16] => 4D000003400EE428
    [17] => A100000337C97428
    [18] => 2800000337DDF428
    [19] => 5D0000033843EC28
    [20] => 1A000003397B1C28
    [21] => 3D000003397A9C28
    [22] => 7F00000338B15C28
    [23] => CA00000335EB5C28
    [24] => CB0000033804BC28
    [25] => D60000037D5C6228
    [26] => FD00000337DE1228
    [27] => C5000003381AD228
    [28] => B200000336127228
    [29] => 030000033808AA28
    [30] => 5900000338989A28
    [31] => 26000003395D9A28
    [32] => 5A0000033812DA28
    [33] => 4B00000337F5DA28
    [34] => D00000033823BA28
    [35] => 7700000338AA7A28
    [36] => D400000339550628
    [37] => F80000033822C628
    [38] => FA00000337DAC628
    [39] => FA00000337BFA628
    [40] => CD00000338317628
    [41] => 570000033FF97628
    [42] => BD000003404D9E28
    [43] => D500000337EDDE28
    [44] => A50000034058BE28
    [45] => 1700000338137E28
    [46] => DD00000338158128
    [47] => 1A000003402AF128
    [48] => 400000033958A928
    [49] => D20000033823A928
    [50] => C100000337BBA928
    [51] => 81000003400B0528
    [52] => 0300000337ED8528
    [53] => 6F000003405A2528
    [54] => 1D000003401C9528
    [55] => 5F00000337FCB528
    [56] => D2000003379AB528
    [57] => F300000337C9AD28
    [58] => B9000003380D9D28
    [59] => D800000337A7DD28
    [60] => 970000033FFCFD28
    [61] => BE00000337DDFD28
    [62] => 6C000003385FFD28
    [63] => 8300000337B8C328
    [64] => 5B00000337CE2328
    [65] => 36000003362BA328
    [66] => 7E000003402DE328
    [67] => EF000002FE9F1328
    [68] => FF00000337FF1328
    [69] => 7E0000033FC69328
    [70] => 8700000337F8F328
    [71] => 3400000337EACB28
    [72] => 9200000337E2BB28
    [73] => 360000033FE3FB28
    [74] => E70000033FFD0728
    [75] => 7700000338238728
    [76] => 3C000003382BC728
    [77] => 8000000340272728
    [78] => 7E000003404CE728
    [79] => 3E000003395C5728
    [80] => 790000033621F728
    [81] => 4D000003382DF728
    [82] => 6B000003404FF728
    [83] => CA00000338214F28
    [84] => 0200000337C96F28
    [85] => 4D000003405A1F28
    [86] => F400000337F99F28
    [87] => 490000033796FF28
    )

    )

    [["4100000338A46028","3000000339719028","1300000337D AD028","5D00000337D9D028","79000003381FD028","5F00 000337C3B028","DA000003380D7028","32000003396BF028 ","D600000340364828","3B00000338B12828","750000033 7CD5828","4E00000340363828","7B000003378A7828","FD 00000337D84428","350000033FD0C428","F700000337CEC4 28","4D000003400EE428","A100000337C97428","2800000 337DDF428","5D0000033843EC28","1A000003397B1C28"," 3D000003397A9C28","7F00000338B15C28","CA00000335EB 5C28","CB0000033804BC28","D60000037D5C6228","FD000 00337DE1228","C5000003381AD228","B200000336127228" ,"030000033808AA28","5900000338989A28","2600000339 5D9A28","5A0000033812DA28","4B00000337F5DA28","D00 000033823BA28","7700000338AA7A28","D40000033955062 8","F80000033822C628","FA00000337DAC628","FA000003 37BFA628","CD00000338317628","570000033FF97628","B D000003404D9E28","D500000337EDDE28","A50000034058B E28","1700000338137E28","DD00000338158128","1A0000 03402AF128","400000033958A928","D20000033823A928", "C100000337BBA928","81000003400B0528","0300000337E D8528","6F000003405A2528","1D000003401C9528","5F00 000337FCB528","D2000003379AB528","F300000337C9AD28 ","B9000003380D9D28","D800000337A7DD28","970000033 FFCFD28","BE00000337DDFD28","6C000003385FFD28","83 00000337B8C328","5B00000337CE2328","36000003362BA3 28","7E000003402DE328","EF000002FE9F1328","FF00000 337FF1328","7E0000033FC69328","8700000337F8F328"," 3400000337EACB28","9200000337E2BB28","360000033FE3 FB28","E70000033FFD0728","7700000338238728","3C000 003382BC728","8000000340272728","7E000003404CE728" ,"3E000003395C5728","790000033621F728","4D00000338 2DF728","6B000003404FF728","CA00000338214F28","020 0000337C96F28","4D000003405A1F28","F400000337F99F2 8","490000033796FF28"]]
    В итоге - в каком формате должен быть выход?
    Каждый элемент должен быть отдельным или всё это в массиве должно быть?
  • NvAriec
    Member
    • Jan 2012
    • 67

    #2
    В таком формате тоже не принимает:
    {"data":[{"{#ADDR}" : 4100000338A46028},{"{#ADDR}" : 3000000339719028},{"{#ADDR}" : 1300000337DAD028},{"{#ADDR}" : 5D00000337D9D028},{"{#ADDR}" : 79000003381FD028},{"{#ADDR}" : 5F00000337C3B028},{"{#ADDR}" : DA000003380D7028},{"{#ADDR}" : 32000003396BF028},{"{#ADDR}" : D600000340364828},{"{#ADDR}" : 3B00000338B12828},{"{#ADDR}" : 7500000337CD5828},{"{#ADDR}" : 4E00000340363828},{"{#ADDR}" : 7B000003378A7828},{"{#ADDR}" : FD00000337D84428},{"{#ADDR}" : 350000033FD0C428},{"{#ADDR}" : F700000337CEC428},{"{#ADDR}" : 4D000003400EE428},{"{#ADDR}" : A100000337C97428},{"{#ADDR}" : 2800000337DDF428},{"{#ADDR}" : 5D0000033843EC28},{"{#ADDR}" : 1A000003397B1C28},{"{#ADDR}" : 3D000003397A9C28},{"{#ADDR}" : 7F00000338B15C28},{"{#ADDR}" : CA00000335EB5C28},{"{#ADDR}" : CB0000033804BC28},{"{#ADDR}" : D60000037D5C6228},{"{#ADDR}" : FD00000337DE1228},{"{#ADDR}" : C5000003381AD228},{"{#ADDR}" : B200000336127228},{"{#ADDR}" : 030000033808AA28},{"{#ADDR}" : 5900000338989A28},{"{#ADDR}" : 26000003395D9A28},{"{#ADDR}" : 5A0000033812DA28},{"{#ADDR}" : 4B00000337F5DA28},{"{#ADDR}" : D00000033823BA28},{"{#ADDR}" : 7700000338AA7A28},{"{#ADDR}" : D400000339550628},{"{#ADDR}" : F80000033822C628},{"{#ADDR}" : FA00000337DAC628},{"{#ADDR}" : FA00000337BFA628},{"{#ADDR}" : CD00000338317628},{"{#ADDR}" : 570000033FF97628},{"{#ADDR}" : BD000003404D9E28},{"{#ADDR}" : D500000337EDDE28},{"{#ADDR}" : A50000034058BE28},{"{#ADDR}" : 1700000338137E28},{"{#ADDR}" : DD00000338158128},{"{#ADDR}" : 1A000003402AF128},{"{#ADDR}" : 400000033958A928},{"{#ADDR}" : D20000033823A928},{"{#ADDR}" : C100000337BBA928},{"{#ADDR}" : 81000003400B0528},{"{#ADDR}" : 0300000337ED8528},{"{#ADDR}" : 6F000003405A2528},{"{#ADDR}" : 1D000003401C9528},{"{#ADDR}" : 5F00000337FCB528},{"{#ADDR}" : D2000003379AB528},{"{#ADDR}" : F300000337C9AD28},{"{#ADDR}" : B9000003380D9D28},{"{#ADDR}" : D800000337A7DD28},{"{#ADDR}" : 970000033FFCFD28},{"{#ADDR}" : BE00000337DDFD28},{"{#ADDR}" : 6C000003385FFD28},{"{#ADDR}" : 8300000337B8C328},{"{#ADDR}" : 5B00000337CE2328},{"{#ADDR}" : 36000003362BA328},{"{#ADDR}" : 7E000003402DE328},{"{#ADDR}" : EF000002FE9F1328},{"{#ADDR}" : FF00000337FF1328},{"{#ADDR}" : 7E0000033FC69328},{"{#ADDR}" : 8700000337F8F328},{"{#ADDR}" : 3400000337EACB28},{"{#ADDR}" : 9200000337E2BB28},{"{#ADDR}" : 360000033FE3FB28},{"{#ADDR}" : E70000033FFD0728},{"{#ADDR}" : 7700000338238728},{"{#ADDR}" : 3C000003382BC728},{"{#ADDR}" : 8000000340272728},{"{#ADDR}" : 7E000003404CE728},{"{#ADDR}" : 3E000003395C5728},{"{#ADDR}" : 790000033621F728},{"{#ADDR}" : 4D000003382DF728},{"{#ADDR}" : 6B000003404FF728},{"{#ADDR}" : CA00000338214F28},{"{#ADDR}" : 0200000337C96F28},{"{#ADDR}" : 4D000003405A1F28},{"{#ADDR}" : F400000337F99F28},{"{#ADDR}" : 490000033796FF28}]}

    Вот код скрипта:
    PHP Code:
    <?php
    $html 
    file_get_contents('http://'.$argv[1].'/1Wire/Search.html');
    $re "/[0-9A-F]{14}28/";
    preg_match_all($re$html$matches);
    $result='{"data":[';
    foreach (
    $matches[0] as $addr){
        
    $result.='{"{#ADDR}" : '.$addr.'},';
    }
    $result=substr($result,0,-1);
    $result.=']}';
    #print_r(json_encode($result));
    echo json_encode($result);
    ?>
    Что я делаю не так?

    Comment

    • NvAriec
      Member
      • Jan 2012
      • 67

      #3
      PHP Code:
      <?php 
      $html 
      file_get_contents('http://'.$argv[1].'/1Wire/Search.html'); 
      $re "/[0-9A-F]{14}28/"
      preg_match_all($re$html$matches); 
      $result='{"data":['
      foreach (
      $matches[0] as $addr){ 
          
      $result.='{"{#ADDR}" : '.$addr.'},'

      $result=substr($result,0,-1); 
      $result.=']}'
      #print_r(json_encode($result)); 
      echo $result
      ?>
      Так тоже пробовал.

      Comment

      • sadman
        Senior Member
        • Dec 2010
        • 1611

        #4
        Originally posted by NvAriec
        Что я делаю не так?
        1-Wire адрес (B200000336127228) должен быть заключен в кавычки, т.е. передаваться как строка. В JSON нет сущности HEX-number, а на DEC-number это у вас не походит.
        Code:
        $result.='{"{#ADDR}" : "'.$addr.'"},';

        Comment

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

          #5
          Originally posted by NvAriec
          Добрый день.
          Нигде не нашёл информации как делать LLD внешним скриптом.
          [...]
          В итоге - в каком формате должен быть выход?
          Каждый элемент должен быть отдельным или всё это в массиве должно быть?
          Странно, вроде бы, в документации вполне понятно описано: в последней секции даже приведён пример скрипта, а уж примеры того, как должен выглядеть вывод такого скрипта, на этой странице фигурируют несколько раз.

          Пример для файловых систем:
          Code:
          {
            "data":[
            
            { "{#FSNAME}":"/",                           "{#FSTYPE}":"rootfs"   },
            { "{#FSNAME}":"/sys",                        "{#FSTYPE}":"sysfs"    },
            { "{#FSNAME}":"/proc",                       "{#FSTYPE}":"proc"     },
            { "{#FSNAME}":"/dev",                        "{#FSTYPE}":"devtmpfs" },
            { "{#FSNAME}":"/dev/pts",                    "{#FSTYPE}":"devpts"   },
            { "{#FSNAME}":"/lib/init/rw",                "{#FSTYPE}":"tmpfs"    },
            { "{#FSNAME}":"/dev/shm",                    "{#FSTYPE}":"tmpfs"    },
            { "{#FSNAME}":"/home",                       "{#FSTYPE}":"ext3"     },
            { "{#FSNAME}":"/tmp",                        "{#FSTYPE}":"ext3"     },
            { "{#FSNAME}":"/usr",                        "{#FSTYPE}":"ext3"     },
            { "{#FSNAME}":"/var",                        "{#FSTYPE}":"ext3"     },
            { "{#FSNAME}":"/sys/fs/fuse/connections",    "{#FSTYPE}":"fusectl"  }
            
            ]
          }
          Должен быть массив с именем "data", элементы которого - объекты, состоящие из пар "макрос - значение". По одному объекту на каждый найденный элемент Вашего списка, количество и наименование макросов - на Ваш выбор (ну, наименование - в пределах допустимого синтаксиса).
          В вышеприведённом примере LLD файловых систем на каждую файловую систему выводится два её атрибута: точка монтирования и тип, соответственно для них используются макросы {#FSNAME} и {#FSTYPE}. Но Вы для своих целей можете выбрать такие наименования макросов, какие Вам удобны; главное - потом их же применять в правилах LLD (в фильтре, прототипах элементов данных/триггеров/графиков/etc.).

          Comment

          • NvAriec
            Member
            • Jan 2012
            • 67

            #6
            Originally posted by kos
            Странно, вроде бы, в документации вполне понятно описано: в последней секции даже приведён пример скрипта, а уж примеры того, как должен выглядеть вывод такого скрипта, на этой странице фигурируют несколько раз.

            Пример для файловых систем:
            Code:
            {
              "data":[
              
              { "{#fsname}":"/",                           "{#fstype}":"rootfs"   },
              { "{#fsname}":"/sys",                        "{#fstype}":"sysfs"    },
              { "{#fsname}":"/proc",                       "{#fstype}":"proc"     },
              { "{#fsname}":"/dev",                        "{#fstype}":"devtmpfs" },
              { "{#fsname}":"/dev/pts",                    "{#fstype}":"devpts"   },
              { "{#fsname}":"/lib/init/rw",                "{#fstype}":"tmpfs"    },
              { "{#fsname}":"/dev/shm",                    "{#fstype}":"tmpfs"    },
              { "{#fsname}":"/home",                       "{#fstype}":"ext3"     },
              { "{#fsname}":"/tmp",                        "{#fstype}":"ext3"     },
              { "{#fsname}":"/usr",                        "{#fstype}":"ext3"     },
              { "{#fsname}":"/var",                        "{#fstype}":"ext3"     },
              { "{#fsname}":"/sys/fs/fuse/connections",    "{#fstype}":"fusectl"  }
              
              ]
            }
            Должен быть массив с именем "data", элементы которого - объекты, состоящие из пар "макрос - значение". По одному объекту на каждый найденный элемент Вашего списка, количество и наименование макросов - на Ваш выбор (ну, наименование - в пределах допустимого синтаксиса).
            В вышеприведённом примере lld файловых систем на каждую файловую систему выводится два её атрибута: точка монтирования и тип, соответственно для них используются макросы {#fsname} и {#fstype}. Но Вы для своих целей можете выбрать такие наименования макросов, какие Вам удобны; главное - потом их же применять в правилах lld (в фильтре, прототипах элементов данных/триггеров/графиков/etc.).
            Спасибо большое за ссылку. ТО ли слепой, то ли к вечеру уже клинануло просто, но почему-то не листал дальше создания триггеров.

            Comment

            Working...