1
|
#!/bin/bash
|
2
|
#set -x
|
3
|
|
4
|
# Checks the MailCleaner overall status using SNMP values.
|
5
|
#
|
6
|
# NB: don't forget to allow the monitoring poller IP in the MailCleaner configuration
|
7
|
# ( Configuration => Services => SNMP monitoring )
|
8
|
#
|
9
|
#
|
10
|
# by fabricat
|
11
|
#
|
12
|
|
13
|
: <<'SNMP-DOCUMENTATION'
|
14
|
Source: http://www.mailcleaner.org/doku.php/documentation:snmp_monitoring
|
15
|
|
16
|
|
17
|
Here are the few more traps provided by MailCleaner:
|
18
|
|
19
|
extOutput.1 (1.3.6.1.4.1.2021.8.1.101.1): number of filtered messages (integer)
|
20
|
|
21
|
extOutput.2 (1.3.6.1.4.1.2021.8.1.101.2): number of spams detected (integer)
|
22
|
|
23
|
extOutput.3 (1.3.6.1.4.1.2021.8.1.101.3): number of bytes filtered (integer)
|
24
|
|
25
|
extOutput.4 (1.3.6.1.4.1.2021.8.1.101.4): number of viruses detected (integer)
|
26
|
|
27
|
extOutput.5 (1.3.6.1.4.1.2021.8.1.101.5): processes status (boolean list e.g: |1|1|1|1|1|1|1|1).
|
28
|
Definition and order of processes (0 = down, 1= running):
|
29
|
incoming MTA (critical)
|
30
|
queuing MTA (critical)
|
31
|
outgoing MTA (critical)
|
32
|
Web GUI (not critical)
|
33
|
antispam/antivirus process/filtering engine (critical)
|
34
|
master database (not critical)
|
35
|
slave database (critical)
|
36
|
firewall (not critical)
|
37
|
|
38
|
extOutput.6 (1.3.6.1.4.1.2021.8.1.101.6): spools status, number of messages in queues (integer list, e.g.:|190|4|26)
|
39
|
Definition and order of spools:
|
40
|
incoming : incoming MTA. Messages can be stored here on massive attacks, or when the MailCleaner is used as an outgoing relay for your network.
|
41
|
filtering: main engine spool. Messages are stored here when processed by the engine. Less than 300 messages is normal because messages are NOT deleted here until process if completly finished). More messages can be an indication that your system is getting a little bit busy at the time.
|
42
|
outgoing: outgoing MTA. MEssages are stored here when they cannot be delivered immediatly (temporary failure of destination host)
|
43
|
|
44
|
extOutput.7 (1.3.6.1.4.1.2021.8.1.101.7): system load (float list, e.g. |5.29|3.79|3.55)
|
45
|
Definition and order of loads:
|
46
|
5 minutes: 5 last minutes average
|
47
|
10 minutes: 10 last minutes average
|
48
|
15 minutes: 15 last minutes average dernieres minutes
|
49
|
|
50
|
extOutput.8 (1.3.6.1.4.1.2021.8.1.101.8): disk partitions usage (list of string, e.g. |/|32%|/var|35%)
|
51
|
|
52
|
extOutput.9 (1.3.6.1.4.1.2021.8.1.101.9): system memory usage (integer list, e.g. |2068628|177144|1951888|1936572)
|
53
|
Definition and order of usages:
|
54
|
total physical memory
|
55
|
free physical memory
|
56
|
total swap memory
|
57
|
free swap memory
|
58
|
|
59
|
extOutput.10 (1.3.6.1.4.1.2021.8.1.101.10): all daily counts (integer list)
|
60
|
Definition and order of counts:
|
61
|
$total_bytes|$total_msg|$total_spam|$percentspam|$total_virus|$percentvirus|$total_content|$percentcontent|$total_clean|$percentclean
|
62
|
number of bytes filtered
|
63
|
number of messages filtered
|
64
|
number of spams detected
|
65
|
spam percentage
|
66
|
number of viruses detected
|
67
|
viruses percentage
|
68
|
number of dangerous content detected
|
69
|
dangerous content percentage
|
70
|
number of clean messages
|
71
|
clean messages percentages
|
72
|
|
73
|
SNMP-DOCUMENTATION
|
74
|
|
75
|
# Default values
|
76
|
COMMUNITY="mailcleaner"
|
77
|
MC_HOST="127.0.0.1"
|
78
|
VERBOSE="0"
|
79
|
|
80
|
SNMPWALK="/usr/bin/snmpwalk"
|
81
|
|
82
|
|
83
|
# Default thresholds
|
84
|
MSG_SPAM_CRIT=70
|
85
|
MSG_SPAM_WARN=50
|
86
|
|
87
|
MSG_VIRUS_CRIT=30
|
88
|
MSG_VIRUS_WARN=15
|
89
|
|
90
|
MSG_QUEUE_CRIT=100
|
91
|
MSG_QUEUE_WARN=50
|
92
|
|
93
|
LOAD_CRIT=10
|
94
|
LOAD_WARN=5
|
95
|
|
96
|
MEM_CRIT=90
|
97
|
MEM_WARN=75
|
98
|
|
99
|
SWAP_CRIT=80
|
100
|
SWAP_WARN=50
|
101
|
|
102
|
DISK_CRIT=90
|
103
|
DISK_WARN=80
|
104
|
|
105
|
|
106
|
|
107
|
|
108
|
USAGE=" Usage: $0 [options...]
|
109
|
|
110
|
Options:
|
111
|
-H <string> MailCleaner host or IP (default: ${MC_HOST})
|
112
|
-C <string> SNMP read community (default: ${COMMUNITY})
|
113
|
-v Verbose output
|
114
|
-V Very verbose output
|
115
|
-h Print this help and exit
|
116
|
-w <int> Spam warning percentage (default: ${MSG_SPAM_WARN})
|
117
|
-c <int> Spam error percentage (default: ${MSG_SPAM_CRIT})
|
118
|
-r <int> Virus warning percentage (default: ${MSG_VIRUS_WARN})
|
119
|
-R <int> Virus error percentage (default: ${MSG_VIRUS_CRIT})
|
120
|
-q <int> Mail queues warning level (default: ${MSG_QUEUE_WARN})
|
121
|
-Q <int> Mail queues error level (default: ${MSG_QUEUE_CRIT})
|
122
|
-l <int> System load warning level (default: ${LOAD_WARN})
|
123
|
-L <int> System load error level (default: ${LOAD_CRIT})
|
124
|
-m <int> Memory load warning percentage (default: ${MEM_WARN})
|
125
|
-M <int> Memory load error percentage (default: ${MEM_CRIT})
|
126
|
-s <int> Swap load warning percentage (default: ${SWAP_WARN})
|
127
|
-S <int> Swap load error percentage (default: ${SWAP_CRIT})
|
128
|
-d <int> Partitions usage warning percentage (default: ${DISK_WARN})
|
129
|
-D <int> Partitions usage error percentage (default: ${DISK_CRIT})
|
130
|
"
|
131
|
# Getting parameters:
|
132
|
while getopts "H:C:vVhw:c:r:R:q:Q:l:L:m:M:s:S:d:D:" OPT
|
133
|
do
|
134
|
case $OPT in
|
135
|
"H") MC_HOST=$OPTARG;;
|
136
|
"C") COMMUNITY=$OPTARG;;
|
137
|
"v") if [ "$VERBOSE" -lt "1" ]; then VERBOSE="1"; fi;;
|
138
|
"V") VERBOSE="2";;
|
139
|
"h") echo "$USAGE" && exit 3;;
|
140
|
"w") MSG_SPAM_WARN=$OPTARG;;
|
141
|
"c") MSG_SPAM_CRIT=$OPTARG;;
|
142
|
"r") MSG_VIRUS_WARN=$OPTARG;;
|
143
|
"R") MSG_VIRUS_CRIT=$OPTARG;;
|
144
|
"q") MSG_QUEUE_WARN=$OPTARG;;
|
145
|
"Q") MSG_QUEUE_CRIT=$OPTARG;;
|
146
|
"l") LOAD_WARN=$OPTARG;;
|
147
|
"L") LOAD_CRIT=$OPTARG;;
|
148
|
"m") MEM_WARN=$OPTARG;;
|
149
|
"M") MEM_CRIT=$OPTARG;;
|
150
|
"s") SWAP_WARN=$OPTARG;;
|
151
|
"S") SWAP_CRIT=$OPTARG;;
|
152
|
"d") DISK_WARN=$OPTARG;;
|
153
|
"D") DISK_CRIT=$OPTARG;;
|
154
|
*) echo "$USAGE" && exit 3;;
|
155
|
esac
|
156
|
done
|
157
|
|
158
|
|
159
|
# Other variables
|
160
|
STATE_OK=0
|
161
|
STATE_WARNING=1
|
162
|
STATE_CRITICAL=2
|
163
|
|
164
|
ISSUECRIT=""
|
165
|
ISSUEWARN=""
|
166
|
ISSUEOK=""
|
167
|
STATS=""
|
168
|
|
169
|
SEPARATOR=" - "
|
170
|
|
171
|
# Get data from SNMP queries
|
172
|
DAILY_COUNTS=$("${SNMPWALK}" -v2c -c "${COMMUNITY}" -O qv "${MC_HOST}" 1.3.6.1.4.1.2021.8.1.101.10 | sed "s/\"//g" 2>&1)
|
173
|
if [ $? -ne 0 ]
|
174
|
then
|
175
|
echo "CRITICAL: $DAILY_COUNTS"
|
176
|
exit $STATE_CRITICAL
|
177
|
fi
|
178
|
|
179
|
MSG_TOTAL=$( "${SNMPWALK}" -v2c -c "${COMMUNITY}" -O qv "${MC_HOST}" 1.3.6.1.4.1.2021.8.1.101.1 | sed "s/\"//g")
|
180
|
MSG_SPAM=$( "${SNMPWALK}" -v2c -c "${COMMUNITY}" -O qv "${MC_HOST}" 1.3.6.1.4.1.2021.8.1.101.2 | sed "s/\"//g")
|
181
|
MSG_BYTES=$( "${SNMPWALK}" -v2c -c "${COMMUNITY}" -O qv "${MC_HOST}" 1.3.6.1.4.1.2021.8.1.101.3 | sed "s/\"//g")
|
182
|
MSG_VIRUS=$( "${SNMPWALK}" -v2c -c "${COMMUNITY}" -O qv "${MC_HOST}" 1.3.6.1.4.1.2021.8.1.101.4 | sed "s/\"//g")
|
183
|
|
184
|
PROCS_STATUS=$("${SNMPWALK}" -v2c -c "${COMMUNITY}" -O qv "${MC_HOST}" 1.3.6.1.4.1.2021.8.1.101.5 | sed "s/\"//g")
|
185
|
SPOOL_STATUS=$("${SNMPWALK}" -v2c -c "${COMMUNITY}" -O qv "${MC_HOST}" 1.3.6.1.4.1.2021.8.1.101.6 | sed "s/\"//g")
|
186
|
|
187
|
LOAD_STATUS=$( "${SNMPWALK}" -v2c -c "${COMMUNITY}" -O qv "${MC_HOST}" 1.3.6.1.4.1.2021.8.1.101.7 | sed "s/\"//g")
|
188
|
PART_STATUS=$( "${SNMPWALK}" -v2c -c "${COMMUNITY}" -O qv "${MC_HOST}" 1.3.6.1.4.1.2021.8.1.101.8 | sed "s/\"//g")
|
189
|
MEM_STATUS=$( "${SNMPWALK}" -v2c -c "${COMMUNITY}" -O qv "${MC_HOST}" 1.3.6.1.4.1.2021.8.1.101.9 | sed "s/\"//g")
|
190
|
|
191
|
|
192
|
|
193
|
# Process some stats
|
194
|
STATS="${STATS} msg_tot=${MSG_TOTAL} msg_spam=${MSG_SPAM} msg_virus=${MSG_VIRUS}"
|
195
|
|
196
|
### Process data
|
197
|
|
198
|
# Queue status
|
199
|
incoming=$(echo "${SPOOL_STATUS}" | cut -d'|' -f 2)
|
200
|
filtered=$(echo "${SPOOL_STATUS}" | cut -d'|' -f 3)
|
201
|
outgoing=$(echo "${SPOOL_STATUS}" | cut -d'|' -f 4)
|
202
|
STATS="${STATS} queue_in=${incoming} queue_filter=${filtered} queue_out=${outgoing}"
|
203
|
|
204
|
MSG="Queue count: $incoming incoming, $filtered filtered, $outgoing outgoing"
|
205
|
if [ "$incoming" -ge "$MSG_QUEUE_CRIT" ] || [ "$filtered" -ge "$MSG_QUEUE_CRIT" ] || [ "$outgoing" -ge "$MSG_QUEUE_CRIT" ]
|
206
|
then
|
207
|
ISSUECRIT="${ISSUECRIT}${MSG}${SEPARATOR}"
|
208
|
elif [ "$incoming" -ge "$MSG_QUEUE_WARN" ] || [ "$filtered" -ge "$MSG_QUEUE_WARN" ] || [ "$outgoing" -ge "$MSG_QUEUE_WARN" ]
|
209
|
then
|
210
|
ISSUEWARN="${ISSUEWARN}${MSG}${SEPARATOR}"
|
211
|
else
|
212
|
ISSUEOK="${ISSUEOK}${MSG}\\n"
|
213
|
fi
|
214
|
|
215
|
|
216
|
# Procs status
|
217
|
mta_in=$( echo "${PROCS_STATUS}" | cut -d'|' -f 2)
|
218
|
mta_queue=$( echo "${PROCS_STATUS}" | cut -d'|' -f 3)
|
219
|
mta_out=$( echo "${PROCS_STATUS}" | cut -d'|' -f 4)
|
220
|
web_gui=$( echo "${PROCS_STATUS}" | cut -d'|' -f 5)
|
221
|
filt_engine=$(echo "${PROCS_STATUS}" | cut -d'|' -f 6)
|
222
|
master_db=$( echo "${PROCS_STATUS}" | cut -d'|' -f 7)
|
223
|
slave_db=$( echo "${PROCS_STATUS}" | cut -d'|' -f 8)
|
224
|
firewall=$( echo "${PROCS_STATUS}" | cut -d'|' -f 9)
|
225
|
|
226
|
if [ "$mta_in" == "1" ]
|
227
|
then
|
228
|
ISSUEOK="${ISSUEOK}Incoming MTA: running\\n"
|
229
|
else
|
230
|
ISSUECRIT="${ISSUECRIT}Incoming MTA down${SEPARATOR}"
|
231
|
fi
|
232
|
|
233
|
if [ "$mta_queue" == "1" ]
|
234
|
then
|
235
|
ISSUEOK="${ISSUEOK}Queuing MTA: running\\n"
|
236
|
else
|
237
|
ISSUECRIT="${ISSUECRIT}Queuing MTA down${SEPARATOR}"
|
238
|
fi
|
239
|
|
240
|
if [ "$mta_out" == "1" ]
|
241
|
then
|
242
|
ISSUEOK="${ISSUEOK}Outgoing MTA: running\\n"
|
243
|
else
|
244
|
ISSUECRIT="${ISSUECRIT}Outgoing MTA down${SEPARATOR}"
|
245
|
fi
|
246
|
|
247
|
if [ "$web_gui" == "1" ]
|
248
|
then
|
249
|
ISSUEOK="${ISSUEOK}Web GUI: running\\n"
|
250
|
else
|
251
|
ISSUEWARN="${ISSUEWARN}Web GUI down${SEPARATOR}"
|
252
|
fi
|
253
|
|
254
|
if [ "$filt_engine" == "1" ]
|
255
|
then
|
256
|
ISSUEOK="${ISSUEOK}Antispam/antivirus process/filtering engine: running\\n"
|
257
|
else
|
258
|
ISSUECRIT="${ISSUECRIT}Antispam/antivirus process/filtering engine down${SEPARATOR}"
|
259
|
fi
|
260
|
|
261
|
if [ "$master_db" == "1" ]
|
262
|
then
|
263
|
ISSUEOK="${ISSUEOK}Master DB: running\\n"
|
264
|
else
|
265
|
ISSUEWARN="${ISSUEWARN}Master DB down${SEPARATOR}"
|
266
|
fi
|
267
|
|
268
|
if [ "$slave_db" == "1" ]
|
269
|
then
|
270
|
ISSUEOK="${ISSUEOK}Slave DB: running\\n"
|
271
|
else
|
272
|
ISSUECRIT="${ISSUECRIT}Slave DB down${SEPARATOR}"
|
273
|
fi
|
274
|
|
275
|
if [ "$firewall" == "1" ]
|
276
|
then
|
277
|
ISSUEOK="${ISSUEOK}Firewall: running\\n"
|
278
|
else
|
279
|
ISSUEWARN="${ISSUEWARN}Firewall down${SEPARATOR}"
|
280
|
fi
|
281
|
|
282
|
|
283
|
# Load status
|
284
|
load05=$(echo "${LOAD_STATUS}" | cut -d'|' -f 2)
|
285
|
load10=$(echo "${LOAD_STATUS}" | cut -d'|' -f 3)
|
286
|
load15=$(echo "${LOAD_STATUS}" | cut -d'|' -f 4)
|
287
|
STATS="${STATS} load5=${load05} load10=${load10} load15=${load15}"
|
288
|
|
289
|
MSG="System load: $load05/$load10/$load15"
|
290
|
load05=${load05/.*}
|
291
|
load10=${load10/.*}
|
292
|
load15=${load15/.*}
|
293
|
if [ "$load05" -ge "$LOAD_CRIT" ] || [ "$load10" -ge "$LOAD_CRIT" ] || [ "$load15" -ge "$LOAD_CRIT" ]
|
294
|
then
|
295
|
ISSUECRIT="${ISSUECRIT}${MSG}${SEPARATOR}"
|
296
|
elif [ "$load05" -ge "$LOAD_WARN" ] || [ "$load10" -ge "$LOAD_WARN" ] || [ "$load15" -ge "$LOAD_WARN" ]
|
297
|
then
|
298
|
ISSUEWARN="${ISSUEWARN}${MSG}${SEPARATOR}"
|
299
|
else
|
300
|
ISSUEOK="${ISSUEOK}${MSG}\\n"
|
301
|
fi
|
302
|
|
303
|
|
304
|
# Memory status
|
305
|
ram_tot=$( echo "${MEM_STATUS}" | cut -d'|' -f 2)
|
306
|
ram_free=$( echo "${MEM_STATUS}" | cut -d'|' -f 3)
|
307
|
swap_tot=$( echo "${MEM_STATUS}" | cut -d'|' -f 4)
|
308
|
swap_free=$(echo "${MEM_STATUS}" | cut -d'|' -f 5)
|
309
|
|
310
|
ram_perc=$(( 100 - ( ram_free * 100 / ram_tot ) ))
|
311
|
swap_perc=$(( 100 - ( swap_free * 100 / swap_tot ) ))
|
312
|
STATS="${STATS} ram=${ram_perc}% swap=${swap_perc}%"
|
313
|
|
314
|
MSG="Memory load: ${ram_perc}%"
|
315
|
if [ "$ram_perc" -ge "$MEM_CRIT" ]
|
316
|
then
|
317
|
ISSUECRIT="${ISSUECRIT}${MSG}${SEPARATOR}"
|
318
|
elif [ "$ram_perc" -ge "$MEM_WARN" ]
|
319
|
then
|
320
|
ISSUEWARN="${ISSUEWARN}${MSG}${SEPARATOR}"
|
321
|
else
|
322
|
ISSUEOK="${ISSUEOK}${MSG}\\n"
|
323
|
fi
|
324
|
|
325
|
MSG="Swap load: ${swap_perc}%"
|
326
|
if [ "$swap_perc" -ge "$SWAP_CRIT" ]
|
327
|
then
|
328
|
ISSUECRIT="${ISSUECRIT}${MSG}${SEPARATOR}"
|
329
|
elif [ "$swap_perc" -ge "$SWAP_WARN" ]
|
330
|
then
|
331
|
ISSUEWARN="${ISSUEWARN}${MSG}${SEPARATOR}"
|
332
|
else
|
333
|
ISSUEOK="${ISSUEOK}${MSG}\\n"
|
334
|
fi
|
335
|
|
336
|
|
337
|
# Disk partitions status
|
338
|
i="2"
|
339
|
part_name=$(echo "${PART_STATUS}" | cut -d'|' -f $i)
|
340
|
while [ "$part_name" != "" ]
|
341
|
do
|
342
|
i=$(( i + 1 ))
|
343
|
part_perc=$(echo "${PART_STATUS}" | cut -d'|' -f $i)
|
344
|
STATS="${STATS} ${part_name}=${part_perc}"
|
345
|
|
346
|
MSG="Disk ${part_name}: ${part_perc}"
|
347
|
if [ "${part_perc%\%}" -ge "$DISK_CRIT" ]
|
348
|
then
|
349
|
ISSUECRIT="${ISSUECRIT}${MSG}${SEPARATOR}"
|
350
|
elif [ "${part_perc%\%}" -ge "$DISK_WARN" ]
|
351
|
then
|
352
|
ISSUEWARN="${ISSUEWARN}${MSG}${SEPARATOR}"
|
353
|
else
|
354
|
ISSUEOK="${ISSUEOK}${MSG}\\n"
|
355
|
fi
|
356
|
|
357
|
i=$(( i + 1 ))
|
358
|
part_name=$(echo "${PART_STATUS}" | cut -d'|' -f $i)
|
359
|
done
|
360
|
|
361
|
|
362
|
# Spam / malicious percentage status
|
363
|
spam_perc=$( echo "${DAILY_COUNTS}" | cut -d'|' -f 4)
|
364
|
virus_perc=$(echo "${DAILY_COUNTS}" | cut -d'|' -f 6)
|
365
|
clean_perc=$(echo "${DAILY_COUNTS}" | cut -d'|' -f 10)
|
366
|
STATS="${STATS} spam=${spam_perc}% virus=${virus_perc}% clean=${clean_perc}%"
|
367
|
|
368
|
MSG="Spam load: ${spam_perc}"
|
369
|
if [ "${spam_perc/.*}" -ge "$MSG_SPAM_CRIT" ]
|
370
|
then
|
371
|
ISSUECRIT="${ISSUECRIT}${MSG}${SEPARATOR}"
|
372
|
elif [ "${spam_perc/.*}" -ge "$MSG_SPAM_WARN" ]
|
373
|
then
|
374
|
ISSUEWARN="${ISSUEWARN}${MSG}${SEPARATOR}"
|
375
|
else
|
376
|
ISSUEOK="${ISSUEOK}${MSG}\\n"
|
377
|
fi
|
378
|
|
379
|
MSG="Virus load: ${virus_perc}"
|
380
|
if [ "${virus_perc/.*}" -ge "$MSG_VIRUS_CRIT" ]
|
381
|
then
|
382
|
ISSUECRIT="${ISSUECRIT}${MSG}${SEPARATOR}"
|
383
|
elif [ "${virus_perc/.*}" -ge "$MSG_VIRUS_WARN" ]
|
384
|
then
|
385
|
ISSUEWARN="${ISSUEWARN}${MSG}${SEPARATOR}"
|
386
|
else
|
387
|
ISSUEOK="${ISSUEOK}${MSG}\\n"
|
388
|
fi
|
389
|
|
390
|
|
391
|
|
392
|
|
393
|
# Prepare output values
|
394
|
RETSTATE=$STATE_OK
|
395
|
if [ -n "$ISSUECRIT" ]
|
396
|
then
|
397
|
echo -n "CRITICAL: $ISSUECRIT"
|
398
|
RETSTATE=$STATE_CRITICAL
|
399
|
fi
|
400
|
if [ -n "$ISSUEWARN" ]
|
401
|
then
|
402
|
echo -n "WARNING: $ISSUEWARN"
|
403
|
if [ "$RETSTATE" -lt "$STATE_WARNING" ]
|
404
|
then
|
405
|
RETSTATE=$STATE_WARNING
|
406
|
fi
|
407
|
fi
|
408
|
if [ $RETSTATE -eq $STATE_OK ]
|
409
|
then
|
410
|
echo -n "OK"
|
411
|
fi
|
412
|
|
413
|
echo " |$STATS"
|
414
|
|
415
|
if [ -n "$ISSUEOK" ] && [ "${VERBOSE}" -ge "1" ]
|
416
|
then
|
417
|
echo -e "\\n$ISSUEOK"
|
418
|
fi
|
419
|
|
420
|
if [ "${VERBOSE}" -ge "2" ]
|
421
|
then
|
422
|
echo "Raw SNMP values:
|
423
|
1. number of filtered messages = ${MSG_TOTAL}
|
424
|
2. number of spams detected = ${MSG_SPAM}
|
425
|
3. number of bytes filtered = ${MSG_BYTES}
|
426
|
4. number of viruses detected = ${MSG_VIRUS}
|
427
|
5. processes status = ${PROCS_STATUS//\|/#}
|
428
|
6. spools status (messages in incoming#filtering#outgoing queues) = ${SPOOL_STATUS//\|/#}
|
429
|
7. system load (last 5#10#15minutes) = ${LOAD_STATUS//\|/#}
|
430
|
8. disk partitions usage = ${PART_STATUS//\|/#}
|
431
|
9. system memory usage in kB (tot_ram#free_ram#tot_swap#free_swap) = ${MEM_STATUS//\|/#}
|
432
|
10. all daily counts (bytes#msg#spam#%spam#virus#%virus#content#%content#clean#%clean) = ${DAILY_COUNTS//\|/#}"
|
433
|
|
434
|
fi
|
435
|
|
436
|
exit $RETSTATE
|