The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl
use strict;
use warnings;
use App::Metabase::Relayd;
$|=1; # Make STDOUT hot
App::Metabase::Relayd->run();

__END__

=head1 NAME

metabase-relayd - A relay server for Metabase

=head1 SYNOPSIS

 metabase-relayd [options]

 Options:
   --debug	      - display interesting things;
   --help	        - Display program usage;
   --version	    - Display program version;
   --url URI	    - The URI of a Metabase server to use;
   --idfile       - The path to an ID file to use;
   --dbfile       - The path to the database file to use;
   --address      - A particular IP address to listen on;
   --port         - The TCP port to listen on;
   --multiple     - Whether to use multiple HTTP clients;
   --submissions  - control the number of 'multiple' clients;
   --offline      - disable report submissions to the Metabase;
   --nocurl       - disable automatic usage of POE::Component::Curl::Multi;

=head1 DESCRIPTION

metabase-relayd is a L<Metabase> relay server that acts an intermediate between
L<Test::Reporter::Transport::Socket> based CPAN Tester clients and a L<Metabase>
server.

=head1 COMMAND LINE OPTIONS

Command line options override options given in the L</"CONFIGURATION FILE">

=over

=item C<--debug>

Turns on all output.

=item C<--help>

Displays program usage and exits.

=item C<--version>

Displays the program version and exits.

=item C<--idfile FILE>

Specify a L<Metabase> ID file to use.

The default is C<metabase_id.json> located in the C<.metabase> directory.

=item C<--dbfile FILE>

Specify the file that L<DBD::SQLite> will use for the queue storage.

The default is C<relay.db> located in the C<.metabase> directory.

=item C<--url URI>

The URL of a L<Metabase> server to send reports to.

=item C<--address IP_ADDRESS>

Specify a particular IP address for the listening socket to bind to. The default is INADDR_ANY.
This may also be a comma-separated list of IP addresses, if you wish to bind to more than one
address.

=item C<--port TCP_PORT>

Specify the TCP port for the listening socket to bind to. The default is 0, ie. pick a random port.

=item C<--multiple>

By default a single L<POE::Component::Client::HTTP> instance is created and used to send
each report. Enabling this option means that a new instance of L<POE::Component::Client::HTTP> will
be created for each report submitted.

=item C<--submissions INTEGER>

In conjunction with C<multiple> controls the number of concurrent submissions to the Metabase.

=item C<--offline>

Enable this so that reports are recorded to the database but not submitted to the Metabase.

=item C<--nocurl>

Enable this to disable automatic usage of L<POE::Component::Curl::Multi>.

=back

=head1 CONFIGURATION FILE

A number of the above options may be specified in a configuration file, C<relayd>, that is stored in the C<.metabase>
directory. See L</"ENVIRONMENT"> for where the C<.metabase> directory is located and how to effect its location.

Command line options will override options from the configuration file.

The configuration file is parsed using L<Config::Tiny>.

A subset of the command line options can be specified in the configuration file:

=over

=item C<debug=BOOL>

Set to a true value to turn on all output.

  debug=1

=item C<idfile=FILE>

Specify a L<Metabase> ID file to use.

  idfile=/home/bingos/.metabase/id.json

The default is C<metabase_id.json> located in the C<.metabase> directory.

=item C<dbfile=FILE>

Specify the file that L<DBD::SQLite> will use for the queue storage.

  dbfile=/home/bingos/.metabase/relaydb

The default is C<relay.db> located in the C<.metabase> directory.

=item C<url=URI>

The URL of a L<Metabase> server to send reports to.

  url=https://metabase.example.url/

=item C<address=IP_ADDRESS>

Specify a particular IP address for the listening socket to bind to. The default is INADDR_ANY.
This may also be a comma-separated list of IP addresses, if you wish to bind to more than one
address.

  address=192.168.0.254

  address=192.168.0.254,127.0.0.1

=item C<port=TCP_PORT>

Specify the TCP port for the listening socket to bind to. The default is 0, ie. pick a random port.

  port=8080

=item C<multiple=BOOL>

By default a single L<POE::Component::Client::HTTP> instance is created and used to send
each report. Enabling this option means that a new instance of L<POE::Component::Client::HTTP> will
be created for each report submitted.

  multiple=1

=item C<submissions=INTEGER>

In conjunction with C<multiple> controls the number of concurrent submissions to the Metabase.

  submissions=10

=item C<offline=BOOL>

Enable this so that reports are recorded to the database but not submitted to the Metabase.

  offline=1

=item C<nocurl=BOOL>

Enable this to disable automatic usage of L<POE::Component::Curl::Multi>.

  nocurl=1

=back

=head1 ENVIRONMENT

C<metabase-relayd> uses the C<.metabase> directory to locate the configuration file, C<relayd>.

This is usually located in the current user's home directory. Setting the environment variable C<PERL5_MBRELAYD_DIR> will
effect where the C<.metabase> directory is located.

=head1 KUDOS

Thanks go to Ricardo SIGNES for L<CPAN::Mini> which inspired the design of this script/module.

=head1 AUTHOR

Chris C<BinGOs> Williams <chris@bingosnet.co.uk>

=head1 LICENSE

Copyright E<copy> Chris Williams

This module may be used, modified, and distributed under the same terms as Perl itself. Please see the license that came with your Perl distribution for details.

=head1 SEE ALSO

L<http://www.cpantesters.org/>		- CPAN Testers: Index

L<http://wiki.cpantesters.org/>	- CPAN Testers Wiki

L<http://stats.cpantesters.org/>	- CPAN Testers Statistics

L<Metabase>

L<DBD::SQLite>

L<Config::Tiny>

L<POE::Component::Metabase::Relay::Server>

=cut