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 | |
| 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')
| -rw-r--r-- | frontends/php/include/actions.inc.php | 137 | ||||
| -rw-r--r-- | frontends/php/include/blocks.inc.php | 452 | ||||
| -rw-r--r-- | frontends/php/include/classes/cformtable.inc.php | 33 | ||||
| -rw-r--r-- | frontends/php/include/classes/cspan.inc.php | 8 | ||||
| -rw-r--r-- | frontends/php/include/classes/ctable.inc.php | 3 | ||||
| -rw-r--r-- | frontends/php/include/classes/ctag.inc.php | 4 | ||||
| -rw-r--r-- | frontends/php/include/defines.inc.php | 3 | ||||
| -rw-r--r-- | frontends/php/include/forms.inc.php | 29 | ||||
| -rw-r--r-- | frontends/php/include/js.inc.php | 5 | ||||
| -rw-r--r-- | frontends/php/include/media.inc.php | 2 |
10 files changed, 472 insertions, 204 deletions
diff --git a/frontends/php/include/actions.inc.php b/frontends/php/include/actions.inc.php index 4875ba9a..6ce4792e 100644 --- a/frontends/php/include/actions.inc.php +++ b/frontends/php/include/actions.inc.php @@ -36,13 +36,12 @@ include_once 'include/discovery.inc.php'; $denyed_hosts = get_accessible_hosts_by_user($USER_DETAILS,PERM_READ_ONLY, PERM_MODE_LT); $denyed_groups = get_accessible_groups_by_user($USER_DETAILS,PERM_READ_ONLY, PERM_MODE_LT); - $db_result = DBselect("select * from conditions where actionid=".$actionid); + $db_result = DBselect('SELECT * FROM conditions WHERE actionid='.$actionid); while(($ac_data = DBfetch($db_result)) && $result) { if($ac_data['operator'] != 0) continue; - switch($ac_data['conditiontype']) - { + switch($ac_data['conditiontype']){ case CONDITION_TYPE_HOST_GROUP: if(uint_in_array($ac_data['value'],explode(',',$denyed_groups))) { @@ -56,10 +55,13 @@ include_once 'include/discovery.inc.php'; } break; case CONDITION_TYPE_TRIGGER: - if(!DBfetch(DBselect("select distinct t.*". - " from triggers t,items i,functions f". - " where f.itemid=i.itemid and t.triggerid=f.triggerid". - " and i.hostid not in (".$denyed_hosts.") and t.triggerid=".$ac_data['value']))) + if(!DBfetch(DBselect('SELECT DISTINCT t.*'. + ' FROM triggers t,items i,functions f,events e'. + ' WHERE f.itemid=i.itemid '. + ' AND t.triggerid=f.triggerid'. + ' AND i.hostid NOT IN ('.$denyed_hosts.') '. + ' AND e.eventid='.$ac_data['value']. + ' AND t.triggerid=e.objectid'))) { $result = false; } @@ -100,10 +102,13 @@ include_once 'include/discovery.inc.php'; } break; case CONDITION_TYPE_TRIGGER: - if(!DBfetch(DBselect("select distinct t.*". - " from triggers t,items i,functions f". - " where f.itemid=i.itemid and t.triggerid=f.triggerid". - " and i.hostid not in (".$denyed_hosts.") and t.triggerid=".$ac_data['value']))) + if(!DBfetch(DBselect('SELECT DISTINCT t.*'. + ' FROM triggers t,items i,functions f,events e'. + ' WHERE f.itemid=i.itemid '. + ' AND t.triggerid=f.triggerid'. + ' AND i.hostid NOT IN ('.$denyed_hosts.') '. + ' AND e.eventid='.$ac_data['value']. + ' AND t.triggerid=e.objectid'))) { error(S_INCORRECT_TRIGGER); $result = false; @@ -115,22 +120,19 @@ include_once 'include/discovery.inc.php'; return $result; } - function get_action_by_actionid($actionid) - { + function get_action_by_actionid($actionid){ $sql="select * from actions where actionid=$actionid"; $result=DBselect($sql); - $row=DBfetch($result); - if($row) - { + + if($row=DBfetch($result)){ return $row; } - else - { + else{ error("No action with actionid=[$actionid]"); } - return $result; + return $result; } - + # Add Action's condition function add_action_condition($actionid, $condition) @@ -797,12 +799,13 @@ include_once 'include/discovery.inc.php'; $result=DBselect('SELECT DISTINCT a.alertid,a.clock,mt.description,a.sendto,a.subject,a.message,a.status,a.retries,a.error '. - ' FROM alerts a,media_type mt,functions f,items i '. + ' FROM alerts a,media_type mt,functions f,items i,events e '. ' WHERE mt.mediatypeid=a.mediatypeid '. - ' and a.triggerid=f.triggerid '. - ' and f.itemid=i.itemid '. - ' and i.hostid not in ('.$denyed_hosts.')'. - ' and '.DBin_node('a.alertid'). + ' AND e.eventid = a.eventid'. + ' AND e.objectid=f.triggerid '. + ' AND f.itemid=i.itemid '. + ' AND i.hostid not in ('.$denyed_hosts.')'. + ' AND '.DBin_node('a.alertid'). order_by('a.clock,a.alertid,mt.description,a.sendto,a.status,a.retries'), 10*$start+$num); @@ -817,20 +820,27 @@ include_once 'include/discovery.inc.php'; } $time=date("Y.M.d H:i:s",$row["clock"]); - if($row["status"] == ALERT_STATUS_SENT) - { - $status=new CSpan(S_SENT,"off"); - $retries=new CSpan(SPACE,"off"); + if($row["status"] == ALERT_STATUS_SENT){ + $status=new CSpan(S_SENT,"green"); + $retries=new CSpan(SPACE,"green"); } - else - { - $status=new CSpan(S_NOT_SENT,"on"); - $retries=new CSpan(3 - $row["retries"],"on"); + else if($row["status"] == ALERT_STATUS_NOT_SENT){ + $status=new CSpan(S_IN_PROGRESS,"orange"); + $retries=new CSpan(ALERT_MAX_RETRIES - $row["retries"],"orange"); + } + else{ + $status=new CSpan(S_NOT_SENT,"red"); + $retries=new CSpan(0,"red"); } - $sendto=htmlspecialchars($row["sendto"]); + $sendto=$row["sendto"]; - $subject = empty($row["subject"]) ? '' : "<pre>".bold(S_SUBJECT.': ').htmlspecialchars($row["subject"])."</pre>"; - $message = array($subject,"<pre>".htmlspecialchars($row["message"])."</pre>"); + $pre = new CTag('pre','yes'); + $pre->AddItem(array(bold(S_SUBJECT.': '),$row["subject"])); + $subject = empty($row["subject"]) ? '' : $pre; + + $pre = new CTag('pre','yes'); + $pre->AddItem($row["message"]); + $message = array($subject, $pre); if($row["error"] == "") { @@ -854,4 +864,59 @@ include_once 'include/discovery.inc.php'; return $table; } + +function get_actions_hint_by_eventid($eventid,$status=NULL){ + global $USER_DETAILS; + $available_hosts = get_accessible_hosts_by_user($USER_DETAILS,PERM_READ_ONLY, null, null, get_current_nodeid()); + + $tab_hint = new CTableInfo(S_NO_ACTIONS_FOUND); + $tab_hint->AddOption('style', 'width: 300px;'); + $tab_hint->SetHeader(array( + is_show_subnodes() ? S_NODES : null, + S_TYPE, + S_USER, + S_STATUS + )); + + $sql_param = (is_null($status))?'':' AND a.status='.$status; + + $sql = 'SELECT DISTINCT a.alertid,mt.description,a.sendto,a.status,u.alias '. + ' FROM alerts a,media_type mt,functions f,items i,events e, users u '. + ' WHERE mt.mediatypeid=a.mediatypeid '. + ' AND a.eventid='.$eventid. + $sql_param. + ' AND e.eventid = a.eventid'. + ' AND f.triggerid=e.objectid '. + ' AND i.itemid=f.itemid '. + ' AND i.hostid IN ('.$available_hosts.') '. + ' AND '.DBin_node('a.alertid'). + ' AND u.userid=a.userid '. + ' ORDER BY mt.description'; + $result=DBselect($sql); + + while($row=DBfetch($result)){ + + if($row["status"] == ALERT_STATUS_SENT){ + $status=new CSpan(S_SENT,"green"); + $retries=new CSpan(SPACE,"green"); + } + else if($row["status"] == ALERT_STATUS_NOT_SENT){ + $status=new CSpan(S_IN_PROGRESS,"orange"); + $retries=new CSpan(ALERT_MAX_RETRIES - $row["retries"],"orange"); + } + else{ + $status=new CSpan(S_NOT_SENT,"red"); + $retries=new CSpan(0,"red"); + } + + $tab_hint->AddRow(array( + get_node_name_by_elid($row['alertid']), + $row['description'], + $row['alias'], + $status + )); + } + +return $tab_hint; +} ?> 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; diff --git a/frontends/php/include/classes/cformtable.inc.php b/frontends/php/include/classes/cformtable.inc.php index b704ab13..449c6675 100644 --- a/frontends/php/include/classes/cformtable.inc.php +++ b/frontends/php/include/classes/cformtable.inc.php @@ -126,13 +126,15 @@ function AddRow($item1, $item2=NULL, $class=NULL){ if(strtolower(get_class($item1)) == 'crow'){ - } elseif(strtolower(get_class($item1)) == 'ctable'){ + } + else if(strtolower(get_class($item1)) == 'ctable'){ $td = new CCol($item1,'form_row_c'); $td->SetColSpan(2); $item1 = new CRow($td); - - } else{ + } + else{ + $tmp = $item1; if(is_string($item1)){ $item1=nbsp($item1); } @@ -140,12 +142,14 @@ if(empty($item1)) $item1 = SPACE; if(empty($item2)) $item2 = SPACE; - $item1 = new CRow(array( - new CCol($item1,'form_row_l'), - new CCol($item2,'form_row_r') - ), - $class); + $item1 = new CRow( + array( + new CCol($item1,'form_row_l'), + new CCol($item2,'form_row_r') + ), + $class); } + array_push($this->center_items, $item1); } @@ -190,14 +194,15 @@ if(isset($this->help)) $col->AddItem($this->help); if(isset($this->title)) $col->AddItem($this->title); foreach($this->top_items as $item) $col->AddItem($item); - $tbl->SetHeader($col); + + $tbl->SetHeader($col); # add last row - $tbl->SetFooter($this->bottom_items); + $tbl->SetFooter($this->bottom_items); # add center rows - foreach($this->center_items as $item) - $tbl->AddRow($item); - - return $tbl->ToString(); + foreach($this->center_items as $item){ + $tbl->AddRow($item); + } + return $tbl->ToString(); } } ?> diff --git a/frontends/php/include/classes/cspan.inc.php b/frontends/php/include/classes/cspan.inc.php index 9ef2e068..7242fa8d 100644 --- a/frontends/php/include/classes/cspan.inc.php +++ b/frontends/php/include/classes/cspan.inc.php @@ -27,12 +27,12 @@ parent::CTag("span","yes"); $this->SetClass($class); $this->AddItem($items); - $this->tag_body_start = ""; - + + $this->tag_body_start = ""; $this->tag_start= ""; $this->tag_end = ""; $this->tag_body_start = ""; - $this->tag_body_end = ""; + $this->tag_body_end = ""; } } @@ -44,8 +44,8 @@ parent::CTag("div","yes"); $this->SetClass($class); $this->AddItem($items); - $this->tag_body_start = ""; + $this->tag_body_start = ""; $this->tag_start= ""; $this->tag_end = ""; $this->tag_body_start = ""; diff --git a/frontends/php/include/classes/ctable.inc.php b/frontends/php/include/classes/ctable.inc.php index 39013bdb..72dc2718 100644 --- a/frontends/php/include/classes/ctable.inc.php +++ b/frontends/php/include/classes/ctable.inc.php @@ -65,7 +65,8 @@ foreach($item as $el){ if(strtolower(get_class($el))=='ccol') { parent::AddItem($el); - } elseif(!is_null($el)) { + } + else if(!is_null($el)){ parent::AddItem(new CCol($el)); } } diff --git a/frontends/php/include/classes/ctag.inc.php b/frontends/php/include/classes/ctag.inc.php index 44cc5050..9f9e9cbf 100644 --- a/frontends/php/include/classes/ctag.inc.php +++ b/frontends/php/include/classes/ctag.inc.php @@ -79,7 +79,9 @@ return $res; } - function Show($destroy=true) { echo $this->ToString($destroy); } + function Show($destroy=true){ + echo $this->ToString($destroy); + } function Destroy() { diff --git a/frontends/php/include/defines.inc.php b/frontends/php/include/defines.inc.php index e2969831..e0703aff 100644 --- a/frontends/php/include/defines.inc.php +++ b/frontends/php/include/defines.inc.php @@ -235,8 +235,11 @@ define('TRIGGER_SEVERITY_HIGH', 4); define('TRIGGER_SEVERITY_DISASTER', 5); + define('ALERT_MAX_RETRIES',3); + define('ALERT_STATUS_NOT_SENT',0); define('ALERT_STATUS_SENT',1); + define('ALERT_STATUS_FAILED',2); define('ALERT_TYPE_EMAIL',0); define('ALERT_TYPE_EXEC',1); diff --git a/frontends/php/include/forms.inc.php b/frontends/php/include/forms.inc.php index af3b2c74..0791da68 100644 --- a/frontends/php/include/forms.inc.php +++ b/frontends/php/include/forms.inc.php @@ -474,13 +474,11 @@ url_param($s['status_codes'],false,'status_codes'). '");'); - if(strlen($s['url']) > 70) - { + if(strlen($s['url']) > 70){ $url = new CTag('span','yes', substr($s['url'],0,35).SPACE.'...'.SPACE.substr($s['url'],strlen($s['url'])-25,25)); $url->SetHint($s['url']); } - else - { + else{ $url = $s['url']; } @@ -855,15 +853,12 @@ $frmUser->AddVar('user_medias', $user_medias); $media_table = new CTable(S_NO_MEDIA_DEFINED); - foreach($user_medias as $id => $one_media) - { - if(!isset($one_media["active"]) || $one_media["active"]==0) - { + foreach($user_medias as $id => $one_media){ + if(!isset($one_media["active"]) || $one_media["active"]==0){ $status = new CLink(S_ENABLED,'#','enabled'); $status->OnClick("return create_var('".$frmUser->GetName()."','disable_media',".$id.", true);"); } - else - { + else{ $status = new CLink(S_DISABLED,'#','disabled'); $status->OnClick("return create_var('".$frmUser->GetName()."','enable_media',".$id.", true);"); } @@ -877,12 +872,14 @@ $status) ); } - $frmUser->AddRow(S_MEDIA, array($media_table, - new CButton('add_media',S_ADD, - 'return PopUp("popup_media.php?dstfrm='.$frmUser->GetName().'",550,400);'), - SPACE, - (count($user_medias) > 0) ? new CButton('del_user_media',S_DELETE_SELECTED) : null - )); + + $frmUser->AddRow( + S_MEDIA, + array($media_table, + new CButton('add_media',S_ADD,'return PopUp("popup_media.php?dstfrm='.$frmUser->GetName().'",550,400);'), + SPACE, + (count($user_medias) > 0) ? new CButton('del_user_media',S_DELETE_SELECTED) : null + )); } $cmbLang = new CComboBox('lang',$lang); diff --git a/frontends/php/include/js.inc.php b/frontends/php/include/js.inc.php index 2d2879f3..2dd8ae62 100644 --- a/frontends/php/include/js.inc.php +++ b/frontends/php/include/js.inc.php @@ -109,9 +109,10 @@ return $result; } function insert_showhint_javascript(){ - if(defined('SHOW_HINT_SCRIPT_INSERTTED')) return; + global $page; + if(defined('SHOW_HINT_SCRIPT_INSERTTED') || (PAGE_TYPE_HTML != $page['type'])) return; define('SHOW_HINT_SCRIPT_INSERTTED', 1); - + echo '<script type="text/javascript" src="js/showhint.js"></script>'; } diff --git a/frontends/php/include/media.inc.php b/frontends/php/include/media.inc.php index 931d7afa..9effc6dd 100644 --- a/frontends/php/include/media.inc.php +++ b/frontends/php/include/media.inc.php @@ -52,7 +52,7 @@ $result[$id]->SetHint(get_severity_description($id)." (".(isset($map['style']) ? "on" : "off").")"); } - return unpack_object($result); + return $result; } function get_media_by_mediaid($mediaid) |
