Ad Widget

Collapse

Api сложные запросы

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • borin
    Junior Member
    • Sep 2013
    • 21

    #1

    Api сложные запросы

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

    Подскажите пожалуйста, вот например есть метод "hostgroup.get", в параметрах запроса можно указать "selectHosts", тип query, что указывать в качестве значения параметра?

    Пробовал так, выдает группы и хосты в них. А возможно ли получить группы, хосты в них, а с хостами и интерфейсы (параметр "selectInterfaces" в "host.get") и все это одним запросом???
    Code:
    method: 'hostgroup.get',
    params: {
       output: "extend",
       sortfield: "name",
       selectHosts: "extend"
    },
    Р.S. Просто не нашел примера что писать в параметр типа query.
  • Jimson
    Senior Member
    • Jan 2008
    • 1327

    #2
    Ищите ответ в исходниках api/classes/*

    Code:
    if ($options['selectHosts'] !== null) {
            if ($options['selectHosts'] !== API_OUTPUT_COUNT) {
                    $relationMap = $this->createRelationMap($result, 'groupid', 'hostid', 'hosts_groups');
                    $hosts = API::Host()->get(array(
                            'output' => $options['selectHosts'],
                            'nodeids' => $options['nodeids'],
                            'hostids' => $relationMap->getRelatedIds(),
                            'preservekeys' => true
                    ));
                    if (!is_null($options['limitSelects'])) {
                            order_result($hosts, 'host');
                    }
                    $result = $relationMap->mapMany($result, $hosts, 'hosts', $options['limitSelects']);
            }
            else {
                    $hosts = API::Host()->get(array(
                            'nodeids' => $options['nodeids'],
                            'groupids' => $groupIds,
                            'countOutput' => true,
                            'groupCount' => true
                    ));
                    $hosts = zbx_toHash($hosts, 'groupid');
                    foreach ($result as $groupid => $group) {
                            if (isset($hosts[$groupid])) {
                                    $result[$groupid]['hosts'] = $hosts[$groupid]['rowscount'];
                            }
                            else {
                                    $result[$groupid]['hosts'] = 0;
                            }
                    }
            }
    }
    На сколько я понимаю параметры select* могут принимать значения refer, extend и count.

    Comment

    Working...