0) return get_realhosts_by_triggerid($trigger["templateid"]); return get_hosts_by_triggerid($triggerid); } function get_trigger_by_triggerid($triggerid) { $sql="select * from triggers where triggerid=$triggerid"; $result=DBselect($sql); if(DBnum_rows($result) == 1) { return DBfetch($result); } error("No trigger with triggerid=[$triggerid]"); return FALSE; } function get_hosts_by_triggerid($triggerid) { return DBselect("select distinct h.* from hosts h, functions f, items i". " where i.itemid=f.itemid and h.hostid=i.hostid and f.triggerid=$triggerid"); } function get_functions_by_triggerid($triggerid) { return DBselect("select * from functions where triggerid=$triggerid"); } function get_triggers_by_hostid($hostid, $show_mixed = "yes") { $db_triggers = DBselect("select distinct t.* from triggers t, functions f, items i". " where i.hostid=$hostid and f.itemid=i.itemid and f.triggerid=t.triggerid"); if($show_mixed == "yes") return $db_triggers; $triggers = array(); while($db_trigger = DBfetch($db_triggers)) { $db_hosts = get_hosts_by_triggerid($db_trigger["triggerid"]); if(DBnum_rows($db_hosts) == 1) { array_push($triggers,$db_trigger["triggerid"]); } } $sql = "select distinct * from triggers where triggerid=0"; foreach($triggers as $triggerid) { $sql .= " or triggerid=$triggerid"; } return DBselect($sql); } function get_triggers_by_templateid($triggerid) { return DBselect("select * from triggers where templateid=$triggerid"); } function get_hosts_by_expression($expression) { $state=""; $host=""; $hosts=array(); for($i=0,$max=strlen($expression); $i<$max; $i++) { if($expression[$i] == '{' && $state=="") { $host=""; $state='HOST'; continue; } if($expression[$i] == '}' && $state=="") { $state=''; $hosts[$host] = $host; continue; } if($expression[$i] == '(' && $state == "FUNCTION") { $state='PARAMETER'; continue; } if($expression[$i] == ')' && $state == "PARAMETER") { $state=''; continue; } if($expression[$i] == ':' && $state == "HOST") { $state="KEY"; continue; } if($expression[$i] == '.' && ($state == "KEY" || $state == "FUNCTION")) { $state="FUNCTION"; continue; } if($state == "HOST") { $host .= $expression[$i]; continue; } if($state == "KEY" || $state == "FUNCTION" || $state == "PARAMETER") continue; } $sql = "select distinct * from hosts where hostid=0"; foreach($hosts as $host) { $sql .= " or host=".zbx_dbstr($host); } return DBselect($sql); } function validate_expression($expression) { // echo "Validating expression: $expression
"; $exp_hosts = get_hosts_by_expression($expression); $ok=0; // Replace all {server:key.function(param)} with 0 while($ok==0) { // echo "Expression:$expression
"; $arr=""; if (eregi('^((.)*)[ ]*(\{((.)*)\})[ ]*((.)*)$', $expression, $arr)) { // for($i=0;$i<20;$i++) // { // if($arr[$i]) // echo " $i: ",$arr[$i],"
"; // } if(validate_simple_expression($arr[3])!=0) { return -1; } $expression=$arr[1]."0".$arr[6]; } else { $ok=1; } } // echo "Result:$expression

"; $ok=0; while($ok==0) { // Replace all with 0 // echo "Expression:$expression
"; $arr=""; if (eregi('^((.)*)([0-9\.]+[A-Z]{0,1})[ ]*([\&\|\>\<\=\+\-\*\/\#]{1})[ ]*([0-9\.]+[A-Z]{0,1})((.)*)$', $expression, $arr)) { // echo "OK
"; // for($i=0;$i<50;$i++) // { // if($arr[$i]!="") // echo " $i: ",$arr[$i],"
"; // } if(validate_float($arr[3])!=0) { error("[".$arr[3]."] is not a float"); return -1; } if(validate_float($arr[5])!=0) { error("[".$arr[5]."] is not a float"); return -1; } $expression=$arr[1]."(0)".$arr[6]; } else { $ok=1; } // Replace all (float) with 0 // echo "Expression2:[$expression]
"; $arr=""; if (eregi('^((.)*)(\(([ 0-9\.]+)\))((.)*)$', $expression, $arr)) { // echo "OK
"; // for($i=0;$i<30;$i++) // { // if($arr[$i]!="") // echo " $i: ",$arr[$i],"
"; // } if(validate_float($arr[4])!=0) { error("[".$arr[4]."] is not a float"); return -1; } $expression=$arr[1]."0".$arr[5]; $ok=0; } else { $ok=1; } } $hosts_num = DBnum_rows($exp_hosts); if($hosts_num == 0) { error("Incorrect trigger expression. Incorrect host is used."); return 1; } else if(DBnum_rows($exp_hosts) <> 1) { while($exp_host = DBfetch($exp_hosts)) { if($exp_host["status"]==HOST_STATUS_TEMPLATE) { error("Incorrect trigger expression. You can't use template hosts". " in mixed expressions."); return 1; } } } if($expression=="0") { return 0; } error("Incorrect trigger expression '$expression'"); return 1; } function add_trigger( $expression, $description, $priority, $status, $comments, $url, $deps=array(), $templateid=0) { // if(!check_right("Trigger","A",0)) // { // error("Insufficient permissions"); // return 0; // } if(!is_null($expression)) if(validate_expression($expression)) return FALSE; $result=DBexecute("insert into triggers". " (description,priority,status,comments,url,value,error,templateid)". " values (".zbx_dbstr($description).",$priority,$status,".zbx_dbstr($comments).",". "".zbx_dbstr($url).",2,'Trigger just added. No status update so far.',$templateid)"); if(!$result) { return $result; } $triggerid = DBinsert_id($result,"triggers","triggerid"); add_alarm($triggerid,2); $expression = implode_exp($expression,$triggerid); DBexecute("update triggers set expression=".zbx_dbstr($expression)." where triggerid=$triggerid"); reset_items_nextcheck($triggerid); foreach($deps as $val) { $result = add_trigger_dependency($triggerid, $val); } if($result) { $trig_hosts = get_hosts_by_triggerid($triggerid); $msg = "Added trigger '".$description."'"; if(DBnum_rows($trig_hosts) == 1) { $trig_host = DBfetch($trig_hosts); $msg .= " to host '".$trig_host["host"]."'"; } info($msg); } $trig_hosts = get_hosts_by_triggerid($triggerid); if(DBnum_rows($trig_hosts) == 1) { $trig_host = DBfetch($trig_hosts); $child_hosts = get_hosts_by_templateid($trig_host["hostid"]); while($child_host = DBfetch($child_hosts)) { $result = copy_trigger_to_host($triggerid, $child_host["hostid"]); if(!$result){ if($templateid == 0) { // delete main trigger (and recursively childs) delete_trigger($triggerid); } return $result; } } } return $triggerid; } function copy_trigger_to_host($triggerid, $hostid) { $trigger = get_trigger_by_triggerid($triggerid); $deps = array(); $db_deps = DBexecute("select * from trigger_depends where triggerid_down=".$triggerid); while($db_dep = DBfetch($db_deps)) array_push($deps, $db_dep["triggerid_up"]); $host_triggers = get_triggers_by_hostid($hostid, "no"); while($host_trigger = DBfetch($host_triggers)) { if($host_trigger["templateid"] != 0) continue; if(cmp_triggers($triggerid, $host_trigger["triggerid"])) continue; // link not linked trigger with same expression return update_trigger( $host_trigger["triggerid"], NULL, // expression $trigger["description"], $trigger["priority"], NULL, // status $trigger["comments"], $trigger["url"], $deps, $triggerid); } $result = DBexecute("insert into triggers". " (description,priority,status,comments,url,value,expression,templateid)". " values (".zbx_dbstr($trigger["description"]).",".$trigger["priority"]."," .$trigger["status"].",".zbx_dbstr($trigger["comments"]).",". zbx_dbstr($trigger["url"]).",2,'{???:???}', $triggerid)"); if(!$result) return $result; $newtriggerid = DBinsert_id($result,"triggers","triggerid"); $host = get_host_by_hostid($hostid); $newexpression = $trigger["expression"]; // Loop: functions $functions = get_functions_by_triggerid($triggerid); while($function = DBfetch($functions)) { $item = get_item_by_itemid($function["itemid"]); $host_items = DBselect("select * from items". " where key_=".zbx_dbstr($item["key_"]). " and hostid=".$host["hostid"]); if(DBnum_rows($host_items)!=1) { error("Missing key '".$item["key_"]."' for host '".$host["host"]."'"); return FALSE; } $host_item = DBfetch($host_items); $result = DBexecute("insert into functions (itemid,triggerid,function,parameter)". " values (".$host_item["itemid"].",$newtriggerid,". zbx_dbstr($function["function"]).",".zbx_dbstr($function["parameter"]).")"); $newfunctionid = DBinsert_id($result,"functions","functionid"); $newexpression = str_replace( "{".$function["functionid"]."}", "{".$newfunctionid."}", $newexpression); } DBexecute("update triggers set expression=".zbx_dbstr($newexpression). " where triggerid=$newtriggerid"); // copy dependences delete_dependencies_by_triggerid($newtriggerid); $db_deps = DBexecute("select * from trigger_depends where". " triggerid_down=".$triggerid); while($db_dep = DBfetch($db_deps)) { add_trigger_dependency($newtriggerid, $db_dep["triggerid_up"]); } info("Added trigger '".$trigger["description"]."' to host '".$host["host"]."'"); $child_hosts = get_hosts_by_templateid($hostid); while($child_host = DBfetch($child_hosts)) {// recursion $result = copy_trigger_to_host($triggerid, $child_host["hostid"]); if(!$result){ return result; } } return $newtriggerid; } # Translate {10}>10 to something like localhost:procload.last(0)>10 function explode_exp ($expression, $html) { # echo "EXPRESSION:",$expression,"
"; $functionid=''; $exp=''; $state=''; for($i=0,$max=strlen($expression); $i<$max; $i++) { if($expression[$i] == '{') { $functionid=''; $state='FUNCTIONID'; continue; } if($expression[$i] == '}') { $state=''; $sql="select h.host,i.key_,f.function,f.parameter,i.itemid from items i,functions f,hosts h where functionid=$functionid and i.itemid=f.itemid and h.hostid=i.hostid"; $res1=DBselect($sql); $row1=DBfetch($res1); if($html == 0) { $exp=$exp."{".$row1["host"].":".$row1["key_"].".".$row1["function"]."(".$row1["parameter"].")}"; } else { $item=get_item_by_itemid($row1["itemid"]); if($item["value_type"] ==0) { $exp=$exp."{".$row1["host"].":".$row1["key_"].".".$row1["function"]."(".$row1["parameter"].")}"; } else { $exp=$exp."{".$row1["host"].":".$row1["key_"].".".$row1["function"]."(".$row1["parameter"].")}"; } } continue; } if($state == "FUNCTIONID") { $functionid=$functionid.$expression[$i]; continue; } $exp=$exp.$expression[$i]; } # echo "EXP:",$exp,"
"; return $exp; } function implode_exp ($expression, $triggerid) # Translate localhost:procload.last(0)>10 to {12}>10 { // echo "Expression:$expression
"; $exp=''; $state=""; for($i=0,$max=strlen($expression); $i<$max; $i++) { if($expression[$i] == '{') { if($state=="") { $host=''; $key=''; $function=''; $parameter=''; $state='HOST'; continue; } } if( ($expression[$i] == '}')&&($state=="") ) { // echo "HOST:$host
"; // echo "KEY:$key
"; // echo "FUNCTION:$function
"; // echo "PARAMETER:$parameter
"; $state=''; $res=DBselect("select i.itemid from items i,hosts h". " where i.key_=".zbx_dbstr($key). " and h.host=".zbx_dbstr($host). " and h.hostid=i.hostid"); $row=DBfetch($res); $itemid=$row["itemid"]; $res=DBexecute("insert into functions (itemid,triggerid,function,parameter)". " values ($itemid,$triggerid,".zbx_dbstr($function).",". zbx_dbstr($parameter).")"); if(!$res) { return $res; } $functionid=DBinsert_id($res,"functions","functionid"); $exp=$exp.'{'.$functionid.'}'; continue; } if($expression[$i] == '(') { if($state == "FUNCTION") { $state='PARAMETER'; continue; } } if($expression[$i] == ')') { if($state == "PARAMETER") { $state=''; continue; } } if(($expression[$i] == ':') && ($state == "HOST")) { $state="KEY"; continue; } if($expression[$i] == '.') { if($state == "KEY") { $state="FUNCTION"; continue; } // Support for '.' in KEY if($state == "FUNCTION") { $state="FUNCTION"; $key=$key.".".$function; $function=""; continue; } } if($state == "HOST") { $host=$host.$expression[$i]; continue; } if($state == "KEY") { $key=$key.$expression[$i]; continue; } if($state == "FUNCTION") { $function=$function.$expression[$i]; continue; } if($state == "PARAMETER") { $parameter=$parameter.$expression[$i]; continue; } $exp=$exp.$expression[$i]; } return $exp; } function update_trigger_comments($triggerid,$comments) { if(!check_right("Trigger comment","U",$triggerid)) { error("Insufficient permissions"); return 0; } return DBexecute("update triggers set comments=".zbx_dbstr($comments). " where triggerid=$triggerid"); } # Update Trigger status function update_trigger_status($triggerid,$status) { // first update status for child triggers $db_chd_triggers = get_triggers_by_templateid($triggerid); while($db_chd_trigger = DBfetch($db_chd_triggers)) { update_trigger_status($db_chd_trigger["triggerid"],$status); } if(!check_right_on_trigger("U",$triggerid)) { error("Insufficient permissions"); return 0; } add_alarm($triggerid,2); return DBexecute("update triggers set status=$status where triggerid=$triggerid"); } # "Processor load on {HOSTNAME} is 5" to "Processor load on www.sf.net is 5" function expand_trigger_description_simple($triggerid) { $result=DBselect("select distinct t.description,h.host". " from triggers t,functions f,items i,hosts h". " where t.triggerid=$triggerid and f.triggerid=t.triggerid". " and f.itemid=i.itemid and i.hostid=h.hostid"); if(DBnum_rows($result)>0) { $row = DBfetch($result); $description = str_replace("{HOSTNAME}", $row["host"],$row["description"]); } else { $result = DBselect("select description from triggers where triggerid=$triggerid"); $row = DBfetch($result); $description = $row["description"]; } return $description; } # "Processor load on %s is 5" to "Processor load on www.sf.net is 5" function expand_trigger_description($triggerid) { $description=expand_trigger_description_simple($triggerid); $description=stripslashes(htmlspecialchars($description)); return $description; } function update_trigger_value_to_unknown_by_hostid($hostid) { $result = DBselect("select distinct t.triggerid". " from hosts h,items i,triggers t,functions f". " where f.triggerid=t.triggerid and f.itemid=i.itemid". " and h.hostid=i.hostid and h.hostid=$hostid"); while($row=DBfetch($result)) { DBexecute("update triggers set value=2 where triggerid=".$row["triggerid"]); } } function add_trigger_dependency($triggerid,$depid) { $result=insert_dependency($triggerid,$depid);; if(!$result) { return $result; } add_additional_dependencies($triggerid,$depid); return $result; } # Delete Trigger definition function delete_trigger($triggerid) { // first delete child triggers $db_triggers= get_triggers_by_templateid($triggerid); while($db_trigger = DBfetch($db_triggers)) {// recursion $result = delete_trigger($db_trigger["triggerid"]); if(!$result) return $result; } // get hosts before functions deletion !!! $trig_hosts = get_hosts_by_triggerid($triggerid); $result = delete_dependencies_by_triggerid($triggerid); if(!$result) return $result; DBexecute("delete from trigger_depends where triggerid_up=$triggerid"); $result=delete_function_by_triggerid($triggerid); if(!$result) return $result; $result=delete_alarms_by_triggerid($triggerid); if(!$result) return $result; $result=delete_services_by_triggerid($triggerid); if(!$result) return $result; $result=delete_sysmaps_elements_with_triggerid($triggerid); if(!$result) return $result; DBexecute("delete from alerts where triggerid=$triggerid"); DBexecute("update sysmaps_links set triggerid=NULL where triggerid=$triggerid"); $db_actions = DBselect("select distinct c.actionid from conditions c, triggers t". " where c.conditiontype=".CONDITION_TYPE_TRIGGER. " and c.value=t.triggerid"); while($db_action = DBfetch($db_actions)) { DBexecute("update actions set status=".ACTION_STATUS_DISABLED. " where actionid=".$db_action["actionid"]); } $trigger = get_trigger_by_triggerid($triggerid); $result = DBexecute("delete from triggers where triggerid=$triggerid"); if($result) { $msg = "Trigger '".$trigger["description"]."' deleted"; if(DBnum_rows($trig_hosts) == 1) { $trig_host = DBfetch($trig_hosts); $msg .= " from host '".$trig_host["host"]."'"; } info($msg); } return $result; } # Update Trigger definition function update_trigger($triggerid,$expression=NULL,$description=NULL,$priority=NULL,$status=NULL, $comments=NULL,$url=NULL,$deps=array(),$templateid=0) { if(!check_right_on_trigger("U",$triggerid)) { error("Insufficient permissions"); return 0; } $trigger = get_trigger_by_triggerid($triggerid); $trig_hosts = get_hosts_by_triggerid($triggerid); $trig_host = DBfetch($trig_hosts); if(is_null($expression)) { $expression = explode_exp($trigger["expression"],0); } else { if(validate_expression($expression)) return FALSE; } $exp_hosts = get_hosts_by_expression($expression); $chd_hosts = get_hosts_by_templateid($trig_host["hostid"]); if(DBnum_rows($chd_hosts) > 0) { $exp_host = DBfetch($exp_hosts); $db_chd_triggers = get_triggers_by_templateid($triggerid); while($db_chd_trigger = DBfetch($db_chd_triggers)) { $chd_trig_hosts = get_hosts_by_triggerid($db_chd_trigger["triggerid"]); $chd_trig_host = DBfetch($chd_trig_hosts); $newexpression = str_replace( "{".$exp_host["host"].":", "{".$chd_trig_host["host"].":", $expression); // recursion update_trigger( $db_chd_trigger["triggerid"], $newexpression, $description, $priority, NULL, // status $comments, $url, $deps, $triggerid); } } $result=delete_function_by_triggerid($triggerid); if(!$result) { return $result; } $expression = implode_exp($expression,$triggerid); add_alarm($triggerid,2); reset_items_nextcheck($triggerid); $sql="update triggers set"; if(!is_null($expression)) $sql .= " expression=".zbx_dbstr($expression).","; if(!is_null($description)) $sql .= " description=".zbx_dbstr($description).","; if(!is_null($priority)) $sql .= " priority=$priority,"; if(!is_null($status)) $sql .= " status=$status,"; if(!is_null($comments)) $sql .= " comments=".zbx_dbstr($comments).","; if(!is_null($url)) $sql .= " url=".zbx_dbstr($url).","; if(!is_null($templateid)) $sql .= " templateid=$templateid,"; $sql .= " value=2 where triggerid=$triggerid"; $result = DBexecute($sql); delete_dependencies_by_triggerid($triggerid); foreach($deps as $val) { $result=add_trigger_dependency($triggerid, $val); } if($result) { $trig_hosts = get_hosts_by_triggerid($triggerid); $msg = "Trigger '".$trigger["description"]."' updated"; if(DBnum_rows($trig_hosts) == 1) { $trig_host = DBfetch($trig_hosts); $msg .= " from host '".$trig_host["host"]."'"; } info($msg); } return $result; } function check_right_on_trigger($permission,$triggerid) { $result=DBselect("select distinct h.hostid from functions f,items i,hosts h". " where h.hostid=i.hostid and i.itemid=f.itemid and f.triggerid=$triggerid"); while($row=DBfetch($result)) if(check_right("Host",$permission,$row["hostid"])) return 1; return 0; } function delete_dependencies_by_triggerid($triggerid) { $db_deps = DBselect("select triggerid_up, triggerid_down from trigger_depends". " where triggerid_down=".$triggerid); while($db_dep = DBfetch($db_deps)) { delete_trigger_dependency($db_dep["triggerid_down"],$db_dep["triggerid_up"]); } return TRUE; } function delete_trigger_dependency($triggerid_down, $triggerid_up) { $result = DBexecute("select triggerid_up from trigger_depends". " where triggerid_up=$triggerid_up and triggerid_down=$triggerid_down"); while($row=DBfetch($result)) { DBexecute("update triggers set dep_level=dep_level-1". " where triggerid=".$row["triggerid_up"]); } DBexecute("delete from trigger_depends". " where triggerid_up=$triggerid_up and triggerid_down=$triggerid_down"); return TRUE; } function insert_dependency($triggerid_down,$triggerid_up) { $result=DBexecute("insert into trigger_depends (triggerid_down,triggerid_up)". " values ($triggerid_down,$triggerid_up)"); if(!$result) { return $result; } return DBexecute("update triggers set dep_level=dep_level+1 where triggerid=$triggerid_up"); } // If 1 depends on 2, and 2 depends on 3, then add dependency 1->3 function add_additional_dependencies($triggerid_down,$triggerid_up) { $result=DBselect("select triggerid_down from trigger_depends". " where triggerid_up=$triggerid_down"); while($row=DBfetch($result)) { insert_dependency($row["triggerid_down"],$triggerid_up); add_additional_dependencies($row["triggerid_down"],$triggerid_up); } $result=DBselect("select triggerid_up from trigger_depends where triggerid_down=$triggerid_up"); while($row=DBfetch($result)) { insert_dependency($triggerid_down,$row["triggerid_up"]); add_additional_dependencies($triggerid_down,$row["triggerid_up"]); } } function delete_function_by_triggerid($triggerid) { return DBexecute("delete from functions where triggerid=$triggerid"); } function delete_alarms_by_triggerid($triggerid) { return DBexecute("delete from alarms where triggerid=$triggerid"); } function delete_triggers_by_itemid($itemid) { $result=DBselect("select triggerid from functions where itemid=$itemid"); while($row=DBfetch($result)) { if(!delete_trigger($row["triggerid"])) { return FALSE; } } return TRUE; } # Delete Service definitions by triggerid function delete_services_by_triggerid($triggerid) { $result = DBselect("select serviceid from services where triggerid=$triggerid"); while($row = DBfetch($result)) { delete_service($row["serviceid"]); } return TRUE; } function cmp_triggers($triggerid1, $triggerid2) // compare EXPRESSION !!! { $trig1 = get_trigger_by_triggerid($triggerid1); $trig2 = get_trigger_by_triggerid($triggerid2); $trig_fnc1 = get_functions_by_triggerid($triggerid1); $trig_fnc2 = get_functions_by_triggerid($triggerid2); if(DBnum_rows($trig_fnc1) != DBnum_rows($trig_fnc2)) { return 1; } $expr1 = $trig1["expression"]; while($fnc1 = DBfetch($trig_fnc1)) { $trig_fnc2 = get_functions_by_triggerid($triggerid2); while($fnc2 = DBfetch($trig_fnc2)){ if(strcmp($fnc1["function"],$fnc2["function"])) continue; if($fnc1["parameter"] != $fnc2["parameter"]) continue; $item1 = get_item_by_itemid($fnc1["itemid"]); $item2 = get_item_by_itemid($fnc2["itemid"]); if(strcmp($item1["key_"],$item2["key_"])) continue; $expr1 = str_replace( "{".$fnc1["functionid"]."}", "{".$fnc2["functionid"]."}", $expr1); break; } } return strcmp($expr1,$trig2["expression"]); } function delete_template_triggers_by_hostid($hostid) { $triggers = get_triggers_by_hostid($hostid); while($trigger = DBfetch($triggers)) { if($trigger["templateid"]==0) continue; delete_trigger($trigger["triggerid"]); } return TRUE; } function sync_triggers_with_template($hostid) { $host = get_host_by_hostid($hostid); $triggers = get_triggers_by_hostid($host["templateid"]); while($trigger = DBfetch($triggers)) { copy_trigger_to_host($trigger["triggerid"], $hostid); } } function get_triggers_overview($groupid) { $table = new CTableInfo(); if($groupid > 0) { $group_where = ",hosts_groups hg where hg.groupid=$groupid and hg.hostid=h.hostid and"; } else { $group_where = " where"; } $header=array(new CCol(S_TRIGGERS,"center")); $hosts=array(); $result=DBselect("select h.hostid,h.host from hosts h,items i,triggers t, functions f $group_where". " h.status=".HOST_STATUS_MONITORED." and h.hostid=i.hostid and i.itemid=f.itemid and f.triggerid=t.triggerid". " and t.status=".TRIGGER_STATUS_ENABLED. " group by h.host,h.hostid order by h.host"); while($row=DBfetch($result)) { if(!check_right("Host","R",$row["hostid"])) continue; $header=array_merge($header,array(new CImg("vtext.php?text=".$row["host"]))); $hosts=array_merge($hosts,array($row["hostid"])); } $table->SetHeader($header,"vertical_header"); $db_triggers = DBselect("select distinct t.description from hosts h,items i,triggers t,functions f $group_where". " h.status=".HOST_STATUS_MONITORED." and h.hostid=i.hostid and i.itemid=f.itemid and f.triggerid=t.triggerid". " and t.status=".TRIGGER_STATUS_ENABLED. " group by 1"); while($triggers = DBfetch($db_triggers)) { $table_row = array(nbsp($triggers["description"])); foreach($hosts as $hostid) { $style = NULL; $db_host_triggers = DBselect("select distinct t.value,t.lastchange from triggers t,functions f,items i". " where f.triggerid=t.triggerid and i.itemid=f.itemid and t.status=".TRIGGER_STATUS_ENABLED. " and i.hostid=$hostid and t.description=".zbx_dbstr($triggers["description"])); if(DBnum_rows($db_host_triggers)==1) { $host_trigger = DBfetch($db_host_triggers); if($host_trigger["value"] == TRIGGER_VALUE_FALSE) $style = "normal"; elseif($host_trigger["value"] == TRIGGER_VALUE_UNKNOWN) $style = "unknown_trigger"; else $style = "high"; if((time(NULL)-$host_trigger["lastchange"])<300) $style .= "_blink1"; elseif((time(NULL)-$host_trigger["lastchange"])<900) $style .= "_blink2"; } array_push($table_row,new CCol(SPACE,$style)); } $table->AddRow($table_row); } return $table; } ?>