function copy_trigger_to_host($triggerid, $hostid, $copy_mode = false) { $trigger = get_trigger_by_triggerid($triggerid); $deps = replace_template_dependencies(get_trigger_dependencies_by_triggerid($triggerid), $hostid); $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, $trigger["description"], $trigger["type"], $trigger["priority"], NULL, $trigger["comments"], $trigger["url"], $deps, $copy_mode ? 0 : $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,'0'," . ($copy_mode ? 0 : $triggerid) . ')'); if (!$result) { return $result; } $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']); $host_item = DBfetch($host_items); if (!$host_item) { error("Missing key '" . $item["key_"] . "' for host '" . $host["host"] . "'"); return FALSE; } $newfunctionid = get_dbid("functions", "functionid"); $result = DBexecute('INSERT INTO functions (functionid,itemid,triggerid,function,parameter) ' . " values ({$newfunctionid}," . $host_item["itemid"] . ",{$newtriggerid}," . zbx_dbstr($function["function"]) . "," . zbx_dbstr($function["parameter"]) . ")"); $newexpression = str_replace("{" . $function["functionid"] . "}", "{" . $newfunctionid . "}", $newexpression); } DBexecute('UPDATE triggers SET expression=' . zbx_dbstr($newexpression) . ' WHERE triggerid=' . $newtriggerid); // copy dependencies delete_dependencies_by_triggerid($newtriggerid); foreach ($deps as $dep_id) { add_trigger_dependency($newtriggerid, $dep_id); } info("Added trigger '" . $trigger["description"] . "' to host '" . $host["host"] . "'"); add_audit_ext(AUDIT_ACTION_ADD, AUDIT_RESOURCE_TRIGGER, $newtriggerid, $trigger["description"], NULL, NULL, NULL); // Copy triggers to the child hosts $child_hosts = get_hosts_by_templateid($hostid); while ($child_host = DBfetch($child_hosts)) { // recursion $result = copy_trigger_to_host($newtriggerid, $child_host["hostid"]); if (!$result) { return result; } } return $newtriggerid; }
function copy_trigger_to_host($triggerid, $hostid, $copy_mode = false) { $trigger = get_trigger_by_triggerid($triggerid); // $deps = replace_template_dependencies( // get_trigger_dependencies_by_triggerid($triggerid), // $hostid); $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.description=' . zbx_dbstr($trigger['description']) . ' AND t2.templateid=0 '; $host_triggers = DBSelect($sql); while ($host_trigger = DBfetch($host_triggers)) { if (cmp_triggers_exressions($trigger['expression'], $host_trigger['expression'])) { continue; } // link not linked trigger with same expression return update_trigger($host_trigger['triggerid'], NULL, $trigger['description'], $trigger['type'], $trigger['priority'], NULL, $trigger['comments'], $trigger['url'], array(), $copy_mode ? 0 : $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,'0'," . ($copy_mode ? 0 : $triggerid) . ')'); if (!$result) { return $result; } $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']); $host_item = DBfetch($host_items); if (!$host_item) { error(S_MISSING_KEY . SPACE . '"' . $item['key_'] . '"' . SPACE . S_FOR_HOST_SMALL . SPACE . '"' . $host['host'] . '"'); return FALSE; } $newfunctionid = get_dbid('functions', 'functionid'); $result = DBexecute('INSERT INTO functions (functionid,itemid,triggerid,function,parameter) ' . " values ({$newfunctionid}," . $host_item['itemid'] . ',' . $newtriggerid . ',' . zbx_dbstr($function['function']) . ',' . zbx_dbstr($function['parameter']) . ')'); $newexpression = str_replace('{' . $function['functionid'] . '}', '{' . $newfunctionid . '}', $newexpression); } DBexecute('UPDATE triggers SET expression=' . zbx_dbstr($newexpression) . ' WHERE triggerid=' . $newtriggerid); // copy dependencies // delete_dependencies_by_triggerid($newtriggerid); $deps = replace_template_dependencies(get_trigger_dependencies_by_triggerid($triggerid), $hostid); foreach ($deps as $dep_id) { add_trigger_dependency($newtriggerid, $dep_id); } info(S_ADDED_TRIGGER . SPACE . '"' . $trigger['description'] . '"' . SPACE . S_TO_HOST_SMALL . SPACE . '"' . $host['host'] . '"'); add_audit_ext(AUDIT_ACTION_ADD, AUDIT_RESOURCE_TRIGGER, $newtriggerid, $host['host'] . ':' . $trigger['description'], NULL, NULL, NULL); // Copy triggers to the child hosts $child_hosts = get_hosts_by_templateid($hostid); while ($child_host = DBfetch($child_hosts)) { // recursion $result = copy_trigger_to_host($newtriggerid, $child_host['hostid']); if (!$result) { return result; } } return $newtriggerid; }