Exemple #1
0
         }
     }
     $table->setHeader(array(S_PROXY, S_5_SECONDS, S_10_SECONDS, S_30_SECONDS, S_1_MINUTE, S_5_MINUTES, S_MORE_THAN_10_MINUTES));
     $db_proxies = DBselect('select hostid,host from hosts where status=' . HOST_STATUS_PROXY . ' order by host');
     while (null != ($db_proxy = DBfetch($db_proxies))) {
         $elements = array($db_proxy['host'], new CCol($sec_10[$db_proxy['hostid']], $sec_10[$db_proxy['hostid']] ? "unknown_trigger" : "normal"), new CCol($sec_30[$db_proxy['hostid']], $sec_30[$db_proxy['hostid']] ? "information" : "normal"), new CCol($sec_60[$db_proxy['hostid']], $sec_60[$db_proxy['hostid']] ? "warning" : "normal"), new CCol($sec_300[$db_proxy['hostid']], $sec_300[$db_proxy['hostid']] ? "average" : "normal"), new CCol($sec_600[$db_proxy['hostid']], $sec_600[$db_proxy['hostid']] ? "high" : "normal"), new CCol($sec_rest[$db_proxy['hostid']], $sec_rest[$db_proxy['hostid']] ? "disaster" : "normal"));
         $table->addRow($elements);
     }
     $elements = array(new CCol(S_SERVER, 'bold'), new CCol($sec_10[0], $sec_10[0] ? 'unknown_trigger' : 'normal'), new CCol($sec_30[0], $sec_30[0] ? 'information' : 'normal'), new CCol($sec_60[0], $sec_60[0] ? 'warning' : 'normal'), new CCol($sec_300[0], $sec_300[0] ? 'average' : 'normal'), new CCol($sec_600[0], $sec_600[0] ? 'high' : 'normal'), new CCol($sec_rest[0], $sec_rest[0] ? 'disaster' : 'normal'));
     $table->addRow($elements);
 } else {
     if ($_REQUEST["config"] == 2) {
         $arr = array();
         $table->SetHeader(array(S_NEXT_CHECK, S_DELAYED_BY, is_show_all_nodes() ? S_NODE : null, S_HOST, S_DESCRIPTION));
         while ($row = DBfetch($result)) {
             $res = calculate_item_nextcheck($row['itemid'], $row['type'], $row['delay'], $row['delay_flex'], $row['lastclock']);
             if (0 != $row['proxy_hostid']) {
                 $res['nextcheck'] = $row['lastclock'] + $res['delay'];
             }
             $diff = $now - $res['nextcheck'];
             if ($diff <= 5) {
                 continue;
             }
             array_push($arr, array($res['nextcheck'], $row['hostid'], $row['host'], item_description($row)));
         }
         $rows = 0;
         sort($arr);
         foreach ($arr as $r) {
             $rows++;
             if ($rows > 500) {
                 $truncated = 1;
function update_item($itemid, $item)
{
    /*
    		$item = array('description','key','hostid','delay','history','status','type',
    		'snmp_community','snmp_oid','value_type','trapper_hosts','snmp_port','units','multiplier','delta',
    		'snmpv3_securityname','snmpv3_securitylevel','snmpv3_authpassphrase','snmpv3_privpassphrase',
    		'formula','trends','logtimefmt','valuemapid','delay_flex','params','ipmi_sensor','applications','templateid');
    */
    $upd_app = isset($item['applications']) && !is_null($item['applications']);
    $item_in_params = $item;
    $item_data = get_item_by_itemid_limited($itemid);
    $item_data['applications'] = get_applications_by_itemid($itemid);
    if (!check_db_fields($item_data, $item)) {
        error(S_INCORRECT_ARGUMENTS_PASSED_TO_FUNCTION . SPACE . '[update_item]');
        return false;
    }
    $host = get_host_by_hostid($item['hostid']);
    if (($i = array_search(0, $item['applications'])) !== FALSE) {
        unset($item['applications'][$i]);
    }
    if (!preg_match('/^' . ZBX_PREG_ITEM_KEY_FORMAT . '$/u', $item['key_'])) {
        error(S_INCORRECT_KEY_FORMAT . SPACE . "'key_name[param1,param2,...]'");
        return false;
    }
    if ($item['type'] == ITEM_TYPE_DB_MONITOR && $item['key_'] == 'db.odbc.select[<unique short description>]' || $item['type'] == ITEM_TYPE_SSH && $item['key_'] == 'ssh.run[<unique short description>,<ip>,<port>,<encoding>]' || $item['type'] == ITEM_TYPE_TELNET && $item['key_'] == 'telnet.run[<unique short description>,<ip>,<port>,<encoding>]') {
        error(S_ITEMS_CHECK_KEY_DEFAULT_EXAMPLE_PASSED);
        return false;
    }
    $res = calculate_item_nextcheck(0, $item['type'], $item['delay'], $item['delay_flex'], time());
    if ($res['delay'] == SEC_PER_YEAR && $item['type'] != ITEM_TYPE_ZABBIX_ACTIVE && $item['type'] != ITEM_TYPE_TRAPPER) {
        error(S_ITEM_WILL_NOT_BE_REFRESHED_PLEASE_ENTER_A_CORRECT_UPDATE_INTERVAL);
        return FALSE;
    }
    if (($item['snmp_port'] < 1 || $item['snmp_port'] > 65535) && in_array($item['type'], array(ITEM_TYPE_SNMPV1, ITEM_TYPE_SNMPV2C, ITEM_TYPE_SNMPV3))) {
        error(S_INVALID_SNMP_PORT);
        return FALSE;
    }
    if ($item['value_type'] == ITEM_VALUE_TYPE_STR) {
        $item['delta'] = 0;
    }
    if (preg_match('/^(log|logrt|eventlog)\\[/', $item['key_']) && $item['value_type'] != ITEM_VALUE_TYPE_LOG) {
        error(S_TYPE_INFORMATION_BUST_LOG_FOR_LOG_KEY);
        return FALSE;
    }
    if ($item['value_type'] != ITEM_VALUE_TYPE_UINT64) {
        $item['data_type'] = 0;
    }
    $sql = 'SELECT itemid, hostid, templateid ' . ' FROM items ' . ' WHERE hostid=' . $item['hostid'] . ' AND itemid<>' . $itemid . ' AND key_=' . zbx_dbstr($item['key_']);
    $db_item = DBfetch(DBselect($sql));
    if ($db_item && ($db_item['templateid'] != 0 || $item['templateid'] == 0)) {
        error(S_AN_ITEM_WITH_THE_KEY . SPACE . '[' . $item['key_'] . ']' . SPACE . S_ALREADY_EXISTS_FOR_HOST_SMALL . SPACE . '[' . $host['host'] . '].' . SPACE . S_THE_KEY_MUST_BE_UNIQUE);
        return FALSE;
    }
    // first update child items
    $db_tmp_items = DBselect('SELECT itemid, hostid FROM items WHERE templateid=' . $itemid);
    while ($db_tmp_item = DBfetch($db_tmp_items)) {
        $child_item_params = $item_in_params;
        $child_item_params['hostid'] = $db_tmp_item['hostid'];
        $child_item_params['templateid'] = $itemid;
        if ($upd_app) {
            $child_item_params['applications'] = get_same_applications_for_host($item['applications'], $db_tmp_item['hostid']);
        } else {
            $child_item_params['applications'] = null;
        }
        if (!check_db_fields($db_tmp_item, $child_item_params)) {
            error(S_INCORRECT_ARGUMENTS_PASSED_TO_FUNCTION . SPACE . '[update_item]');
            return false;
        }
        $result = update_item($db_tmp_item['itemid'], $child_item_params);
        // recursion!!!
        if (!$result) {
            return $result;
        }
    }
    if ($db_item && $item['templateid'] != 0) {
        $result = delete_item($db_item['itemid']);
        if (!$result) {
            error(S_CANNOT_UPDATE_ITEM . SPACE . "'" . $host["host"] . ':' . $item['key_'] . "'");
            return FALSE;
        }
    }
    //validating item key
    $checkResult = check_item_key($item['key_']);
    if (!$checkResult['valid']) {
        error(S_ERROR_IN_ITEM_KEY . SPACE . $checkResult['description']);
        return false;
    }
    $item_old = get_item_by_itemid($itemid);
    DBexecute('UPDATE items SET lastlogsize=0, mtime=0 WHERE itemid=' . $itemid . ' AND key_<>' . zbx_dbstr($item['key_']));
    if ($upd_app) {
        $result = DBexecute('DELETE FROM items_applications WHERE itemid=' . $itemid);
        foreach ($item['applications'] as $appid) {
            $itemappid = get_dbid('items_applications', 'itemappid');
            DBexecute('INSERT INTO items_applications (itemappid,itemid,applicationid) VALUES (' . $itemappid . ',' . $itemid . ',' . $appid . ')');
        }
    }
    if ($item['status'] == ITEM_STATUS_ACTIVE) {
        DBexecute("UPDATE items SET error='' WHERE itemid=" . $itemid . ' and status<>' . $item['status']);
    }
    $result = DBexecute('UPDATE items ' . ' SET description=' . zbx_dbstr($item['description']) . ',' . 'key_=' . zbx_dbstr($item['key_']) . ',' . 'hostid=' . $item['hostid'] . ',' . 'delay=' . $item['delay'] . ',' . 'history=' . $item['history'] . ',' . 'type=' . $item['type'] . ',' . 'snmp_community=' . zbx_dbstr($item['snmp_community']) . ',' . 'snmp_oid=' . zbx_dbstr($item['snmp_oid']) . ',' . 'value_type=' . $item['value_type'] . ',' . 'data_type=' . $item['data_type'] . ',' . 'trapper_hosts=' . zbx_dbstr($item['trapper_hosts']) . ',' . 'snmp_port=' . $item['snmp_port'] . ',' . 'units=' . zbx_dbstr($item['units']) . ',' . 'multiplier=' . $item['multiplier'] . ',' . 'delta=' . $item['delta'] . ',' . 'snmpv3_securityname=' . zbx_dbstr($item['snmpv3_securityname']) . ',' . 'snmpv3_securitylevel=' . $item['snmpv3_securitylevel'] . ',' . 'snmpv3_authpassphrase=' . ($item['snmpv3_securitylevel'] == ITEM_SNMPV3_SECURITYLEVEL_AUTHPRIV || $item['snmpv3_securitylevel'] == ITEM_SNMPV3_SECURITYLEVEL_AUTHNOPRIV ? zbx_dbstr($item['snmpv3_authpassphrase']) : "''") . ',' . 'snmpv3_privpassphrase=' . ($item['snmpv3_securitylevel'] == ITEM_SNMPV3_SECURITYLEVEL_AUTHPRIV ? zbx_dbstr($item['snmpv3_privpassphrase']) : "''") . ',' . 'formula=' . zbx_dbstr($item['formula']) . ',' . 'trends=' . $item['trends'] . ',' . 'logtimefmt=' . zbx_dbstr($item['logtimefmt']) . ',' . 'valuemapid=' . $item['valuemapid'] . ',' . 'delay_flex=' . zbx_dbstr($item['delay_flex']) . ',' . 'params=' . zbx_dbstr($item['params']) . ',' . 'ipmi_sensor=' . zbx_dbstr($item['ipmi_sensor']) . ',' . 'templateid=' . $item['templateid'] . ',' . 'authtype=' . $item['authtype'] . ',' . 'username='******'username']) . ',' . 'password='******'password']) . ',' . 'publickey=' . zbx_dbstr($item['publickey']) . ',' . 'privatekey=' . zbx_dbstr($item['privatekey']) . ' WHERE itemid=' . $itemid);
    if ($result) {
        $item_new = get_item_by_itemid($itemid);
        add_audit_ext(AUDIT_ACTION_UPDATE, AUDIT_RESOURCE_ITEM, $itemid, $host['host'] . ':' . $item_old['description'], 'items', $item_old, $item_new);
    }
    update_item_status($itemid, $item['status']);
    if ($result) {
        info(S_ITEM . SPACE . "'" . $host['host'] . ':' . $item['key_'] . "'" . SPACE . S_UPDATED_SMALL);
    }
    return $result;
}