Example #1
0
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;
}