指定のURLにアクセスして、指定の文字列が存在するかどうかをチェックしたい。
その文字列が出てくるまでの時間を知りたい。
といわれたので、ためしにこんなかんじで作ってみました。
オプションの取得して判別するところがどうも冗長な気がして気に食わないのと
fopenでURL指定して取得しているので404とか500とかHTTPの結果コードを
うまく処理していないのが難点。
もちっと作りこんでNagiosプラグインとしてきちんと動くようにしていこうっと。
サンプルコードは→
check_httpresp.php
<?php
/**
* 指定のURLにアクセスして、指定の文字列が存在するかどうかをチェックするスクリプト
* (Nagosプラグインにする予定)
* 一番初めに指定の文字列が出てくるまでの時間をtimeとして返します。
*
* 2008/07/14
* Yoshitomo Fujii<fujii_at_lowtech.co.jp>
**/
mb_regex_encoding('UTF-8');
mb_internal_encoding('UTF-8');
// get options
$options = getopt('H:s:u:e:S::');
if(!isset($options['H']) || !isset($options['s'])) {
echo "check_httpresp: No arguments found\n";
echo "Usage:php check_httpresp -H host -s string [-p <port>] [-u <uri>] [-e <encoding>] [-S]\n";
exit(3);
}
// set encoding
if(isset($options['e'])) {
$encoding = $options['e'];
}
// set pattern
$pattern = $options['s'];
// create check url
if(isset($options['S'])) {
$url = "https://";
} else {
$url = "http://";
}
$url .= $options['H'];
if(isset($options['p'])) {
$url .= ":" . $options['p'];
}
if(isset($options['u'])) {
$url .= $options['u'];
}
$time = microtime();
$handle = @fopen($url, "r");
if ($handle) {
while (!feof($handle)) {
$buffer = fgets($handle, 4096);
if(isset($encoding)) {
$buffer = mb_convert_encoding($buffer,'UTF-8',$encoding);
}
if(mb_ereg($pattern,$buffer) == 1) {
//マッチしたら完了。時間を計算して出力する。
$resp = microtime() - $time;
echo "HTTP_RESP OK - ".trim($buffer)." | time=" . $resp . ";\n";
exit(0);
fclose($handle);
}
}
echo "No match.\n";
exit(1);
fclose($handle);
} else {
echo "Cannot Connect. or Not Found.\n";
exit(2);
}
?>
Popular Posts:
- None Found