summaryrefslogtreecommitdiffstats
path: root/frontends/php/include
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
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')
-rw-r--r--frontends/php/include/actions.inc.php137
-rw-r--r--frontends/php/include/blocks.inc.php452
-rw-r--r--frontends/php/include/classes/cformtable.inc.php33
-rw-r--r--frontends/php/include/classes/cspan.inc.php8
-rw-r--r--frontends/php/include/classes/ctable.inc.php3
-rw-r--r--frontends/php/include/classes/ctag.inc.php4
-rw-r--r--frontends/php/include/defines.inc.php3
-rw-r--r--frontends/php/include/forms.inc.php29
-rw-r--r--frontends/php/include/js.inc.php5
-rw-r--r--frontends/php/include/media.inc.php2
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)