Skip to content

Instantly share code, notes, and snippets.

@averyanov
Created March 3, 2010 12:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save averyanov/320578 to your computer and use it in GitHub Desktop.
Save averyanov/320578 to your computer and use it in GitHub Desktop.
#!/usr/bin/perl -w
use strict;
use AnyEvent::HTTP;
use Time::HiRes qw/time/;
use constant LOGGER_INTERVAL => 1;
use constant USAGE => "$0 [requests_count] [threads_count] [url]\n";
my ( $max_requests, $max_threads, $url ) = @ARGV;
die USAGE unless $max_requests && $max_threads && $url;
my $requests_count = 0;
my $cv = AnyEvent->condvar();
sub test
{
my $url = shift;
http_request 'GET' => $url, sub{
my ($data, $hdr) = @_;
if ($hdr->{Status} =~ /^2/) {
die($data) unless $data =~ /bg_plashka_new/;
$requests_count ++;
$requests_count < $max_requests ? test($url) : $cv->send();
} else {
print "error, $hdr->{Status} $hdr->{Reason}\n";
die();
}
};
}
my $global_begin_time = time();
my $logger = AnyEvent->timer(
interval => LOGGER_INTERVAL,
cb => sub {
my $time = time() - $global_begin_time;
print sprintf("Time passed: %f,\trequests: %d of %d\n", $time, $requests_count, $max_requests);
},
);
test($url) for (1..$max_threads);
$cv->recv();
my $global_end_time = time();
print sprintf("Total time: %f\n", $global_end_time-$global_begin_time);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment