File Coverage

blib/lib/Apache/Sling/JsonQueryServlet.pm
Criterion Covered Total %
statement 70 92 76.0
branch 9 16 56.2
condition n/a
subroutine 16 19 84.2
pod 5 9 55.5
total 100 136 73.5


line stmt bran cond sub pod time code
1             #!/usr/bin/perl -w
2              
3             package Apache::Sling::JsonQueryServlet;
4              
5 1     1   3065 use 5.008001;
  1         4  
  1         39  
6 1     1   5 use strict;
  1         2  
  1         35  
7 1     1   6 use warnings;
  1         3  
  1         29  
8 1     1   5 use Carp;
  1         2  
  1         82  
9 1     1   1235 use Getopt::Long qw(:config bundling);
  1         17156  
  1         7  
10 1     1   237 use Apache::Sling;
  1         3  
  1         37  
11 1     1   655 use Apache::Sling::JsonQueryServletUtil;
  1         3  
  1         48  
12 1     1   6 use Apache::Sling::Print;
  1         1  
  1         34  
13 1     1   5 use Apache::Sling::Request;
  1         2  
  1         37  
14              
15             require Exporter;
16              
17 1     1   5 use base qw(Exporter);
  1         1  
  1         1040  
18              
19             our @EXPORT_OK = qw(command_line);
20              
21             our $VERSION = '0.27';
22              
23             #{{{sub new
24             sub new {
25 2     2 1 1503 my ( $class, $authn, $verbose, $log ) = @_;
26 2 100       9 if ( !defined $authn ) { croak 'no authn provided!'; }
  1         72  
27 1         3 my $response;
28 1 50       6 $verbose = ( defined $verbose ? $verbose : 0 );
29 1         16 my $json_query_servlet = {
30 1         4 BaseURL => ${$authn}->{'BaseURL'},
31             Authn => $authn,
32             Message => q{},
33             Response => \$response,
34             Verbose => $verbose,
35             Log => $log
36             };
37 1         5 bless $json_query_servlet, $class;
38 1         4 return $json_query_servlet;
39             }
40              
41             #}}}
42              
43             #{{{sub set_results
44             sub set_results {
45 1     1 1 2884 my ( $json_query_servlet, $message, $response ) = @_;
46 1         5 $json_query_servlet->{'Message'} = $message;
47 1         3 $json_query_servlet->{'Response'} = $response;
48 1         3 return 1;
49             }
50              
51             #}}}
52              
53             #{{{sub all_nodes
54             sub all_nodes {
55 0     0 1 0 my ($json_query_servlet) = @_;
56 0         0 my $res = Apache::Sling::Request::request(
57             \$json_query_servlet,
58             Apache::Sling::JsonQueryServletUtil::all_nodes_setup(
59             $json_query_servlet->{'BaseURL'}
60             )
61             );
62 0         0 my $success = Apache::Sling::JsonQueryServletUtil::all_nodes_eval($res);
63 0         0 my $message = (
64             $success
65 0 0       0 ? ${$res}->content
66             : "Problem fetching all nodes"
67             );
68 0         0 $json_query_servlet->set_results( "$message", $res );
69 0         0 return $success;
70             }
71              
72             #}}}
73              
74             #{{{ sub command_line
75             sub command_line {
76 0     0 0 0 my ( $json_query_servlet, @ARGV ) = @_;
77 0         0 my $sling = Apache::Sling->new;
78 0         0 my $config = $json_query_servlet->config( $sling, @ARGV );
79 0         0 return $json_query_servlet->run( $sling, $config );
80             }
81              
82             #}}}
83              
84             #{{{sub config
85              
86             sub config {
87 1     1 1 876 my ( $json_query_servlet, $sling, @ARGV ) = @_;
88              
89 1         8 my $json_query_servlet_config = $json_query_servlet->config_hash( $sling, @ARGV );
90              
91 1 50       9 GetOptions(
92             $json_query_servlet_config, 'auth=s',
93             'help|?', 'log|L=s',
94             'man|M', 'pass|p=s',
95             'threads|t=s', 'url|U=s',
96             'user|u=s', 'verbose|v+',
97             'all_nodes|a'
98             ) or $json_query_servlet->help();
99              
100 1         801 return $json_query_servlet_config;
101             }
102              
103             #}}}
104              
105             #{{{sub config_hash
106              
107             sub config_hash {
108 1     1 0 3 my ( $json_query_servlet, $sling, @ARGV ) = @_;
109 1         3 my $all_nodes;
110              
111 1         20 my %json_query_servlet_config = (
112             'auth' => \$sling->{'Auth'},
113             'help' => \$sling->{'Help'},
114             'log' => \$sling->{'Log'},
115             'man' => \$sling->{'Man'},
116             'pass' => \$sling->{'Pass'},
117             'threads' => \$sling->{'Threads'},
118             'url' => \$sling->{'URL'},
119             'user' => \$sling->{'User'},
120             'verbose' => \$sling->{'Verbose'},
121             'all_nodes' => \$all_nodes
122             );
123              
124 1         4 return \%json_query_servlet_config;
125             }
126              
127             #}}}
128              
129             #{{{ sub help
130             sub help {
131              
132 1     1 0 1641 print <<"EOF";
133             Usage: perl $0 [-OPTIONS [-MORE_OPTIONS]] [--] [PROGRAM_ARG1 ...]
134             The following options are accepted:
135              
136             --all_nodes or -a - Return a JSON representation of all nodes in the system.
137             --auth (type) - Specify auth type. If ommitted, default is used.
138             --help or -? - view the script synopsis and options.
139             --log or -L (log) - Log script output to specified log file.
140             --man or -M - view the full script documentation.
141             --pass or -p (password) - Password of user performing json queries.
142             --threads or -t (threads) - Used with -A, defines number of parallel
143             processes to have running through file.
144             --url or -U (URL) - URL for system being tested against.
145             --user or -u (username) - Name of user to perform queries as.
146             --verbose or -v or -vv or -vvv - Increase verbosity of output.
147              
148             Options may be merged together. -- stops processing of options.
149             Space is not required between options and their arguments.
150             For full details run: perl $0 --man
151             EOF
152              
153 1         4 return 1;
154             }
155              
156             #}}}
157              
158             #{{{ sub man
159             sub man {
160              
161 0     0 0 0 my ($json_query_servlet) = @_;
162              
163 0         0 print <<'EOF';
164             json_query_servlet perl script. Provides a means of querying content in sling
165             from the command line. The script also acts as a reference implementation for
166             the JSON Query Servlet perl library.
167              
168             EOF
169              
170 0         0 $json_query_servlet->help();
171              
172 0         0 print <<"EOF";
173             Example Usage
174              
175             * Query all nodes in the system:
176              
177             perl $0 -U http://localhost:8080 -a -u admin -p admin
178             EOF
179              
180 0         0 return 1;
181             }
182              
183             #}}}
184              
185             #{{{sub run
186             sub run {
187 2     2 1 42 my ( $json_query_servlet, $sling, $config ) = @_;
188 2 100       9 if ( !defined $config ) {
189 1         20 croak 'No json query servlet config supplied!';
190             }
191 1         7 $sling->check_forks;
192 1         3 ${ $config->{'remote'} } =
  1         9  
193 1         2 Apache::Sling::URL::strip_leading_slash( ${ $config->{'remote'} } );
194 1         3 ${ $config->{'remote-source'} } = Apache::Sling::URL::strip_leading_slash(
  1         5  
195 1         3 ${ $config->{'remote-source'} } );
196              
197 1         11 my $authn = new Apache::Sling::Authn( \$sling );
198 1         6 $authn->login_user();
199 1         3 my $success = 1;
200 1 50       7 if ( $sling->{'Help'} ) { $json_query_servlet->help(); }
  0 50       0  
    50          
201 0         0 elsif ( $sling->{'Man'} ) { $json_query_servlet->man(); }
  1         6  
202             elsif ( defined ${ $config->{'all_nodes'} } ) {
203 0         0 $json_query_servlet =
204             new Apache::Sling::JsonQueryServlet( \$authn, $sling->{'Verbose'},
205             $sling->{'Log'} );
206 0         0 $success = $json_query_servlet->all_nodes();
207             }
208             else {
209 1         21 $json_query_servlet->help();
210 1         8 return 1;
211             }
212 0           Apache::Sling::Print::print_result($json_query_servlet);
213 0           return $success;
214             }
215              
216             #}}}
217              
218             1;
219              
220             __END__