#$!/bin/bash #$Id: report,v 1.444 2015/09/01 08:30:12 fulford Exp $ # $Source: /src/merlin/usr/local/etc/RCS/report,v $ # $Revision: 1.444 $ # $Date: 2015/09/01 08:30:12 $ # Author C W Fulford. # Copyright 2012 - 2013 (c) C W Fulford. # Licensed for public use under the LGPL. # For assistance contact fulford@fulford.net 0709 229 5385 ################################################################### cmd=`basename $0` syntax="report [-c] [-d] [-e <email_addr>] [-m <month>] [-n] [-o <output_dir>] [-s] [-v] [-V] <host_id>" while [ $# -gt 0 ];do case $1 in -c) current=:;shift;; -d) set -x;debug=:;shift 1;; -e) rcpt=$2;shift 2;; -o) odir=$2;shift 2;; -s) display=:;shift;; -v) verbose=:;shift;; -V) echo "$cmd $Revision: 1.444 $"|awk '{print $1,$3}';exit;; -*) echo "$syntax" >&2;exit 1;; *) id=$1;shift;; esac done conf=/usr/local/etc/report.cf eval `sed -ne '/^'$id':/,/^$/{/^[ ].*/p}' $conf` debug=${debug:-""} [ $debug ]&& echo "debug=$debug" [ $debug ]&& echo "id=$id" odir=${odir:-"$HOME/reports.d/$id"} [ -d $odir ] || mkdir -p $odir psout=$odir/`date +%y%m%d`.ps pdfout=$odir/`date +%y%m%d`.pdf tmp=/tmp/$cmd$$ tmplt=/usr/local/etc/report.d/$id [ -f $tmplt ] ||{ echo "$cmd: $tmplt not found!" >&2; exit 1 ;} [ -z "$id" ] &&{ echo "syntax: $syntax">&2; exit ;} if [ $current ];then month=`date +%b` brianonth=`date +%B` year=`date +%Y` else month=`date +%b --date="last month"` brianonth=`date +%B --date="last month"` year=`date +%Y --date="last month"` fi datafile=/var/log/report/$id.$month.db #find all records for the host in the requested month cd /var/log for f in `ls -r maillog maillog\.[1-9] messages messages\.[1-9]`;do sudo grep -e "^$month.*$id" $f|sort -u >>$tmp; done sudo mv $tmp $datafile admsgs=0 for mbox in $mboxes;do if [ -f $mbox ];then mcount=`grep -e "^Date: .*$month $year" $mbox|wc -l` fi admsgs=`expr "$admsgs" + "$mcount"` ||{ echo "$cmd: error line $LINENO -mcount = $mcount, admsgs = $admsgs, mbox =$mbox" >&2 ;} done [ $debug ]&& echo "company = $company" #find host name ip=`getent hosts $id|awk '{print $1}'` [ $debug ] && echo "ip = $ip" host=`nslookup $ip|awk '/name = /{print $4}'` [ $debug ] && echo "host = $host" #LC_ALL=en_GB.UTF-8 awk -v admsgs=$admsgs -v id=$id -v host=$host -v debug=$debug -v tmplt=$tmplt 'BEGIN{ errstat="No significant errors were detected." month="'$month'" brianonth="'$lmonth'" repdate=strftime("%B %Y") cmd="getent hosts "id if($debug) print "cmd = "cmd cmd|getline ip close(cmd); # getent return ip and host name so now split split(ip,a," ") ip=a[1] if(debug) print "debug set" # initialise array c["arcmail"]=0 c["chkdf"]=0 c["chkdf_lrt"]=0 c["chkdf_full"]=0 c["chkftpd"]=0 c["chkfw"]=0 c["chkpl"]=0 c["chkmail"]=0 c["chkspam"]=0 c["clean"]=0 c["debrianail"]=0 c["ftchbkup"]=0 c["fw_tot"]=0 c["mssngmb"]=0 c["brianbx"]=0 c["plbk_rn"]=0 c["plbk_tst"]=0 c["plbk_cmplt"]=0 c["plbk_trns"]=0 c["plbk_fld"]=0 c["pupd"]=0 c["tr_tot"]=0 c["secscan"]=0 c["tr_chk"]=0 c["tr_ok"]=0 c["tr_low"]=0 c["tr_vlow"]=0 c["srvrdn"]=0 }FNR==NR{ if ($5 ~ /arcmail:/){ if($8 ~ /archived/){ i c["arcmail"]++;cl["tot"]++ amail[$10]=(amail[$10] + $6) c["arctot"]=(c["arctot"] + $6) } } if ($5 ~ /chkdf:/){ c["chkdf"]++;c["tot"]++ if(/Warning/){ c["chkdf_lrt"]++ if(/100%/){ c["chkdf_full"]++ c["serious"]++ } } } if ($5 ~ /chkftpd:/){c["chkftpd"]++;c["tot"]++} if ($5 ~ /chkfw/) { c["chkfw"]++ c["tot"]++ c["fw_tot"]++ c["tr_tot"] = c["tr_tot"] + $10 if ($10 > 300){ c["tr_chk"]++ c["tr_ok"]++ } if ($10 < 300){ c["tr_chk"]++ if ($10<200) c["tr_vlow"]++ else c["tr_low"]++ } } if ($6 ~ /clean:/) { c["clean"]++;c["tot"]++ c["cfd"]=c["cfd"] + $8 c["cfz"]=c["cfz"] + $11 } if ($5 ~ /chkmail:/ || $5 ~ /debrianail:/ ){ c["chkmail"]++;c["tot"]++ uniqmb[$6] if(/Not found!/){ mssngmb[$6]=$7 } if ($10 ~ /INBOX.Spam/){ c["chkspam"]++;c["tot"]++ if($6 > 100){ spam[$9]=$6 } }else if ($10 ~ /^INBOX$/){ if($6 > 100){ inbxs[$9]=$6 } }else if ($10 ~ /Archive/){ if($6 > 100){ split($10,b,".") abxs[$9":"b[3]]=$6 } } if ($8 ~ /deleted/){ c["debrianail"]++;c["tot"]++ c["deltot"]=c["deltot"]+$6 debrianail[$10]=delmail[$10]+$6 } } if ($5 ~ /plesk-dougal:/){ c["chkpl"]++ ; c["tot"]++ ; if($0 ~ /updated/){ c["pupd"]++ } } if ($5 ~ /secscan:/){c["secscan"]++;c["tot"]++} if ($5 ~ /ftchbkup[-:]/){c["ftchbkup"]++;c["tot"]++} if ($5 ~ /plbkup/){ if(/started/){ c["plbk_rn"]++ if(/test mode/) c["plbk_tst"]++ } if(/completed/){ c["plbk_cmplt"]++ if (/transfer/) c["plbk_trns"]++ } if(/failed/)c["plbk_fld"]++ } if (/server down/)c["srvrdn"]++ next; }END{ c["brianbx"]=length(inbxs)+length(spam)+length(abxs) mbc=length(uniqmb) if( c["chkfw"] > 0 ) tr_ave=(c["tr_tot"] / c["chkfw"]) else tr_ave="unknown" ; while (getline < tmplt ){ gsub(/<company>/,company); gsub(/<ip>/,ip); gsub(/<host>/,host); gsub(/<month>/,month); gsub(/<brianonth>/,lmonth); gsub(/<year>/,'$year'); otot=sprintf("%\47i",c["tot"]); gsub(/<otot>/,sprintf("%\47i",c["tot"])); gsub(/<errstat>/,errstat); gsub(/<chkftpd>/,c["chkftpd"]); gsub(/<chkfw>/,c["chkfw"]); gsub(/<chkmail>/,c["chkmail"]); gsub(/<largembx>/,c["brianbx"]); gsub(/<arcmail>/,c["arcmail"]); #gsub(/<arctot>/,c["arctot"]); gsub(/<clean>/,c["clean"]); gsub(/<cfd>/,c["cfd"]); gsub(/<cfz>/,c["cfz"]); gsub(/<debrianail>/,c["delmail"]); gsub(/<tr_chk>/,c["tr_chk"]); gsub(/<tr_ok>/,c["tr_ok"]); gsub(/<tr_low>/,c["tr_low"]); gsub(/<tr_vlow>/,c["tr_vlow"]); gsub(/<tr_ave>/,tr_ave); gsub(/<secscan>/,c["secscan"]); gsub(/<ftchbkup>/,c["ftchbkup"]); gsub(/<repdate>/,repdate); gsub(/<mbc>/,mbc); gsub(/<admsgs>/,admsgs); gsub(/<chkpl>/,c["chkpl"]); gsub(/<pupd>/,c["pupd"]); gsub(/<chkdf>/,c["chkdf"]); gsub(/<chkdf_lrt>/,c["chkdf_lrt"]); gsub(/<chkdf_full>/,c["chkdf_full"]); gsub(/<plbk_rn>/,c["plbk_rn"]); gsub(/<plbk_tst>/,c["plbk_tst"]); gsub(/<plbk_cmplt>/,c["plbk_cmplt"]); gsub(/<plbk_trns>/,c["plbk_trns"]); gsub(/<plbk_fld>/,c["plbk_fld"]); gsub(/<srvrdn>/,c["srvrdn"]); print; } if(length(amail) > 0) { print "|" printf "%s%\47i%s\n","\\fBArchived messages|",c["arctot"],"\\fR" for (m in amail){ ms=(ms + amail[m]) printf("%s%s%\47i\n",m,"|",amail[m])|\ "sort -n -r -t\"|\" -k2" } close("sort -n -r -t\"|\" -k2") print "|" } if(length(debrianail) > 0) { printf "%s%\47i%s\n","\\fBDeleted messages|",c["deltot"],"\\fR" for (d in debrianail){ ms=(ms + debrianail[d]) printf("%s%s%\47i\n",d,"|",debrianail[d])|"sort -n -r -t\"|\" -k2" } close("sort -n -r -t\"|\" -k2") print "|" } if(length(inbxs) > 0){ print "\\fBLarge mailboxes\\fR" for (i in inbxs ){ ms=(ms + inbxs[i]) printf("%s%s%\47i\n", i,"|",inbxs[i])|\ "sort -n -r -t\"|\" -k2" } close("sort -n -r -t\"|\" -k2") } if(length(spam) > 0){ print "|" print "\\fBLarge spam mailboxes\\fR" for (i in spam){ ms=(ms + spam[i]) print i "|" spam[i] |"sort -n -r -t\"|\" -k2" } close("sort -n -r -t\"|\" -k2") } print ".KE" print ".KS" if(length(abxs) > 0){ print ".TE" print ".TS" print "tab (|);" print "l l r." print "\\fBLarge archive mailboxes|Year|Messages\\fR" for (i in abxs){ ms=(ms + abxs[i]) split(i,c,":") printf("%s%s%s%s%\47i\n",c[1],"|",c[2],"|",abxs[i])|\ "sort -n -t\"|\" -k1" } close("sort -n -r -t\"|\" -k3") } print ".TE" print ".TS" print "tab (|);" print "l r." #if(length(mssngmb) > 0){ # print "|" # print "\\fBMissing mail boxes\\fR" # for (i in mssngmb){ # print i "|" mssngmb[i] # } # close("sort -n -r -t\"|\" -k2") #} print "|" printf("%s%\47i%s\n","\\fBTotal messages processed |",ms,"\\fR") print ".TE" print ".KE" } ' $datafile | groff -t -ms > $psout ps2pdf $psout $pdfout if [ "$rcpt" ] ;then mailx -a $pdfout -s "report $id $date" $rcpt </dev/null fi if [ "$display" ] ;then gv $psout& fi ###################################################################### # This program is free software: you can redistribute it and or # # modify it under the terms of the Lesser GNU General Public License # # as published by the Free Software Foundation, either version 3 of # # the License, or (at your option) any later version. # # # # This program is distributed in the hope that it will be useful, # # but WITHOUT ANY WARRANTY; without even the implied warranty of # # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # # GNU General Public License for more details. # # # # A copy of the Lesser GNU General Public License and the GNU # # General Public License is available at # # <http://www.gnu.org/licenses/>. # ######################################################################
Copyright
© 2003-2017
Clifford W Fulford.
Fulford Consulting Ltd.
Regd. Co. 4250037 in England & Wales.
Regd. office 162, Edward Rd. Nottingham NG2 5GF, England, UK.
Related web sites: City Linux | Flare Support | West Bridgford | Fulford Portal | Joan Mary Fulford (Nottingham Writer) | Fulford Gallery | Amharic Interpreter | Arabic Interpreter | Tigrinya Interpreter
The layout and associated style sheets for this page are taken from the World Wide Web Consortium and used here under the W3C software licence.