Ubic-Service-ServerStarter

 view release on metacpan or  search on metacpan

lib/Ubic/Service/ServerStarter.pm  view on Meta::CPAN

use strict;
use warnings;
package Ubic::Service::ServerStarter;
$Ubic::Service::ServerStarter::VERSION = '0.003';
use base qw(Ubic::Service::Skeleton);

use Params::Validate qw(:all);

use Ubic::Daemon qw(:all);

# ABSTRACT: Run programs using Server::Starter

my $server_command = $ENV{'UBIC_SERVICE_SERVERSTARTER_BIN'} || 'start_server';

sub new {
    my ($class) = (shift);

    my $params = validate(@_, {
        cmd         => { type => ARRAYREF },
        args        => { type => HASHREF, optional => 1 },
        user        => { type => SCALAR, optional => 1 },
        group       => { type => SCALAR | ARRAYREF, optional => 1 },
        status      => { type => CODEREF, optional => 1 },
        ubic_log    => { type => SCALAR, optional => 1 },
        env         => { type => HASHREF, optional => 1 },
        stdout      => { type => SCALAR, optional => 1 },
        stderr      => { type => SCALAR, optional => 1 },
        proxy_logs  => { type => BOOLEAN, optional => 1 },
        pidfile     => { type => SCALAR, optional => 1 },
        cwd         => { type => SCALAR, optional => 1 },
    });

    return bless $params => $class;
}

sub pidfile {
    my ($self) = @_;
    return $self->{pidfile} if defined $self->{pidfile};
    return "/tmp/".$self->full_name.".pid";
}

sub sspidfile {
    my ($self) = @_;
    return $self->{args}{'pid-file'} || $self->pidfile . '.ss';
}

sub statusfile {
    my ($self) = @_;
    return $self->{args}{'status-file'} || $self->pidfile . '.status.ss';
}

sub bin {
    my ($self) = @_;

    my @cmd = split(/\s+/, $server_command);

    my %args = %{ $self->{args} };
    $args{'pid-file'} = $self->sspidfile unless $args{'pid-file'};
    $args{'status-file'} = $self->statusfile unless $args{'status-file'};

    for my $key (keys %args) {
        my $cmd_key = (length $key == 1) ? '-' : '--';
        $cmd_key .= $key;
        my $v = $args{$key};
        next unless defined $v;
        push @cmd, $cmd_key, $v;
    }
    push @cmd, '--', @{ $self->{cmd} };

    return \@cmd;
}

sub start_impl {
    my ($self) = @_;

    my $daemon_opts = {
        bin => $self->bin,
        pidfile => $self->pidfile,
        term_timeout => 5, # TODO - configurable?
    };
    for (qw/ env cwd stdout stderr ubic_log /, ($Ubic::Daemon::VERSION gt '1.48' ? 'proxy_logs' : ())) {
        $daemon_opts->{$_} = $self->{$_} if defined $self->{$_};
    }
    start_daemon($daemon_opts);
    return;
}

sub stop_impl {
    my ($self) = @_;
    return stop_daemon($self->pidfile, { timeout => 7 });
}

sub status_impl {

 view all matches for this distribution
 view release on metacpan -  search on metacpan

( run in 1.760 second using v1.00-cache-2.02-grep-82fe00e-cpan-48ebf85a1963 )