Ejemplo n.º 1
0
function make_system_status($filter)
{
    $ackParams = array();
    if (!empty($filter['screenid'])) {
        $ackParams['screenid'] = $filter['screenid'];
    }
    $table = new CTableInfo(_('No host groups found.'));
    $table->setHeader(array(is_show_all_nodes() ? _('Node') : null, _('Host group'), is_null($filter['severity']) || isset($filter['severity'][TRIGGER_SEVERITY_DISASTER]) ? getSeverityCaption(TRIGGER_SEVERITY_DISASTER) : null, is_null($filter['severity']) || isset($filter['severity'][TRIGGER_SEVERITY_HIGH]) ? getSeverityCaption(TRIGGER_SEVERITY_HIGH) : null, is_null($filter['severity']) || isset($filter['severity'][TRIGGER_SEVERITY_AVERAGE]) ? getSeverityCaption(TRIGGER_SEVERITY_AVERAGE) : null, is_null($filter['severity']) || isset($filter['severity'][TRIGGER_SEVERITY_WARNING]) ? getSeverityCaption(TRIGGER_SEVERITY_WARNING) : null, is_null($filter['severity']) || isset($filter['severity'][TRIGGER_SEVERITY_INFORMATION]) ? getSeverityCaption(TRIGGER_SEVERITY_INFORMATION) : null, is_null($filter['severity']) || isset($filter['severity'][TRIGGER_SEVERITY_NOT_CLASSIFIED]) ? getSeverityCaption(TRIGGER_SEVERITY_NOT_CLASSIFIED) : null));
    // get host groups
    $groups = API::HostGroup()->get(array('groupids' => $filter['groupids'], 'hostids' => isset($filter['hostids']) ? $filter['hostids'] : null, 'nodeids' => get_current_nodeid(), 'monitored_hosts' => true, 'output' => array('groupid', 'name'), 'preservekeys' => true));
    foreach ($groups as &$group) {
        $group['nodename'] = get_node_name_by_elid($group['groupid']);
    }
    unset($group);
    CArrayHelper::sort($groups, array(array('field' => 'nodename', 'order' => ZBX_SORT_UP), array('field' => 'name', 'order' => ZBX_SORT_UP)));
    $groupIds = array();
    foreach ($groups as $group) {
        $groupIds[$group['groupid']] = $group['groupid'];
        $group['tab_priority'] = array(TRIGGER_SEVERITY_DISASTER => array('count' => 0, 'triggers' => array(), 'count_unack' => 0, 'triggers_unack' => array()), TRIGGER_SEVERITY_HIGH => array('count' => 0, 'triggers' => array(), 'count_unack' => 0, 'triggers_unack' => array()), TRIGGER_SEVERITY_AVERAGE => array('count' => 0, 'triggers' => array(), 'count_unack' => 0, 'triggers_unack' => array()), TRIGGER_SEVERITY_WARNING => array('count' => 0, 'triggers' => array(), 'count_unack' => 0, 'triggers_unack' => array()), TRIGGER_SEVERITY_INFORMATION => array('count' => 0, 'triggers' => array(), 'count_unack' => 0, 'triggers_unack' => array()), TRIGGER_SEVERITY_NOT_CLASSIFIED => array('count' => 0, 'triggers' => array(), 'count_unack' => 0, 'triggers_unack' => array()));
        $groups[$group['groupid']] = $group;
    }
    // get triggers
    $triggers = API::Trigger()->get(array('nodeids' => get_current_nodeid(), 'groupids' => $groupIds, 'hostids' => isset($filter['hostids']) ? $filter['hostids'] : null, 'monitored' => true, 'maintenance' => $filter['maintenance'], 'skipDependent' => true, 'withLastEventUnacknowledged' => $filter['extAck'] == EXTACK_OPTION_UNACK ? true : null, 'selectLastEvent' => API_OUTPUT_EXTEND, 'expandDescription' => true, 'filter' => array('priority' => $filter['severity'], 'value' => TRIGGER_VALUE_TRUE), 'sortfield' => 'lastchange', 'sortorder' => ZBX_SORT_DOWN, 'output' => API_OUTPUT_EXTEND, 'selectHosts' => array('name'), 'preservekeys' => true));
    // get acknowledges
    $eventIds = array();
    foreach ($triggers as $tnum => $trigger) {
        if (!empty($trigger['lastEvent'])) {
            $eventIds[$trigger['lastEvent']['eventid']] = $trigger['lastEvent']['eventid'];
        }
        $triggers[$tnum]['event'] = $trigger['lastEvent'];
        unset($triggers[$tnum]['lastEvent']);
    }
    if ($eventIds) {
        $eventAcknowledges = API::Event()->get(array('eventids' => $eventIds, 'select_acknowledges' => API_OUTPUT_EXTEND, 'preservekeys' => true));
    }
    // actions
    $actions = getEventActionsStatus($eventIds);
    // triggers
    foreach ($triggers as $trigger) {
        // event
        if (empty($trigger['event'])) {
            $trigger['event'] = array('acknowledged' => false, 'clock' => $trigger['lastchange'], 'value' => $trigger['value']);
        } else {
            $trigger['event']['acknowledges'] = isset($eventAcknowledges[$trigger['event']['eventid']]) ? $eventAcknowledges[$trigger['event']['eventid']]['acknowledges'] : 0;
        }
        // groups
        foreach ($trigger['groups'] as $group) {
            if (!isset($groups[$group['groupid']])) {
                continue;
            }
            if (in_array($filter['extAck'], array(EXTACK_OPTION_ALL, EXTACK_OPTION_BOTH))) {
                $groups[$group['groupid']]['tab_priority'][$trigger['priority']]['count']++;
                if ($groups[$group['groupid']]['tab_priority'][$trigger['priority']]['count'] < 30) {
                    $groups[$group['groupid']]['tab_priority'][$trigger['priority']]['triggers'][] = $trigger;
                }
            }
            if (in_array($filter['extAck'], array(EXTACK_OPTION_UNACK, EXTACK_OPTION_BOTH)) && isset($trigger['event']) && !$trigger['event']['acknowledged']) {
                $groups[$group['groupid']]['tab_priority'][$trigger['priority']]['count_unack']++;
                if ($groups[$group['groupid']]['tab_priority'][$trigger['priority']]['count_unack'] < 30) {
                    $groups[$group['groupid']]['tab_priority'][$trigger['priority']]['triggers_unack'][] = $trigger;
                }
            }
        }
    }
    unset($triggers);
    foreach ($groups as $group) {
        $groupRow = new CRow();
        if (is_show_all_nodes()) {
            $groupRow->addItem($group['nodename']);
        }
        $name = new CLink($group['name'], 'tr_status.php?groupid=' . $group['groupid'] . '&hostid=0&show_triggers=' . TRIGGERS_OPTION_ONLYTRUE);
        $groupRow->addItem($name);
        foreach ($group['tab_priority'] as $severity => $data) {
            if (!is_null($filter['severity']) && !isset($filter['severity'][$severity])) {
                continue;
            }
            $allTriggersNum = $data['count'];
            if ($allTriggersNum) {
                $allTriggersNum = new CSpan($allTriggersNum, 'pointer');
                $allTriggersNum->setHint(makeTriggersPopup($data['triggers'], $ackParams, $actions));
            }
            $unackTriggersNum = $data['count_unack'];
            if ($unackTriggersNum) {
                $unackTriggersNum = new CSpan($unackTriggersNum, 'pointer red bold');
                $unackTriggersNum->setHint(makeTriggersPopup($data['triggers_unack'], $ackParams, $actions));
            }
            switch ($filter['extAck']) {
                case EXTACK_OPTION_ALL:
                    $groupRow->addItem(getSeverityCell($severity, $allTriggersNum, !$allTriggersNum));
                    break;
                case EXTACK_OPTION_UNACK:
                    $groupRow->addItem(getSeverityCell($severity, $unackTriggersNum, !$unackTriggersNum));
                    break;
                case EXTACK_OPTION_BOTH:
                    if ($unackTriggersNum) {
                        $span = new CSpan(SPACE . _('of') . SPACE);
                        $unackTriggersNum = new CSpan($unackTriggersNum);
                    } else {
                        $span = null;
                        $unackTriggersNum = null;
                    }
                    $groupRow->addItem(getSeverityCell($severity, array($unackTriggersNum, $span, $allTriggersNum), !$allTriggersNum));
                    break;
            }
        }
        $table->addRow($groupRow);
    }
    $script = new CJSScript(get_js("jQuery('#hat_syssum_footer').html('" . _s('Updated: %s', zbx_date2str(_('H:i:s'))) . "')"));
    return new CDiv(array($table, $script));
}
Ejemplo n.º 2
0
 $triggersOptions = array('triggerids' => zbx_objectValues($events, 'objectid'), 'selectHosts' => array('hostid'), 'selectItems' => array('name', 'value_type', 'key_'), 'output' => array('description', 'expression', 'priority'));
 $triggers = API::Trigger()->get($triggersOptions);
 $triggers = zbx_toHash($triggers, 'triggerid');
 // fetch hosts
 $hosts = array();
 foreach ($triggers as $trigger) {
     $hosts[] = reset($trigger['hosts']);
 }
 $hostids = zbx_objectValues($hosts, 'hostid');
 $hosts = API::Host()->get(array('output' => array('name', 'hostid'), 'hostids' => $hostids, 'selectScreens' => API_OUTPUT_COUNT, 'selectInventory' => array('hostid'), 'preservekeys' => true));
 // fetch scripts for the host JS menu
 if ($_REQUEST['hostid'] == 0) {
     $hostScripts = API::Script()->getScriptsByHosts($hostids);
 }
 // actions
 $actions = getEventActionsStatus(zbx_objectValues($events, 'eventid'));
 // events
 foreach ($events as $enum => $event) {
     $trigger = $triggers[$event['objectid']];
     $host = reset($trigger['hosts']);
     $host = $hosts[$host['hostid']];
     $items = array();
     foreach ($trigger['items'] as $item) {
         $i = array();
         $i['itemid'] = $item['itemid'];
         $i['value_type'] = $item['value_type'];
         // ZBX-3059: So it would be possible to show different caption for history for chars and numbers (KB)
         $i['action'] = str_in_array($item['value_type'], array(ITEM_VALUE_TYPE_FLOAT, ITEM_VALUE_TYPE_UINT64)) ? 'showgraph' : 'showvalues';
         $i['name'] = itemName($item);
         $items[] = $i;
     }