From 938eeba4af4a46126fc4d2fcbe46c15c98d70090 Mon Sep 17 00:00:00 2001 From: osmiy Date: Fri, 19 Jan 2007 15:34:39 +0000 Subject: - developed configuration interface of http monitoring (Eugene) git-svn-id: svn://svn.zabbix.com/trunk@3732 97f52cf1-0a1b-0410-bd0e-c28be96e8082 --- frontends/php/include/httptest.inc.php | 300 +++++++++++++++++++++++++++++++++ 1 file changed, 300 insertions(+) create mode 100644 frontends/php/include/httptest.inc.php (limited to 'frontends/php/include/httptest.inc.php') diff --git a/frontends/php/include/httptest.inc.php b/frontends/php/include/httptest.inc.php new file mode 100644 index 00000000..aeb4dd30 --- /dev/null +++ b/frontends/php/include/httptest.inc.php @@ -0,0 +1,300 @@ + + '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)); + } +?> -- cgit