'Download speed for step \'$2\' of scenario \'$1\'', 'key_' => 'web.test.in['.$testname.','.$name.',bps]', 'type' => ITEM_VALUE_TYPE_UINT64, 'units' => 'bps'), array( 'description' => 'Response time for step \'$2\' of scenario \'$1\'', 'key_' => 'web.test.time['.$testname.','.$name.',resp]', 'type' => ITEM_VALUE_TYPE_UINT64, 'units' => 's'), array( 'description' => 'Response code for step \'$2\' of scenario \'$1\'', 'key_' => 'web.test.rspcode['.$testname.','.$name.']', 'type' => ITEM_VALUE_TYPE_UINT64, 'units' => ''), ); foreach($monitored_items as $item) { if(!($item_data = DBfetch(DBselect('select itemid from items '. ' where hostid='.$hostid.' and key_='.zbx_dbstr($item['key_']))))) { if (!($itemid = add_item($item['description'], $item['key_'], $hostid, 30, $hystory, ITEM_STATUS_ACTIVE, ITEM_TYPE_HTTPTEST, '', '', $item['type'], 'localhost', 161, $item['units'], 0, 0, '', 0, '', '', '', $trends, '', 0, '', array($applicationid)))) return false; } else { $itemid = $item_data['itemid']; if (!(update_item($itemid, $item['description'], $item['key_'], $hostid, 30, $hystory, ITEM_STATUS_ACTIVE, ITEM_TYPE_HTTPTEST, '', '', $item['type'], 'localhost', 161, $item['units'], 0, 0, '', 0, '', '', '', $trends, '', 0, '', array($applicationid)))) return false; } $httpstepitemid = get_dbid('httpstepitem', 'httpstepitemid'); DBexecute('delete from httpstepitem where itemid='.$itemid); if (!DBexecute('insert into httpstepitem'. ' (httpstepitemid, httpstepid, itemid) '. ' values ('.$httpstepitemid.','.$httpstepid.','.$itemid.')' )) return false; } return $httpstepid; } function db_save_httptest($httptestid, $hostid, $application, $name, $delay, $status, $agent, $macros, $steps) { if (!eregi('^([0-9a-zA-Z\_\.-\$ ]+)$', $name)) { error("Scenario name should contain '0-9a-zA-Z_.$ '- characters only"); return false; } DBstart(); if($applicationid = DBfetch(DBselect('select applicationid from applications '. ' where name='.zbx_dbstr($application). ' and hostid='.$hostid))) { $applicationid = $applicationid['applicationid']; } else { $applicationid = add_application($application, $hostid); if(!$applicationid) { error('Can\'t add new application. ['.$application.']'); return false; } } if(isset($httptestid)) { $result = DBexecute('update httptest set '. ' applicationid='.$applicationid.', name='.zbx_dbstr($name).', delay='.$delay.','. ' status='.$status.', agent='.zbx_dbstr($agent).', macros='.zbx_dbstr($macros). ' where httptestid='.$httptestid); } else { $httptestid = get_dbid("httptest","httptestid"); if(DBfetch(DBselect('select t.httptestid from httptest t, applications a where t.applicationid=a.applicationid '. ' and a.hostid='.$hostid.' and t.name='.zbx_dbstr($name)))) { error('Scenario with name ['.$name.'] already exist'); return false; } $result = DBexecute('insert into httptest'. ' (httptestid, applicationid, name, delay, status, agent, macros) '. ' values ('.$httptestid.','.$applicationid.','.zbx_dbstr($name).','. $delay.','.$status.','.zbx_dbstr($agent).','.zbx_dbstr($macros).')' ); $test_added = true; } if($result) { $httpstepids = array(); foreach($steps as $sid => $s) { if(!isset($s['name'])) $s['name'] = ''; if(!isset($s['timeout'])) $s['timeout'] = 15; if(!isset($s['url'])) $s['url'] = ''; if(!isset($s['posts'])) $s['posts'] = ''; if(!isset($s['required'])) $s['required'] = ''; $result = db_save_step($hostid, $applicationid, $httptestid, $name, $s['name'], $sid, $s['timeout'], $s['url'], $s['posts'], $s['required']); if(!$result) break; $httpstepids[$result] = $result; } if($result) { /* clean unneeded steps */ $db_steps = DBselect('select httpstepid from httpstep where httptestid='.$httptestid); while($step_data = DBfetch($db_steps)) { if(isset($httpstepids[$step_data['httpstepid']])) continue; delete_step($step_data['httpstepid']); DBexecute('delete httpstep where httpstepid='.$step_data['httpstepid']); } } } // TODO !!! Create items for httptest if(!$result && isset($test_added)) delete_httptest($httptestid); else $restult = $httptestid; DBend($result); return $result; } function add_httptest($hostid, $application, $name, $delay, $status, $agent, $macros, $steps) { $result = db_save_httptest(null, $hostid, $application, $name, $delay, $status, $agent, $macros, $steps); if($result) info("Sceanrio '".$name."' added"); return $result; } function update_httptest($httptestid, $hostid, $application, $name, $delay, $status, $agent, $macros, $steps) { $result = db_save_httptest($httptestid, $hostid, $application, $name, $delay, $status, $agent, $macros, $steps); if($result) info("Sceanrio '".$name."' updated"); return $result; } function delete_httpstep($httpstepid) { $db_httpstepitems = DBselect('select distinct * from httpstepitem where httpstepid='.$httpstepid); while($httpstepitem_data = DBfetch($db_httpstepitems)) { if(!DBexecute('delete from httpstepitem where httpstepitemid='.$httpstepitem_data['httpstepitemid'])) return false; if(!DBexecute('delete from items where itemid='.$httpstepitem_data['itemid'])) return false; } return DBexecute('delete from httpstep where httpstepid='.$httpstepid); } function delete_httptest($httptestid) { if (!($httptest = DBfetch(DBselect('select * from httptest where httptestid='.$httptestid)))) return false; $db_httpstep = DBselect('select distinct s.httpstepid from httpstep s '. ' where s.httptestid='.$httptestid); while($httpstep_data = DBfetch($db_httpstep)) { delete_httpstep($httpstep_data['httpstepid']); } if(!DBexecute('delete from httptest where httptestid='.$httptestid)) return false; info("Sceanrio '".$httptest["name"]."' deleted"); return true; } function activate_httptest($httptestid) { return DBexecute('update httptest set status='.HTTPTEST_STATUS_ACTIVE.' where httptestid='.$httptestid); } function disable_httptest($httptestid) { return DBexecute('update httptest set status='.HTTPTEST_STATUS_DISABLED.' where httptestid='.$httptestid); } function delete_history_by_httptestid($httptestid) { $db_items = DBselect('select distinct i.itemid from items i, httpstepitem si, httpstep s '. ' where s.httptestid='.$httptestid.' and si.httpstepid=s.httpstepid and i.itemid=si.itemid'); while($item_data = DBfetch($db_items)) { if(!delete_history_by_itemid($item_data['itemid'], 0 /* use housekeeper */)) return false; } return true; } function get_httptest_by_httptestid($httptestid) { return DBfetch(DBselect('select * from httptest where httptestid='.$httptestid)); } ?>