2 require '../oils_header.pl';
3 use vars qw/ $user $authtoken /;
4 use strict; use warnings;
5 use Time::HiRes qw/time usleep/;
7 use HTTP::Request::Common;
9 use OpenSRF::Utils::JSON;
11 #-----------------------------------------------------------------------------
12 # Does a checkout, renew, and checkin
13 #-----------------------------------------------------------------------------
15 err("usage: $0 <config> <username> <password> <base_url> ".
16 "<workstation_name> <patron_barcode> <item_barcode> <iterations>") unless $ARGV[7];
18 my $config = shift; # - bootstrap config
19 my $username = shift; # - oils login username
20 my $password = shift; # - oils login password
21 my $baseurl = shift; # - base offline script url
22 my $station = shift; # - workstation name
23 my $patronbc = shift; # - patron barcode
24 my $barcode = shift; # - item barcode
25 my $iterations = shift || 1; # - number of iterations
27 my $useragent = LWP::UserAgent->new; # - HTTP request handler
29 my $params; # - CGI params
33 osrf_connect($config);
34 oils_login($username, $password);
35 $params = "?ses=$authtoken&ws=$station";
43 #-----------------------------------------------------------------------------
44 # Builds the script lines
45 #-----------------------------------------------------------------------------
49 my $time = CORE::time;
53 my($s,$m,$h,$d,$mon,$y) = localtime(++$time);
55 my $t1 = "$y-$mon-$d";
56 my $t2 = "$t1 $h:$m:$s";
62 patron_barcode => $patronbc,
72 patron_barcode => $patronbc,
84 $json .= OpenSRF::Utils::JSON->perl2JSON($checkout) . "\n";
85 $json .= OpenSRF::Utils::JSON->perl2JSON($renew) . "\n" if $renew;
86 $json .= OpenSRF::Utils::JSON->perl2JSON($checkin) . "\n";
92 #-----------------------------------------------------------------------------
94 #-----------------------------------------------------------------------------
106 my $url = "$baseurl/offline.pl$params&action=create&desc=test_d";
107 my $req = GET( $url );
108 my $res = $useragent->request($req);
109 my $response = OpenSRF::Utils::JSON->JSON2perl($res->{_content});
111 oils_event_die($response);
112 $seskey = $response->{payload};
113 $params = "$params&seskey=$seskey";
115 printl("Created new session with key $seskey");
119 #-----------------------------------------------------------------------------
120 # Uploads the offline script to the server
121 #-----------------------------------------------------------------------------
123 my $script = build_script();
126 "$baseurl/offline.pl",
127 Content_Type => 'form-data',
133 file => [ undef, "offline-test.script", Content_Type => "text/plain", Content => $script ] ]
136 my $res = $useragent->request($req);
138 # Pass request to the user agent and get a response back
139 my $event = OpenSRF::Utils::JSON->JSON2perl($res->{_content});
140 oils_event_die($event);
141 print "Upload succeeded to session $seskey...\n";
145 #-----------------------------------------------------------------------------
146 # Gets a list of all of the sessions that were either started today or
148 #-----------------------------------------------------------------------------
151 my $url = "$baseurl/offline.pl$params&action=status&status_type=scripts";
152 my $req = GET( $url );
153 my $res = $useragent->request($req);
154 my $ses = OpenSRF::Utils::JSON->JSON2perl($res->{_content});
156 my $scripts = $ses->{scripts};
157 delete $ses->{scripts};
159 $ses->{$_} ||= "" for keys %$ses;
162 print "Session Details\n\n";
163 print "$_=".$ses->{$_}."\n" for keys %$ses;
166 for my $scr (@$scripts) {
167 $scr->{$_} ||= "" for keys %$scr;
168 print "\t$_=".$scr->{$_}."\n" for keys %$scr;
177 #-----------------------------------------------------------------------------
178 # Tells the server to run the script
179 #-----------------------------------------------------------------------------
182 print "Executing script...\n";
183 my $url = "$baseurl/offline.pl$params&action=execute";
184 my $req = GET( $url );
186 my $res = $useragent->request($req);
187 my $event = OpenSRF::Utils::JSON->JSON2perl($res->{_content});
189 oils_event_die($event);
199 my $url = "$baseurl/offline.pl$params&action=status&status_type=summary";
200 my $req = GET( $url );
201 my $res = $useragent->request($req);
202 my $blob = OpenSRF::Utils::JSON->JSON2perl($res->{_content});
204 my $total = $blob->{total};
205 my $count = $blob->{num_complete} || "0";
206 $complete = ($total == $count) ? 1 : 0;
208 print "Completed Transactions: $count\n";
214 my $diff = time - $start;
216 my $url = "$baseurl/offline.pl$params&action=status&status_type=exceptions";
217 my $req = GET( $url );
218 my $res = $useragent->request($req);
219 my $blob = OpenSRF::Utils::JSON->JSON2perl($res->{_content});
222 push(@events, $_->{event}) for @$blob;
224 print "Received event ".$_->{ilsevent}.' : '.$_->{textcode}."\n" for @events;
227 print "Execute round trip took $diff seconds\n";