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 # Here we need to create an option to test the skip_late feature, ask community
86 $json .= OpenSRF::Utils::JSON->perl2JSON($checkout) . "\n";
87 $json .= OpenSRF::Utils::JSON->perl2JSON($renew) . "\n" if $renew;
88 $json .= OpenSRF::Utils::JSON->perl2JSON($checkin) . "\n";
94 #-----------------------------------------------------------------------------
96 #-----------------------------------------------------------------------------
108 my $url = "$baseurl/offline.pl$params&action=create&desc=test_d";
109 my $req = GET( $url );
110 my $res = $useragent->request($req);
111 my $response = OpenSRF::Utils::JSON->JSON2perl($res->{_content});
113 oils_event_die($response);
114 $seskey = $response->{payload};
115 $params = "$params&seskey=$seskey";
117 printl("Created new session with key $seskey");
121 #-----------------------------------------------------------------------------
122 # Uploads the offline script to the server
123 #-----------------------------------------------------------------------------
125 my $script = build_script();
128 "$baseurl/offline.pl",
129 Content_Type => 'form-data',
135 file => [ undef, "offline-test.script", Content_Type => "text/plain", Content => $script ] ]
138 my $res = $useragent->request($req);
140 # Pass request to the user agent and get a response back
141 my $event = OpenSRF::Utils::JSON->JSON2perl($res->{_content});
142 oils_event_die($event);
143 print "Upload succeeded to session $seskey...\n";
147 #-----------------------------------------------------------------------------
148 # Gets a list of all of the sessions that were either started today or
150 #-----------------------------------------------------------------------------
153 my $url = "$baseurl/offline.pl$params&action=status&status_type=scripts";
154 my $req = GET( $url );
155 my $res = $useragent->request($req);
156 my $ses = OpenSRF::Utils::JSON->JSON2perl($res->{_content});
158 my $scripts = $ses->{scripts};
159 delete $ses->{scripts};
161 $ses->{$_} ||= "" for keys %$ses;
164 print "Session Details\n\n";
165 print "$_=".$ses->{$_}."\n" for keys %$ses;
168 for my $scr (@$scripts) {
169 $scr->{$_} ||= "" for keys %$scr;
170 print "\t$_=".$scr->{$_}."\n" for keys %$scr;
179 #-----------------------------------------------------------------------------
180 # Tells the server to run the script
181 #-----------------------------------------------------------------------------
184 print "Executing script...\n";
185 my $url = "$baseurl/offline.pl$params&action=execute";
186 my $req = GET( $url );
188 my $res = $useragent->request($req);
189 my $event = OpenSRF::Utils::JSON->JSON2perl($res->{_content});
191 oils_event_die($event);
201 my $url = "$baseurl/offline.pl$params&action=status&status_type=summary";
202 my $req = GET( $url );
203 my $res = $useragent->request($req);
204 my $blob = OpenSRF::Utils::JSON->JSON2perl($res->{_content});
206 my $total = $blob->{total};
207 my $count = $blob->{num_complete} || "0";
208 $complete = ($total == $count) ? 1 : 0;
210 print "Completed Transactions: $count\n";
216 my $diff = time - $start;
218 my $url = "$baseurl/offline.pl$params&action=status&status_type=exceptions";
219 my $req = GET( $url );
220 my $res = $useragent->request($req);
221 my $blob = OpenSRF::Utils::JSON->JSON2perl($res->{_content});
224 push(@events, $_->{event}) for @$blob;
226 print "Received event ".$_->{ilsevent}.' : '.$_->{textcode}."\n" for @events;
229 print "Execute round trip took $diff seconds\n";