#!/usr/bin/env perl

use strict;
use warnings;
use Inca::Reporter::SimpleUnit;

my $reporter = new Inca::Reporter::SimpleUnit(
  name => 'cluster.rm.ps.unit',
  description => 'Checks RM process count',
  version => 3,
  unit_name => 'rmPs'
);

$reporter->addArg( "maxSched", "maximum number of Schedule::Cron ps", "2" );
$reporter->addArg( "maxMan", "maximum number of sbin/reporter-manager ps", "3" );
$reporter->addArg( "psArgs", "arguments to pass to ps", "-x -o pid,command" );
$reporter->processArgv(@ARGV);
my $maxSched = $reporter->argValue( "maxSched" );
my $maxMan = $reporter->argValue( "maxMan" );
my $psArgs = $reporter->argValue( "psArgs" );

my $psCmd = "ps $psArgs";
my @output = $reporter->loggedCommand( $psCmd );
$reporter->failPrintAndExit("$psCmd failed: @output $!") if $?;
my $schedCount = 0;
my $manCount = 0;
for my $ps (@output){
  if ($ps =~ m/Schedule::Cron/){
    $schedCount++;
  }
  if ($ps =~ m/sbin\/reporter-manager/){
    $manCount++;
  }
}
if ($schedCount > $maxSched || $manCount > $maxMan) {
  $reporter->log("debug", "Schedule::Cron count: $schedCount");
  $reporter->log("debug", "sbin/reporter-manager count: $manCount");
  $reporter->failPrintAndExit("Num of Schedule::Cron ps exceeds $maxSched 
     or sbin/reporter-manager ps exceeds $maxMan");
}
$reporter->unitSuccess();
$reporter->print();


Click here to see help information for the cluster.rm.ps.unit reporter.