1 package OpenILS::WWW::Method;
2 use strict; use warnings;
6 use Apache2::Const -compile => qw(OK REDIRECT :log);
7 use APR::Const -compile => qw(:error SUCCESS);
8 use Apache2::RequestRec ();
9 use Apache2::RequestIO ();
10 use Apache2::RequestUtil;
16 use OpenSRF::EX qw(:try);
21 use constant MAX_SESSION_REQUESTS => 20;
29 my $cgi = CGI->new( $apache );
31 print "Content-type: text/plain; charset=utf-8\n\n";
34 my @p = $cgi->param();
35 warn "Params: " . Dumper(\@p);
37 my $method = $cgi->param("method");
38 my $service = $cgi->param("service");
42 if( ! $service || ! $method ) {
45 err_msg => "Service name and method name required to fulfil request",
50 print JSON->perl2JSON($err);
51 return Apache2::Const::OK;
59 if(defined($cgi->param("param"))) {
60 for my $param ( $cgi->param("param")) {
61 push( @param_array, JSON->JSON2perl( $param ));
64 for my $param ($cgi->param()) {
65 $param_hash{$param} = JSON->JSON2perl($cgi->param($param))
66 unless( $param eq "method" or $param eq "service" );
72 perform_method($service, $method, @param_array);
74 perform_method($service, $method, %param_hash);
77 return Apache2::Const::OK;
80 sub child_init_handler {
81 OpenSRF::System->bootstrap_client(
82 config_file => "/pines/conf/web_bootstrap.conf" );
88 my ($service, $method, @params) = @_;
90 warn "performing method $method for service $service with params @params\n";
94 if($session_hash{$service} ) {
96 $session = $session_hash{$service};
97 $session->{web_count} += 1;
99 if( $session->{web_count} > MAX_SESSION_REQUESTS) {
100 $session->disconnect();
101 $session->{web_count} = 1;
106 $session = OpenSRF::AppSession->create($service);
107 $session_hash{$service} = $session;
108 $session->{web_count} = 1;
112 my $request = $session->request( $method, @params );
115 while( my $response = $request->recv(20) ) {
117 if( UNIVERSAL::isa( $response, "Error" )) {
118 warn "Received exception: " . $response->stringify . "\n";
121 err_msg => "Error Completing Request:\n " .
122 "Service: $service \nMethod: $method \nParams: @params \n" .
123 $response->stringify() . "\n",
125 print JSON->perl2JSON($err);
130 my $content = $response->content;
131 push @results, $content;
135 if(!$request->complete) {
136 warn "ERROR Completing Request";
139 err_msg => "Error Completing Request:\n ".
140 "Service: $service \nMethod: $method \nParams: @params \n" .
141 "request->complete test failed in OpenILS::Web::Method\n"
143 print JSON->perl2JSON($err);
152 warn Dumper \@results;
154 print JSON->perl2JSON( \@results );