Changeset e941b3b70118b141c0535180df00742d2c121c6f in xas-supervisor


Ignore:
Timestamp:
12/04/15 09:28:46 (3 years ago)
Author:
Kevin L. Esteb <kevin@…>
Branches:
master
Children:
d997f3599fa08e6e145dc7e299a5981095ca2874
Parents:
80a3bba16e0817b446708050ce3e56d31055a11e
git-author:
Kevin L. Esteb <kevin@…> (12/04/15 09:28:46)
git-committer:
Kevin L. Esteb <kevin@…> (12/04/15 09:28:46)
Message:

writting code

Location:
trunk/lib/XAS
Files:
1 added
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/lib/XAS/Apps/Supervisor/Monitor.pm

    r80a3bba16e0817b446708050ce3e56d31055a11e re941b3b70118b141c0535180df00742d2c121c6f  
    33our $VERSION = '0.01'; 
    44 
    5 use XAS::Lib::Process; 
     5use XAS::Supervisor::Monitor; 
    66use XAS::Supervisor::Controller; 
    77 
    88use XAS::Class 
    9   debug      => 0, 
    10   version    => $VERSION, 
    11   base       => 'XAS::Lib::App::Service', 
    12   mixin      => 'XAS::Lib::Mixins::Configs', 
    13   utils      => 'dotid trim', 
    14   constants  => 'TRUE FALSE :jsonrpc', 
    15   accessors  => 'cfg', 
    16   filesystem => 'File Dir', 
     9  debug   => 0, 
     10  version => $VERSION, 
     11  base    => 'XAS::Lib::App::Service', 
    1712  vars => { 
    1813    SERVICE_NAME         => 'XAS_Supervisor', 
     
    2924    my $self = shift; 
    3025 
    31     my $processes = {}; 
    32     my @sections = $self->cfg->Sections(); 
    33  
    34     foreach my $section (@sections) { 
    35  
    36         next if ($section !~ /^program:/); 
    37  
    38         my ($alias)  = $section =~ /^program:(.*)/; 
    39  
    40         $alias = trim($alias); 
    41  
    42         my $process = XAS::Lib::Process->new( 
    43             -alias          => $alias, 
    44             -auto_start     => $self->cfg->val($section, 'auto-start', TRUE), 
    45             -auto_restart   => $self->cfg->val($section, 'auto-restart', TRUE), 
    46             -command        => $self->cfg->val($section, 'command'), 
    47             -directory      => Dir($self->cfg->val($section, 'directory', "/")), 
    48             -exit_codes     => $self->cfg->val($section, 'exit-codes', '0,1'), 
    49             -exit_retries   => $self->cfg->val($section, 'exit-retires', -1), 
    50             -group          => $self->cfg->val($section, 'group', 'xas'), 
    51             -priority       => $self->cfg->val($section, 'priority', '0'), 
    52             -pty            => 1, 
    53             -umask          => $self->cfg->val($section, 'umask', '0022'), 
    54             -user           => $self->cfg->val($section, 'user', 'xas'), 
    55             -redirect       => $self->cfg->val($section, 'redirect', FALSE), 
    56             -output_handler => sub { 
    57                 my $output = shift; 
    58                 $output = trim($output); 
    59                 if (my ($level, $line) = $output =~/\s+(\w+)\s+-\s+(.*)/ ) { 
    60                     $level = lc(trim($level)); 
    61                     $line  = trim($line); 
    62                     $self->log->$level(sprintf('%s: %s', $alias, $line)); 
    63                 } else { 
    64                     $self->log->info(sprintf('%s: -> %s', $alias, output)); 
    65                 } 
    66             } 
    67         ); 
    68  
    69         $self->service->register($alias); 
    70  
    71     } 
    72  
    7326    my $controller = XAS::Supervisor::Controller->new( 
    74         -alias     => 'controller', 
    75         -port      => $self->port, 
    76         -host      => $self->host, 
    77         -processes => $processes, 
     27        -alias => 'controller', 
     28        -port  => $self->port, 
     29        -host  => $self->host, 
     30        -processes => XAS::Supervisor::Monitor->load( 
     31            -service = $self->service 
     32        ) 
    7833    ); 
    7934 
     
    9853 
    9954    $self->{'port'} = RPC_DEFAULT_PORT; 
    100     $self->{'host'} = 'localhost'; 
     55    $self->{'host'} = RPC_DEFAULT_HOST; 
    10156 
    10257    return { 
     
    11065# Private Methods 
    11166# ---------------------------------------------------------------------- 
    112  
    113 sub init { 
    114     my $class = shift; 
    115  
    116     my $self = $class->SUPER::init(@_); 
    117  
    118     $self->load_config(); 
    119  
    120     return $self; 
    121  
    122 } 
    12367 
    124681; 
  • trunk/lib/XAS/Msgs/Supervisor.msg

    r80a3bba16e0817b446708050ce3e56d31055a11e re941b3b70118b141c0535180df00742d2c121c6f  
    88 
    99[messages] 
    10 supervisor_unable = unable to find method %s for %s 
    11 supervisor_status = %s is currently %s 
     10supervisor_unable   = unable to find method %s for %s 
     11supervisor_status   = %s is currently "%s" 
     12supervisor_nostatus = unable to determine status for %s 
    1213 
  • trunk/lib/XAS/Supervisor/Controller.pm

    r80a3bba16e0817b446708050ce3e56d31055a11e re941b3b70118b141c0535180df00742d2c121c6f  
    22 
    33our $VERSION = '0.01'; 
    4  
    5 use Try::Tiny; 
    64 
    75use XAS::Class 
     
    108  base      => 'XAS::Lib::Net::Server', 
    119  mixin     => 'XAS::Lib::Mixins::JSON::Server', 
    12   constants => ':proc', 
     10  constants => ':process :jsonrpc', 
    1311  vars => { 
    1412    PARAMS => { 
    15       -processes => 1 
     13      -processes => 1, 
     14      -retires   => { optional => 1, default => 5 }, 
    1615    } 
    1716  } 
     
    5453    ]); 
    5554 
    56     my $alias = $self->alias; 
    57  
    58     $poe_kernel->delay('check_status', 5, $params, $ctx, $status); 
     55    my $count = 0; 
     56    my $alias = $self->alias; 
     57 
     58    $poe_kernel->delay_add('check_status', 5, $params, $ctx, $status, $count); 
    5959 
    6060} 
     
    6565 
    6666sub _stop_process { 
    67     my ($self, $params, $ctx) = @_[OBJECT,ARG0,ARG1]; 
     67    my $self = $_[OBJECT]; 
     68    my ($params, $ctx) = validate_params(\@_[ARG0,ARG1], [ 
     69        { type => HASHREF }, 
     70        { type => HASHREF }, 
     71    }); 
    6872 
    6973    my $alias = $self->alias; 
     
    8993 
    9094sub _kill_process { 
    91     my ($self, $params, $ctx) = @_[OBJECT,ARG0,ARG1]; 
     95    my $self = $_[OBJECT]; 
     96    my ($params, $ctx) = validate_params(\@_[ARG0,ARG1], [ 
     97        { type => HASHREF }, 
     98        { type => HASHREF }, 
     99    }); 
    92100 
    93101    my $alias = $self->alias; 
     
    113121 
    114122sub _stat_process { 
    115     my ($self, $params, $ctx) = @_[OBJECT,ARG0,ARG1]; 
    116  
    117     my $alias = $self->alias; 
    118     my $name  = $params->{'name'}; 
    119  
    120     if (my $process = $self->processes->{$name}) { 
    121  
    122         $process->stat_process(); 
     123    my $self = $_[OBJECT]; 
     124    my ($params, $ctx) = validate_params(\@_[ARG0,ARG1], [ 
     125        { type => HASHREF }, 
     126        { type => HASHREF }, 
     127    }); 
     128 
     129    my $alias = $self->alias; 
     130    my $name  = $params->{'name'}; 
     131 
     132    if (my $process = $self->processes->{$name}) { 
     133 
     134        my $stat     = $process->stat_process(); 
     135        my $status   = $self->_convert_stat($stat); 
     136        my $response = $self->message('supervisor_status', $name, $status); 
     137 
     138        $self->process_response($response, $ctx); 
    123139 
    124140    } else { 
     
    136152 
    137153sub _start_process { 
    138     my ($self, $params, $ctx) = @_[OBJECT,ARG0,ARG1]; 
     154    my $self = $_[OBJECT]; 
     155    my ($params, $ctx) = validate_params(\@_[ARG0,ARG1], [ 
     156        { type => HASHREF }, 
     157        { type => HASHREF }, 
     158    }); 
    139159 
    140160    my $alias = $self->alias; 
     
    160180 
    161181sub _pause_process { 
    162     my ($self, $params, $ctx) = @_[OBJECT,ARG0,ARG1]; 
     182    my $self = $_[OBJECT]; 
     183    my ($params, $ctx) = validate_params(\@_[ARG0,ARG1], [ 
     184        { type => HASHREF }, 
     185        { type => HASHREF }, 
     186    }); 
    163187 
    164188    my $alias = $self->alias; 
     
    184208 
    185209sub _resume_process { 
    186     my ($self, $params, $ctx) = @_[OBJECT,ARG0,ARG1]; 
     210    my $self = $_[OBJECT]; 
     211    my ($params, $ctx) = validate_params(\@_[ARG0,ARG1], [ 
     212        { type => HASHREF }, 
     213        { type => HASHREF }, 
     214    }); 
    187215 
    188216    my $alias = $self->alias; 
     
    208236 
    209237sub _check_status { 
    210     my ($self, $params, $ctx, $status) = @_[OBJECT,ARG0,ARG1]; 
    211  
    212     my $alias = $self->alias; 
    213     my $name  = $params->{'name'}; 
    214  
    215     if (my $process = $self->processes->{$name}) { 
    216  
    217         my $stat = $process->stat_process(); 
     238    my $self = $_[OBJECT]; 
     239    my ($params, $ctx, $status, $count) = validate_params(\@_[ARG0...ARG3], [ 
     240        { type => HASHREF }, 
     241        { type => HASHREF }, 
     242        1, 
     243        1, 
     244    ]); 
     245 
     246    my $alias = $self->alias; 
     247    my $name  = $params->{'name'}; 
     248 
     249    if (my $process = $self->processes->{$name}) { 
     250 
     251        my $stat = $process->status(); 
    218252 
    219253        if ($stat == $status) { 
     
    225259        } else { 
    226260 
    227             $self->check_status($params, $ctx, $status); 
     261            $count += 1; 
     262 
     263            if ($count < $self->retires) { 
     264 
     265                $poe_kernel->delay_add('check_status', 5, $params, $ctx, $status, $count); 
     266 
     267            } else { 
     268 
     269                my $error = { 
     270                    code    => RPC_ERR_APP, 
     271                    message => $self->message('supervisor_nostatus', $name) 
     272                }; 
     273 
     274                $self->process_errors($error, $ctx); 
     275 
     276            } 
    228277 
    229278        } 
     
    245294# Private Methods 
    246295# ---------------------------------------------------------------------- 
     296 
     297sub _convert_stat { 
     298    my $self = shift; 
     299    my $stat = shift; 
     300 
     301    my $status = 'unknown'; 
     302 
     303    $status = 'suspended ready'   if ($stat == 6); 
     304    $status = 'suspended blocked' if ($stat == 5); 
     305    $status = 'blocked'           if ($stat == 4); 
     306    $status = 'running'           if ($stat == 3); 
     307    $status = 'ready'             if ($stat == 2); 
     308    $status = 'other'             if ($stat == 1); 
     309 
     310    return $status; 
     311 
     312} 
    247313 
    248314sub init { 
Note: See TracChangeset for help on using the changeset viewer.