diff options
| author | artem <artem@97f52cf1-0a1b-0410-bd0e-c28be96e8082> | 2008-03-06 13:45:26 +0000 |
|---|---|---|
| committer | artem <artem@97f52cf1-0a1b-0410-bd0e-c28be96e8082> | 2008-03-06 13:45:26 +0000 |
| commit | 4b79250425757d15a3803d74f3fbe9c8cfe749eb (patch) | |
| tree | 08f6e7a47ca0ea68d561ba982a77cece83a745b4 /frontends/php/include/blocks.inc.php | |
| parent | bc87e8b5844d32a4b6367ca7ecc6aec56a1adf28 (diff) | |
| download | zabbix-4b79250425757d15a3803d74f3fbe9c8cfe749eb.tar.gz zabbix-4b79250425757d15a3803d74f3fbe9c8cfe749eb.tar.xz zabbix-4b79250425757d15a3803d74f3fbe9c8cfe749eb.zip | |
- [DEV-127] improved system status widget in dashboard screen (Artem)
git-svn-id: svn://svn.zabbix.com/trunk@5456 97f52cf1-0a1b-0410-bd0e-c28be96e8082
Diffstat (limited to 'frontends/php/include/blocks.inc.php')
| -rw-r--r-- | frontends/php/include/blocks.inc.php | 452 |
1 files changed, 323 insertions, 129 deletions
diff --git a/frontends/php/include/blocks.inc.php b/frontends/php/include/blocks.inc.php index 53987f54..2e175712 100644 --- a/frontends/php/include/blocks.inc.php +++ b/frontends/php/include/blocks.inc.php @@ -22,8 +22,131 @@ require_once "include/screens.inc.php"; // Author: Aly +function make_favorite_graphs($available_hosts=false){ + global $USER_DETAILS; + + if(!$available_hosts){ + $available_hosts = get_accessible_hosts_by_user($USER_DETAILS,PERM_READ_ONLY, null, null, get_current_nodeid()); + } + + $table = new CTableInfo(); + + $fav_graphs = get4favorites('web.favorite.graphids'); + + foreach($fav_graphs['id'] as $key => $resourceid){ + if('simple_graph' == $fav_graphs['resource'][$key]){ + if(!$item = get_item_by_itemid($resourceid)) continue; + + $host = get_host_by_itemid($resourceid); + $item["description"] = item_description($item["description"],$item["key_"]); + + $capt = new CSpan(new CLink($host['host'].':'.$item['description'],'history.php?action=showgraph&itemid='.$resourceid)); + $capt->AddOption('style','line-height: 14px; vertical-align: middle;'); + + $icon = new CLink(new CImg('images/general/chart.png','chart',18,18,'borderless'),'history.php?action=showgraph&itemid='.$resourceid.'&fullscreen=1'); + $icon->SetTarget('blank'); + } + else{ + if(!$graph = get_graph_by_graphid($resourceid)) continue; + + $result = get_hosts_by_graphid($resourceid); + $ghost = DBFetch($result); + + $capt = new CSpan(new CLink($ghost['host'].':'.$graph['name'],'charts.php?graphid='.$resourceid)); + $capt->AddOption('style','line-height: 14px; vertical-align: middle;'); + + $icon = new CLink(new CImg('images/general/chart.png','chart',18,18,'borderless'),'charts.php?graphid='.$resourceid.'&fullscreen=1'); + $icon->SetTarget('blank'); + } + + $table->AddRow(new CCol(array( + $icon, + SPACE, + $capt) + )); + } + $td = new CCol(array(new CButton(S_GRAPHS,S_GRAPHS,"javascript: location.href = 'charts.php'; return false;"))); + $td->AddOption('style','text-align: right;'); + + $table->SetFooter($td); + +return $table; +} + +// Author: Aly +function make_favorite_screens(){ + $table = new CTableInfo(); + + $fav_screens = get4favorites('web.favorite.screenids'); + foreach($fav_screens['id'] as $key => $resourceid){ + if('slides' == $fav_screens['resource'][$key]){ + if(!$slide = get_slideshow_by_slideshowid($resourceid)) continue; + + $capt = new CSpan(new CLink($slide['name'],'screens.php?config=1&elementid='.$resourceid)); + $capt->AddOption('style','line-height: 14px; vertical-align: middle;'); + + $icon = new CLink(new CImg('images/general/chart.png','screen',18,18,'borderless'),'screens.php?config=1&elementid='.$resourceid.'&fullscreen=1'); + $icon->SetTarget('blank'); + } + else{ + if(!$screen = get_screen_by_screenid($resourceid)) continue; + + $capt = new CSpan(new CLink($screen['name'],'screens.php?resourceid='.$resourceid)); + $capt->AddOption('style','line-height: 14px; vertical-align: middle;'); + + $icon = new CLink(new CImg('images/general/chart.png','screen',18,18,'borderless'),'screens.php?resourceid='.$resourceid.'&fullscreen=1'); + $icon->SetTarget('blank'); + } + + $table->AddRow(new CCol(array( + $icon, + SPACE, + $capt) + )); + } + + $td = new CCol(array(new CButton(S_SCREENS,S_SCREENS,"javascript: location.href = 'screens.php'; return false;"))); + $td->AddOption('style','text-align: right;'); + + $table->SetFooter($td); + +return $table; +} + +// Author: Aly +function make_favorite_maps(){ + $table = new CTableInfo(); + + $fav_sysmaps = get4favorites('web.favorite.sysmapids'); + + foreach($fav_sysmaps['id'] as $key => $resourceid){ + if(!$sysmap = get_sysmap_by_sysmapid($resourceid)) continue; + + $capt = new CSpan(new CLink($sysmap['name'],'maps.php?sysmapid='.$resourceid)); + $capt->AddOption('style','line-height: 14px; vertical-align: middle;'); + + $icon = new CLink(new CImg('images/general/chart.png','map',18,18,'borderless'),'maps.php?sysmapid='.$resourceid.'&fullscreen=1'); + $icon->SetTarget('blank'); + + $table->AddRow(new CCol(array( + $icon, + SPACE, + $capt) + )); + } + + $td = new CCol(array(new CButton(S_MAPS,S_MAPS,"javascript: location.href = 'maps.php'; return false;"))); + $td->AddOption('style','text-align: right;'); + + $table->SetFooter($td); + +return $table; +} + +// Author: Aly function make_system_summary($available_hosts=false){ global $USER_DETAILS; + $config=select_config(); if(!$available_hosts){ $available_hosts = get_accessible_hosts_by_user($USER_DETAILS,PERM_READ_ONLY, null, null, get_current_nodeid()); @@ -58,8 +181,10 @@ function make_system_summary($available_hosts=false){ $group_row = new CRow(); if(is_show_subnodes()) $group_row->AddItem(get_node_name_by_elid($group['groupid'])); - - $group_row->AddItem($group['name']); + + $name = new CLink($group['name'],'tr_status.php?groupid='.$group['groupid'].'&show_triggers='.TRIGGERS_OPTION_ONLYTRUE); + $name->SetTarget('blank'); + $group_row->AddItem($name); $tab_priority[TRIGGER_SEVERITY_DISASTER] = 0; $tab_priority[TRIGGER_SEVERITY_HIGH] = 0; @@ -81,14 +206,128 @@ function make_system_summary($available_hosts=false){ ' AND t.status='.TRIGGER_STATUS_ENABLED. ' AND h.hostid in ('.$available_hosts.') '. ' GROUP BY t.priority'; - +//SDI($sql); $tr_result = DBSelect($sql); while($group_stat = DBFetch($tr_result)){ $tab_priority[$group_stat['priority']] = $group_stat['tr_cnt']; } foreach($tab_priority as $key => $value){ - $group_row->AddItem(new CCol($value,get_severity_style($key,$value))); + $normal = $value; + if($value){ +//* trigger list + $table_inf = new CTableInfo(); + $table_inf->AddOption('style', 'width: 400px;'); + $table_inf->SetHeader(array( + is_show_subnodes() ? S_NODE : null, + S_HOST, + S_ISSUE, + S_AGE, + ($config['event_ack_enable'])? S_ACK : NULL, + S_ACTIONS + )); + + $sql = 'SELECT DISTINCT t.triggerid,t.status,t.description, t.priority, t.lastchange,t.value,h.host,h.hostid '. + ' FROM triggers t,hosts h,items i,functions f, hosts_groups hg '. + ' WHERE f.itemid=i.itemid '. + ' AND hg.groupid='.$group['groupid']. + ' AND h.hostid=i.hostid '. + ' AND hg.hostid=h.hostid '. + ' AND t.triggerid=f.triggerid AND t.status='.TRIGGER_STATUS_ENABLED. + ' AND i.status='.ITEM_STATUS_ACTIVE.' AND '.DBin_node('t.triggerid'). + ' AND h.hostid in ('.$available_hosts.') '. + ' AND h.status='.HOST_STATUS_MONITORED. + ' AND t.value='.TRIGGER_VALUE_TRUE. + ' AND t.priority='.$key. + ' ORDER BY t.lastchange DESC'; + $result = DBselect($sql); + + while($row_inf=DBfetch($result)){ + // Check for dependencies + if(trigger_dependent($row_inf["triggerid"])) continue; + + $host = new CSpan($row_inf['host']); + + $event_sql = 'SELECT e.eventid, e.value, e.clock, e.objectid as triggerid, e.acknowledged, t.type '. + ' FROM events e, triggers t '. + ' WHERE e.object=0 AND e.objectid='.$row_inf['triggerid']. + ' AND t.triggerid=e.objectid '. + ' AND e.value='.TRIGGER_VALUE_TRUE. + ' ORDER by e.object DESC, e.objectid DESC, e.eventid DESC'; + + $res_events = DBSelect($event_sql,1); + + while($row_inf_event=DBfetch($res_events)){ + if($config['event_ack_enable']){ + if($row_inf_event['acknowledged'] == 1){ + $ack=new CLink(S_YES,'acknow.php?eventid='.$row_inf_event['eventid'],'action'); + } + else{ + $ack= new CLink(S_NO,'acknow.php?eventid='.$row_inf_event['eventid'],'on'); + } + } + + $description = expand_trigger_description_by_data( + array_merge($row_inf, array("clock"=>$row_inf_event["clock"])), + ZBX_FLAG_EVENT); +//actions + $actions= new CTable(' - '); + + $sql='SELECT COUNT(a.alertid) as all'. + ' FROM alerts a '. + ' WHERE a.eventid='.$row_inf_event['eventid']; + + $alerts=DBfetch(DBselect($sql)); + + if(isset($alerts['all']) && ($alerts['all'] > 0)){ + $sql='SELECT COUNT(a.alertid) as sent '. + ' FROM alerts a '. + ' WHERE a.eventid='.$row_inf_event['eventid']. + ' AND a.status='.ALERT_STATUS_SENT; + $alerts=DBfetch(DBselect($sql)); + + $tdl = new CCol(($alerts['done'])?(new CSpan($alerts['sent'],'green')):SPACE); + $tdl->AddOption('width','10'); + + $sql='SELECT COUNT(a.alertid) as inprogress '. + ' FROM alerts a '. + ' WHERE a.eventid='.$row_inf_event['eventid']. + ' AND a.status='.ALERT_STATUS_NOT_SENT; + $alerts=DBfetch(DBselect($sql)); + + $tdc = new CCol(($alerts['inprogress'])?(new CSpan($alerts['inprogress'],'orange')):SPACE); + $tdc->AddOption('width','10'); + + $sql='SELECT COUNT(a.alertid) as failed '. + ' FROM alerts a '. + ' WHERE a.eventid='.$row_inf_event['eventid']. + ' AND a.status='.ALERT_STATUS_FAILED; + $alerts=DBfetch(DBselect($sql)); + $tdr = new CCol(($alerts['failed'])?(new CSpan($alerts['failed'],'red')):SPACE); + $tdr->AddOption('width','10'); + + $actions->AddRow(array($tdl,$tdc,$tdr)); + } +//-------- + $table_inf->AddRow(array( + get_node_name_by_elid($row_inf['triggerid']), + $host, + new CCol($description,get_severity_style($row_inf["priority"])), + zbx_date2age($row_inf_event['clock']), + ($config['event_ack_enable'])?(new CCol($ack,"center")):NULL, + $actions + )); + } + unset($row_inf,$description,$actions); + } + + $value = new CSpan($value); + $value->SetHint($table_inf); + +//-------------*/ + } + $group_row->AddItem(new CCol($value,get_severity_style($key,$normal))); + unset($table_inf); } $table->AddRow($group_row); } @@ -205,128 +444,6 @@ function make_discovery_status(){ return $table; } -// Author: Aly -function make_favorite_graphs($available_hosts=false){ - global $USER_DETAILS; - - if(!$available_hosts){ - $available_hosts = get_accessible_hosts_by_user($USER_DETAILS,PERM_READ_ONLY, null, null, get_current_nodeid()); - } - - $table = new CTableInfo(); - - $fav_graphs = get4favorites('web.favorite.graphids'); - - foreach($fav_graphs['id'] as $key => $resourceid){ - if('simple_graph' == $fav_graphs['resource'][$key]){ - if(!$item = get_item_by_itemid($resourceid)) continue; - - $host = get_host_by_itemid($resourceid); - $item["description"] = item_description($item["description"],$item["key_"]); - - $capt = new CSpan(new CLink($host['host'].':'.$item['description'],'history.php?action=showgraph&itemid='.$resourceid)); - $capt->AddOption('style','line-height: 14px; vertical-align: middle;'); - - $icon = new CLink(new CImg('images/general/chart.png','chart',18,18,'borderless'),'history.php?action=showgraph&itemid='.$resourceid.'&fullscreen=1'); - $icon->SetTarget('blank'); - } - else{ - if(!$graph = get_graph_by_graphid($resourceid)) continue; - - $result = get_hosts_by_graphid($resourceid); - $ghost = DBFetch($result); - - $capt = new CSpan(new CLink($ghost['host'].':'.$graph['name'],'charts.php?graphid='.$resourceid)); - $capt->AddOption('style','line-height: 14px; vertical-align: middle;'); - - $icon = new CLink(new CImg('images/general/chart.png','chart',18,18,'borderless'),'charts.php?graphid='.$resourceid.'&fullscreen=1'); - $icon->SetTarget('blank'); - } - - $table->AddRow(new CCol(array( - $icon, - SPACE, - $capt) - )); - } - $td = new CCol(array(new CButton(S_GRAPHS,S_GRAPHS,"javascript: location.href = 'charts.php'; return false;"))); - $td->AddOption('style','text-align: right;'); - - $table->SetFooter($td); - -return $table; -} - -// Author: Aly -function make_favorite_screens(){ - $table = new CTableInfo(); - - $fav_screens = get4favorites('web.favorite.screenids'); - foreach($fav_screens['id'] as $key => $resourceid){ - if('slides' == $fav_screens['resource'][$key]){ - if(!$slide = get_slideshow_by_slideshowid($resourceid)) continue; - - $capt = new CSpan(new CLink($slide['name'],'screens.php?config=1&elementid='.$resourceid)); - $capt->AddOption('style','line-height: 14px; vertical-align: middle;'); - - $icon = new CLink(new CImg('images/general/chart.png','screen',18,18,'borderless'),'screens.php?config=1&elementid='.$resourceid.'&fullscreen=1'); - $icon->SetTarget('blank'); - } - else{ - if(!$screen = get_screen_by_screenid($resourceid)) continue; - - $capt = new CSpan(new CLink($screen['name'],'screens.php?resourceid='.$resourceid)); - $capt->AddOption('style','line-height: 14px; vertical-align: middle;'); - - $icon = new CLink(new CImg('images/general/chart.png','screen',18,18,'borderless'),'screens.php?resourceid='.$resourceid.'&fullscreen=1'); - $icon->SetTarget('blank'); - } - - $table->AddRow(new CCol(array( - $icon, - SPACE, - $capt) - )); - } - - $td = new CCol(array(new CButton(S_SCREENS,S_SCREENS,"javascript: location.href = 'screens.php'; return false;"))); - $td->AddOption('style','text-align: right;'); - - $table->SetFooter($td); - -return $table; -} - -// Author: Aly -function make_favorite_maps(){ - $table = new CTableInfo(); - - $fav_sysmaps = get4favorites('web.favorite.sysmapids'); - - foreach($fav_sysmaps['id'] as $key => $resourceid){ - if(!$sysmap = get_sysmap_by_sysmapid($resourceid)) continue; - - $capt = new CSpan(new CLink($sysmap['name'],'maps.php?sysmapid='.$resourceid)); - $capt->AddOption('style','line-height: 14px; vertical-align: middle;'); - - $icon = new CLink(new CImg('images/general/chart.png','map',18,18,'borderless'),'maps.php?sysmapid='.$resourceid.'&fullscreen=1'); - $icon->SetTarget('blank'); - - $table->AddRow(new CCol(array( - $icon, - SPACE, - $capt) - )); - } - - $td = new CCol(array(new CButton(S_MAPS,S_MAPS,"javascript: location.href = 'maps.php'; return false;"))); - $td->AddOption('style','text-align: right;'); - - $table->SetFooter($td); - -return $table; -} - // author Aly function make_latest_issues($available_hosts=false){ global $USER_DETAILS; @@ -345,11 +462,13 @@ function make_latest_issues($available_hosts=false){ S_LAST_CHANGE, S_AGE, ($config['event_ack_enable'])? S_ACK : NULL, + S_ACTIONS )); $sql = 'SELECT DISTINCT t.triggerid,t.status,t.description, t.priority, t.lastchange,t.value,h.host,h.hostid '. ' FROM triggers t,hosts h,items i,functions f, hosts_groups hg '. - ' WHERE f.itemid=i.itemid AND h.hostid=i.hostid '. + ' WHERE f.itemid=i.itemid '. + ' AND h.hostid=i.hostid '. ' AND hg.hostid=h.hostid '. ' AND t.triggerid=f.triggerid AND t.status='.TRIGGER_STATUS_ENABLED. ' AND i.status='.ITEM_STATUS_ACTIVE.' AND '.DBin_node('t.triggerid'). @@ -383,7 +502,8 @@ function make_latest_issues($available_hosts=false){ $event_sql = 'SELECT e.eventid, e.value, e.clock, e.objectid as triggerid, e.acknowledged, t.type '. ' FROM events e, triggers t '. - ' WHERE e.object=0 AND e.objectid='.$row['triggerid']. + ' WHERE e.object=0 '. + ' AND e.objectid='.$row['triggerid']. ' AND t.triggerid=e.objectid '. ' AND e.value='.TRIGGER_VALUE_TRUE. ' ORDER by e.object DESC, e.objectid DESC, e.eventid DESC'; @@ -403,6 +523,79 @@ function make_latest_issues($available_hosts=false){ $description = expand_trigger_description_by_data( array_merge($row, array("clock"=>$row_event["clock"])), ZBX_FLAG_EVENT); + +//actions + $actions= new CTable(' - '); + + $sql='SELECT COUNT(a.alertid) as all '. + ' FROM alerts a,functions f,items i,events e'. + ' WHERE a.eventid='.$row_event['eventid']. + ' AND e.eventid = a.eventid'. + ' AND f.triggerid=e.objectid '. + ' AND i.itemid=f.itemid '. + ' AND i.hostid IN ('.$available_hosts.') '; + + $alerts=DBfetch(DBselect($sql)); + + if(isset($alerts['all']) && ($alerts['all'] > 0)){ + $sql='SELECT COUNT(a.alertid) as sent '. + ' FROM alerts a,functions f,items i,events e'. + ' WHERE a.eventid='.$row_event['eventid']. + ' AND a.status='.ALERT_STATUS_SENT. + ' AND e.eventid = a.eventid'. + ' AND f.triggerid=e.objectid '. + ' AND i.itemid=f.itemid '. + ' AND i.hostid IN ('.$available_hosts.') '; + $alerts=DBfetch(DBselect($sql)); + + $alert_cnt = new CSpan($alerts['sent'],'green'); + if($alerts['sent']){ + $hint=get_actions_hint_by_eventid($row_event['eventid'],ALERT_STATUS_SENT); + $alert_cnt->SetHint($hint); + } + $tdl = new CCol(($alerts['sent'])?$alert_cnt:SPACE); + $tdl->AddOption('width','10'); + + $sql='SELECT COUNT(a.alertid) as inprogress '. + ' FROM alerts a,functions f,items i,events e'. + ' WHERE a.eventid='.$row_event['eventid']. + ' AND a.status='.ALERT_STATUS_NOT_SENT. + ' AND e.eventid = a.eventid'. + ' AND f.triggerid=e.objectid '. + ' AND i.itemid=f.itemid '. + ' AND i.hostid IN ('.$available_hosts.') '; + $alerts=DBfetch(DBselect($sql)); + + $alert_cnt = new CSpan($alerts['inprogress'],'orange'); + if($alerts['inprogress']){ + $hint=get_actions_hint_by_eventid($row_event['eventid'],ALERT_STATUS_NOT_SENT); + $alert_cnt->SetHint($hint); + } + $tdc = new CCol(($alerts['inprogress'])?$alert_cnt:SPACE); + $tdc->AddOption('width','10'); + + $sql='SELECT COUNT(a.alertid) as failed '. + ' FROM alerts a,functions f,items i,events e'. + ' WHERE a.eventid='.$row_event['eventid']. + ' AND a.status='.ALERT_STATUS_FAILED. + ' AND e.eventid = a.eventid'. + ' AND f.triggerid=e.objectid '. + ' AND i.itemid=f.itemid '. + ' AND i.hostid IN ('.$available_hosts.') '; + $alerts=DBfetch(DBselect($sql)); + + $alert_cnt = new CSpan($alerts['failed'],'red'); + if($alerts['failed']){ + $hint=get_actions_hint_by_eventid($row_event['eventid'],ALERT_STATUS_FAILED); + $alert_cnt->SetHint($hint); + } + + $tdr = new CCol(($alerts['failed'])?$alert_cnt:SPACE); + $tdr->AddOption('width','10'); + + $actions->AddRow(array($tdl,$tdc,$tdr)); + } +//-------- $table->AddRow(array( get_node_name_by_elid($row['triggerid']), @@ -411,9 +604,10 @@ function make_latest_issues($available_hosts=false){ new CLink(zbx_date2str(S_DATE_FORMAT_YMDHMS,$row_event['clock']),"tr_events.php?triggerid=".$row["triggerid"],"action"), zbx_date2age($row_event['clock']), ($config['event_ack_enable'])?(new CCol($ack,"center")):NULL, + $actions )); } - unset($row,$description, $actions); + unset($row,$description,$actions,$alerts,$hint); } $table->SetFooter(new CCol(S_UPDATED.': '.date("H:i:s",time()))); return $table; |
