Subversion Repositories sysadmin_scripts

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
14 rodolico 1
#!/usr/bin/env bash
2
 
3
# see
4
# http://lifeisabug.com/postfix-statistical-graphs-zabbix-using-passive-checks/
5
 
6
MAILLOG=/var/log/mail.log
7
PFOFFSETFILE=/tmp/zabbix-postfix-offset.dat
8
PFSTATSFILE=/tmp/postfix_statsfile.dat
9
TEMPFILE=$(mktemp)
10
PFLOGSUMM=/usr/sbin/pflogsumm
11
LOGTAIL=/usr/sbin/logtail
12
 
13
PFVALS=( 'received' 'delivered' 'forwarded' 'deferred' 'bounced' 'rejected' 'held' 'discarded' 'reject_warnings' 'bytes_received' 'bytes_delivered' 'queued' )
14
 
15
[ ! -e "${PFSTATSFILE}" ] && touch "${PFSTATSFILE}" && chown zabbix:zabbix "${PFSTATSFILE}"
16
 
17
printvalues() {
18
  key=$1
19
  pfkey=$(echo "$1" | tr '_' ' ')
20
  value=$(grep -m 1 "${pfkey}" $TEMPFILE | awk '{print $1}' | awk '/k|m/{p = /k/?1:2}{printf "%d\n", int($1) * 1024 ^ p}')
21
  old_value=$(grep -e "^${key};" "${PFSTATSFILE}" | cut -d ";" -f2)
22
  # modified by RWR to NOT add queued keys, but simply store them
23
  if [ -n "$old_value" -a "$1" == 'queued' ]; then
24
     sed -i -e "s/^${key};${old_value}/${key};${value}/" "${PFSTATSFILE}"
25
  else
26
     if [ -n "${old_value}" ]; then
27
      sed -i -e "s/^${key};${old_value}/${key};$((${old_value}+${value}))/" "${PFSTATSFILE}"
28
     else
29
       echo "${key};${value}" >> "${PFSTATSFILE}"
30
     fi
31
  fi
32
}
33
 
34
if [ -n "$1" ]; then 
35
  key=$(echo ${PFVALS[@]} | grep -wo $1)
36
  if [ -n "${key}" ]; then
37
    value=$(grep -e "^${key};" "${PFSTATSFILE}" | cut -d ";" -f2)
38
    echo "${value}"
39
  else
40
    rm "${TEMPFILE}"
41
    exit 2
42
  fi
43
else
44
  "${LOGTAIL}" -f"${MAILLOG}" -o"${PFOFFSETFILE}" | "${PFLOGSUMM}" -h 0 -u 0 --bounce_detail=0 --deferral_detail=0 --reject_detail=0 --no_no_msg_size --smtpd_warning_detail=0 > "${TEMPFILE}"
45
  # modified by RWR to process the mail queue also
46
  echo `/usr/bin/mailq | /bin/grep -v "Mail queue is empty" | /bin/grep -c '^[0-9A-Z]'` queued >> "${TEMPFILE}"
47
  for i in "${PFVALS[@]}"; do
48
    printvalues "$i"
49
  done
50
fi
51
 
52
rm "${TEMPFILE}"