#!/usr/bin/perl -w
use OpenSRF::System qw(/pines/conf/bootstrap.conf);
-use Data::Dumper;
+use Getopt::Long
$| = 1;
-# ----------------------------------------------------------------------------------------
-# This is a quick and dirty script to perform benchmarking against the math server.
-# Note: 1 request performs a batch of 4 queries, one for each supported method: add, sub,
-# mult, div.
-# Usage: $ perl math_bench.pl <num_requests>
-# ----------------------------------------------------------------------------------------
-
-
my $count = $ARGV[0];
-
-unless( $count ) {
- print "usage: $0 <service name> [<cvs repo base URL>]\n";
+my $cvs_base = 'http://open-ils.org/cgi-bin/viewcvs.cgi/ILS/Open-ILS/src/perlmods/';
+my $nest = 0;
+my $service;
+my $sort_ignore;
+
+GetOptions( 'cvs_base=s' => \$cvs_base,
+ 'nest' => \$nest,
+ 'service=s' => \$service,
+ 'ignore=s' => \$sort_ignore,
+);
+
+unless( $service ) {
+ print "usage: $0 -s <service name> [-c <cvs repo base URL> -n]\n";
exit;
}
-my $cvs_base = $ARGV[1] || 'http://open-ils.org/cgi-bin/viewcvs.cgi/ILS/Open-ILS/src/perlmods/';
-
OpenSRF::System->bootstrap_client();
-my $session = OpenSRF::AppSession->create( $ARGV[0] );
+my $session = OpenSRF::AppSession->create( $service );
my $req = $session->request('opensrf.system.method.all');
+my $count = 1;
+my %m;
while( my $meth = $req->recv(60) ) {
$meth = $meth->content;
- my $api_name = $meth->{api_name};
- my $api_level = int $meth->{api_level};
- my $server_class = $meth->{server_class} || '**ALL**';
- my $stream = int($meth->{stream} || 0);
- my $cachable = int($meth->{cachable} || 0);
- my $note = $meth->{note} || 'what I do';
- my $package = $meth->{package};
- (my $cvs = $package) =~ s/::/\//go;
- my $method = $meth->{method};
-
- $stream = $stream?'Yes':'No';
- $cachable = $cachable?'Yes':'No';
+
+ $api_name = $meth->{api_name};
+
+ $m{$api_name}{api_name} = $meth->{api_name};
+
+ $m{$api_name}{package} = $meth->{package};
+ $m{$api_name}{method} = $meth->{method};
+
+ $m{$api_name}{api_level} = int $meth->{api_level};
+ $m{$api_name}{server_class} = $meth->{server_class} || '**ALL**';
+ $m{$api_name}{stream} = int($meth->{stream} || 0);
+ $m{$api_name}{cachable} = int($meth->{cachable} || 0);
+
+ $m{$api_name}{note} = $meth->{note} || 'what I do';
+ ($m{$api_name}{cvs} = $m{$api_name}{package}) =~ s/::/\//go;
+
+ $m{$api_name}{stream} = $m{$api_name}{stream}?'Yes':'No';
+ $m{$api_name}{cachable} = $m{$api_name}{cachable}?'Yes':'No';
+
+ print STDERR "." unless ($count % 10);
+
+ $count++;
+}
+
+warn "\nThere are ".scalar(keys %m)." methods published by $service\n";
+
+my @m_list;
+if (!$sort_ignore) {
+ @m_list = sort keys %m;
+} else {
+ @m_list =
+ map { ($$_[0]) }
+ sort {
+ $$a[1] cmp $$b[1]
+ ||
+ length($$b[0]) <=> length($$a[0])
+ } map {
+ [$_ =>
+ do {
+ (my $x = $_) =~ s/^$sort_ignore//go;
+ $x;
+ } ]
+ } keys %m;
+}
+
+for my $meth ( @m_list ) {
+
+ my $pad = 0;
+ my $header = '=====';
+ if ($nest) {
+ no warnings;
+ (my $x = $meth) =~ s/\./$pad++;$1/eg;
+ }
+ $pad = ' 'x$pad;
print <<" METHOD";
-===== $api_name =====
+$pad$header $meth $header
-$note
+$m{$meth}{note}
- * [[osrf-devel:terms#opensrf_api-level|API Level]]: $api_level
- * [[osrf-devel:terms#opensrf_server_class|Server Class]]: $server_class
- * Implementation Method: [[$cvs_base/$cvs.pm|$package\::$method]]
- * Streaming [[osrf-devel:terms#opensrf_method|Method]]: $stream
- * Cachable [[osrf-devel:terms#opensrf_method|Method]]: $cachable
+ * [[osrf-devel:terms#opensrf_api-level|API Level]]: $m{$meth}{api_level}
+ * [[osrf-devel:terms#opensrf_server_class|Server Class]]: $m{$meth}{server_class}
+ * Implementation Method: [[$cvs_base/$m{$meth}{cvs}.pm|$m{$meth}{package}\::$m{$meth}{method}]]
+ * Streaming [[osrf-devel:terms#opensrf_method|Method]]: $m{$meth}{stream}
+ * Cachable [[osrf-devel:terms#opensrf_method|Method]]: $m{$meth}{cachable}
* **Parameters:**
* //param1//\\\\ what it is...