Ad Widget

Collapse

json-rpc и perl

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Aly
    ZABBIX developer
    • May 2007
    • 1126

    #16
    Должо работать, проверьте права и правильные ли itemids передаёте.
    Проверьте itemids через item.get, с параметром editable, все ли итемы вернулись?
    Zabbix | ex GUI developer

    Comment

    • noname
      Senior Member
      • Jan 2008
      • 120

      #17
      Вот код:
      $object = {
      jsonrpc => '2.0',
      method => 'item.get',
      id => $count++,
      auth => $sessionid,
      params => {
      hostids => [ $hostid ],
      extendoutput => 1,
      editable => 1
      }
      };

      Вызов возвращает:
      [{"hosts":[{"hostid":"10160"}],"snmp_oid":"interfaces.ifTable.ifEntry.ifInOctets .1","ipmi_sensor":"","password":"","data_type":"0" ,"formula":"1","privatekey":"","authtype":"0","las tclock":null,"snmpv3_privpassphrase":"","key_":"ht tp,80","history":"90","mtime":"0","snmp_community" :"public","description":"WebServer Ping","username":"","snmpv3_securityname":"","para ms":"","value_type":"3","delta":"0","prevorgvalue" :null,"type":"3","lastvalue":null,"lastlogsize":"0 ","snmpv3_authpassphrase":"","logtimefmt":"","valu emapid":"0","status":"0","delay":"30","templateid" :"22179","hostid":"10160","trends":"365","error":" ","trapper_hosts":"","itemid":"22288","prevvalue":null,"snmpv3_securitylevel":"0","pub lickey":"","delay_flex":"","snmp_port":"161","unit s":"","multiplier":"0"},{"hosts":[{"hostid":"10160"}],"snmp_oid":"interfaces.ifTable.ifEntry.ifInOctets .1","ipmi_sensor":"","password":"","data_type":"0" ,"formula":"1","privatekey":"","authtype":"0","las tclock":null,"snmpv3_privpassphrase":"","key_":"ic mpping[]","history":"90","mtime":"0","snmp_community":"pub lic","description":"ICMP ping","username":"","snmpv3_securityname":"","para ms":"","value_type":"3","delta":"0","prevorgvalue" :null,"type":"3","lastvalue":null,"lastlogsize":"0 ","snmpv3_authpassphrase":"","logtimefmt":"","valu emapid":"0","status":"0","delay":"30","templateid" :"22177","hostid":"10160","trends":"365","error":" ","trapper_hosts":"","itemid":"22287","prevvalue":null,"snmpv3_securitylevel":"0","pub lickey":"","delay_flex":"","snmp_port":"161","unit s":"","multiplier":"0"}]
      22287 22288

      Вот код дальше:
      print "@temp\n";
      $object = {
      jsonrpc => '2.0',
      method => 'item.update',
      id => $count++,
      auth => $sessionid,
      params => {
      items => [{ itemid => $temp[0], status => 1 },
      { itemid => $temp[1], status => 1 } ]
      }
      };

      Возвращает вот что (дальше ошибка, разумеется):
      22287 22288

      Comment

      • Aly
        ZABBIX developer
        • May 2007
        • 1126

        #18
        А $temp[0] на что указывает? Предположу что надо $temp[0]["itemid"].

        Example:

        PHP Code:
        $object = {
        jsonrpc => '2.0',
        method => 'item.update',
        id => $count++,
        auth => $sessionid,
        params => {
        items => [{"itemid":"22287""status"1},{"itemid":"22288""status":1}]
        }
        }; 
        Zabbix | ex GUI developer

        Comment

        • noname
          Senior Member
          • Jan 2008
          • 120

          #19
          У меня так и записано (нотация перла отличается от пхп немного), для примера кусок кода (id итемов изменились):
          my $ref = [{ itemid => $temp[0], status => 1 }, { itemid => $temp[1], status => 1 }];
          print to_json( $ref), "\n";

          Вот результат:
          [{"itemid":"22289","status":1},{"itemid":"22290","s tatus":1}]

          Comment

          • noname
            Senior Member
            • Jan 2008
            • 120

            #20
            В перле есть массив и хеш (аналог массива в пхп).
            [1, 2, 3] - массив
            { 1 => 'a', 3 => 'tt'} - хеш

            Comment

            • Aly
              ZABBIX developer
              • May 2007
              • 1126

              #21
              Хмм.. тогда не знаю, проверил у себя (правда на пре 1.8.1) итемы отключились нормально.
              Вот мой запрос/ответ в JSON:

              ----->
              {"jsonrpc":"2.0","method":"item.update","params ":[{"itemid":"100100000010001","status":1},{"itemid": "100100000010002","status":1}],"auth":"skipped","id":2}

              <-----
              {"jsonrpc":"2.0","result":[{"hosts":[{"hostid":"100100000010001"}],"itemid":"100100000010001","type":"0","snmp_commu nity":"","snmp_oid":"","snmp_port":"161","hostid": "100100000010001","description":"Free memory","key_":"vm.memory.size[free]","delay":"30","history":"7","trends":"365","lastv alue":null,"lastclock":null,"prevvalue":null,"stat us":"1","value_type":"3","trapper_hosts":"","units ":"B","multiplier":"0","delta":"0","prevorgvalue": null,"snmpv3_securityname":"","snmpv3_securityleve l":"0","snmpv3_authpassphrase":"","snmpv3_privpass phrase":"","formula":"0","error":"","lastlogsize": "0","logtimefmt":"","templateid":"0","valuemapid": "0","delay_flex":"","params":"","ipmi_sensor":""," data_type":"0","authtype":"0","username":"","passw ord":"","publickey":"","privatekey":"","mtime":"0" },{"hosts":[{"hostid":"100100000010001"}],"itemid":"100100000010002","type":"0","snmp_commu nity":"","snmp_oid":"","snmp_port":"161","hostid": "100100000010001","description":"Free disk space on $1","key_":"vfs.fs.size[\/,free]","delay":"30","history":"7","trends":"365","lastv alue":null,"lastclock":null,"prevvalue":null,"stat us":"1","value_type":"3","trapper_hosts":"","units ":"B","multiplier":"1","delta":"0","prevorgvalue": null,"snmpv3_securityname":"","snmpv3_securityleve l":"0","snmpv3_authpassphrase":"","snmpv3_privpass phrase":"","formula":"1024","error":"","lastlogsiz e":"0","logtimefmt":"","templateid":"0","valuemapi d":"0","delay_flex":"","params":"","ipmi_sensor":" ","data_type":"0","authtype":"0","username":"","pa ssword":"","publickey":"","privatekey":"","mtime": "0"}],"id":2}
              Zabbix | ex GUI developer

              Comment

              • s.ivlenkov
                Junior Member
                • Jan 2010
                • 5

                #22
                Я тоже попробовал json-rpc через перл.
                Функции item.update и graph.update отработали нормально.
                А вот trigger.update почему-то возвращает странную ошибку.
                Ниже дамп переменных запроса и ответа.
                Сам триггер был получен через trigger.get, и в нем подправлен атрибут comments.
                Можно как-то понять в чем ошибка?
                Zabbix 1.8

                Code:
                Запрос = {
                          'params' => [
                                        {
                                          'priority' => '4',
                                          'hosts' => [
                                                       {
                                                         'hostid' => '10065'
                                                       }
                                                     ],
                                          'value' => '2',
                                          'status' => '1',
                                          'templateid' => '17490',
                                          'comments' => '
                	Port speed 1000000000 bps !!
                	Threshold = 75%
                	',
                                          'description' => '[Port Vlan1 InOctets] 001  InOctets Threshold Exceeded',
                                          'lastchange' => '0',
                                          'triggerid' => '17992',
                                          'expression' => '{18289}>0.75*{18288} & {18288}#0',
                                          'error' => '',
                                          'url' => '',
                                          'type' => '0',
                                          'dep_level' => '0'
                                        }
                                      ],
                          'auth' => '09a27574df635ef6e4d5a5dc1bfa7e53',
                          'jsonrpc' => '2.0',
                          'version' => '1.1',
                          'id' => 6,
                          'method' => 'trigger.update'
                        };
                Ответ = bless( {
                                 'version' => 0,
                                 'content' => {
                                                'jsonrpc' => '2.0',
                                                'error' => {
                                                             'data' => 'JSON-rpc error generation failed. No such error: ',
                                                             'message' => 'System error.',
                                                             'code' => -32400
                                                           },
                                                'id' => 6
                                              },
                                 'jsontext' => '{"jsonrpc":"2.0","error":{"code":-32400,"message":"System error.","data":"JSON-rpc error generation failed. No such error: "},"id":6}',
                                 'is_success' => 0
                               }, 'JSON::RPC::ReturnObject' );
                Last edited by s.ivlenkov; 25-01-2010, 13:19.

                Comment

                • nikanmf
                  Junior Member
                  • Jan 2010
                  • 1

                  #23
                  Та же ошибка "JSON-rpc error generation failed. No such error:"
                  Проверяю sessionid. Если ввести существующий, то все нормально, приходит result: true. Если же изменить хоть один символ в проверяемом sid, то получаю эту ошибку.

                  ===================
                  Версия 1.8 (не пре)
                  Провел эксперимент. Функция apiinfo.version состоит из одной строчки return. Заменил ее на return true; Ответ пришел как положено - "result":true. Сделал return false; Приходит ошибка "JSON-rpc error generation failed. No such error:"
                  ===================
                  Скопировал из pre-zabbix-1.8.x-9512 папку frontends\php в установленный Zabbix с заменой файлов.
                  Нашел ошибку, вызывающую мою проблему.

                  Вызываю функцию user.checkAuthentication, возвращающую либо true, либо false. Допустим, что при наших параметрах она возвратит false. Проследим, что при этом произойдет:

                  Файл api\rpc\class.czbxrpc.php
                  Функция
                  Code:
                  call_user_func(array('self', $resource), $action, $params);
                  вызовет
                  Code:
                  private static function user($action, $params){
                  
                  	CUser::$error = array();
                  
                  	switch($action){
                  		default:
                  		$result = [B]call_user_func(array('CUser', $action), $params);[/B]
                  	}
                  
                  	self::$result = $result;
                  }
                  Выделенная строчка вызовет
                  Code:
                  CUser.checkAuthentication
                  которая возвратит false.
                  self::$result примет значение false

                  После этого мы попадаем сюда
                  Code:
                  if(self::$result !== false){
                  	self::$result = array('result' => self::$result);
                  }
                  else{
                  	self::$result = reset(CZBXAPI::$error);
                  }
                  И т.к. self::$result = false (что не является ошибкой, а просто возвращенное значение функции), то выполняется
                  Code:
                  self::$result = reset(CZBXAPI::$error);
                  вместо положеного
                  Code:
                  self::$result = array('result' => self::$result);
                  =============
                  Для себя поправил файл class.czbxrpc.php так:
                  Было
                  Code:
                  private static function user($action, $params){
                  
                  	CUser::$error = array();
                  
                  	switch($action){
                  		default:
                  		$result = call_user_func(array('CUser', $action), $params);
                  	}
                  
                  	self::$result = $result;
                  }
                  Стало
                  Code:
                  private static function user($action, $params){
                  
                  	CUser::$error = array();
                  
                  	switch($action){
                  		case 'checkAuthentication':
                  		$result = (call_user_func(array('CUser', $action), $params))? 1: 0;
                  		break;
                  		default:
                  		$result = call_user_func(array('CUser', $action), $params);
                  	}
                  
                  	self::$result = $result;
                  }
                  Last edited by nikanmf; 27-01-2010, 11:49.

                  Comment

                  • sire
                    Senior Member
                    • Jul 2010
                    • 210

                    #24
                    В версии 1.8.5rc1.x-18700 всё вроде бы работает. В частности trigger.update.
                    Last edited by sire; 08-04-2011, 08:56.
                    Regards,
                    Sergey Syreskin

                    Monitored hosts: 2646 / Active items: 23604 / Server performance: 765.74

                    Temporary out of Zabbix business

                    Comment

                    Working...