nagios插件之监控路况RTTI返回值(模拟车机发起)
2013-09-28 12:42
381 查看
先把perl的帖上,节后用c再写一遍,替换该内容
#!/usr/bin/perl -w require LWP::UserAgent; use threads; use threads::shared; use warnings; use strict; use POSIX; use Getopt::Long; use Time::HiRes qw(time usleep); my @cities; my @lat_nl; # north limit; my @lat_sl; # south limit; my @long_el; # east limit; my @long_wl; # west limit; my $o_host="11x.x.x.x"; my $o_baseurl="/bmw/gateway/index.do"; my $o_port=80; my $o_bbl = "boundingbox.csv"; my $o_output = "stress_test_output.csv"; my $o_tcars=5; my $o_treqs=20; my $o_interval=1.0; my $o_timeout=15; my $o_perf=undef; my $o_warn=undef; my $o_crit=undef; my $magic=0.03089619; my $magic_factor=1.5; my $o_speed=600; my $o_help="To_be_changed"; my $timediff=0; my @time_table :shared; my @error_table :shared; my @length_table :shared; my @g_res_table :shared; #my @g_lat_table :shared; #my @g_lng_table :shared; sub exit_with_error{ print $_[0]; # message if (defined($o_perf)){ print "| 'timediff'=$timediff","s;$o_warn;$o_crit;0;30"; } print "\n"; exit($_[1]); } sub print_helpmessage() { print " Cennavi TPEG Loadtest tool. Version: 0.3 Usage: ./cennavi_stresstest [-H <host>] [-p <port>] [-t <timeout>] [-b <baseurl>] [-a <initial latitude>] [-n <initial longitude>] [-T <total number of cars> -R <total number of requests>] [-i <interval between requests from a car>] [-h] Options: -H, --hostname Hostname or IP address of the target host -p, --port TCP port of the target host -b, --base_url Base url used to query the target host. Has to start with a \"\/\". -f, --file The file that stores the coordination of the bounding boxes. Default to boundingbox.csv in the current folder. -T, --total_cars Total number of cars to emulate -R, --total_reqs Total number of requests to send. -I, --interval The interval between 2 requests for an individual car. -o, --output The file where detailed information will be logged. Default to stress_test_output.csv in the current folder. -h, --help Print this help message. Notes: - The coordination file has to be a well formatted csv file. - If the total number of requests cannot be divided by total number of cars, you may get slightly in-accurate information. This will be fixed in the future. - Requests generated from each individual car are sychronized. The next request will only be sent out after the previous one gets its response. If the previous request takes more than \"interval\" to finish, then the next request is sent out immediately. If the previous request takes less than \"interval\" to finish, then the script will hold the next request till the interval is reached. - For this version, we can emulate 10^6 cars in parallel at most. " } sub print_helpmessage_exit() { print_helpmessage(); exit(0); } sub rand_between { return int(rand($_[1] - $_[0])*0.2 + ($_[0]+$_[1])/2); } sub min_max_sum { my(@number_array) = @{$_[0]}; my $min = $number_array[0]; my $max = $number_array[0]; my $sum = 0; my $num=undef; foreach $num (@number_array) { if ($min > $num){ $min = $num;} if ($max < $num){ $max = $num;} $sum += $num; } return ($min, $max, $sum); } sub check_options { Getopt::Long::Configure("bundling"); GetOptions( 'H:s' => \$o_host, 'hostname:s' => \$o_host, 'p:i' => \$o_port, 'port:i' => \$o_port, # 'l:s' => \$o_login, 'login:s' => \$o_login, # 'x:s' => \$o_passwd, 'passwd:s' => \$o_passwd, 'F:s' => \$o_bbl, 'file:s' => \$o_bbl, 'f' => \$o_perf, 'perf' => \$o_perf, 't:i' => \$o_timeout, 'timeout:i' => \$o_timeout, 'b:s' => \$o_baseurl, 'base_url:s' => \$o_baseurl, 'w:i' => \$o_warn, 'warn:i' => \$o_warn, 'c:i' => \$o_crit, 'critical:i' => \$o_crit, 'h:s' => \$o_help, 'help:s' => \$o_help ); } ################################################################################ #################################### Main ###################################### ################################################################################ check_options(); if ($o_help ne "To_be_changed"){ print_helpmessage_exit(); } if($o_tcars > $o_treqs) { print "You ought to have more requests than cars\n"; exit(0); } if($o_tcars >= 1000000 || $o_tcars<=0) { print "Sorry, that exceeds my capacity.\n"; exit(127); } if ($o_baseurl =~ m/^\//){ } else{ $o_baseurl="/".$o_baseurl; } ############################################################################ # Read the location of the bounding boxes from the configuration file. ############################################################################ my $suc = open BOXFILE, "<", $o_bbl; if ($suc){ while(<BOXFILE>) { #chomp; #push @cities, $_; my $line = $_; #if ($line =~ //){ # file content validation, will be done in the future. my @rec=split /,/, $line; chomp @rec; push (@cities, $rec[0]); push (@lat_nl, floor($rec[1] * (2**32) /360)); push (@long_wl, ceil($rec[2] * (2**32) /360)); push (@lat_sl, ceil($rec[3] * (2**32) /360)); push (@long_el, floor($rec[4]* (2**32)/360)); } }else { die "Cannot open config file!\n"; } close BOXFILE; my $drive_id=sprintf('%06s',int(rand()*1000)); $drive_id ="0000000000H".$drive_id; my $city_id=int(rand($#cities)); my $cur_lat = rand_between($lat_sl[$city_id],$lat_nl[$city_id]); my $cur_lat = rand_between($lat_sl[$city_id],$lat_nl[$city_id]); my $des_lat = rand_between($lat_sl[$city_id],$lat_nl[$city_id]); my $cur_lng = rand_between($long_wl[$city_id], $long_el[$city_id]); my $des_lng = rand_between($long_wl[$city_id], $long_el[$city_id]); my $target_url="http://$o_host$o_baseurl?DriveID=$drive_id&Decoding_Feat=&Clat=$cur_lat&Dlat=$des_lat&TP_SID=&OP=gtm&Vers=1112.05.07.00&Guidance=KD&Velocity=0&TReq=&Clon=$cur_lng&Dlon=$des_lng&Bearing=&TP_Apps=TEC-TFP"; my $regex="\<TransportFrame .+\\>\\S*\<\/TransportFrame\>"; my $ua = LWP::UserAgent->new; $ua->timeout($o_timeout); $ua->env_proxy; my $content=undef; my $start_time=time(); my $response = $ua->get($target_url); my $end_time=time(); $timediff=$end_time - $start_time; $content=$response->decoded_content(); my $l_len = length($content); #print $target_url; #print "\n"; #print $content; #print "\n"; # if ($timediff<$o_timeout){ if ($response->is_success) { if($content =~ m/$regex/){ if ($timediff<=$o_warn) { exit_with_error("timediff: $timediff sec: OK",0); }else{ if ($timediff <= $o_crit) { exit_with_error("timediff: $timediff sec: WARNING",1); } } #OK; } else { exit_with_error("Unknown Content: $content : CRITICAL"."\nDriveID: $drive_id \nCityID: $city_id\n$cur_lat\n$cur_lng\n$des_lat\n$des_lng\n", 2); } }else { exit_with_error("Server error: $response->status_line : CRITICAL",2); } } else{ exit_with_error("timediff: $timediff sec: CRITICAL",2); }
相关文章推荐
- nagios插件之监控RTTI返回情况(模拟坐席发起)
- nagios插件之监控linux下分区是否被挂载
- nagios插件之监控AES日志文件--检查ERROR
- Nagios监控websphere插件安装
- 用php自定义 nagios监控插件
- nagios监控beanstalk插件
- nagios插件之监控M1KB语音网关通话数
- nagios插件之监控casa业务
- nagios监控http(nrpe插件)
- nagios插件之监控f5主备状态(snmp实现)
- nagios插件之监控Asterisk日志文件--Master.cvs
- 今天装nagios监控的,用NRPE是提示缺少插件
- Linux 下安装配置nagios 监控插件
- nagios 监控内存-增加新插件方法
- Nagios插件开发之监控服务器负载 推荐
- Nagios插件开发之监控程序占用资源
- nagios插件之登陆路由器实现ping监控
- nagios 监控内存-增加新插件方法 check_mem
- nagios插件之监控if8接口日志(新接口)