Ad Widget

Collapse

zabbixapi создание изображения

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • mserg
    Junior Member
    • Feb 2011
    • 8

    #1

    zabbixapi создание изображения

    код
    PHP Code:
    require_once("ZabbixAPI.class.php");

    $img_filename='/usr/local/share/zabbix/map-images/cell.png';

    $img_file=fopen($img_filename'rb');

    $img_data=fread($img_filefilesize($img_filename));

    $img_create ZabbixAPI::query('image','create',array('name'=>'myImage''image'=>base64_encode($img_data),'imagetype'=>2));

    fclose($img_file); 
    добавляет в mysql-базу закодированный блоб, а фронтэнд заббикса пишет бинарь в незакодированном виде (и закодированный прочитать не может).
    Как через API добавить незакодированный блоб?
    Похоже это из-за несовместимости версий ZabbixZPI.class для php и zabbix API
    Last edited by mserg; 17-02-2011, 20:10.
  • mserg
    Junior Member
    • Feb 2011
    • 8

    #2
    fixed

    Пришлось пофиксить ${zabbix-www}/api/classes/class.cimage.php (323):
    вставил декодирование при записи в базу:

    PHP Code:
    $image['image']=base64_decode($image['image']); 
    Last edited by mserg; 17-02-2011, 20:11.

    Comment

    • zalex_ua
      Senior Member
      Zabbix Certified Trainer
      Zabbix Certified SpecialistZabbix Certified Professional
      • Oct 2009
      • 1286

      #3
      Originally posted by mserg
      Пришлось пофиксить ${zabbix-www}/api/classes/class.cimage.php (323):
      Если вы уверены, что нашли ошибку, обязательно опубликуйте ее на трекере.

      Comment

      • Aly
        ZABBIX developer
        • May 2007
        • 1126

        #4
        На сколько я помню это было добавлено только в zbx api 1.8.4..
        Zabbix | ex GUI developer

        Comment

        • mserg
          Junior Member
          • Feb 2011
          • 8

          #5
          Originally posted by aly
          На сколько я помню это было добавлено только в zbx api 1.8.4..
          Точно, исправили.
          Спасибо.

          Comment

          • mserg
            Junior Member
            • Feb 2011
            • 8

            #6
            опять косяк

            Не хочу показаться занудой, но API в настоящем виде - что есть, что нету.
            Обновился до 1.8.4, закатал рукава, погнали! ...стоп.
            Удовлетворяем своё желание добавить элемент на карту:
            в рус. документации:
            Карты:
            Класс содержит методы для операций с Картами:
            get данные по карте
            getById все данные по карте из БД по ID карты
            add Карта
            update Карта
            delete Карта
            хм... ок, в анг. документации:
            Map:
            Class containing methods for operations with Maps.
            get() Get map details
            exists() Check if map exists
            create() Create maps
            update() Update map details
            delete() Delete maps
            Ну уже есть повод для грустной ухмылки.
            Наученные опытом лезем для выяснения "ху из ху" в сырцы:

            ${zabbix-www}/api/classes/class.cmap.php (834...)
            метод addElement класса cmap:
            PHP Code:
            /**
             * Add Element to Sysmap
             *
             * @param array $elements[0,...]['sysmapid']
             * @param array $elements[0,...]['elementid']
             * @param array $elements[0,...]['elementtype']
             * @param array $elements[0,...]['label']
             * @param array $elements[0,...]['x']
             * @param array $elements[0,...]['y']
             * @param array $elements[0,...]['iconid_off']
             * @param array $elements[0,...]['iconid_unknown']
             * @param array $elements[0,...]['iconid_on']
             * @param array $elements[0,...]['iconid_disabled']
             * @param array $elements[0,...]['url']
             * @param array $elements[0,...]['label_location']
             */
                
            public static function addElements($selements){
                   
            // ........... 
            Ок, лабаем:
            PHP Code:
            ZabbixAPI::query('map','addElements',array(
                                                        array(
                                                            
            'sysmapid'=>821,
                                                            
            'elementid'=>822,
                                                            
            'elementtype'=>1,
                                                            
            'iconid_off'=>760,
                                                            
            'iconid_on'=>760,
                                                            
            'iconid_unknown'=>760,
                                                            
            'label'=>'lllll',
                                                            
            'label_location'=>0,
                                                            
            'x'=>0,
                                                            
            'y'=>0,
                                                            
            'url'=>'localhost',
                                                            
            'iconid_disabled'=>760
                                                       
            )
                                                    )
                        )
                            or die(
            'Unable to update: '.print_r(ZabbixAPI::getLastError(),true)); 
            В итоге получаем "Map add elements failed" с загадочным "Invalid params."
            А отгадка нашлась в структуре базы ибо
            `iconid_maintenance` bigint(20) unsigned NOT NULL DEFAULT '0'
            а в коде:
            ${zabbix-www}/api/classes/class.cmap.php (911)
            PHP Code:
            'iconid_maintenance' => $selement['iconid_maintenance'], 
            т.е. тупо читается из пришедшего запроса, а если там пусто, (что никак не расходится с комментами к классу) то NULL конечно, который в базу запихнуть не получается.

            Чем дальше в лес, тем грустнявее юзать API, что ни класс, то война.
            Last edited by mserg; 16-02-2011, 21:50.

            Comment

            • zalex_ua
              Senior Member
              Zabbix Certified Trainer
              Zabbix Certified SpecialistZabbix Certified Professional
              • Oct 2009
              • 1286

              #7
              Originally posted by mserg

              в рус. документации:
              ......
              хм... ок, в анг. документации:
              Посмотрите на примечание вот здесь http://www.zabbix.com/documentation/ru/1.8/api.
              А еще можете заглядывать в документацию по АПИ к версии 2.0, она конечно же во многих местах не соответствует ветке 1.8, но я предполагаю что во многих местах она может быть более точной и более детальной

              Comment

              • Aly
                ZABBIX developer
                • May 2007
                • 1126

                #8
                Originally posted by mserg
                Не хочу показаться занудой, но API в настоящем виде - что есть, что нету.
                Обновился до 1.8.4, закатал рукава, погнали! ...стоп.
                Удовлетворяем своё желание добавить элемент на карту:
                в рус. документации:


                хм... ок, в анг. документации:

                Ну уже есть повод для грустной ухмылки.
                Наученные опытом лезем для выяснения "ху из ху" в сырцы:

                ${zabbix-www}/api/classes/class.cmap.php (834...)
                метод addElement класса cmap:
                PHP Code:
                /**
                 * Add Element to Sysmap
                 *
                 * @param array $elements[0,...]['sysmapid']
                 * @param array $elements[0,...]['elementid']
                 * @param array $elements[0,...]['elementtype']
                 * @param array $elements[0,...]['label']
                 * @param array $elements[0,...]['x']
                 * @param array $elements[0,...]['y']
                 * @param array $elements[0,...]['iconid_off']
                 * @param array $elements[0,...]['iconid_unknown']
                 * @param array $elements[0,...]['iconid_on']
                 * @param array $elements[0,...]['iconid_disabled']
                 * @param array $elements[0,...]['url']
                 * @param array $elements[0,...]['label_location']
                 */
                    
                public static function addElements($selements){
                       
                // ........... 
                Ок, лабаем:
                PHP Code:
                ZabbixAPI::query('map','addElements',array(
                                                            array(
                                                                
                'sysmapid'=>821,
                                                                
                'elementid'=>822,
                                                                
                'elementtype'=>1,
                                                                
                'iconid_off'=>760,
                                                                
                'iconid_on'=>760,
                                                                
                'iconid_unknown'=>760,
                                                                
                'label'=>'lllll',
                                                                
                'label_location'=>0,
                                                                
                'x'=>0,
                                                                
                'y'=>0,
                                                                
                'url'=>'localhost',
                                                                
                'iconid_disabled'=>760
                                                           
                )
                                                        )
                            )
                                or die(
                'Unable to update: '.print_r(ZabbixAPI::getLastError(),true)); 
                В итоге получаем "Map add elements failed" с загадочным "Invalid params."
                А отгадка нашлась в структуре базы ибо
                а в коде:
                ${zabbix-www}/api/classes/class.cmap.php (911)
                PHP Code:
                'iconid_maintenance' => $selement['iconid_maintenance'], 
                т.е. тупо читается из пришедшего запроса, а если там пусто, (что никак не расходится с комментами к классу) то NULL конечно, который в базу запихнуть не получается.

                Чем дальше в лес, тем грустнявее юзать API, что ни класс, то война.
                АПИ не идеален - работаем, работаем..

                НО!
                1. Вы полезли в недокументированный метод.
                2. Вот пример добавления карт, а тут описания использующихся объектов.
                3. Вы отправили неполный объект, на что и получили ошибку.
                Zabbix | ex GUI developer

                Comment

                • mserg
                  Junior Member
                  • Feb 2011
                  • 8

                  #9
                  Originally posted by Aly
                  АПИ не идеален - работаем, работаем..

                  НО!
                  1. Вы полезли в недокументированный метод.
                  2. Вот пример добавления карт, а тут описания использующихся объектов.
                  3. Вы отправили неполный объект, на что и получили ошибку.
                  По всем пунктам согласен. За работу благодарен.
                  Метод map.addElements() очень удобный, как-то в голову не пришло добавлять элементы на существующую карту не через него.

                  Comment

                  • sire
                    Senior Member
                    • Jul 2010
                    • 210

                    #10
                    mserg,

                    Как решили проблему? Удалось добавить элементы на карту? У меня не получается: http://www.zabbix.com/forum/showthread.php?t=21549
                    Regards,
                    Sergey Syreskin

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

                    Temporary out of Zabbix business

                    Comment

                    Working...