summaryrefslogtreecommitdiffstats
path: root/plugins-scripts
diff options
context:
space:
mode:
Diffstat (limited to 'plugins-scripts')
-rwxr-xr-xplugins-scripts/check_log.sh99
-rwxr-xr-xplugins-scripts/check_mailq.pl4
-rw-r--r--plugins-scripts/t/check_log.t82
3 files changed, 119 insertions, 66 deletions
diff --git a/plugins-scripts/check_log.sh b/plugins-scripts/check_log.sh
index fdb57416..c623a8d6 100755
--- a/plugins-scripts/check_log.sh
+++ b/plugins-scripts/check_log.sh
@@ -18,7 +18,7 @@
18# On the first run of the plugin, it will return an OK state with a message 18# On the first run of the plugin, it will return an OK state with a message
19# of "Log check data initialized". On successive runs, it will return an OK 19# of "Log check data initialized". On successive runs, it will return an OK
20# state if *no* pattern matches have been found in the *difference* between the 20# state if *no* pattern matches have been found in the *difference* between the
21# log file and the older copy of the log file. If the plugin detects any 21# log file and the older copy of the log file. If the plugin detects any
22# pattern matches in the log diff, it will return a CRITICAL state and print 22# pattern matches in the log diff, it will return a CRITICAL state and print
23# out a message is the following format: "(x) last_match", where "x" is the 23# out a message is the following format: "(x) last_match", where "x" is the
24# total number of pattern matches found in the file and "last_match" is the 24# total number of pattern matches found in the file and "last_match" is the
@@ -76,6 +76,7 @@ print_usage() {
76 echo "" 76 echo ""
77 echo "Other parameters:" 77 echo "Other parameters:"
78 echo " -a|--all : Print all matching lines" 78 echo " -a|--all : Print all matching lines"
79 echo " --exclude: Exclude a pattern (-p or -e also applies here when used)"
79 echo " -p|--perl-regex : Use perl style regular expressions in the query" 80 echo " -p|--perl-regex : Use perl style regular expressions in the query"
80 echo " -e|--extended-regex : Use extended style regular expressions in the query (not necessary for GNU grep)" 81 echo " -e|--extended-regex : Use extended style regular expressions in the query (not necessary for GNU grep)"
81} 82}
@@ -99,82 +100,46 @@ if [ $# -lt 1 ]; then
99fi 100fi
100 101
101# Grab the command line arguments 102# Grab the command line arguments
102
103#logfile=$1
104#oldlog=$2
105#query=$3
106exitstatus=$STATE_WARNING #default 103exitstatus=$STATE_WARNING #default
107while test -n "$1"; do 104while test -n "$1"; do
108 case "$1" in 105 case "$1" in
109 --help) 106 -h | --help)
110 print_help
111 exit "$STATE_OK"
112 ;;
113 -h)
114 print_help 107 print_help
115 exit "$STATE_OK" 108 exit "$STATE_OK"
116 ;; 109 ;;
117 --version) 110 -V | --version)
118 print_revision "$PROGNAME" "$REVISION" 111 print_revision "$PROGNAME" "$REVISION"
119 exit "$STATE_OK" 112 exit "$STATE_OK"
120 ;; 113 ;;
121 -V) 114 -F | --filename)
122 print_revision "$PROGNAME" "$REVISION"
123 exit "$STATE_OK"
124 ;;
125 --filename)
126 logfile=$2 115 logfile=$2
127 shift 2 116 shift 2
128 ;; 117 ;;
129 -F) 118 -O | --oldlog)
130 logfile=$2
131 shift 2
132 ;;
133 --oldlog)
134 oldlog=$2 119 oldlog=$2
135 shift 2 120 shift 2
136 ;; 121 ;;
137 -O) 122 -q | --query)
138 oldlog=$2
139 shift 2
140 ;;
141 --query)
142 query=$2 123 query=$2
143 shift 2 124 shift 2
144 ;; 125 ;;
145 -q) 126 --exclude)
146 query=$2 127 exclude=$2
147 shift 2 128 shift 2
148 ;; 129 ;;
149 -x) 130 -x | --exitstatus)
150 exitstatus=$2 131 exitstatus=$2
151 shift 2 132 shift 2
152 ;; 133 ;;
153 --exitstatus) 134 -e | --extended-regex)
154 exitstatus=$2
155 shift 2
156 ;;
157 --extended-regex)
158 ERE=1 135 ERE=1
159 shift 136 shift
160 ;; 137 ;;
161 -e) 138 -p | --perl-regex)
162 ERE=1
163 shift
164 ;;
165 --perl-regex)
166 PRE=1
167 shift
168 ;;
169 -p)
170 PRE=1 139 PRE=1
171 shift 140 shift
172 ;; 141 ;;
173 --all) 142 -a | --all)
174 ALL=1
175 shift
176 ;;
177 -a)
178 ALL=1 143 ALL=1
179 shift 144 shift
180 ;; 145 ;;
@@ -188,18 +153,18 @@ done
188 153
189# Parameter sanity check 154# Parameter sanity check
190if [ $ERE ] && [ $PRE ] ; then 155if [ $ERE ] && [ $PRE ] ; then
191 echo "Can not use extended and perl regex at the same time" 156 echo "Can not use extended and perl regex at the same time"
192 exit "$STATE_UNKNOWN" 157 exit "$STATE_UNKNOWN"
193fi 158fi
194 159
195GREP="grep" 160GREP="grep"
196 161
197if [ $ERE ]; then 162if [ $ERE ]; then
198 GREP="grep -E" 163 GREP="grep -E"
199fi 164fi
200 165
201if [ $PRE ]; then 166if [ $PRE ]; then
202 GREP="grep -P" 167 GREP="grep -P"
203fi 168fi
204 169
205# If the source log file doesn't exist, exit 170# If the source log file doesn't exist, exit
@@ -213,8 +178,8 @@ elif [ ! -r "$logfile" ] ; then
213fi 178fi
214# If no oldlog was given this can not work properly, abort then 179# If no oldlog was given this can not work properly, abort then
215if [ -z "$oldlog" ]; then 180if [ -z "$oldlog" ]; then
216 echo "Oldlog parameter is needed" 181 echo "Oldlog parameter is needed"
217 exit $STATE_UNKNOWN 182 exit $STATE_UNKNOWN
218fi 183fi
219 184
220# If the old log file doesn't exist, this must be the first time 185# If the old log file doesn't exist, this must be the first time
@@ -245,18 +210,24 @@ diff "$logfile" "$oldlog" | grep -v "^>" > "$tempdiff"
245 210
246 211
247if [ $ALL ]; then 212if [ $ALL ]; then
248 # Get the last matching entry in the diff file 213 # Get all matching entries in the diff file
249 entry=$($GREP "$query" "$tempdiff") 214 if [ -n "$exclude" ]; then
250 215 entry=$($GREP "$query" "$tempdiff" | $GREP -v "$exclude")
251 # Count the number of matching log entries we have 216 count=$($GREP "$query" "$tempdiff" | $GREP -vc "$exclude")
252 count=$(echo "$entry" | wc -l) 217 else
218 entry=$($GREP "$query" "$tempdiff")
219 count=$($GREP -c "$query" "$tempdiff")
220 fi
253 221
254else 222else
255 # Count the number of matching log entries we have 223 # Get the last matching entry in the diff file
256 count=$($GREP -c "$query" "$tempdiff") 224 if [ -n "$exclude" ]; then
257 225 entry=$($GREP "$query" "$tempdiff" | $GREP -v "$exclude" | tail -1)
258 # Get the last matching entry in the diff file 226 count=$($GREP "$query" "$tempdiff" | $GREP -vc "$exclude")
259 entry=$($GREP "$query" "$tempdiff" | tail -1) 227 else
228 entry=$($GREP "$query" "$tempdiff" | tail -1)
229 count=$($GREP -c "$query" "$tempdiff")
230 fi
260fi 231fi
261 232
262rm -f "$tempdiff" 233rm -f "$tempdiff"
diff --git a/plugins-scripts/check_mailq.pl b/plugins-scripts/check_mailq.pl
index 4c72332a..27073d3c 100755
--- a/plugins-scripts/check_mailq.pl
+++ b/plugins-scripts/check_mailq.pl
@@ -537,9 +537,9 @@ elsif ( $mailq eq "nullmailer" ) {
537 } 537 }
538 538
539 while (<MAILQ>) { 539 while (<MAILQ>) {
540 #2006-06-22 16:00:00 282 bytes 540 #2022-08-25 01:30:40 502 bytes from <user@example.com>
541 541
542 if (/^[1-9][0-9]*-[01][0-9]-[0-3][0-9]\s[0-2][0-9]\:[0-5][0-9]\:[0-5][0-9]\s+[0-9]+\sbytes/) { 542 if (/^\d{4}-\d{2}-\d{2}\s+\d{2}\:\d{2}\:\d{2}\s+\d+\sbytes/) {
543 $msg_q++ ; 543 $msg_q++ ;
544 } 544 }
545 } 545 }
diff --git a/plugins-scripts/t/check_log.t b/plugins-scripts/t/check_log.t
new file mode 100644
index 00000000..b66e0fd8
--- /dev/null
+++ b/plugins-scripts/t/check_log.t
@@ -0,0 +1,82 @@
1#!/usr/bin/perl -w -I ..
2#
3# check_log tests
4#
5#
6
7use strict;
8use Test::More;
9use NPTest;
10
11my $tests = 18;
12plan tests => $tests;
13
14my $firstTimeOutput ='/^Log check data initialized/';
15my $okOutput = '/^Log check ok - 0 pattern matches found/';
16my $criticalOutput = '/^\(\d+\) < /';
17my $multilineOutput = '/\(3\) <.*\n.*\n.*$/';
18my $unknownOutput = '/^Usage: /';
19my $unknownArgOutput = '/^Unknown argument: /';
20my $bothRegexOutput = '/^Can not use extended and perl regex/';
21
22my $result;
23my $temp_file = "/tmp/check_log.tmp";
24my $oldlog = "/tmp/oldlog.tmp";
25
26open(FH, '>', $temp_file) or die $!;
27close(FH);
28
29$result = NPTest->testCmd("./check_log");
30cmp_ok( $result->return_code, '==', 3, "Missing parameters" );
31like ( $result->output, $unknownOutput, "Output for unknown correct" );
32
33$result = NPTest->testCmd("./check_log -f");
34cmp_ok( $result->return_code, '==', 3, "Wrong parameters" );
35like ( $result->output, $unknownArgOutput, "Output for unknown correct" );
36
37$result = NPTest->testCmd("./check_log -F ".$temp_file." -O ".$oldlog." -q 'Simple match' -e -p");
38cmp_ok( $result->return_code, '==', 3, "Both regex parameters" );
39like ( $result->output, $bothRegexOutput, "Output for unknown correct" );
40
41$result = NPTest->testCmd("./check_log -F ".$temp_file." -O ".$oldlog." -q 'Simple match'");
42cmp_ok( $result->return_code, '==', 0, "First time executing" );
43like ( $result->output, $firstTimeOutput, "Output for first time executing correct" );
44
45open(FH, '>>', $temp_file) or die $!;
46print FH "This is some text, that should not match\n";
47close(FH);
48
49$result = NPTest->testCmd("./check_log -F ".$temp_file." -O ".$oldlog." -q 'No match'");
50cmp_ok( $result->return_code, '==', 0, "No match" );
51like ( $result->output, $okOutput, "Output for no match correct" );
52
53open(FH, '>>', $temp_file) or die $!;
54print FH "This text should match\n";
55close(FH);
56
57$result = NPTest->testCmd("./check_log -F ".$temp_file." -O ".$oldlog." -q 'should match'");
58cmp_ok( $result->return_code, '==', 2, "Pattern match" );
59like ( $result->output, $criticalOutput, "Output for match correct" );
60
61open(FH, '>>', $temp_file) or die $!;
62print FH "This text should not match, because it is excluded\n";
63close(FH);
64
65$result = NPTest->testCmd("./check_log -F ".$temp_file." -O ".$oldlog." -q 'match' --exclude 'because'");
66cmp_ok( $result->return_code, '==', 0, "Exclude a pattern" );
67like ( $result->output, $okOutput, "Output for no match correct" );
68
69open(FH, '>>', $temp_file) or die $!;
70print FH "Trying\nwith\nmultiline\nignore me\n";
71close(FH);
72
73$result = NPTest->testCmd("./check_log -F ".$temp_file." -O ".$oldlog." -q 'Trying\\|with\\|multiline\\|ignore' --exclude 'me' --all");
74cmp_ok( $result->return_code, '==', 2, "Multiline pattern match with --all" );
75like ( $result->output, $multilineOutput, "Output for multiline match correct" );
76
77$result = NPTest->testCmd("./check_log -F ".$temp_file." -O ".$oldlog." -q 'match' -a");
78cmp_ok( $result->return_code, '==', 0, "Non matching --all" );
79like ( $result->output, $okOutput, "Output for no match correct" );
80
81unlink($oldlog);
82unlink($temp_file);