Adding d/p/33_check_procs_exclude-process from upstream
This commit is contained in:
parent
47b7589ce4
commit
6f89be8380
168
debian/patches/33_check_procs_exclude-process
vendored
Normal file
168
debian/patches/33_check_procs_exclude-process
vendored
Normal file
|
@ -0,0 +1,168 @@
|
||||||
|
From 691376d3a16da06e34740593d9a1de0e00cbffb8 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Christian Kujau <lists@nerdbynature.de>
|
||||||
|
Date: Mon, 20 Mar 2023 11:35:01 +0100
|
||||||
|
Subject: [PATCH 1/2] check_procs: Implement --exclude-process to exclude
|
||||||
|
specific processes.
|
||||||
|
|
||||||
|
Signed-off-by: Christian Kujau <lists@nerdbynature.de>
|
||||||
|
---
|
||||||
|
plugins/check_procs.c | 47 +++++++++++++++++++++++++++++++++++++++++--
|
||||||
|
1 file changed, 45 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/plugins/check_procs.c b/plugins/check_procs.c
|
||||||
|
index a025ee891..d672dd44e 100644
|
||||||
|
--- a/plugins/check_procs.c
|
||||||
|
+++ b/plugins/check_procs.c
|
||||||
|
@@ -70,6 +70,7 @@ int options = 0; /* bitmask of filter criteria to test against */
|
||||||
|
#define PCPU 256
|
||||||
|
#define ELAPSED 512
|
||||||
|
#define EREG_ARGS 1024
|
||||||
|
+#define EXCLUDE_PROGS 2048
|
||||||
|
|
||||||
|
#define KTHREAD_PARENT "kthreadd" /* the parent process of kernel threads:
|
||||||
|
ppid of procs are compared to pid of this proc*/
|
||||||
|
@@ -93,6 +94,9 @@ int rss;
|
||||||
|
float pcpu;
|
||||||
|
char *statopts;
|
||||||
|
char *prog;
|
||||||
|
+char *exclude_progs;
|
||||||
|
+char **exclude_progs_arr = NULL;
|
||||||
|
+char exclude_progs_counter = 0;
|
||||||
|
char *args;
|
||||||
|
char *input_filename = NULL;
|
||||||
|
regex_t re_args;
|
||||||
|
@@ -250,6 +254,25 @@ main (int argc, char **argv)
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ /* Ignore excluded processes by name */
|
||||||
|
+ if(options & EXCLUDE_PROGS) {
|
||||||
|
+ int found = 0;
|
||||||
|
+ int i = 0;
|
||||||
|
+
|
||||||
|
+ for(i=0; i < (exclude_progs_counter); i++) {
|
||||||
|
+ if(!strcmp(procprog, exclude_progs_arr[i])) {
|
||||||
|
+ found = 1;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ if(found == 0) {
|
||||||
|
+ resultsum |= EXCLUDE_PROGS;
|
||||||
|
+ } else
|
||||||
|
+ {
|
||||||
|
+ if(verbose >= 3)
|
||||||
|
+ printf("excluding - by ignorelist\n");
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
/* filter kernel threads (childs of KTHREAD_PARENT)*/
|
||||||
|
/* TODO adapt for other OSes than GNU/Linux
|
||||||
|
sorry for not doing that, but I've no other OSes to test :-( */
|
||||||
|
@@ -409,6 +432,7 @@ process_arguments (int argc, char **argv)
|
||||||
|
{"input-file", required_argument, 0, CHAR_MAX+2},
|
||||||
|
{"no-kthreads", required_argument, 0, 'k'},
|
||||||
|
{"traditional-filter", no_argument, 0, 'T'},
|
||||||
|
+ {"exclude-process", required_argument, 0, 'X'},
|
||||||
|
{0, 0, 0, 0}
|
||||||
|
};
|
||||||
|
|
||||||
|
@@ -417,7 +441,7 @@ process_arguments (int argc, char **argv)
|
||||||
|
strcpy (argv[c], "-t");
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
- c = getopt_long (argc, argv, "Vvhkt:c:w:p:s:u:C:a:z:r:m:P:T",
|
||||||
|
+ c = getopt_long (argc, argv, "Vvhkt:c:w:p:s:u:C:a:z:r:m:P:T:X:",
|
||||||
|
longopts, &option);
|
||||||
|
|
||||||
|
if (c == -1 || c == EOF)
|
||||||
|
@@ -490,6 +514,23 @@ process_arguments (int argc, char **argv)
|
||||||
|
prog);
|
||||||
|
options |= PROG;
|
||||||
|
break;
|
||||||
|
+ case 'X':
|
||||||
|
+ if(exclude_progs)
|
||||||
|
+ break;
|
||||||
|
+ else
|
||||||
|
+ exclude_progs = optarg;
|
||||||
|
+ xasprintf (&fmt, _("%s%sexclude progs '%s'"), (fmt ? fmt : ""), (options ? ", " : ""),
|
||||||
|
+ exclude_progs);
|
||||||
|
+ char *p = strtok(exclude_progs, ",");
|
||||||
|
+
|
||||||
|
+ while(p){
|
||||||
|
+ exclude_progs_arr = realloc(exclude_progs_arr, sizeof(char*) * ++exclude_progs_counter);
|
||||||
|
+ exclude_progs_arr[exclude_progs_counter-1] = p;
|
||||||
|
+ p = strtok(NULL, ",");
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ options |= EXCLUDE_PROGS;
|
||||||
|
+ break;
|
||||||
|
case 'a': /* args (full path name with args) */
|
||||||
|
/* TODO: allow this to be passed in with --metric */
|
||||||
|
if (args)
|
||||||
|
@@ -745,6 +786,8 @@ print_help (void)
|
||||||
|
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)."));
|
||||||
|
+ printf (" %s\n", "-X, --exclude-process");
|
||||||
|
+ printf (" %s\n", _("Exclude processes which match this comma seperated list"));
|
||||||
|
printf (" %s\n", "-k, --no-kthreads");
|
||||||
|
printf (" %s\n", _("Only scan for non kernel threads (works on Linux only)."));
|
||||||
|
|
||||||
|
@@ -786,5 +829,5 @@ print_usage (void)
|
||||||
|
printf ("%s\n", _("Usage:"));
|
||||||
|
printf ("%s -w <range> -c <range> [-m metric] [-s state] [-p ppid]\n", progname);
|
||||||
|
printf (" [-u user] [-r rss] [-z vsz] [-P %%cpu] [-a argument-array]\n");
|
||||||
|
- printf (" [-C command] [-k] [-t timeout] [-v]\n");
|
||||||
|
+ printf (" [-C command] [-X process_to_exclude] [-k] [-t timeout] [-v]\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
From 7b7037280c36279ea51de07f9a4efea10bcfa24c Mon Sep 17 00:00:00 2001
|
||||||
|
From: Christian Kujau <lists@nerdbynature.de>
|
||||||
|
Date: Tue, 21 Mar 2023 11:26:03 +0100
|
||||||
|
Subject: [PATCH 2/2] check_procs: add a test for the newly added -X option.
|
||||||
|
|
||||||
|
$ make test
|
||||||
|
[...]
|
||||||
|
perl -I .. -I .. ../test.pl
|
||||||
|
No application (check_curl) found for test harness (check_curl.t)
|
||||||
|
No application (check_snmp) found for test harness (check_snmp.t)
|
||||||
|
./t/check_procs.t ...... ok
|
||||||
|
./tests/check_nt.t ..... ok
|
||||||
|
./tests/check_procs.t .. ok
|
||||||
|
All tests successful.
|
||||||
|
Files=4, Tests=73, 8 wallclock secs ( 0.05 usr 0.02 sys + 0.38 cusr
|
||||||
|
0.22 csys = 0.67 CPU)
|
||||||
|
Result: PASS
|
||||||
|
|
||||||
|
Signed-off-by: Christian Kujau <lists@nerdbynature.de>
|
||||||
|
---
|
||||||
|
plugins/tests/check_procs.t | 8 ++++++--
|
||||||
|
1 file changed, 6 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/plugins/tests/check_procs.t b/plugins/tests/check_procs.t
|
||||||
|
index 3af218f50..b3a0a3015 100755
|
||||||
|
--- a/plugins/tests/check_procs.t
|
||||||
|
+++ b/plugins/tests/check_procs.t
|
||||||
|
@@ -8,7 +8,7 @@ use Test::More;
|
||||||
|
use NPTest;
|
||||||
|
|
||||||
|
if (-x "./check_procs") {
|
||||||
|
- plan tests => 52;
|
||||||
|
+ plan tests => 54;
|
||||||
|
} else {
|
||||||
|
plan skip_all => "No check_procs compiled";
|
||||||
|
}
|
||||||
|
@@ -34,9 +34,13 @@ is( $result->return_code, 0, "Checking no threshold breeched" );
|
||||||
|
is( $result->output, "PROCS OK: 95 processes | procs=95;100;200;0;", "Output correct" );
|
||||||
|
|
||||||
|
$result = NPTest->testCmd( "$command -C launchd -c 5" );
|
||||||
|
-is( $result->return_code, 2, "Checking processes filtered by command name" );
|
||||||
|
+is( $result->return_code, 2, "Checking processes matched by command name" );
|
||||||
|
is( $result->output, "PROCS CRITICAL: 6 processes with command name 'launchd' | procs=6;;5;0;", "Output correct" );
|
||||||
|
|
||||||
|
+$result = NPTest->testCmd( "$command -X bash -c 5" );
|
||||||
|
+is( $result->return_code, 2, "Checking processes excluded by command name" );
|
||||||
|
+is( $result->output, "PROCS CRITICAL: 95 processes with exclude progs 'bash' | procs=95;;5;0;", "Output correct" );
|
||||||
|
+
|
||||||
|
SKIP: {
|
||||||
|
skip 'user with uid 501 required', 4 unless getpwuid(501);
|
||||||
|
|
1
debian/patches/series
vendored
1
debian/patches/series
vendored
|
@ -11,3 +11,4 @@
|
||||||
30_check_radius_radcli_1.3.1_support
|
30_check_radius_radcli_1.3.1_support
|
||||||
31_checl_mailq_separate_submission_queue
|
31_checl_mailq_separate_submission_queue
|
||||||
32_check_disk_add_ignore_missing
|
32_check_disk_add_ignore_missing
|
||||||
|
33_check_procs_exclude-process
|
||||||
|
|
Loading…
Reference in a new issue