202
202
'status' => ITEM_STATUS_ACTIVE,
203
203
'type' => ITEM_TYPE_ZABBIX,
204
'snmp_community'=> '',
204
'snmp_community' => '',
205
205
'snmp_oid' => '',
206
'value_type' => ITEM_VALUE_TYPE_STR,
207
'trapper_hosts' => 'localhost',
206
'value_type' => ITEM_VALUE_TYPE_STR,
207
'trapper_hosts' => 'localhost',
208
208
'snmp_port' => 161,
212
212
'snmpv3_securityname' => '',
213
213
'snmpv3_securitylevel' => 0,
214
214
'snmpv3_authpassphrase' => '',
215
215
'snmpv3_privpassphrase' => '',
218
218
'logtimefmt' => '',
219
219
'valuemapid' => 0,
220
220
'delay_flex' => '',
222
222
'ipmi_sensor' => '',
223
223
'applications' => array(),
224
224
'templateid' => 0);
351
351
$item['hostid'] = $db_host['hostid'];
352
352
$item['applications'] = get_same_applications_for_host($item['applications'], $db_host['hostid']);
353
353
$item['templateid'] = $itemid;
355
355
$result = add_item($item);
356
356
if(!$result) break;
362
362
if($item['templateid'] == 0){
363
363
delete_item($itemid);
369
369
function update_trigger_value_to_unknown_by_itemid($itemids){
370
370
zbx_value2array($itemids);
373
373
$result = DBselect('SELECT DISTINCT t.triggerid '.
374
374
' FROM triggers t,functions f '.
404
404
if(!empty($itemids)){
405
405
update_trigger_value_to_unknown_by_itemid($itemids);
407
407
if($status==ITEM_STATUS_ACTIVE)
408
408
$sql='UPDATE items SET status='.$status.",error='',nextcheck=0 ".
409
409
' WHERE '.DBcondition('itemid',$itemids);
411
411
$sql='UPDATE items SET status='.$status.
412
412
' WHERE '.DBcondition('itemid',$itemids);
414
414
$result = DBexecute($sql);
485
485
$db_tmp_items = DBselect('SELECT itemid, hostid FROM items WHERE templateid='.$itemid);
486
486
while($db_tmp_item = DBfetch($db_tmp_items)){
487
487
$child_item_params = $item_in_params;
489
489
$child_item_params['hostid'] = $db_tmp_item['hostid'];
490
490
$child_item_params['templateid'] = $itemid;
491
491
$child_item_params['applications'] = get_same_applications_for_host($item['applications'], $db_tmp_item['hostid']);
576
function smart_update_item($itemid, $item=array()){
576
function smart_update_item($itemid, $item=array()){
577
577
$item_data = get_item_by_itemid_limited($itemid);
579
579
$restore_rules= array(
580
'description' => array(),
580
'description' => array(),
581
581
'key_' => array(),
582
582
'hostid' => array(),
583
583
'delay' => array('template' => 1),
584
584
'history' => array('template' => 1 , 'httptest' => 1),
585
585
'status' => array('template' => 1 , 'httptest' => 1),
586
586
'type' => array(),
587
'snmp_community'=> array(),
587
'snmp_community' => array(),
588
588
'snmp_oid' => array(),
589
'value_type' => array(),
590
'trapper_hosts' => array(),
589
'value_type' => array(),
590
'trapper_hosts' => array(),
591
591
'snmp_port' => array(),
592
592
'units' => array(),
593
'multiplier' => array(),
593
'multiplier' => array(),
594
594
'delta' => array('template' => 1 , 'httptest' => 1),
595
595
'snmpv3_securityname' => array(),
596
596
'snmpv3_securitylevel' => array(),
598
598
'snmpv3_privpassphrase' => array(),
599
599
'formula' => array(),
600
600
'trends' => array('template' => 1 , 'httptest' => 1),
601
'logtimefmt' => array(),
602
'valuemapid' => array('httptest' => 1),
601
'logtimefmt' => array(),
602
'valuemapid' => array('httptest' => 1),
603
603
'params' => array(),
604
'delay_flex' => array(),
605
'ipmi_sensor' => array());
604
'delay_flex' => array('template' => 1),
605
'ipmi_sensor' => array());
607
607
foreach($restore_rules as $var_name => $info){
608
608
if(($item_data['type'] == ITEM_TYPE_HTTPTEST) && !isset($info['httptest'])){
609
609
$item[$var_name] = $item_data[$var_name];
612
612
if(!isset($info['template']) && (0 != $item_data['templateid'])){
613
613
$item[$var_name] = $item_data[$var_name];
616
616
if(!array_key_exists($var_name,$item)){
617
617
$item[$var_name] = $item_data[$var_name];
814
* $error= true : rise Error if item doesn't exists(error generated), false: special processing (NO error generated)
814
* $error= true : rise Error if item doesn't exist (error generated), false: special processing (NO error generated)
816
816
function get_same_item_for_host($item,$dest_hostid, $error=true){
818
818
if(!is_array($item)){
821
821
else if(isset($item['itemid'])){
822
822
$itemid = $item['itemid'];
825
825
if(isset($itemid)){
826
826
$sql = 'SELECT src.itemid '.
827
827
' FROM items src, items dest '.
828
828
' WHERE dest.itemid='.$itemid.
829
829
' AND src.key_=dest.key_ '.
830
830
' AND src.hostid='.$dest_hostid;
832
832
$db_item = DBfetch(DBselect($sql));
833
833
if (!$db_item && $error){
834
834
$item = get_item_by_itemid($db_item['itemid']);
835
835
$host = get_host_by_hostid($dest_hostid);
836
error('Missed key "'.$item['key_'].'" for host "'.$host['host'].'"');
836
error('Missing key "'.$item['key_'].'" for host "'.$host['host'].'"');
839
839
if(is_array($item)){
896
896
if(!$result) return $result;
898
898
$temp_arr = array(SCREEN_RESOURCE_SIMPLE_GRAPH,SCREEN_RESOURCE_PLAIN_TEXT);
900
900
DBexecute('DELETE FROM screens_items WHERE '.DBcondition('resourceid',$itemids).' AND '.DBcondition('resourcetype', $temp_arr));
901
901
DBexecute('DELETE FROM items_applications WHERE '.DBcondition('itemid',$itemids));
902
902
DBexecute("DELETE FROM profiles WHERE idx='web.favorite.graphids' AND source='itemid' AND ".DBcondition('value_id',$itemids));
904
904
$result = DBexecute('DELETE FROM items WHERE '.DBcondition('itemid',$itemids));
906
906
foreach($items as $itemid => $item){
1215
1215
$sql = 'INSERT INTO housekeeper (housekeeperid,tablename,field,value)'.
1216
1216
" VALUES ($housekeeperid,'history_text','itemid',$itemid)";
1217
1217
DBexecute($sql);
1219
1219
$housekeeperid = get_dbid('housekeeper','housekeeperid');
1220
1220
$sql = 'INSERT INTO housekeeper (housekeeperid,tablename,field,value)'.
1221
1221
" VALUES ($housekeeperid,'history_log','itemid',$itemid)";
1222
1222
DBexecute($sql);
1224
1224
$housekeeperid = get_dbid('housekeeper','housekeeperid');
1225
1225
$sql = 'INSERT INTO housekeeper (housekeeperid,tablename,field,value)'.
1226
1226
" VALUES ($housekeeperid,'history_uint','itemid',$itemid)";
1227
1227
DBexecute($sql);
1229
1229
$housekeeperid = get_dbid('housekeeper','housekeeperid');
1230
1230
$sql = 'INSERT INTO housekeeper (housekeeperid,tablename,field,value)'.
1231
1231
" VALUES ($housekeeperid,'history_str','itemid',$itemid)";
1232
1232
DBexecute($sql);
1234
1234
$housekeeperid = get_dbid('housekeeper','housekeeperid');
1235
1235
$sql = 'INSERT INTO housekeeper (housekeeperid,tablename,field,value)'.
1236
1236
" VALUES ($housekeeperid,'history','itemid',$itemid)";
1269
1269
function format_lastvalue($db_item){
1270
if($db_item["value_type"] == ITEM_VALUE_TYPE_LOG){
1271
$row=DBfetch(DBselect('SELECT value FROM history_log WHERE itemid='.$db_item['itemid'].' ORDER BY clock DESC', 1));
1273
$lastvalue=/*nbsp(htmlspecialchars(*/$row['value']/*))*/;
1270
if(isset($db_item["lastvalue"])){
1271
if($db_item["value_type"] == ITEM_VALUE_TYPE_FLOAT){
1272
$lastvalue=convert_units($db_item["lastvalue"],$db_item["units"]);
1274
else if($db_item["value_type"] == ITEM_VALUE_TYPE_UINT64){
1275
$lastvalue=convert_units($db_item["lastvalue"],$db_item["units"]);
1277
else if($db_item["value_type"] == ITEM_VALUE_TYPE_STR ||
1278
$db_item["value_type"] == ITEM_VALUE_TYPE_TEXT ||
1279
$db_item["value_type"] == ITEM_VALUE_TYPE_LOG){
1280
$lastvalue=$db_item["lastvalue"];
1274
1281
if(strlen($lastvalue) > 20)
1275
1282
$lastvalue = substr($lastvalue,0,20)." ...";
1276
1283
$lastvalue = nbsp(htmlspecialchars($lastvalue));
1283
else if(isset($db_item["lastvalue"])){
1284
if($db_item["value_type"] == ITEM_VALUE_TYPE_FLOAT){
1285
$lastvalue=convert_units($db_item["lastvalue"],$db_item["units"]);
1287
else if($db_item["value_type"] == ITEM_VALUE_TYPE_UINT64){
1288
$lastvalue=convert_units($db_item["lastvalue"],$db_item["units"]);
1290
else if($db_item["value_type"] == ITEM_VALUE_TYPE_TEXT){
1293
else if($db_item["value_type"] == ITEM_VALUE_TYPE_STR){
1294
$lastvalue=nbsp(htmlspecialchars(substr($db_item["lastvalue"],0,20)));
1295
if(strlen($db_item["lastvalue"]) > 20)
1296
$lastvalue .= " ...";
1299
1286
$lastvalue="Unknown value type";
1301
1288
if($db_item["valuemapid"] > 0);
1386
1373
function check_time_period($period, $now)
1388
1375
$tm = localtime($now, TRUE);
1390
$day = $tm['tm_wday'];
1393
$min = 60 * $tm['tm_hour'] + $tm['tm_min'];
1376
$day = (0 == $tm['tm_wday']) ? 7 : $tm['tm_wday'];
1377
$sec = 3600 * $tm['tm_hour'] + 60 * $tm['tm_min'] + $tm['tm_sec'];
1395
1379
$arr_of_period = explode(';', $period);
1397
1381
foreach($arr_of_period as $one_period)
1399
1383
list($d1, $d2, $h1, $m1, $h2, $m2) = sscanf($one_period, "%d-%d,%d:%d-%d:%d");
1400
if ($day >= $d1 && $day <= $d2 && $min >= 60 * $h1 + $m1 && $min <= 60 * $h2 + $m2)
1384
if ($day >= $d1 && $day <= $d2 && $sec >= 3600 * $h1 + 60 * $m1 && $sec <= 3600 * $h2 + 60 * $m2)
1395
* Function: get_flexible_interval
1397
* Purpose: check for flexible delay value
1399
* Parameters: delay_flex - [IN] separated flexible intervals
1400
* [dd/d1-d2,hh:mm-hh:mm;]
1401
* delay - [IN] default delay
1403
* Return value: flexible delay or $delay if $delay_flex is not defined
1406
* Author: Alexander Vladishev
1409
function get_flexible_interval($delay_flex, $delay, $now)
1411
if (is_null($delay_flex) || $delay_flex == '')
1414
$arr_of_delay = explode(';', $delay_flex);
1416
foreach($arr_of_delay as $one_delay_flex)
1418
$arr = explode('/', $one_delay_flex);
1419
if (check_time_period($arr[1], $now))
1430
* Function: get_next_flexible_interval
1432
* Purpose: return time of next flexible interval
1434
* Parameters: delay_flex - [IN] ';' separated flexible intervals
1435
* [dd/d1-d2,hh:mm-hh:mm]
1436
* now = [IN] current time
1438
* Return value: start of next interval
1440
* Author: Alexei Vladishev, Alexander Vladishev
1443
function get_next_flexible_interval($delay_flex, $now)
1445
if (is_null($delay_flex) || $delay_flex == '')
1448
$tm = localtime($now, TRUE);
1449
$day = (0 == $tm['tm_wday']) ? 7 : $tm['tm_wday'];
1450
$sec = 3600 * $tm['tm_hour'] + 60 * $tm['tm_min'] + $tm['tm_sec'];
1453
$arr_of_delay_flex = explode(';', $delay_flex);
1455
foreach($arr_of_delay_flex as $one_delay_flex)
1457
if (7 == sscanf($one_delay_flex, "%d/%d-%d,%d:%d-%d:%d", $delay, $d1, $d2, $h1, $m1, $h2, $m2))
1459
$sec1 = 3600 * $h1 + 60 * $m1;
1460
$sec2 = 3600 * $h2 + 60 * $m2;
1462
if ($day >= $d1 && $day <= $d2 && $sec >= $sec1 && $sec <= $sec2) /* working period */
1464
if ($next == 0 || $next > $now - $sec + $sec2)
1465
$next = $now - $sec + $sec2;
1469
if ($day >= $d1 && $day <= $d2 && $sec < $sec1) /* next period, same day */
1471
if ($next == 0 || $next > $now - $sec + $sec1)
1472
$next = $now - $sec + $sec1;
1474
else if ($day + 1 >= $d1 && $day + 1 <= $d2 && $sec < $sec1) /* next period, next day */
1476
if ($next == 0 || $next > $now - $sec + $sec1)
1477
$next = $now - $sec + 86400 + $sec1;
1482
return $next ? $next : -1;
1410
1486
* Function: calculate_item_nextcheck
1413
* calculate nextcheck timespamp for item
1489
* calculate nextcheck timestamp for item
1416
1492
* itemid - item ID
1417
1493
* item_type - item type
1418
1494
* delay - item's refresh rate in sec
1437
1513
/* Special processing of active items to see better view in queue */
1438
1514
if ($item_type == ITEM_TYPE_ZABBIX_ACTIVE)
1440
return $now + $delay;
1516
return array('nextcheck' => $now + $delay, 'delay' => $delay);
1443
if (!is_null($delay_flex) && $delay_flex != '')
1519
$flex_delay = get_flexible_interval($delay_flex, $delay, $now);
1521
if (-1 != ($next = get_next_flexible_interval($delay_flex, $now)) && (($now + $flex_delay) > $next))
1445
$arr_of_delay = explode(';', $delay_flex);
1523
$flex_delay2 = get_flexible_interval($delay_flex, $delay, $next + 1);
1447
foreach($arr_of_delay as $one_delay_flex)
1449
$arr = explode('/', $one_delay_flex);
1450
if (check_time_period($arr[1], $now))
1526
$flex_delay = min($flex_delay, $flex_delay2);
1529
if (0 == $flex_delay)
1460
1531
/* info('Invalid item update interval ['.$delay.'], using default [30]');*/
1535
$delay = $flex_delay;
1464
1536
$nextcheck = $delay * floor($now / $delay) + ($itemid % $delay);
1466
1538
while ($nextcheck <= $now)