From 6615cce7aaf92edabdcc33d9db91ff01c4fdbe0a Mon Sep 17 00:00:00 2001 From: artem Date: Fri, 1 Feb 2008 13:58:10 +0000 Subject: - [HAN-2] merged rev.5301:5304 of 1.4/ (Artem) [improved speed on coping triggers to host] - [DEV-103] fixes to users group jsmenu (Artem) git-svn-id: svn://svn.zabbix.com/trunk@5305 97f52cf1-0a1b-0410-bd0e-c28be96e8082 --- frontends/php/include/triggers.inc.php | 102 +++++++++++++++++++++------------ 1 file changed, 64 insertions(+), 38 deletions(-) (limited to 'frontends/php/include/triggers.inc.php') diff --git a/frontends/php/include/triggers.inc.php b/frontends/php/include/triggers.inc.php index d0b8dcf2..e0587c19 100644 --- a/frontends/php/include/triggers.inc.php +++ b/frontends/php/include/triggers.inc.php @@ -353,34 +353,18 @@ * retrive selection of triggers by hostid * * Author: - * Eugene Grigorjev (eugene.grigorjev@zabbix.com) + * Aly * * Comments: * */ - 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(DBfetch($db_hosts)) - { - 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_hostid($hostid){ + $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'); + return $db_triggers; } function get_triggers_by_templateid($triggerid) @@ -790,17 +774,28 @@ get_trigger_dependences_by_triggerid($triggerid), $hostid); - $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; - + $sql='SELECT t2.triggerid, t2.expression '. + ' FROM triggers t2, functions f1, functions f2, items i1, items i2 '. + ' WHERE f1.triggerid='.$triggerid. + ' AND i1.itemid=f1.itemid '. + ' AND f2.function=f1.function '. + ' AND f2.parameter=f1.parameter '. + ' AND i2.itemid=f2.itemid '. + ' AND i2.key_=i1.key_ '. + ' AND i2.hostid='.$hostid. + ' AND t2.triggerid=f2.triggerid '. + ' AND t2.templateid=0 '; + + $host_triggers = DBSelect($sql); + while($host_trigger = DBfetch($host_triggers)){ + if(cmp_triggers_exressions($triggerid, $host_trigger["triggerid"])) continue; // link not linked trigger with same expression + return update_trigger( $host_trigger["triggerid"], NULL, // expression $trigger["description"], + $trigger["type"], $trigger["priority"], NULL, // status $trigger["comments"], @@ -809,14 +804,13 @@ $copy_mode ? 0 : $triggerid); } - $newtriggerid=get_dbid("triggers","triggerid"); + $newtriggerid=get_dbid('triggers','triggerid'); - $result = DBexecute("insert into triggers". - " (triggerid,description,type,priority,status,comments,url,value,expression,templateid)". - " values ($newtriggerid,".zbx_dbstr($trigger['description']).','.$trigger['type'].','.$trigger['priority'].','. - $trigger['status'].','.zbx_dbstr($trigger['comments']).','. - zbx_dbstr($trigger["url"]).",2,'{???:???}',". - ($copy_mode ? 0 : $triggerid).")"); + $result = DBexecute('INSERT INTO triggers'. + ' (triggerid,description,type,priority,status,comments,url,value,expression,templateid)'. + ' VALUES ('.$newtriggerid.','.zbx_dbstr($trigger['description']).','.$trigger['type'].','.$trigger['priority'].','. + $trigger["status"].','.zbx_dbstr($trigger["comments"]).','. + zbx_dbstr($trigger["url"]).",2,'{???:???}',".($copy_mode ? 0 : $triggerid).')'); if(!$result) return $result; @@ -1555,12 +1549,44 @@ } return TRUE; } + + /* + * Function: cmp_triggers_exressions + * + * Description: + * Warning: function compares ONLY expressions,there is no check on functions and items + * + * Author: + * Aly + * + * Comments: + * + */ + function cmp_triggers_exressions($triggerid1, $triggerid2) // compare EXPRESSION !!! + { + $trig1 = get_trigger_by_triggerid($triggerid1); + $trig2 = get_trigger_by_triggerid($triggerid2); + + $trig_fnc1 = get_functions_by_triggerid($triggerid1); + $expr1 = $trig1["expression"]; + while($fnc1 = DBfetch($trig_fnc1)){ + $trig_fnc2 = get_functions_by_triggerid($triggerid2); + while($fnc2 = DBfetch($trig_fnc2)){ + $expr1 = str_replace( + "{".$fnc1["functionid"]."}", + "{".$fnc2["functionid"]."}", + $expr1); + break; + } + } + return strcmp($expr1,$trig2["expression"]); + } /* * Function: cmp_triggers * * Description: - * compate triggers by expression + * compare triggers by expression * * Author: * Eugene Grigorjev (eugene.grigorjev@zabbix.com) -- cgit