From 2a72cc32dda5c1311c05d1357bd539faa87162d6 Mon Sep 17 00:00:00 2001 From: Steve Schnepp Date: Thu, 5 Sep 2013 00:24:19 +0200 Subject: [PATCH] dovecot: Use DERIVE to avoid ugly computations Using a timed grep with a state computation is usually mostly wrong. The DERIVE field type is specifically designed for that very purpose. Closes #264 --- plugins/mail/dovecot | 83 +++++++++++++++----------------------------- 1 file changed, 28 insertions(+), 55 deletions(-) diff --git a/plugins/mail/dovecot b/plugins/mail/dovecot index b3b80ed0..0f6b925d 100755 --- a/plugins/mail/dovecot +++ b/plugins/mail/dovecot @@ -7,6 +7,7 @@ # http://developer.gauner.org/munin/ # Contributions by: # - Stephane Enten +# - Steve Schnepp # # Parameters understood: # @@ -28,7 +29,6 @@ ###################### # Configuration ###################### -STAT_FILE=${STAT_FILE:-/var/lib/munin-node/plugin-state/root/plugin-dovecot.state} EXPR_BIN=/usr/bin/expr LOGFILE=${logfile:-/var/log/mail.log} ###################### @@ -43,37 +43,27 @@ if [ "$1" = "config" ]; then echo 'graph_category Mail' echo 'graph_args --base 1000 -l 0' echo 'graph_vlabel Login Counters' - echo 'login_total.label Total Logins' - echo 'login_tls.label TLS Logins' - echo 'login_ssl.label SSL Logins' - echo 'login_imap.label IMAP Logins' - echo 'login_pop3.label POP3 Logins' + + for t in Total TLS SSL IMAP POP3 + do + field=$(echo $t | tr '[:upper:]' '[:lower:]') + echo "login_$field.label $t Logins" + echo "login_$field.type DERIVE" + echo "login_$field.min 0" + done + echo 'connected.label Connected Users' + exit 0 fi -############################# -# Initialization -############################# -if [ ! -r $STAT_FILE ]; then - echo "TOTAL=0" > $STAT_FILE - echo "TLS=0" >> $STAT_FILE - echo "SSL=0" >> $STAT_FILE - echo "IMAP=0" >> $STAT_FILE - echo "POP3=0" >> $STAT_FILE -fi -############################# - - ###################### # Total Logins ###################### echo -en "login_total.value " -NEW_TOTAL=$(egrep '[dovecot]?.*Login' $LOGFILE | grep "`date '+%b %e'`" | sort | wc -l) -OLD_TOTAL=$(grep TOTAL $STAT_FILE | cut -f2 -d '=') -TOTAL=$($EXPR_BIN $NEW_TOTAL - $OLD_TOTAL) -if [ $TOTAL -gt 0 ]; then - echo "$TOTAL" +VALUE=$(egrep '[dovecot]?.*Login' $LOGFILE | sort | wc -l) +if [ ! -z "$VALUE" ]; then + echo "$VALUE" else echo "0" fi @@ -83,8 +73,8 @@ echo -n ###################### DISCONNECTS=$(egrep '[dovecot]?.*Disconnected' $LOGFILE | sort | wc -l) CONNECTS=$(egrep '[dovecot]?.*Login' $LOGFILE | sort | wc -l) -DISCON=$($EXPR_BIN $CONNECTS - $DISCONNECTS) -if [ $DISCON -lt 0 ]; then +VALUE=$($EXPR_BIN $CONNECTS - $DISCONNECTS) +if [ -z "$DISCON" ] || [ "$DISCON" -lt 0 ]; then DISCON=0 fi echo -en "connected.value " @@ -94,11 +84,9 @@ echo -n # TLS Logins ###################### echo -en "login_tls.value " -NEW_TLS=$(egrep '[dovecot]?.*Login.*TLS' $LOGFILE | grep "`date '+%b %e'`" | sort | wc -l) -OLD_TLS=$(grep TLS $STAT_FILE | cut -f2 -d '=') -TLS=$($EXPR_BIN $NEW_TLS - $OLD_TLS) -if [ $TLS -gt 0 ]; then - echo "$TLS" +VALUE=$(egrep '[dovecot]?.*Login.*TLS' $LOGFILE | sort | wc -l) +if [ ! -z "$VALUE" ]; then + echo "$VALUE" else echo "0" fi @@ -107,11 +95,9 @@ echo -n # SSL Logins ###################### echo -en "login_ssl.value " -NEW_SSL=$(egrep '[dovecot]?.*Login.*SSL' $LOGFILE | grep "`date '+%b %e'`" | sort | wc -l) -OLD_SSL=$(grep SSL $STAT_FILE | cut -f2 -d '=') -SSL=$($EXPR_BIN $NEW_SSL - $OLD_SSL) -if [ $SSL -gt 0 ]; then - echo "$SSL" +VALUE=$(egrep '[dovecot]?.*Login.*SSL' $LOGFILE | sort | wc -l) +if [ ! -z "$VALUE" ]; then + echo "$VALUE" else echo "0" fi @@ -120,11 +106,9 @@ echo -n # IMAP Logins ###################### echo -en "login_imap.value " -NEW_IMAP=$(egrep '[dovecot]?.*imap.*Login' $LOGFILE | grep "`date '+%b %e'`" | sort | wc -l) -OLD_IMAP=$(grep IMAP $STAT_FILE | cut -f2 -d '=') -IMAP=$($EXPR_BIN $NEW_IMAP - $OLD_IMAP) -if [ $IMAP -gt 0 ]; then - echo "$IMAP" +VALUE=$(egrep '[dovecot]?.*imap.*Login' $LOGFILE | sort | wc -l) +if [ ! -z "$VALUE" ]; then + echo "$VALUE" else echo "0" fi @@ -133,21 +117,10 @@ echo -n # POP3 Logins ###################### echo -en "login_pop3.value " -NEW_POP3=$(egrep '[dovecot]?.*pop3.*Login' $LOGFILE | grep "`date '+%b %e'`" | sort | wc -l) -OLD_POP3=$(grep POP3 $STAT_FILE | cut -f2 -d '=') -POP3=$($EXPR_BIN $NEW_POP3 - $OLD_POP3) -if [ $POP3 -gt 0 ]; then - echo "$POP3" +VALUE=$(egrep '[dovecot]?.*pop3.*Login' $LOGFILE | sort | wc -l) +if [ ! -z "$VALUE" ]; then + echo "$VALUE" else echo "0" fi echo -n -###################### -# Save the new values -###################### -echo "TOTAL=$NEW_TOTAL" > $STAT_FILE -echo "TLS=$NEW_TLS" >> $STAT_FILE -echo "SSL=$NEW_SSL" >> $STAT_FILE -echo "IMAP=$NEW_IMAP" >> $STAT_FILE -echo "POP3=$NEW_POP3" >> $STAT_FILE -