";
$result=DBexecute($sql);
if(!$result)
{
return $result;
}
$triggerid=DBinsert_id($result,"triggers","triggerid");
# echo $triggerid,"
";
add_alarm($triggerid,2);
$expression=implode_exp($expression,$triggerid);
$sql="update triggers set expression='$expression' where triggerid=$triggerid";
# echo $sql,"
";
DBexecute($sql);
reset_items_nextcheck($triggerid);
return $triggerid;
}
# Delete Trigger definition
function delete_trigger($triggerid)
{
$sql="select count(*) as cnt from trigger_depends where triggerid_down=$triggerid or triggerid_up=$triggerid";
$result=DBexecute($sql);
$row=DBfetch($result);
if($row["cnt"]>0)
{
error("Delete dependencies first");
return FALSE;
}
$result=delete_function_by_triggerid($triggerid);
if(!$result)
{
return $result;
}
$result=delete_alarms_by_triggerid($triggerid);
if(!$result)
{
return $result;
}
$result=delete_actions_by_triggerid($triggerid);
if(!$result)
{
return $result;
}
$result=delete_services_by_triggerid($triggerid);
if(!$result)
{
return $result;
}
$sql="update sysmaps_links set triggerid=NULL where triggerid=$triggerid";
DBexecute($sql);
$sql="delete from triggers where triggerid=$triggerid";
return DBexecute($sql);
}
# Update Trigger definition
function update_trigger($triggerid,$expression,$description,$priority,$status,$comments,$url)
{
if(!check_right_on_trigger("U",$triggerid))
{
error("Insufficient permissions");
return 0;
}
$result=delete_function_by_triggerid($triggerid);
if(!$result)
{
return $result;
}
$expression=implode_exp($expression,$triggerid);
add_alarm($triggerid,2);
// $sql="update triggers set expression='$expression',description='$description',priority=$priority,status=$status,comments='$comments',url='$url' where triggerid=$triggerid";
reset_items_nextcheck($triggerid);
$sql="update triggers set expression='$expression',description='$description',priority=$priority,status=$status,comments='$comments',url='$url',value=2 where triggerid=$triggerid";
return DBexecute($sql);
}
function check_right_on_trigger($permission,$triggerid)
{
$sql="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";
$result=DBselect($sql);
$ok=0;
while($row=DBfetch($result))
{
if(check_right("Host",$permission,$row["hostid"]))
{
$ok=1;
}
}
return $ok;
}
function get_trigger_by_triggerid($triggerid)
{
$sql="select triggerid,expression,description,status,priority,lastchange,dep_level,comments,url,value from triggers where triggerid=$triggerid";
$result=DBselect($sql);
if(DBnum_rows($result) == 1)
{
return DBfetch($result);
}
else
{
error("No trigger with triggerid=[$triggerid]");
}
return $trigger;
}
function delete_trigger_dependency($triggerid_down,$triggerid_up)
{
$sql="select triggerid_down,triggerid_up from trigger_depends where triggerid_up=$triggerid_up and triggerid_down=$triggerid_down";
$result=DBexecute($sql);
while($row=DBfetch($result))
{
$down=$row["triggerid_down"];
$up=$row["triggerid_up"];
$sql="update triggers set dep_level=dep_level-1 where triggerid=$up";
DBexecute($sql);
}
$sql="delete from trigger_depends where triggerid_up=$triggerid_up and triggerid_down=$triggerid_down";
DBexecute($sql);
return TRUE;
}
function insert_dependency($triggerid_down,$triggerid_up)
{
$sql="insert into trigger_depends (triggerid_down,triggerid_up) values ($triggerid_down,$triggerid_up)";
$result=DBexecute($sql);
if(!$result)
{
return $result;
}
$sql="update triggers set dep_level=dep_level+1 where triggerid=$triggerid_up";
$result=DBexecute($sql);
return $result;
}
// If 1 depends on 2, and 2 depends on 3, then add dependency 1->3
function add_additional_dependencies($triggerid_down,$triggerid_up)
{
$sql="select triggerid_down from trigger_depends where triggerid_up=$triggerid_down";
$result=DBselect($sql);
while($row=DBfetch($result))
{
$triggerid=$row["triggerid_down"];
insert_dependency($triggerid,$triggerid_up);
add_additional_dependencies($triggerid,$triggerid_up);
}
$sql="select triggerid_up from trigger_depends where triggerid_down=$triggerid_up";
$result=DBselect($sql);
while($row=DBfetch($result))
{
$triggerid=$row["triggerid_up"];
insert_dependency($triggerid_down,$triggerid);
add_additional_dependencies($triggerid_down,$triggerid);
}
}
function delete_function_by_triggerid($triggerid)
{
$sql="delete from functions where triggerid=$triggerid";
return DBexecute($sql);
}
function delete_actions_by_triggerid($triggerid)
{
$sql="delete from actions where triggerid=$triggerid and scope=0";
return DBexecute($sql);
}
function delete_alarms_by_triggerid($triggerid)
{
$sql="delete from alarms where triggerid=$triggerid";
return DBexecute($sql);
}
function delete_triggers_by_itemid($itemid)
{
$sql="select triggerid from functions where itemid=$itemid";
$result=DBselect($sql);
while($row=DBfetch($result))
{
if(!delete_trigger($row["triggerid"]))
{
return FALSE;
}
}
$sql="delete from functions where itemid=$itemid";
return DBexecute($sql);
}
# Delete Service definitions by triggerid
function delete_services_by_triggerid($triggerid)
{
$sql="select serviceid from services where triggerid=$triggerid";
$result=DBselect($sql);
while($row=DBfetch($result))
{
delete_service($row["serviceid"]);
}
return TRUE;
}
# Update triger from
function update_trigger_from_linked_hosts($triggerid)
{
if($triggerid<=0)
{
return;
}
$trigger=get_trigger_by_triggerid($triggerid);
# get hostid by triggerid
$sql="select distinct h.hostid from hosts h,functions f, items i where i.itemid=f.itemid and h.hostid=i.hostid and f.triggerid=$triggerid";
$result=DBselect($sql);
if(DBnum_rows($result)!=1){ return; }
$row0=DBfetch($result);
#get linked hosts
$sql="select hostid,templateid,triggers from hosts_templates where templateid=".$row0["hostid"];
$result=DBselect($sql);
// Loop: linked hosts
while($row=DBfetch($result))
{
if($row["triggers"]&3 == 0) continue;
#get triggers
$sql="select distinct f.triggerid from functions f,items i,triggers t where t.description='".addslashes($trigger["description"])."' and t.triggerid=f.triggerid and i.itemid=f.itemid and i.hostid=".$row["hostid"];
$result2=DBselect($sql);
// Loop: triggers
while($row2=DBfetch($result2))
{
delete_function_by_triggerid($row2["triggerid"]);
$expression_old=$trigger["expression"];
#get functions
$sql="select i.key_,f.parameter,f.function,f.functionid from functions f,items i where i.itemid=f.itemid and f.triggerid=".$trigger["triggerid"];
$result2=DBselect($sql);
// Loop: functions
while($row3=DBfetch($result2))
{
$sql="select itemid from items where key_=\"".$row3["key_"]."\" and hostid=".$row["hostid"];
$result3=DBselect($sql);
if(DBnum_rows($result3)!=1)
{
$sql="delete from triggers where triggerid=".$row2["triggerid"];
DBexecute($sql);
$sql="delete from functions where triggerid=".$row2["triggerid"];
DBexecute($sql);
break;
}
$row4=DBfetch($result3);
$item=get_item_by_itemid($row4["itemid"]);
$sql="insert into functions (itemid,triggerid,function,parameter) values (".$item["itemid"].",".$row2["triggerid"].",'".$row3["function"]."','".$row3["parameter"]."')";
$result5=DBexecute($sql);
$functionid=DBinsert_id($result5,"functions","functionid");
$sql="update triggers set expression='$expression_old' where triggerid=".$row2["triggerid"];
DBexecute($sql);
$expression=str_replace("{".$row3["functionid"]."}","{".$functionid."}",$expression_old);
$expression_old=$expression;
$sql="update triggers set expression='$expression' where triggerid=".$row2["triggerid"];
DBexecute($sql);
}
$host=get_host_by_hostid($row["hostid"]);
info("Updated trigger from linked host ".$host["host"]);
}
}
}
# Add item to hardlinked hosts
function add_trigger_to_linked_hosts($triggerid,$hostid=0)
{
if($triggerid<=0)
{
return;
}
$trigger=get_trigger_by_triggerid($triggerid);
$sql="select distinct h.hostid from hosts h,functions f, items i where i.itemid=f.itemid and h.hostid=i.hostid and f.triggerid=$triggerid";
$result=DBselect($sql);
if(DBnum_rows($result)!=1)
{
return;
}
$row=DBfetch($result);
if($hostid==0)
{
$sql="select hostid,templateid,triggers from hosts_templates where templateid=".$row["hostid"];
}
// Link to one host only
else
{
$sql="select hostid,templateid,triggers from hosts_templates where hostid=$hostid and templateid=".$row["hostid"];
}
$result=DBselect($sql);
// Loop: linked hosts
while($row=DBfetch($result))
{
$expression_old=$trigger["expression"];
if($row["triggers"]&1 == 0) continue;
$sql="insert into triggers (description,priority,status,comments,url,value,expression) values ('".addslashes($trigger["description"])."',".$trigger["priority"].",".$trigger["status"].",'".addslashes($trigger["comments"])."','".addslashes($trigger["url"])."',2,'$expression_old')";
$result4=DBexecute($sql);
$triggerid_new=DBinsert_id($result4,"triggers","triggerid");
$sql="select i.key_,f.parameter,f.function,f.functionid from functions f,items i where i.itemid=f.itemid and f.triggerid=$triggerid";
$result2=DBselect($sql);
// Loop: functions
while($row2=DBfetch($result2))
{
$sql="select itemid from items where key_=\"".$row2["key_"]."\" and hostid=".$row["hostid"];
$result3=DBselect($sql);
if(DBnum_rows($result3)!=1)
{
$sql="delete from triggers where triggerid=$triggerid_new";
DBexecute($sql);
$sql="delete from functions where triggerid=$triggerid_new";
DBexecute($sql);
break;
}
$row3=DBfetch($result3);
$item=get_item_by_itemid($row3["itemid"]);
$sql="insert into functions (itemid,triggerid,function,parameter) values (".$item["itemid"].",$triggerid_new,'".$row2["function"]."','".$row2["parameter"]."')";
$result5=DBexecute($sql);
$functionid=DBinsert_id($result5,"functions","functionid");
$sql="update triggers set expression='$expression_old' where triggerid=$triggerid_new";
DBexecute($sql);
$expression=str_replace("{".$row2["functionid"]."}","{".$functionid."}",$expression_old);
$expression_old=$expression;
$sql="update triggers set expression='$expression' where triggerid=$triggerid_new";
DBexecute($sql);
$host=get_host_by_hostid($row["hostid"]);
info("Added trigger to linked host ".$host["host"]);
}
}
}
function delete_trigger_from_templates($triggerid)
{
if($triggerid<=0)
{
return;
}
$trigger=get_trigger_by_triggerid($triggerid);
$sql="select distinct h.hostid from hosts h,functions f, items i where i.itemid=f.itemid and h.hostid=i.hostid and f.triggerid=$triggerid";
$result=DBselect($sql);
if(DBnum_rows($result)!=1)
{
return;
}
$row=DBfetch($result);
$hostid=$row["hostid"];
$sql="select hostid,templateid,triggers from hosts_templates where templateid=$hostid";
$result=DBselect($sql);
while($row=DBfetch($result))
{
if($row["triggers"]&4 == 0) continue;
$sql="select distinct f.triggerid from functions f,items i,triggers t where t.description='".addslashes($trigger["description"])."' and t.triggerid=f.triggerid and i.itemid=f.itemid and i.hostid=".$row["hostid"];
$result2=DBselect($sql);
while($row2=DBfetch($result2))
{
delete_trigger($row2["triggerid"]);
$host=get_host_by_hostid($row["hostid"]);
info("Deleted trigger from linked host ".$host["host"]);
}
}
}
function get_severity_description($severity)
{
$desc="Unknown";
if($severity == 0) $desc = S_NOT_CLASSIFIED;
else if($severity == 1) $desc = S_INFORMATION;
else if($severity == 2) $desc = S_WARNING;
else if($severity == 3) $desc = S_AVERAGE;
else if($severity == 4) $desc = S_HIGH;
return $desc;
}
?>