The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

=head1 NAME

j4psh - A JMX Shell

=cut

use Getopt::Long
;
use strict;
use JMX::Jmx4Perl::Config;
use JMX::Jmx4Perl::J4psh;
use Config::General;

=head1 SYNOPSIS

  j4psh [options] <server>

  j4psh --help

  j4psh --version

 Options:
   --user <user>           Credential used for authentication   
   --password <pwd>  
   --proxy <url>           URL to use as proxy proxy
   --proxy-user <user>     Authentication information for a proxy
   --proxy-password <pwd>
   --target <jmx-url>      JSR-160 JMX Service URL to be used as the target server
   --target-user <user>    Credential for the target server if --target is given
   --target-password <pwd> 
   --option key=val        Options for tuning the output of jmx4perl. Known keys are
                              format   : Either 'json' or 'data'
                              booleans : Pair of strings separated by slash to use for printing 
                                         boolean values (Default: [true]/[false])
                              indent   : Space indent when printing complex data structures 
   --config <cfg-file>     Path to an optional configuration file (default: ~/.j4p)
   --color [yes|no]        Color option (default: yes)

An optional argument can be used to directly connect to an agent URL or
symbolic name as defined in the configuration file. If not given, the shell
does no initial connect.

=head1 DESCRIPTION

B<j4psh> is a frontend to C<JMX::Jmx4Perl> providing an interactive shell for
accessing JMX MBeans on a remote Java server. 

=over 4

=item *

Readline and history support based on GNU Readline/History as known from other
shells like 'bash'. When GNU Readline is not available, a pure Perl Module is
used instead.

=item *

Context sensitive argument completion, e.g. on MBean names and attributes.

=item * 

Colored output (can be switched off)

=item *

Multi-Server support

=item * 

Remote operation via HTTP(S)

=back

=cut

my %opts = ();
my $result = GetOptions(\%opts,
                        "user|u=s","password|p=s",
                        "proxy=s",
                        "proxy-user=s","proxy-password=s",
                        "config=s",
                        "version!",
                        "color=s",
                        "option|opts|o=s%",
                        "target|t=s","target-user=s","target-password=s",
                        "help|h!" => sub { &Getopt::Long::HelpMessage() }
                       );

my $server = shift;

if ($opts{version}) {
    print "j4psh ",$JMX::Jmx4Perl::VERSION,"\n";
    exit(0);
}

# Parse configuration files
my $j4p_config = new JMX::Jmx4Perl::Config($opts{config});

# Create global context object
my $j4psh = new JMX::Jmx4Perl::J4psh(initial_server => $server,config => $j4p_config,args => \%opts);

# Let the shell run
$j4psh->run;

=head1 LICENSE

This file is part of jmx4perl.

Jmx4perl is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.

jmx4perl is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with jmx4perl.  If not, see <http://www.gnu.org/licenses/>.

A commercial license is available as well. Please contact roland@cpan.org for
further details.

=head1 PROFESSIONAL SERVICES

Just in case you need professional support for this module (or Nagios or JMX in
general), you might want to have a look at
http://www.consol.com/open-source-monitoring/consulting/. Contact roland.huss@consol.de for
further information (or use the contact form at http://www.consol.com/contact/)

=head1 AUTHOR

roland@cpan.org

=cut

1;