mirror of
https://github.com/monitoring-plugins/monitoring-plugins.git
synced 2026-04-15 22:00:06 -04:00
Reverted check_procs for solaris back to using pst3 due to truncation
for argument fields using other methods git-svn-id: https://nagiosplug.svn.sourceforge.net/svnroot/nagiosplug/nagiosplug/trunk@1937 f882894a-f735-0410-b71e-b25c423dba1c
This commit is contained in:
parent
f00e6a9676
commit
9f3d864fd3
6 changed files with 105 additions and 22 deletions
2
NEWS
2
NEWS
|
|
@ -12,6 +12,8 @@ This file documents the major additions and syntax changes between releases.
|
|||
check_ntp_peer now checks for the LI_ALARM flag
|
||||
Sync to latest Gnulib (includes new floorf function)
|
||||
check_pgsql now successfully builds with postgres lib v8.3 (Bug #1878972)
|
||||
check_procs now accepts --ereg-argument-array for a regular expression match to the argument array
|
||||
Reverted back to using pst3 for Solaris systems. Fixed issues re: -m64 needed to compile on 64bit systems
|
||||
|
||||
1.4.11 13th December 2007
|
||||
Fixed check_http regression in 1.4.10 where following redirects to
|
||||
|
|
|
|||
49
configure.in
49
configure.in
|
|
@ -512,16 +512,49 @@ if test -n "$PS_COMMAND" && test -n "$PS_FORMAT" && test -n "$PS_COLS" && test -
|
|||
ac_cv_ps_cols="$PS_COLS"
|
||||
AC_MSG_RESULT([(command-line) $ac_cv_ps_command])
|
||||
|
||||
dnl Now using the pst3/kmem hack for solaris systems to avoid truncation
|
||||
elif test "$ac_cv_uname_s" = "SunOS"; then
|
||||
#
|
||||
# this is a very, very ugly hack, to hardcode the location for plugins
|
||||
#
|
||||
if test "$libexecdir" = '${exec_prefix}/libexec'; then
|
||||
if test "$exec_prefix" = "NONE"; then
|
||||
if test "$prefix" = "NONE"; then
|
||||
pst3="$ac_default_prefix/libexec/pst3"
|
||||
else
|
||||
pst3="$prefix/libexec/pst3"
|
||||
fi
|
||||
else
|
||||
pst3="$exec_prefix/libexec/pst3"
|
||||
fi
|
||||
else
|
||||
pst3="$libexecdir/pst3"
|
||||
fi
|
||||
ac_cv_ps_command="$pst3"
|
||||
ac_cv_ps_format="%s %d %d %d %d %d %f %s %n"
|
||||
ac_cv_ps_varlist="[procstat,&procuid,&procpid,&procppid,&procvsz,&procrss,&procpcpu,procprog,&pos]"
|
||||
ac_cv_ps_cols=9
|
||||
AC_MSG_RESULT([using nagios-plugins internal ps command (pst3) for solaris])
|
||||
if test `isainfo -b` = 64 ; then
|
||||
PST3CFLAGS="-m64"
|
||||
AC_SUBST(PST3CFLAGS)
|
||||
AC_MSG_NOTICE([using 64bit pst3])
|
||||
else
|
||||
AC_MSG_NOTICE([using 32bit pst3])
|
||||
fi
|
||||
EXTRAS_ROOT="$EXTRAS_ROOT pst3"
|
||||
|
||||
dnl Removing this for the moment - Ton
|
||||
dnl Using /usr/ucb/ps on Solaris systems, to avoid truncation
|
||||
dnl Limitation that command name is not available
|
||||
elif test "$ac_cv_uname_s" = "SunOS" && /usr/ucb/ps -alxwwn 2>/dev/null | \
|
||||
egrep -i ["^ *F +UID +PID +PPID +%C +PRI +NI +SZ +RSS +WCHAN +S +TT +TIME +COMMAND"] > /dev/null
|
||||
then
|
||||
ac_cv_ps_varlist="[&procuid,&procpid,&procppid,&procpcpu,&procvsz,&procrss,procstat,&pos]"
|
||||
ac_cv_ps_command="/usr/ucb/ps -alxwwn"
|
||||
ac_cv_ps_format=["%*s %d %d %d %d %*d %*d %d %d%*[ 0123456789abcdef]%[OSRZT]%*s %*s %n"]
|
||||
ac_cv_ps_cols=8
|
||||
AC_MSG_RESULT([$ac_cv_ps_command])
|
||||
dnl elif test "$ac_cv_uname_s" = "SunOS" && /usr/ucb/ps -alxwwn 2>/dev/null | \
|
||||
dnl egrep -i ["^ *F +UID +PID +PPID +%C +PRI +NI +SZ +RSS +WCHAN +S +TT +TIME +COMMAND"] > /dev/null
|
||||
dnl then
|
||||
dnl ac_cv_ps_varlist="[&procuid,&procpid,&procppid,&procpcpu,&procvsz,&procrss,procstat,&pos]"
|
||||
dnl ac_cv_ps_command="/usr/ucb/ps -alxwwn"
|
||||
dnl ac_cv_ps_format=["%*s %d %d %d %d %*d %*d %d %d%*[ 0123456789abcdef]%[OSRZT]%*s %*s %n"]
|
||||
dnl ac_cv_ps_cols=8
|
||||
dnl AC_MSG_RESULT([$ac_cv_ps_command])
|
||||
|
||||
dnl Some gnu/linux systems (debian for one) don't like -axwo and need axwo.
|
||||
dnl so test for this first...
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ INCLUDES = -I.. -I$(top_srcdir)/lib -I$(top_srcdir)/gl -I$(top_srcdir)/intl -I$(
|
|||
datadir = @datadir@
|
||||
localedir = $(datadir)/locale
|
||||
DEFS = -DLOCALEDIR=\"$(localedir)\" @DEFS@
|
||||
LIBS = @LIBINTL@ @LIBS@ @SSLLIBS@
|
||||
LIBS = @LIBINTL@ @LIBS@
|
||||
|
||||
noinst_PROGRAMS = check_dhcp check_icmp @EXTRAS_ROOT@
|
||||
|
||||
|
|
@ -68,6 +68,7 @@ install-exec-local: $(noinst_PROGRAMS)
|
|||
# the actual targets
|
||||
check_dhcp_LDADD = $(NETLIBS)
|
||||
check_icmp_LDADD = $(NETLIBS) $(SOCKETLIBS)
|
||||
pst3_CFLAGS = @PST3CFLAGS@
|
||||
pst3_LDADD = -lkvm
|
||||
|
||||
check_dhcp_DEPENDENCIES = check_dhcp.c $(NETOBJS) $(DEPLIBS)
|
||||
|
|
|
|||
|
|
@ -187,9 +187,10 @@ static int HandlePsInfo (char *szPath, psinfo_t *pPsInfo)
|
|||
thisProg = myArgv[0];
|
||||
|
||||
/* Display the ps columns (except for argv) */
|
||||
printf("%c %5d %5d %6lu %6lu %4.1f %s ",
|
||||
printf("%c %5d %5d %5d %6lu %6lu %4.1f %s ",
|
||||
pPsInfo->pr_lwp.pr_sname,
|
||||
(int)(pPsInfo->pr_euid),
|
||||
(int)(pPsInfo->pr_pid),
|
||||
(int)(pPsInfo->pr_ppid),
|
||||
(unsigned long)(pPsInfo->pr_size),
|
||||
(unsigned long)(pPsInfo->pr_rssize),
|
||||
|
|
|
|||
|
|
@ -43,6 +43,7 @@ const char *email = "nagiosplug-devel@lists.sourceforge.net";
|
|||
#include "common.h"
|
||||
#include "popen.h"
|
||||
#include "utils.h"
|
||||
#include "regex.h"
|
||||
|
||||
#include <pwd.h>
|
||||
|
||||
|
|
@ -69,6 +70,7 @@ int options = 0; /* bitmask of filter criteria to test against */
|
|||
#define RSS 128
|
||||
#define PCPU 256
|
||||
#define ELAPSED 512
|
||||
#define EREG_ARGS 1024
|
||||
/* Different metrics */
|
||||
char *metric_name;
|
||||
enum metric {
|
||||
|
|
@ -89,6 +91,7 @@ float pcpu;
|
|||
char *statopts;
|
||||
char *prog;
|
||||
char *args;
|
||||
regex_t re_args;
|
||||
char *fmt;
|
||||
char *fails;
|
||||
char tmp[MAX_INPUT_BUFFER];
|
||||
|
|
@ -211,6 +214,8 @@ main (int argc, char **argv)
|
|||
resultsum |= STAT;
|
||||
if ((options & ARGS) && procargs && (strstr (procargs, args) != NULL))
|
||||
resultsum |= ARGS;
|
||||
if ((options & EREG_ARGS) && procargs && (regexec(&re_args, procargs, (size_t) 0, NULL, 0) == 0))
|
||||
resultsum |= EREG_ARGS;
|
||||
if ((options & PROG) && procprog && (strcmp (prog, procprog) == 0))
|
||||
resultsum |= PROG;
|
||||
if ((options & PPID) && (procppid == ppid))
|
||||
|
|
@ -231,6 +236,12 @@ main (int argc, char **argv)
|
|||
continue;
|
||||
|
||||
procs++;
|
||||
if (verbose >= 2) {
|
||||
printf ("Matched: uid=%d vsz=%d rss=%d pid=%d ppid=%d pcpu=%.2f stat=%s etime=%s prog=%s args=%s\n",
|
||||
procuid, procvsz, procrss,
|
||||
procpid, procppid, procpcpu, procstat,
|
||||
procetime, procprog, procargs);
|
||||
}
|
||||
|
||||
if (metric == METRIC_VSZ)
|
||||
i = check_thresholds (procvsz);
|
||||
|
|
@ -326,6 +337,9 @@ process_arguments (int argc, char **argv)
|
|||
char *user;
|
||||
struct passwd *pw;
|
||||
int option = 0;
|
||||
int err;
|
||||
int cflags = REG_NOSUB | REG_EXTENDED;
|
||||
char errbuf[MAX_INPUT_BUFFER];
|
||||
static struct option longopts[] = {
|
||||
{"warning", required_argument, 0, 'w'},
|
||||
{"critical", required_argument, 0, 'c'},
|
||||
|
|
@ -342,6 +356,7 @@ process_arguments (int argc, char **argv)
|
|||
{"help", no_argument, 0, 'h'},
|
||||
{"version", no_argument, 0, 'V'},
|
||||
{"verbose", no_argument, 0, 'v'},
|
||||
{"ereg-argument-array", required_argument, 0, CHAR_MAX+1},
|
||||
{0, 0, 0, 0}
|
||||
};
|
||||
|
||||
|
|
@ -450,6 +465,15 @@ process_arguments (int argc, char **argv)
|
|||
asprintf (&fmt, "%s%sargs '%s'", (fmt ? fmt : ""), (options ? ", " : ""), args);
|
||||
options |= ARGS;
|
||||
break;
|
||||
case CHAR_MAX+1:
|
||||
err = regcomp(&re_args, optarg, cflags);
|
||||
if (err != 0) {
|
||||
regerror (err, &re_args, errbuf, MAX_INPUT_BUFFER);
|
||||
die (STATE_UNKNOWN, "PROCS %s: %s - %s\n", _("UNKNOWN"), _("Could not compile regular expression"), errbuf);
|
||||
}
|
||||
asprintf (&fmt, "%s%sregex args '%s'", (fmt ? fmt : ""), (options ? ", " : ""), optarg);
|
||||
options |= EREG_ARGS;
|
||||
break;
|
||||
case 'r': /* RSS */
|
||||
if (sscanf (optarg, "%d%[^0-9]", &rss, tmp) == 1) {
|
||||
asprintf (&fmt, "%s%sRSS >= %d", (fmt ? fmt : ""), (options ? ", " : ""), rss);
|
||||
|
|
@ -716,6 +740,8 @@ print_help (void)
|
|||
printf (" %s\n", _("Only scan for processes with user name or ID indicated."));
|
||||
printf (" %s\n", "-a, --argument-array=STRING");
|
||||
printf (" %s\n", _("Only scan for processes with args that contain STRING."));
|
||||
printf (" %s\n", "--ereg-argument-array=STRING");
|
||||
printf (" %s\n", _("Only scan for processes with args that contain the regex STRING."));
|
||||
printf (" %s\n", "-C, --command=COMMAND");
|
||||
printf (" %s\n", _("Only scan for exact matches of COMMAND (without path)."));
|
||||
|
||||
|
|
|
|||
|
|
@ -6,20 +6,40 @@
|
|||
#
|
||||
|
||||
use strict;
|
||||
use Test;
|
||||
use Test::More;
|
||||
use NPTest;
|
||||
|
||||
use vars qw($tests);
|
||||
BEGIN {$tests = 12; plan tests => $tests}
|
||||
|
||||
my $t;
|
||||
|
||||
$t += checkCmd( "./check_procs -w 100000 -c 100000", 0, '/^PROCS OK: [0-9]+ process(es)?$/' );
|
||||
$t += checkCmd( "./check_procs -w 100000 -c 100000 -s Z", 0, '/^PROCS OK: [0-9]+ process(es)? with /' );
|
||||
$t += checkCmd( "./check_procs -w 0 -c 10000000", 1, '/^PROCS WARNING: [0-9]+ process(es)?$/' );
|
||||
$t += checkCmd( "./check_procs -w 0 -c 0", 2, '/^PROCS CRITICAL: [0-9]+ process(es)?$/' );
|
||||
$t += checkCmd( "./check_procs -w 0 -c 0 -s S", 2, '/^PROCS CRITICAL: [0-9]+ process(es)? with /' );
|
||||
$t += checkCmd( "./check_procs -w 0 -c 10000000 -p 1", 1, '/^PROCS WARNING: [0-9]+ process(es)? with PPID = 1/' );
|
||||
if (`uname -s` eq "SunOS\n") {
|
||||
plan skip_all => "Ignoring tests on solaris because of pst3";
|
||||
} else {
|
||||
plan tests => 12;
|
||||
}
|
||||
|
||||
my $result;
|
||||
|
||||
$result = NPTest->testCmd( "./check_procs -w 100000 -c 100000" );
|
||||
is( $result->return_code, 0, "Checking less than 10000 processes" );
|
||||
like( $result->output, '/^PROCS OK: [0-9]+ process(es)?$/', "Output correct" );
|
||||
|
||||
$result = NPTest->testCmd( "./check_procs -w 100000 -c 100000 -s Z" );
|
||||
is( $result->return_code, 0, "Checking less than 100000 zombie processes" );
|
||||
like( $result->output, '/^PROCS OK: [0-9]+ process(es)? with /', "Output correct" );
|
||||
|
||||
$result = NPTest->testCmd( "./check_procs -w 0 -c 100000" );
|
||||
is( $result->return_code, 1, "Checking warning if processes > 0" );
|
||||
like( $result->output, '/^PROCS WARNING: [0-9]+ process(es)?$/', "Output correct" );
|
||||
|
||||
$result = NPTest->testCmd( "./check_procs -w 0 -c 0" );
|
||||
is( $result->return_code, 2, "Checking critical if processes > 0" );
|
||||
like( $result->output, '/^PROCS CRITICAL: [0-9]+ process(es)?$/', "Output correct" );
|
||||
|
||||
$result = NPTest->testCmd( "./check_procs -w 0 -c 0 -s S" );
|
||||
is( $result->return_code, 2, "Checking critical if sleeping processes" );
|
||||
like( $result->output, '/^PROCS CRITICAL: [0-9]+ process(es)? with /', "Output correct" );
|
||||
|
||||
$result = NPTest->testCmd( "./check_procs -w 0 -c 100000 -p 1" );
|
||||
is( $result->return_code, 1, "Checking warning for processes by parentid = 1" );
|
||||
like( $result->output, '/^PROCS WARNING: [0-9]+ process(es)? with PPID = 1/', "Output correct" );
|
||||
|
||||
exit(0) if defined($Test::Harness::VERSION);
|
||||
exit($tests - $t);
|
||||
|
|
|
|||
Loading…
Reference in a new issue