summaryrefslogtreecommitdiffstats
path: root/frontends/php/include/blocks.inc.php
diff options
context:
space:
mode:
authorartem <artem@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2008-03-06 13:45:26 +0000
committerartem <artem@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2008-03-06 13:45:26 +0000
commit4b79250425757d15a3803d74f3fbe9c8cfe749eb (patch)
tree08f6e7a47ca0ea68d561ba982a77cece83a745b4 /frontends/php/include/blocks.inc.php
parentbc87e8b5844d32a4b6367ca7ecc6aec56a1adf28 (diff)
downloadzabbix-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.php452
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;