summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSven Nierlein <sven@nierlein.de>2021-10-25 17:28:17 +0200
committerSven Nierlein <sven@nierlein.org>2021-11-01 13:35:11 +0100
commit282ccd4a8bbaa5d99c7c0cf6eba963ee3c0bff3a (patch)
tree0d2ee78512b1872f3673f9175c2617cfa0b7fb23
parent1738d14c0cae83a24927f34e11a673c7e29baa04 (diff)
downloadmonitoring-plugins-282ccd4a8bbaa5d99c7c0cf6eba963ee3c0bff3a.tar.gz
check_procs: improve ps args autodetection
one of the first ps commands in the configure.ac is `axwo 'stat comm vsz rss user uid pid ppid args'` which works on most modern linux systems (checked debian 10/11 and centos 7/8). But this test misses the etime argument. Therefore `check_procs --metric=ELAPSED` does not work. To fix this, we simply do the same test including etime before that one. Signed-off-by: Sven Nierlein <sven@nierlein.de>
-rw-r--r--configure.ac10
-rwxr-xr-xplugins/tests/check_procs.t11
2 files changed, 17 insertions, 4 deletions
diff --git a/configure.ac b/configure.ac
index 7c17dcd1..dfc37b5e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -783,6 +783,16 @@ dnl ac_cv_ps_format=["%*s %d %d %d %d %*d %*d %d %d%*[ 0123456789abcdef]%[OSRZT
783dnl ac_cv_ps_cols=8 783dnl ac_cv_ps_cols=8
784dnl AC_MSG_RESULT([$ac_cv_ps_command]) 784dnl AC_MSG_RESULT([$ac_cv_ps_command])
785 785
786dnl This one is the exact same test as the next one but includes etime
787elif ps axwo 'stat comm vsz rss user uid pid ppid etime args' 2>/dev/null | \
788 egrep -i ["^ *STAT +[UCOMAND]+ +VSZ +RSS +USER +UID +PID +PPID +ELAPSED +COMMAND"] > /dev/null
789then
790 ac_cv_ps_varlist="[procstat,&procuid,&procpid,&procppid,&procvsz,&procrss,&procpcpu,procetime,procprog,&pos]"
791 ac_cv_ps_command="$PATH_TO_PS axwo 'stat uid pid ppid vsz rss pcpu etime comm args'"
792 ac_cv_ps_format="%s %d %d %d %d %d %f %s %s %n"
793 ac_cv_ps_cols=10
794 AC_MSG_RESULT([$ac_cv_ps_command])
795
786dnl Some gnu/linux systems (debian for one) don't like -axwo and need axwo. 796dnl Some gnu/linux systems (debian for one) don't like -axwo and need axwo.
787dnl so test for this first... 797dnl so test for this first...
788elif ps axwo 'stat comm vsz rss user uid pid ppid args' 2>/dev/null | \ 798elif ps axwo 'stat comm vsz rss user uid pid ppid args' 2>/dev/null | \
diff --git a/plugins/tests/check_procs.t b/plugins/tests/check_procs.t
index 54d43d9b..7f612e8a 100755
--- a/plugins/tests/check_procs.t
+++ b/plugins/tests/check_procs.t
@@ -69,9 +69,13 @@ SKIP: {
69 like( $result->output, '/^PROCS OK: 0 processes with UID = -2 \(nobody\), args \'UsB\'/', "Output correct" ); 69 like( $result->output, '/^PROCS OK: 0 processes with UID = -2 \(nobody\), args \'UsB\'/', "Output correct" );
70}; 70};
71 71
72$result = NPTest->testCmd( "$command --ereg-argument-array='mdworker.*501'" ); 72SKIP: {
73is( $result->return_code, 0, "Checking regexp search of arguments" ); 73 skip 'check_procs is compiled with etime format support', 2 if `$command -vvv` =~ m/etime/mx;
74is( $result->output, "PROCS OK: 1 process with regex args 'mdworker.*501' | procs=1;;;0;", "Output correct" ); 74
75 $result = NPTest->testCmd( "$command --ereg-argument-array='mdworker.*501'" );
76 is( $result->return_code, 0, "Checking regexp search of arguments" );
77 is( $result->output, "PROCS OK: 1 process with regex args 'mdworker.*501' | procs=1;;;0;", "Output correct" );
78}
75 79
76$result = NPTest->testCmd( "$command --vsz 1000000" ); 80$result = NPTest->testCmd( "$command --vsz 1000000" );
77is( $result->return_code, 0, "Checking filter by VSZ" ); 81is( $result->return_code, 0, "Checking filter by VSZ" );
@@ -129,4 +133,3 @@ is( $result->output, 'RSS CRITICAL: 5 crit, 0 warn out of 95 processes [WindowSe
129$result = NPTest->testCmd( "$command --ereg-argument-array='(nosuchname|nosuch2name)'" ); 133$result = NPTest->testCmd( "$command --ereg-argument-array='(nosuchname|nosuch2name)'" );
130is( $result->return_code, 0, "Checking no pipe symbol in output" ); 134is( $result->return_code, 0, "Checking no pipe symbol in output" );
131is( $result->output, "PROCS OK: 0 processes with regex args '(nosuchname,nosuch2name)' | procs=0;;;0;", "Output correct" ); 135is( $result->output, "PROCS OK: 0 processes with regex args '(nosuchname,nosuch2name)' | procs=0;;;0;", "Output correct" );
132