simple circ load tester
authorerickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Wed, 14 Jun 2006 17:25:57 +0000 (17:25 +0000)
committererickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Wed, 14 Jun 2006 17:25:57 +0000 (17:25 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/trunk@4613 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/src/support-scripts/test-scripts/circ_load.pl [new file with mode: 0755]

diff --git a/Open-ILS/src/support-scripts/test-scripts/circ_load.pl b/Open-ILS/src/support-scripts/test-scripts/circ_load.pl
new file mode 100755 (executable)
index 0000000..3aaf568
--- /dev/null
@@ -0,0 +1,109 @@
+#!/usr/bin/perl
+
+#----------------------------------------------------------------
+# Code for testing the container API
+#----------------------------------------------------------------
+
+require '../oils_header.pl';
+use vars qw/ $authtoken /;
+use strict; use warnings;
+use Time::HiRes qw/time usleep/;
+
+#----------------------------------------------------------------
+err("\nusage: $0 <config> <oils_login_username> <oils_login_password> ".
+       "<patronid> <barcode_file> <num_iterations> <num_processes>\n" .
+       "<barcode_file> is a file with a single copy barcode per line") unless $ARGV[6];
+#----------------------------------------------------------------
+
+my $config             = shift; 
+my $username   = shift;
+my $password   = shift;
+my $patronid   = shift;
+my $barcodes   = shift;
+my $numiters   = shift;
+my $numprocs   = shift;
+
+open(F,$barcodes);
+my @BARCODES = <F>;
+close(F);
+
+$numprocs = ($numprocs and $numprocs < 50) ? $numprocs : 1;
+
+print "start time = " . time . "\n";
+
+my $index = 0;
+for(1..($numprocs - 1)) {
+       last if fork();
+       $index++;
+       sleep(2); # this gives auth time to work
+}
+
+go($index);
+
+sub go {
+       my $index = shift;
+       my $barcode = $BARCODES[$index];
+       chomp $barcode;
+
+       osrf_connect($config);
+       oils_login($username, $password);
+
+       printl("$$ running barcode $barcode");
+
+       my $s = time;
+
+       for(1..$numiters) {
+               my $start = time;
+               my $key  = do_permit($patronid, $barcode ); 
+               die "permit failed\n" unless $key;
+               do_checkout($key, $patronid, $barcode );
+               printl("checkout time = " . (time - $start));
+               $start = time;
+               do_checkin($barcode);
+               printl("checkin time = " . (time - $start));
+       }
+
+       print "\nchild $index, iterations = $numiters, total time = " . (time - $s) . ", current time = " . time . "\n";
+}
+
+#----------------------------------------------------------------
+
+sub do_permit {
+       my( $patronid, $barcode ) = @_;
+
+       my $args = { patron => $patronid, barcode => $barcode };
+
+       my $resp = simplereq( 
+               CIRC(), 'open-ils.circ.checkout.permit', $authtoken, $args );
+
+       oils_event_die($resp);   
+       
+       if( ref($resp) eq 'ARRAY' ) { # we received a list of non-success events
+               printl("received event: ".$_->{textcode}) for @$resp;
+               return undef;
+       } 
+
+       return $resp->{payload};
+}
+
+
+sub do_checkout {
+       my( $key, $patronid, $barcode ) = @_;
+       my $args = { permit_key => $key, patron => $patronid, barcode => $barcode };
+       my $resp = osrf_request(
+               'open-ils.circ', 
+               'open-ils.circ.checkout', $authtoken, $args );
+       oils_event_die($resp);
+}
+
+
+sub do_checkin {
+       my $barcode  = shift;
+       my $args = { barcode => $barcode };
+       my $resp = simplereq( 
+               CIRC(), 'open-ils.circ.checkin', $authtoken, $args );
+       oils_event_die($resp);
+       debug($resp) if(ref($resp) eq 'ARRAY');
+}
+
+