]> arthur.barton.de Git - netdata.git/blobdiff - charts.d/postfix.chart.sh
Merge pull request #523 from paulfantom/master
[netdata.git] / charts.d / postfix.chart.sh
index fff7c31539141752c38e5d7f1b7bc0b62b3c0d44..f4f710275432ec52c3eed037feec626c5401ea24 100755 (executable)
@@ -1,7 +1,14 @@
 #!/bin/sh
 
+# the postqueue command
+# if empty, it will use the one found in the system path
 postfix_postqueue=
 
+# how frequently to collect queue size
+postfix_update_every=15
+
+postfix_priority=60000
+
 postfix_check() {
        # this should return:
        #  - 0 to enable the chart
@@ -27,7 +34,7 @@ postfix_check() {
 
        if [ -z "$postfix_postqueue" -o ! -x  "$postfix_postqueue" ]
        then
-               echo >&2 "Cannot find postqueue. Please set 'postfix_postqueue=/path/to/postqueue' in $confd/postfix.conf"
+               echo >&2 "$PROGRAM_NAME: postfix: cannot find postqueue. Please set 'postfix_postqueue=/path/to/postqueue' in $confd/postfix.conf"
                return 1
        fi
 
@@ -36,9 +43,9 @@ postfix_check() {
 
 postfix_create() {
 cat <<EOF
-CHART postfix.qemails '' "Postfix Queue Emails" "emails" postfix postfix line 5000 $update_every
-DIMENSION emails '' absolute-no-interpolation 1 1
-CHART postfix.qsize '' "Postfix Queue Emails Size" "emails size in KB" postfix postfix area 5001 $update_every
+CHART postfix.qemails '' "Postfix Queue Emails" "emails" queue postfix.queued.emails line $((postfix_priority + 1)) $postfix_update_every
+DIMENSION emails '' absolute 1 1
+CHART postfix.qsize '' "Postfix Queue Emails Size" "emails size in KB" queue postfix.queued.size area $((postfix_priority + 2)) $postfix_update_every
 DIMENSION size '' absolute 1 1
 EOF
 
@@ -46,13 +53,30 @@ EOF
 }
 
 postfix_update() {
+       # the first argument to this function is the microseconds since last update
+       # pass this parameter to the BEGIN statement (see bellow).
+
        # do all the work to collect / calculate the values
        # for each dimension
        # remember: KEEP IT SIMPLE AND SHORT
 
-       eval `$postfix_postqueue -p | grep "^--" | sed -e "s/-- \([0-9]\+\) Kbytes in \([0-9]\+\) Requests.$/local postfix_q_size=\1\nlocal postfix_q_emails=\2/g" | grep "^local postfix_q_"`
-       test -z "$postfix_q_emails" && local postfix_q_emails=0
-       test -z "$postfix_q_size" && local postfix_q_size=0
+       # 1. execute postqueue -p
+       # 2. get the line that begins with --
+       # 3. match the 2 numbers on the line and output 2 lines like these:
+       #    local postfix_q_size=NUMBER
+       #    local postfix_q_emails=NUMBER
+       # 4. then execute this a script with the eval
+       #
+       # be very carefull with eval:
+       # prepare the script and always egrep at the end the lines that are usefull, so that
+       # even if something goes wrong, no other code can be executed
+       postfix_q_emails=0
+       postfix_q_size=0
+
+       eval "`$postfix_postqueue -p |\
+               grep "^--" |\
+               sed -e "s/-- \([0-9]\+\) Kbytes in \([0-9]\+\) Requests.$/local postfix_q_size=\1\nlocal postfix_q_emails=\2/g" |\
+               egrep "^local postfix_q_(emails|size)=[0-9]+$"`"
 
        # write the result of the work.
        cat <<VALUESEOF