/** * Prepare map elements data. * Calculate problem triggers and priorities. Populate map elements with automatic icon mapping, acknowledging and * recent change markers. * * @param array $sysmap * @param int $options * @param int $options['severity_min'] Minimum trigger severity, default value is maximal (Disaster) * * @return array */ function getSelementsInfo($sysmap, array $options = array()) { if (!isset($options['severity_min'])) { $options['severity_min'] = TRIGGER_SEVERITY_NOT_CLASSIFIED; } $config = select_config(); $showUnacknowledged = $config['event_ack_enable'] ? $sysmap['show_unack'] : EXTACK_OPTION_ALL; $triggerIdToSelementIds = array(); $subSysmapTriggerIdToSelementIds = array(); $hostGroupIdToSelementIds = array(); $hostIdToSelementIds = array(); if ($sysmap['sysmapid']) { $iconMap = API::IconMap()->get(array('sysmapids' => $sysmap['sysmapid'], 'selectMappings' => API_OUTPUT_EXTEND, 'output' => API_OUTPUT_EXTEND)); $iconMap = reset($iconMap); } $hostsToGetInventories = array(); $selements = $sysmap['selements']; $selementIdToSubSysmaps = array(); foreach ($selements as $selementId => &$selement) { $selement['hosts'] = array(); $selement['triggers'] = array(); switch ($selement['elementtype']) { case SYSMAP_ELEMENT_TYPE_MAP: $sysmapIds = array($selement['elementid']); while (!empty($sysmapIds)) { $subSysmaps = API::Map()->get(array('sysmapids' => $sysmapIds, 'output' => array('sysmapid'), 'selectSelements' => API_OUTPUT_EXTEND, 'nopermissions' => true, 'preservekeys' => true)); if (!isset($selementIdToSubSysmaps[$selementId])) { $selementIdToSubSysmaps[$selementId] = array(); } $selementIdToSubSysmaps[$selementId] += $subSysmaps; $sysmapIds = array(); foreach ($subSysmaps as $subSysmap) { foreach ($subSysmap['selements'] as $subSysmapSelement) { switch ($subSysmapSelement['elementtype']) { case SYSMAP_ELEMENT_TYPE_MAP: $sysmapIds[] = $subSysmapSelement['elementid']; break; case SYSMAP_ELEMENT_TYPE_HOST_GROUP: $hostGroupIdToSelementIds[$subSysmapSelement['elementid']][$selementId] = $selementId; break; case SYSMAP_ELEMENT_TYPE_HOST: $hostIdToSelementIds[$subSysmapSelement['elementid']][$selementId] = $selementId; break; case SYSMAP_ELEMENT_TYPE_TRIGGER: $subSysmapTriggerIdToSelementIds[$subSysmapSelement['elementid']][$selementId] = $selementId; break; } } } } break; case SYSMAP_ELEMENT_TYPE_HOST_GROUP: $hostGroupId = $selement['elementid']; $hostGroupIdToSelementIds[$hostGroupId][$selementId] = $selementId; break; case SYSMAP_ELEMENT_TYPE_HOST: $hostId = $selement['elementid']; $hostIdToSelementIds[$hostId][$selementId] = $selementId; // if we have icon map applied, we need to get inventories for all hosts, // where automatic icon selection is enabled. if ($sysmap['iconmapid'] && $selement['use_iconmap']) { $hostsToGetInventories[] = $hostId; } break; case SYSMAP_ELEMENT_TYPE_TRIGGER: $triggerId = $selement['elementid']; $triggerIdToSelementIds[$triggerId][$selementId] = $selementId; break; } } unset($selement); // get host inventories if ($sysmap['iconmapid']) { $hostInventories = API::Host()->get(array('hostids' => $hostsToGetInventories, 'output' => array('hostid'), 'nopermissions' => true, 'preservekeys' => true, 'selectInventory' => API_OUTPUT_EXTEND)); } $allHosts = array(); if (!empty($hostIdToSelementIds)) { $hosts = API::Host()->get(array('hostids' => array_keys($hostIdToSelementIds), 'output' => array('name', 'status', 'maintenance_status', 'maintenanceid'), 'nopermissions' => true, 'preservekeys' => true)); $allHosts = array_merge($allHosts, $hosts); foreach ($hosts as $hostId => $host) { foreach ($hostIdToSelementIds[$hostId] as $selementId) { $selements[$selementId]['hosts'][$hostId] = $hostId; } } } $hostsFromHostGroups = array(); if (!empty($hostGroupIdToSelementIds)) { $hostsFromHostGroups = API::Host()->get(array('groupids' => array_keys($hostGroupIdToSelementIds), 'output' => array('name', 'status', 'maintenance_status', 'maintenanceid'), 'selectGroups' => array('groupid'), 'nopermissions' => true, 'preservekeys' => true)); foreach ($hostsFromHostGroups as $hostId => $host) { foreach ($host['groups'] as $group) { $groupId = $group['groupid']; if (isset($hostGroupIdToSelementIds[$groupId])) { foreach ($hostGroupIdToSelementIds[$groupId] as $selementId) { $selement =& $selements[$selementId]; $selement['hosts'][$hostId] = $hostId; // add hosts to hosts_map for trigger selection; if (!isset($hostIdToSelementIds[$hostId])) { $hostIdToSelementIds[$hostId] = array(); } $hostIdToSelementIds[$hostId][$selementId] = $selementId; unset($selement); } } } } $allHosts = array_merge($allHosts, $hostsFromHostGroups); } $allHosts = zbx_toHash($allHosts, 'hostid'); // get triggers data, triggers from current map, select all $allTriggers = array(); if (!empty($triggerIdToSelementIds)) { $triggerOptions = array('output' => array('triggerid', 'status', 'value', 'priority', 'lastchange', 'description', 'expression'), 'triggerids' => array_keys($triggerIdToSelementIds), 'filter' => array('state' => null), 'nopermissions' => true, 'preservekeys' => true); if ($showUnacknowledged) { $triggerOptions['selectLastEvent'] = array('acknowledged'); } $triggers = API::Trigger()->get($triggerOptions); $allTriggers = array_merge($allTriggers, $triggers); foreach ($triggers as $triggerId => $trigger) { foreach ($triggerIdToSelementIds[$triggerId] as $selementId) { $selements[$selementId]['triggers'][$triggerId] = $triggerId; } } } // triggers from submaps, skip dependent if (!empty($subSysmapTriggerIdToSelementIds)) { $triggerOptions = array('output' => array('triggerid', 'status', 'value', 'priority', 'lastchange', 'description', 'expression'), 'triggerids' => array_keys($subSysmapTriggerIdToSelementIds), 'filter' => array('state' => null), 'skipDependent' => true, 'nopermissions' => true, 'preservekeys' => true, 'only_true' => true); if ($showUnacknowledged) { $triggerOptions['selectLastEvent'] = array('acknowledged'); } $triggers = API::Trigger()->get($triggerOptions); $allTriggers = array_merge($allTriggers, $triggers); foreach ($triggers as $triggerId => $trigger) { foreach ($subSysmapTriggerIdToSelementIds[$triggerId] as $selementId) { $selements[$selementId]['triggers'][$triggerId] = $triggerId; } } } $monitoredHostIds = array(); foreach ($allHosts as $hostId => $host) { if ($host['status'] == HOST_STATUS_MONITORED) { $monitoredHostIds[$hostId] = $hostId; } } // triggers from all hosts/hostgroups, skip dependent if ($monitoredHostIds) { $triggerOptions = array('output' => array('triggerid', 'status', 'value', 'priority', 'lastchange', 'description', 'expression'), 'selectHosts' => array('hostid'), 'selectItems' => array('itemid'), 'hostids' => $monitoredHostIds, 'filter' => array('state' => null), 'monitored' => true, 'skipDependent' => true, 'nopermissions' => true, 'preservekeys' => true, 'only_true' => true); if ($showUnacknowledged) { $triggerOptions['selectLastEvent'] = array('acknowledged'); } $triggersFromMonitoredHosts = API::Trigger()->get($triggerOptions); foreach ($triggersFromMonitoredHosts as $triggerId => $trigger) { foreach ($trigger['hosts'] as $host) { $hostId = $host['hostid']; if (isset($hostIdToSelementIds[$hostId])) { foreach ($hostIdToSelementIds[$hostId] as $selementId) { $selements[$selementId]['triggers'][$triggerId] = $triggerId; } } } } $subSysmapHostApplicationFilters = getSelementHostApplicationFilters($selements, $selementIdToSubSysmaps, $hostsFromHostGroups); $selements = filterSysmapTriggers($selements, $subSysmapHostApplicationFilters, $triggersFromMonitoredHosts, $subSysmapTriggerIdToSelementIds); $allTriggers = array_merge($allTriggers, $triggersFromMonitoredHosts); } $allTriggers = zbx_toHash($allTriggers, 'triggerid'); $info = array(); foreach ($selements as $selementId => $selement) { $i = array('disabled' => 0, 'maintenance' => 0, 'problem' => 0, 'problem_unack' => 0, 'priority' => 0, 'trigger_disabled' => 0, 'latelyChanged' => false, 'ack' => true); foreach ($selement['hosts'] as $hostId) { $host = $allHosts[$hostId]; $last_hostid = $hostId; if ($host['status'] == HOST_STATUS_NOT_MONITORED) { $i['disabled']++; } elseif ($host['maintenance_status'] == HOST_MAINTENANCE_STATUS_ON) { $i['maintenance']++; } } foreach ($selement['triggers'] as $triggerId) { $trigger = $allTriggers[$triggerId]; if ($options['severity_min'] <= $trigger['priority']) { if ($trigger['status'] == TRIGGER_STATUS_DISABLED) { $i['trigger_disabled']++; } else { if ($trigger['value'] == TRIGGER_VALUE_TRUE) { $i['problem']++; $lastProblemId = $triggerId; if ($i['priority'] < $trigger['priority']) { $i['priority'] = $trigger['priority']; } } if ($showUnacknowledged && $trigger['lastEvent'] && !$trigger['lastEvent']['acknowledged']) { $i['problem_unack']++; } $i['latelyChanged'] |= time() - $trigger['lastchange'] < $config['blink_period']; } } } $i['ack'] = (bool) (!$i['problem_unack']); if ($sysmap['expandproblem'] && $i['problem'] == 1) { if (!isset($lastProblemId)) { $lastProblemId = null; } $i['problem_title'] = CMacrosResolverHelper::resolveTriggerName($allTriggers[$lastProblemId]); } if ($selement['elementtype'] == SYSMAP_ELEMENT_TYPE_HOST && $i['maintenance'] == 1) { $mnt = get_maintenance_by_maintenanceid($allHosts[$last_hostid]['maintenanceid']); $i['maintenance_title'] = $mnt['name']; } // replace default icons if (!$selement['iconid_on']) { $selement['iconid_on'] = $selement['iconid_off']; } if (!$selement['iconid_maintenance']) { $selement['iconid_maintenance'] = $selement['iconid_off']; } if (!$selement['iconid_disabled']) { $selement['iconid_disabled'] = $selement['iconid_off']; } switch ($selement['elementtype']) { case SYSMAP_ELEMENT_TYPE_MAP: $info[$selementId] = getMapsInfo($selement, $i, $showUnacknowledged); break; case SYSMAP_ELEMENT_TYPE_HOST_GROUP: $info[$selementId] = getHostGroupsInfo($selement, $i, $showUnacknowledged); break; case SYSMAP_ELEMENT_TYPE_HOST: $info[$selementId] = getHostsInfo($selement, $i, $showUnacknowledged); if ($sysmap['iconmapid'] && $selement['use_iconmap']) { $info[$selementId]['iconid'] = getIconByMapping($iconMap, $hostInventories[$selement['elementid']]); } break; case SYSMAP_ELEMENT_TYPE_TRIGGER: $info[$selementId] = getTriggersInfo($selement, $i, $showUnacknowledged); break; case SYSMAP_ELEMENT_TYPE_IMAGE: $info[$selementId] = getImagesInfo($selement); break; } } if ($sysmap['label_format'] == SYSMAP_LABEL_ADVANCED_OFF) { $hlabel = $hglabel = $tlabel = $mlabel = $sysmap['label_type'] == MAP_LABEL_TYPE_NAME; } else { $hlabel = $sysmap['label_type_host'] == MAP_LABEL_TYPE_NAME; $hglabel = $sysmap['label_type_hostgroup'] == MAP_LABEL_TYPE_NAME; $tlabel = $sysmap['label_type_trigger'] == MAP_LABEL_TYPE_NAME; $mlabel = $sysmap['label_type_map'] == MAP_LABEL_TYPE_NAME; } // get names if needed $elems = separateMapElements($sysmap); if (!empty($elems['sysmaps']) && $mlabel) { $subSysmaps = API::Map()->get(array('sysmapids' => zbx_objectValues($elems['sysmaps'], 'elementid'), 'nopermissions' => true, 'output' => array('name'))); $subSysmaps = zbx_toHash($subSysmaps, 'sysmapid'); foreach ($elems['sysmaps'] as $elem) { $info[$elem['selementid']]['name'] = $subSysmaps[$elem['elementid']]['name']; } } if (!empty($elems['hostgroups']) && $hglabel) { $hostgroups = API::HostGroup()->get(array('groupids' => zbx_objectValues($elems['hostgroups'], 'elementid'), 'nopermissions' => true, 'output' => array('name'))); $hostgroups = zbx_toHash($hostgroups, 'groupid'); foreach ($elems['hostgroups'] as $elem) { $info[$elem['selementid']]['name'] = $hostgroups[$elem['elementid']]['name']; } } if (!empty($elems['triggers']) && $tlabel) { foreach ($elems['triggers'] as $elem) { $info[$elem['selementid']]['name'] = CMacrosResolverHelper::resolveTriggerName($allTriggers[$elem['elementid']]); } } if (!empty($elems['hosts']) && $hlabel) { foreach ($elems['hosts'] as $elem) { $info[$elem['selementid']]['name'] = $allHosts[$elem['elementid']]['name']; } } return $info; }
$trigger = API::Trigger()->get(array('triggerids' => get_request('triggers'), 'output' => array('triggerid'), 'limit' => 1)); if (!$trigger) { access_deny(); } } /* * Actions */ $eventTrigger = null; $eventAcknowledged = null; $bulk = !isset($_REQUEST['eventid']); if (!$bulk) { $events = API::Event()->get(array('eventids' => $_REQUEST['eventid'], 'output' => API_OUTPUT_EXTEND, 'selectRelatedObject' => API_OUTPUT_EXTEND)); if ($events) { $event = reset($events); $eventTriggerName = CMacrosResolverHelper::resolveTriggerName($event['relatedObject']); $eventAcknowledged = $event['acknowledged']; } $_REQUEST['events'] = $_REQUEST['eventid']; } if (isset($_REQUEST['save']) || isset($_REQUEST['saveandreturn'])) { if ($bulk) { $_REQUEST['message'] .= $_REQUEST['message'] == '' ? '' : "\n\r" . _('----[BULK ACKNOWLEDGE]----'); } if (isset($_REQUEST['events'])) { $_REQUEST['events'] = zbx_toObject($_REQUEST['events'], 'eventid'); } elseif (isset($_REQUEST['triggers'])) { $_REQUEST['events'] = API::Event()->get(array('source' => EVENT_SOURCE_TRIGGERS, 'object' => EVENT_OBJECT_TRIGGER, 'objectids' => $_REQUEST['triggers'], 'output' => array('eventid'), 'acknowledged' => EVENT_NOT_ACKNOWLEDGED)); } $acknowledgeEvent = API::Event()->acknowledge(array('eventids' => zbx_objectValues($_REQUEST['events'], 'eventid'), 'message' => $_REQUEST['message'])); show_messages($acknowledgeEvent, _('Event acknowledged'), _('Cannot acknowledge event'));
function make_trigger_details($trigger) { $hosts = reset($trigger['hosts']); $hostId = $hosts['hostid']; $hosts = API::Host()->get(array('output' => array('name', 'hostid', 'status'), 'hostids' => $hostId, 'selectScreens' => API_OUTPUT_COUNT, 'preservekeys' => true)); $host = reset($hosts); $scripts = API::Script()->getScriptsByHosts($hostId); $hostName = new CSpan($host['name'], 'link_menu'); $hostName->setMenuPopup(getMenuPopupHost($host, $scripts ? reset($scripts) : null)); $table = new CTableInfo(); if (is_show_all_nodes()) { $table->addRow(array(_('Node'), get_node_name_by_elid($trigger['triggerid']))); } $table->addRow(array(_('Host'), $hostName)); $table->addRow(array(_('Trigger'), CMacrosResolverHelper::resolveTriggerName($trigger))); $table->addRow(array(_('Severity'), getSeverityCell($trigger['priority']))); $table->addRow(array(_('Expression'), explode_exp($trigger['expression'], true, true))); $table->addRow(array(_('Event generation'), _('Normal') . (TRIGGER_MULT_EVENT_ENABLED == $trigger['type'] ? SPACE . '+' . SPACE . _('Multiple PROBLEM events') : ''))); $table->addRow(array(_('Disabled'), TRIGGER_STATUS_ENABLED == $trigger['status'] ? new CCol(_('No'), 'off') : new CCol(_('Yes'), 'on'))); return $table; }
$description = new CSpan($trigger['description'], 'link'); $trigger['description'] = $trigger['hostname'] . NAME_DELIMITER . $trigger['description']; if ($multiselect) { $js_action = 'addValue(' . zbx_jsvalue($reference) . ', ' . zbx_jsvalue($trigger['triggerid']) . ', ' . $parentId . ');'; } else { $values = array($dstfld1 => $trigger[$srcfld1], $dstfld2 => $trigger[$srcfld2]); if (isset($srcfld3)) { $values[$dstfld3] = $trigger[$srcfld3]; } $js_action = 'addValues(' . zbx_jsvalue($dstfrm) . ', ' . zbx_jsvalue($values) . '); return false;'; } $description->setAttribute('onclick', $js_action . ' jQuery(this).removeAttr("onclick");'); if (count($trigger['dependencies']) > 0) { $description = array($description, BR(), bold(_('Depends on')), BR()); foreach ($trigger['dependencies'] as $dependentTrigger) { $description[] = array(CMacrosResolverHelper::resolveTriggerName($dependentTrigger), BR()); } } $table->addRow(array($multiselect ? new CCheckBox('triggers[' . zbx_jsValue($trigger[$srcfld1]) . ']', null, null, $trigger['triggerid']) : null, $description, getSeverityCell($trigger['priority']), new CSpan(triggerIndicator($trigger['status'], $trigger['state']), triggerIndicatorStyle($trigger['status'], $trigger['state'])))); // made to save memory usage if ($multiselect) { $jsTriggers[$trigger['triggerid']] = array('id' => $trigger['triggerid'], 'name' => $trigger['description'], 'prefix' => get_node_name_by_elid($trigger['triggerid'], null, NAME_DELIMITER), 'triggerid' => $trigger['triggerid'], 'description' => $trigger['description'], 'expression' => $trigger['expression'], 'priority' => $trigger['priority'], 'status' => $trigger['status'], 'host' => $trigger['hostname']); } } if ($multiselect) { $button = new CButton('select', _('Select'), "addSelectedValues('triggers', " . zbx_jsvalue($reference) . ', ' . $parentId . ');'); $table->setFooter(new CCol($button, 'right')); insert_js('var popupReference = ' . zbx_jsValue($jsTriggers, true) . ';'); } zbx_add_post_js('chkbxRange.pageGoName = "triggers";'); $form->addItem($table);
protected function calcTriggers() { $this->triggers = array(); if ($this->m_showTriggers != 1) { return; } $max = 3; $cnt = 0; foreach ($this->items as $inum => $item) { $db_triggers = DBselect('SELECT DISTINCT h.host,tr.description,tr.triggerid,tr.expression,tr.priority,tr.value' . ' FROM triggers tr,functions f,items i,hosts h' . ' WHERE tr.triggerid=f.triggerid' . " AND f.function IN ('last','min','avg','max')" . ' AND tr.status=' . TRIGGER_STATUS_ENABLED . ' AND i.itemid=f.itemid' . ' AND h.hostid=i.hostid' . ' AND f.itemid=' . zbx_dbstr($item['itemid']) . ' ORDER BY tr.priority'); while (($trigger = DBfetch($db_triggers)) && $cnt < $max) { $db_fnc_cnt = DBselect('SELECT COUNT(*) AS cnt FROM functions f WHERE f.triggerid=' . $trigger['triggerid']); $fnc_cnt = DBfetch($db_fnc_cnt); if ($fnc_cnt['cnt'] != 1) { continue; } $trigger['expression'] = CMacrosResolverHelper::resolveTriggerExpressionUserMacro($trigger); if (!preg_match('/^\\{([0-9]+)\\}\\s*?([\\<\\>\\=]{1})\\s*?([\\-0-9\\.]+)([TGMKsmhdw]?)$/', $trigger['expression'], $arr)) { continue; } $val = convert($arr[3] . $arr[4]); $minY = $this->m_minY[$this->items[$inum]['axisside']]; $maxY = $this->m_maxY[$this->items[$inum]['axisside']]; $this->triggers[] = array('skipdraw' => $val <= $minY || $val >= $maxY, 'y' => $this->sizeY - ($val - $minY) / ($maxY - $minY) * $this->sizeY + $this->shiftY, 'color' => getSeverityColor($trigger['priority']), 'description' => _('Trigger') . NAME_DELIMITER . CMacrosResolverHelper::resolveTriggerName($trigger), 'constant' => '[' . $arr[2] . ' ' . $arr[3] . $arr[4] . ']'); ++$cnt; } } }
function make_trigger_details($trigger) { $hostNames = array(); $hostIds = zbx_objectValues($trigger['hosts'], 'hostid'); $hosts = API::Host()->get(array('output' => array('name', 'hostid', 'status'), 'hostids' => $hostIds, 'selectScreens' => API_OUTPUT_COUNT, 'selectGraphs' => API_OUTPUT_COUNT)); if (count($hosts) > 1) { order_result($hosts, 'name', ZBX_SORT_UP); } $scripts = API::Script()->getScriptsByHosts($hostIds); foreach ($hosts as $host) { $hostName = new CSpan($host['name'], 'link_menu'); $hostName->setMenuPopup(CMenuPopupHelper::getHost($host, $scripts[$host['hostid']])); $hostNames[] = $hostName; $hostNames[] = ', '; } array_pop($hostNames); $table = new CTableInfo(); $table->addRow(array(new CCol(_n('Host', 'Hosts', count($hosts))), new CCol($hostNames, 'wraptext'))); $table->addRow(array(new CCol(_('Trigger')), new CCol(CMacrosResolverHelper::resolveTriggerName($trigger), 'wraptext'))); $table->addRow(array(_('Severity'), getSeverityCell($trigger['priority']))); $table->addRow(array(new CCol(_('Expression')), new CCol(explode_exp($trigger['expression'], true, true), 'trigger-expression'))); $table->addRow(array(_('Event generation'), _('Normal') . (TRIGGER_MULT_EVENT_ENABLED == $trigger['type'] ? SPACE . '+' . SPACE . _('Multiple PROBLEM events') : ''))); $table->addRow(array(_('Disabled'), TRIGGER_STATUS_ENABLED == $trigger['status'] ? new CCol(_('No'), 'off') : new CCol(_('Yes'), 'on'))); return $table; }
} // get triggers $options = array('triggerids' => $_REQUEST['triggerid'], 'expandData' => 1, 'selectHosts' => API_OUTPUT_EXTEND, 'output' => API_OUTPUT_EXTEND); $triggers = API::Trigger()->get($options); if (empty($triggers)) { access_deny(); } $trigger = reset($triggers); // get events $options = array('source' => EVENT_SOURCE_TRIGGERS, 'object' => EVENT_OBJECT_TRIGGER, 'eventids' => $_REQUEST['eventid'], 'objectids' => $_REQUEST['triggerid'], 'select_alerts' => API_OUTPUT_EXTEND, 'select_acknowledges' => API_OUTPUT_EXTEND, 'output' => API_OUTPUT_EXTEND, 'selectHosts' => API_OUTPUT_EXTEND); $events = API::Event()->get($options); $event = reset($events); $tr_event_wdgt = new CWidget(); $tr_event_wdgt->setClass('header'); // Main widget header $text = array(_('EVENTS') . ': "' . CMacrosResolverHelper::resolveTriggerName($trigger) . '"'); $fs_icon = get_icon('fullscreen', array('fullscreen' => $_REQUEST['fullscreen'])); $tr_event_wdgt->addHeader($text, $fs_icon); $left_col = array(); // tr details $triggerDetails = new CUIWidget('hat_triggerdetails', make_trigger_details($trigger)); $triggerDetails->setHeader(_('Event source details')); $left_col[] = $triggerDetails; // event details $eventDetails = new CUIWidget('hat_eventdetails', make_event_details($event, $trigger)); $eventDetails->setHeader(_('Event details')); $left_col[] = $eventDetails; $right_col = array(); // if acknowledges are not disabled in configuration, let's show them if ($config['event_ack_enable']) { $event_ack = new CUIWidget('hat_eventack', makeAckTab($event), CProfile::get('web.tr_events.hats.hat_eventack.state', 1));
// triggers $triggers = API::Trigger()->get(array('output' => API_OUTPUT_EXTEND, 'selectHosts' => API_OUTPUT_EXTEND, 'triggerids' => getRequest('triggerid'))); if (!$triggers) { access_deny(); } $trigger = reset($triggers); // events $events = API::Event()->get(array('output' => API_OUTPUT_EXTEND, 'select_alerts' => API_OUTPUT_EXTEND, 'select_acknowledges' => API_OUTPUT_EXTEND, 'selectHosts' => API_OUTPUT_EXTEND, 'source' => EVENT_SOURCE_TRIGGERS, 'object' => EVENT_OBJECT_TRIGGER, 'eventids' => getRequest('eventid'), 'objectids' => getRequest('triggerid'))); $event = reset($events); /* * Display */ $config = select_config(); $eventWidget = new CWidget(); $eventWidget->setClass('header'); $eventWidget->addHeader(array(_('EVENTS') . ': "' . CMacrosResolverHelper::resolveTriggerName($trigger) . '"'), get_icon('fullscreen', array('fullscreen' => getRequest('fullscreen')))); // trigger details $triggerDetailsWidget = new CUiWidget('hat_triggerdetails', make_trigger_details($trigger)); $triggerDetailsWidget->setHeader(_('Event source details')); // event details $eventDetailsWidget = new CUiWidget('hat_eventdetails', make_event_details($event, $trigger)); $eventDetailsWidget->setHeader(_('Event details')); // if acknowledges are not disabled in configuration, let's show them if ($config['event_ack_enable']) { $eventAcknowledgesWidget = new CCollapsibleUiWidget('hat_eventack', makeAckTab($event)); $eventAcknowledgesWidget->open = (bool) CProfile::get('web.tr_events.hats.hat_eventack.state', true); $eventAcknowledgesWidget->setHeader(_('Acknowledges')); } else { $eventAcknowledgesWidget = null; } // actions messages
$description = new CSpan($trigger['description'], 'link'); $trigger['description'] = $trigger['hostname'] . NAME_DELIMITER . $trigger['description']; if ($multiselect) { $js_action = 'addValue(' . zbx_jsvalue($reference) . ', ' . zbx_jsvalue($trigger['triggerid']) . ');'; } else { $values = array($dstfld1 => $trigger[$srcfld1], $dstfld2 => $trigger[$srcfld2]); if (isset($srcfld3)) { $values[$dstfld3] = $trigger[$srcfld3]; } $js_action = 'addValues(' . zbx_jsvalue($dstfrm) . ', ' . zbx_jsvalue($values) . '); return false;'; } $description->setAttribute('onclick', $js_action . ' jQuery(this).removeAttr("onclick");'); if (count($trigger['dependencies']) > 0) { $description = array($description, BR(), bold(_('Depends on')), BR()); foreach ($trigger['dependencies'] as $val) { $description[] = array(CMacrosResolverHelper::resolveTriggerName($val), BR()); } } $table->addRow(array($multiselect ? new CCheckBox('triggers[' . zbx_jsValue($trigger[$srcfld1]) . ']', null, null, $trigger['triggerid']) : null, $description, getSeverityCell($trigger['priority']), new CSpan(triggerIndicator($trigger['status'], $trigger['state']), triggerIndicatorStyle($trigger['status'], $trigger['state'])))); // made to save memmory usage if ($multiselect) { $jsTriggers[$trigger['triggerid']] = array('triggerid' => $trigger['triggerid'], 'description' => $trigger['description'], 'expression' => $trigger['expression'], 'priority' => $trigger['priority'], 'status' => $trigger['status'], 'host' => $trigger['hostname']); } } if ($multiselect) { $button = new CButton('select', _('Select'), "addSelectedValues('triggers', " . zbx_jsvalue($reference) . ');'); $table->setFooter(new CCol($button, 'right')); insert_js('var popupReference = ' . zbx_jsValue($jsTriggers, true) . ';'); } zbx_add_post_js('chkbxRange.pageGoName = "triggers";'); $form->addItem($table);
function make_trigger_details($trigger) { $hostNames = []; $config = select_config(); $hostIds = zbx_objectValues($trigger['hosts'], 'hostid'); $hosts = API::Host()->get(['output' => ['name', 'hostid', 'status'], 'hostids' => $hostIds, 'selectScreens' => API_OUTPUT_COUNT, 'selectGraphs' => API_OUTPUT_COUNT]); if (count($hosts) > 1) { order_result($hosts, 'name', ZBX_SORT_UP); } $scripts = API::Script()->getScriptsByHosts($hostIds); foreach ($hosts as $host) { $hostName = new CSpan($host['name'], ZBX_STYLE_LINK_ACTION); $hostName->setMenuPopup(CMenuPopupHelper::getHost($host, $scripts[$host['hostid']])); $hostNames[] = $hostName; $hostNames[] = ', '; } array_pop($hostNames); $expression = CMacrosResolverHelper::resolveTriggerExpression($trigger['expression'], ['html' => true, 'resolve_usermacros' => true, 'resolve_macros' => true]); $table = (new CTableInfo())->addRow([new CCol(_n('Host', 'Hosts', count($hosts))), new CCol($hostNames)])->addRow([new CCol(_('Trigger')), new CCol(CMacrosResolverHelper::resolveTriggerName($trigger))])->addRow([_('Severity'), getSeverityCell($trigger['priority'], $config)])->addRow([new CCol(_('Expression')), new CCol($expression)])->addRow([_('Event generation'), _('Normal') . (TRIGGER_MULT_EVENT_ENABLED == $trigger['type'] ? SPACE . '+' . SPACE . _('Multiple PROBLEM events') : '')])->addRow([_('Disabled'), TRIGGER_STATUS_ENABLED == $trigger['status'] ? (new CCol(_('No')))->addClass(ZBX_STYLE_GREEN) : (new CCol(_('Yes')))->addClass(ZBX_STYLE_RED)]); return $table; }