#! /usr/bin/env bash set -euo pipefail IFS=$'\n\t' time_from="" time_until="tomorrow" postfix_received="" rbl_dropped="" spampd_clean="" spampd_spam="" sieve_spam="" postfix_sent="" postgrey_delayed="" function set_range() { case $1 in "month") time_from=$(date --date="last month" -I) ;; "week") time_from=$(date --date="last week" -I) ;; "day") time_from=$(date -I) ;; "yesterday") time_from=$(date --date="yesterday" -I) time_until="today" esac } function get_stats() { set +e postfix_received=$(journalctl -S "$time_from" -U "$time_until" _EXE=/usr/lib/postfix/bin/smtpd|grep "proxy-accept"| wc -l) rbl_dropped=$(journalctl -S "$time_from" -U "$time_until" -u postfix |grep "Service unavailable"| wc -l) spampd_clean=$(journalctl -S "$time_from" -U "$time_until" -u spampd| grep "clean message"| wc -l) spampd_spam=$(journalctl -S "$time_from" -U "$time_until" -u spampd| grep "identified spam"| wc -l) sieve_spam=$(journalctl -S "$time_from" -U "$time_until" _EXE=/usr/lib/dovecot/dovecot-lda| grep "Spam"| wc -l) postfix_sent=$(journalctl -S "$time_from" -U "$time_until" _EXE=/usr/lib/postfix/bin/smtp |grep "sent"| wc -l) postgrey_delayed=$(journalctl -S "$time_from" -U "$time_until" -u postgrey |grep "reason=new"| wc -l) set -e } function print_stats() { echo "Mail statistics for $(hostname) since $time_from" echo "Received total: $postfix_received" echo "RBL dropped: $rbl_dropped" echo "Delayed: $postgrey_delayed" echo "Spampd clean: $spampd_clean" echo "Spampd spam: $spampd_spam" echo "Sieve spam: $spampd_spam" echo "Sent: $postfix_sent" } case ${@} in "-w") set_range "week" ;; "-m") set_range "month" ;; "-d") set_range "day" ;; "-y") set_range "yesterday" ;; *) set_range "day" ;; esac get_stats print_stats exit 0