while ($db_element = DBfetch($db_elements)) { if ($img = get_png_by_selementid($db_element['selementid'])) { imagecopy($im, $img, $db_element['x'], $db_element['y'], 0, 0, ImageSX($img), ImageSY($img)); } if ($label_type == MAP_LABEL_TYPE_NOTHING) { continue; } $color = $darkgreen; $label_color = $black; $info_line = ''; $label_location = $db_element['label_location']; if (is_null($label_location)) { $map['label_location']; } $label_line = expand_map_element_label_by_data($db_element); $el_info = get_info_by_selementid($db_element['selementid']); $info_line = $el_info['info']; $color = $el_info['color']; if ($label_type == MAP_LABEL_TYPE_STATUS) { $label_line = ''; } else { if ($label_type == MAP_LABEL_TYPE_NAME) { $label_line = $el_info['name']; } } if (isset($el_info['disabled']) && $el_info['disabled'] == 1) { $info_line = 'DISABLED'; $label_color = $gray; } unset($el_info); if ($db_element['elementtype'] == SYSMAP_ELEMENT_TYPE_HOST) {
function get_info_by_selementid($selementid) { global $colors; $el_name = ''; $tr_info = array(); $db_element = get_sysmaps_element_by_selementid($selementid); $el_type =& $db_element["elementtype"]; $sql = array(SYSMAP_ELEMENT_TYPE_TRIGGER => 'SELECT DISTINCT t.triggerid,t.priority,t.value,t.description' . ',t.expression,h.host,h.status as h_status,i.status as i_status,t.status as t_status' . ' FROM triggers t, items i, functions f, hosts h ' . ' WHERE t.triggerid=' . $db_element['elementid'] . ' AND h.hostid=i.hostid ' . ' AND i.itemid=f.itemid ' . ' AND f.triggerid=t.triggerid ', SYSMAP_ELEMENT_TYPE_HOST_GROUP => 'SELECT DISTINCT t.triggerid, t.priority, t.value, t.description, t.expression, h.host' . ' FROM items i,functions f,triggers t,hosts h,hosts_groups hg,groups g ' . ' WHERE h.hostid=i.hostid ' . ' AND hg.groupid=g.groupid ' . ' AND g.groupid=' . $db_element['elementid'] . ' AND hg.hostid=h.hostid ' . ' AND i.itemid=f.itemid' . ' AND f.triggerid=t.triggerid ' . ' AND t.status=' . TRIGGER_STATUS_ENABLED . ' AND h.status=' . HOST_STATUS_MONITORED . ' AND i.status=' . ITEM_STATUS_ACTIVE, SYSMAP_ELEMENT_TYPE_HOST => 'SELECT DISTINCT t.triggerid, t.priority, t.value, t.description, t.expression, h.host' . ' FROM items i,functions f,triggers t,hosts h WHERE h.hostid=i.hostid' . ' AND i.hostid=' . $db_element['elementid'] . ' AND i.itemid=f.itemid' . ' AND f.triggerid=t.triggerid ' . ' AND t.status=' . TRIGGER_STATUS_ENABLED . ' AND h.status=' . HOST_STATUS_MONITORED . ' AND i.status=' . ITEM_STATUS_ACTIVE); $out['triggers'] = array(); if (isset($sql[$el_type])) { $db_triggers = DBselect($sql[$el_type]); $trigger = DBfetch($db_triggers); if ($trigger) { if ($el_type == SYSMAP_ELEMENT_TYPE_TRIGGER) { $el_name = expand_trigger_description_by_data($trigger); } do { if ($el_type == SYSMAP_ELEMENT_TYPE_TRIGGER && ($trigger['h_status'] != HOST_STATUS_MONITORED || $trigger['i_status'] != ITEM_STATUS_ACTIVE || $trigger['t_status'] != TRIGGER_STATUS_ENABLED)) { $type = TRIGGER_VALUE_UNKNOWN; $out['disabled'] = 1; } else { $type =& $trigger['value']; } if (!isset($tr_info[$type])) { $tr_info[$type] = array('count' => 0); } $tr_info[$type]['count']++; if (!isset($tr_info[$type]['priority']) || $tr_info[$type]['priority'] < $trigger["priority"]) { $tr_info[$type]['priority'] = $trigger["priority"]; if ($el_type != SYSMAP_ELEMENT_TYPE_TRIGGER && $type != TRIGGER_VALUE_UNKNOWN) { $tr_info[$type]['info'] = expand_trigger_description_by_data($trigger); } } if ($type == TRIGGER_VALUE_TRUE) { array_push($out['triggers'], $trigger['triggerid']); } } while ($trigger = DBfetch($db_triggers)); } } else { if ($el_type == SYSMAP_ELEMENT_TYPE_MAP) { $triggers = array(); $db_subelements = DBselect("select selementid FROM sysmaps_elements" . " WHERE sysmapid=" . $db_element["elementid"]); while ($db_subelement = DBfetch($db_subelements)) { // recursion $inf = get_info_by_selementid($db_subelement["selementid"]); foreach ($inf['triggers'] as $id => $triggerid) { if (!in_array($triggerid, $triggers)) { array_push($triggers, $triggerid); } } $type = $inf['type']; if (!isset($tr_info[$type]['count'])) { $tr_info[$type]['count'] = 0; } $tr_info[$type]['count'] += isset($inf['count']) ? $inf['count'] : 1; if (!isset($tr_info[$type]['priority']) || $tr_info[$type]['priority'] < $inf["priority"]) { $tr_info[$type]['priority'] = $inf['priority']; $tr_info[$type]['info'] = $inf['info']; } } $count = count($triggers); if ($count > 0) { $tr_info[TRIGGER_VALUE_TRUE]['count'] = $count; if ($tr_info[TRIGGER_VALUE_TRUE]['count'] == 1) { $db_trigger = DBfetch(DBselect('SELECT DISTINCT t.triggerid,t.priority,t.value,t.description' . ',t.expression,h.host FROM triggers t, items i, functions f, hosts h' . ' WHERE t.triggerid=' . $triggers[0] . ' AND h.hostid=i.hostid' . ' AND i.itemid=f.itemid AND f.triggerid=t.triggerid')); $tr_info[TRIGGER_VALUE_TRUE]['info'] = expand_trigger_description_by_data($db_trigger); } } } } if ($el_type == SYSMAP_ELEMENT_TYPE_HOST) { $host = get_host_by_hostid($db_element["elementid"]); $el_name = $host['host']; if ($host["status"] == HOST_STATUS_TEMPLATE) { $tr_info[TRIGGER_VALUE_UNKNOWN]['count'] = 0; $tr_info[TRIGGER_VALUE_UNKNOWN]['priority'] = 0; $tr_info[TRIGGER_VALUE_UNKNOWN]['info'] = 'template'; } else { if ($host["status"] == HOST_STATUS_NOT_MONITORED) { $tr_info[TRIGGER_VALUE_UNKNOWN]['count'] = 0; $tr_info[TRIGGER_VALUE_UNKNOWN]['priority'] = 0; $out['disabled'] = 1; } else { if (!isset($tr_info[TRIGGER_VALUE_FALSE])) { $tr_info[TRIGGER_VALUE_FALSE]['count'] = 0; $tr_info[TRIGGER_VALUE_FALSE]['priority'] = 0; $tr_info[TRIGGER_VALUE_FALSE]['info'] = 'OK'; } } } } else { if ($el_type == SYSMAP_ELEMENT_TYPE_HOST_GROUP) { $group = get_hostgroup_by_groupid($db_element["elementid"]); $el_name = $group['name']; if (!isset($tr_info[TRIGGER_VALUE_FALSE])) { $tr_info[TRIGGER_VALUE_FALSE]['count'] = 0; $tr_info[TRIGGER_VALUE_FALSE]['priority'] = 0; $tr_info[TRIGGER_VALUE_FALSE]['info'] = 'OK'; } } else { if ($el_type == SYSMAP_ELEMENT_TYPE_MAP) { $db_map = DBfetch(DBselect('select name FROM sysmaps WHERE sysmapid=' . $db_element["elementid"])); $el_name = $db_map['name']; if (!isset($tr_info[TRIGGER_VALUE_FALSE])) { $tr_info[TRIGGER_VALUE_FALSE]['count'] = 0; $tr_info[TRIGGER_VALUE_FALSE]['priority'] = 0; $tr_info[TRIGGER_VALUE_FALSE]['info'] = 'OK'; } } } } if (isset($tr_info[TRIGGER_VALUE_TRUE])) { $inf =& $tr_info[TRIGGER_VALUE_TRUE]; $out['type'] = TRIGGER_VALUE_TRUE; $out['info'] = 'PROBLEM'; if ($inf['count'] > 1) { $out['info'] = $inf['count'] . ' problems'; } else { if (isset($inf['info'])) { $out['info'] = $inf['info']; } } if (isset($inf['priority']) && $inf['priority'] > 3) { $out['color'] = $colors['Red']; } else { $out['color'] = $colors['Dark Red']; } $out['iconid'] = $db_element['iconid_on']; } else { if (isset($tr_info[TRIGGER_VALUE_UNKNOWN]) && !isset($tr_info[TRIGGER_VALUE_FALSE])) { $inf =& $tr_info[TRIGGER_VALUE_UNKNOWN]; $out['type'] = TRIGGER_VALUE_UNKNOWN; $out['info'] = 'UNKNOWN'; $out['color'] = $colors['Gray']; if (isset($out['disabled']) && $out['disabled'] == 1) { $out['iconid'] = $db_element['iconid_disabled']; } else { $out['iconid'] = $db_element['iconid_unknown']; } if (isset($inf['info'])) { $out['info'] = $inf['info']; } } else { $inf =& $tr_info[TRIGGER_VALUE_FALSE]; $out['type'] = TRIGGER_VALUE_FALSE; $out['info'] = 'OK'; if (isset($inf['info'])) { $out['info'] = 'OK'; } $out['color'] = $colors['Dark Green']; $out['iconid'] = $db_element['iconid_off']; } } // No label for Images if ($el_type == SYSMAP_ELEMENT_TYPE_IMAGE) { $out['info'] = ''; } $out['count'] = $inf['count']; $out['priority'] = isset($inf['priority']) ? $inf['priority'] : 0; $out['name'] = $el_name; return $out; }