App-Ringleader

 view release on metacpan or  search on metacpan

lib/App/Ringleader.pm  view on Meta::CPAN

sub start_monitor {
    my $self = shift;

    return if fork;

    while( sleep $self->inactivity_delay ) {
        $self->check_activity_for( $_ ) for keys %{ $self->services };
    }
}

sub check_activity_for {
    my( $self, $s ) = @_;

    my $time = $self->cache->get($s);

    # no cache? assume not running
    return if !$time or time - $time <= $self->inactivity_delay;

    $self->services->{$s}->stop;

    $self->cache->remove($s);
}

1;

__END__

=pod

=encoding UTF-8

=head1 NAME

App::Ringleader - Proxy for sproradically-used web application

=head1 VERSION

version 0.1.0

=head1 SYNOPSIS

    use App::Ringleader;

    App::Ringleader->new( conf => 'ringleader.yml' )->run;

=head1 DESCRIPTION

Ringleader is a proxy that will wake up psgi applications upon request 
and shut them down after a period of inactivity. It's meant to provide a
middle-ground between the slowliness of CGI and the constant resource
consumption of plack applications for services that are not often used.

Typically, you'll use it via the C<ringleader> script.

Ringleader relies on L<Ubic> to start and stop the services. For PSGI
applications, you probably want to define your services using
L<Ubic::Service::Plack>.

=head1 CONFIGURATION FILE

The Ringleader configuration file is YAML-based, and looks like

    port: 3000
    inactivity_delay: 60
    services:
        techblog.babyl.ca:  webapp.techblog
        kittenwar.babyl.ca: webapp.kittenwar
    CHI:
        driver: FastMmap

=head2 port

The port of the proxy. Defaults to I<3000>.

=head2 inactivity_delay

The minimum time (in minutes) of inactivity before a service will be shut down.

Defaults to 60 minutes.

=head2 services

The services Ringleader will monitor. Each service is configured via a
key/value pair. The key is the request's host, and the value is the 
<Ubic> service it related to.

=head2 CHI

The arguments to pass to L<CHI> to build the caching system used
by the service. If not provided, L<CHI::Driver::FastMmap> will be used.

=head1 SEE ALSO

L<http://techblog.babyl.ca/entry/ringleader> - The original blog entry

=head1 AUTHOR

Yanick Champoux <yanick@babyl.dyndns.org>

=head1 COPYRIGHT AND LICENSE

This software is copyright (c) 2014 by Yanick Champoux.

This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.

=cut



( run in 0.440 second using v1.01-cache-2.11-cpan-483215c6ad5 )