%PDF- %PDF-
Direktori : /opt/PFLogSumm-HTML-GUI/ |
Current File : //opt/PFLogSumm-HTML-GUI/pflogsummUIReport.sh |
#!/usr/bin/env bash # Debug option - should be disabled unless required #set -x #===================================================================================================================== # DESCRIPTION Generating a stand alone web report for postix log files, # Runs on all Linux platforms with postfix installed # AUTHOR Riaan Pretorius <pretorius.riaan@gmail.com> # IDIOCRACY yes.. i know.. bash??? WTF was i thinking?? Well it works, runs every # where and it is portable # # https://en.wikipedia.org/wiki/MIT_License # # LICENSE # MIT License # # Copyright (c) 2018 Riaan Pretorius # # Permission is hereby granted, free of charge, to any person obtaining a copy of this software # and associated documentation files (the "Software"), to deal in the Software without restriction, # including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, # and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, # subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all copies or substantial # portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT # NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. # IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE # OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #===================================================================================================================== #CONFIG FILE LOCATION PFSYSCONFDIR="/etc" #Create Blank Config File if it does not exist if [ ! -f ${PFSYSCONFDIR}/"pflogsumui.conf" ] then tee ${PFSYSCONFDIR}/"pflogsumui.conf" <<EOF #PFLOGSUMUI CONFIG ## Postfix Log Location LOGFILELOCATION="/var/log/maillog" ## pflogsumm details ## NOTE: DONT USE -d today - breaks the script PFLOGSUMMOPTIONS=" --verbose_msg_detail --zero_fill " PFLOGSUMMBIN="/usr/sbin/pflogsumm " ## HTML Output HTMLOUTPUTDIR="/var/www/html/" HTMLOUTPUT_INDEXDASHBOARD="index.html" EOF echo "DEFAULT configuration file writen to ${PFSYSCONFDIR}/pflogsumui.conf, Please verify the paths before you continue" exit 0 fi #Load Config File . ${PFSYSCONFDIR}/"pflogsumui.conf" #Create the Cache Directory if it does not exist if [ ! -d $HTMLOUTPUTDIR/data ]; then mkdir $HTMLOUTPUTDIR/data; fi #TOOLS ACTIVEHOSTNAME=$(cat /proc/sys/kernel/hostname) MOVEF="/usr/bin/mv -f " #Temporal Values REPORTDATE=$(date '+%Y-%m-%d %H:%M:%S') CURRENTYEAR=$(date +'%Y') CURRENTMONTH=$(date +'%b') # CURRENTDAY=$(date +"%e") - Outputs single digit ( 3 instead of 03 ) which breaks sed substitutions. CURRENTDAY=$(date +"%d") $PFLOGSUMMBIN $PFLOGSUMMOPTIONS -e $LOGFILELOCATION > /tmp/mailreport #Extract Sections from PFLOGSUMM sed -n '/^Grand Totals/,/^Per-Day/p;/^Per-Day/q' /tmp/mailreport | sed -e '1,4d' | sed -e :a -e '$d;N;2,3ba' -e 'P;D' | sed '/^$/d' > /tmp/GrandTotals sed -n '/^Per-Day Traffic Summary/,/^Per-Hour/p;/^Per-Hour/q' /tmp/mailreport | sed -e '1,4d' | sed -e :a -e '$d;N;2,2ba' -e 'P;D' > /tmp/PerDayTrafficSummary sed -n '/^Per-Hour Traffic Daily Average/,/^Host\//p;/^Host\//q' /tmp/mailreport | sed -e '1,4d' | sed -e :a -e '$d;N;2,2ba' -e 'P;D' > /tmp/PerHourTrafficDailyAverage sed -n '/^Host\/Domain Summary\: Message Delivery/,/^Host\/Domain Summary\: Messages Received/p;/^Host\/Domain Summary\: Messages Received/q' /tmp/mailreport | sed -e '1,4d' | sed -e :a -e '$d;N;2,2ba' -e 'P;D' > /tmp/HostDomainSummaryMessageDelivery sed -n '/^Host\/Domain Summary\: Messages Received/,/^Senders by message count/p;/^Senders by message count/q' /tmp/mailreport | sed -e '1,4d' | sed -e :a -e '$d;N;2,2ba' -e 'P;D' > /tmp/HostDomainSummaryMessagesReceived sed -n '/^Senders by message count/,/^Recipients by message count/p;/^Recipients by message count/q' /tmp/mailreport | sed -e '1,2d' | sed -e :a -e '$d;N;2,2ba' -e 'P;D' | sed '/^$/d' > /tmp/Sendersbymessagecount sed -n '/^Recipients by message count/,/^Senders by message size/p;/^Senders by message size/q' /tmp/mailreport | sed -e '1,2d' | sed -e :a -e '$d;N;2,2ba' -e 'P;D' | sed '/^$/d' > /tmp/Recipientsbymessagecount sed -n '/^Senders by message size/,/^Recipients by message size/p;/^Recipients by message size/q' /tmp/mailreport | sed -e '1,2d' | sed -e :a -e '$d;N;2,2ba' -e 'P;D' | sed '/^$/d' > /tmp/Sendersbymessagesize sed -n '/^Recipients by message size/,/^Messages with no size data/p;/^Messages with no size data/q' /tmp/mailreport | sed -e '1,2d' | sed -e :a -e '$d;N;2,2ba' -e 'P;D' | sed '/^$/d' > /tmp/Recipientsbymessagesize sed -n '/^Messages with no size data/,/^message deferral detail/p;/^message deferral detail/q' /tmp/mailreport | sed -e '1,2d' | sed -e :a -e '$d;N;2,2ba' -e 'P;D' | sed '/^$/d' > /tmp/Messageswithnosizedata sed -n '/^message deferral detail/,/^message bounce detail (by relay)/p;/^message bounce detail (by relay)/q' /tmp/mailreport | sed -e '1,2d' | sed -e :a -e '$d;N;2,2ba' -e 'P;D' | sed '/^$/d' > /tmp/messagedeferraldetail sed -n '/^message bounce detail (by relay)/,/^message reject detail/p;/^message reject detail/q' /tmp/mailreport | sed -e '1,2d' | sed -e :a -e '$d;N;2,2ba' -e 'P;D' | sed '/^$/d' > /tmp/messagebouncedetaibyrelay sed -n '/^Warnings/,/^Fatal Errors/p;/^Fatal Errors/q' /tmp/mailreport | sed -e '1,2d' | sed -e :a -e '$d;N;2,2ba' -e 'P;D' | sed '/^$/d' > /tmp/warnings sed -n '/^Fatal Errors/,/^Master daemon messages/p;/^Master daemon messages/q' /tmp/mailreport | sed -e '1,2d' | sed -e :a -e '$d;N;2,2ba' -e 'P;D' | sed '/^$/d' > /tmp/FatalErrors #====================================================== # Extract Information into variables -> Grand Totals #====================================================== ReceivedEmail=$(awk '$2=="received" {print $1}' /tmp/GrandTotals) DeliveredEmail=$(awk '$2=="delivered" {print $1}' /tmp/GrandTotals) ForwardedEmail=$(awk '$2=="forwarded" {print $1}' /tmp/GrandTotals) DeferredEmailCount=$(awk '$2=="deferred" {print $1}' /tmp/GrandTotals) DeferredEmailDeferralsCount=$(awk '$2=="deferred" {print $3" "$4}' /tmp/GrandTotals) BouncedEmail=$(awk '$2=="bounced" {print $1}' /tmp/GrandTotals) RejectedEmailCount=$(awk '$2=="rejected" {print $1}' /tmp/GrandTotals) RejectedEmailPercentage=$(awk '$2=="rejected" {print $3}' /tmp/GrandTotals) RejectedWarningsEmail=$(sed 's/reject warnings/rejectwarnings/' /tmp/GrandTotals | awk '$2=="rejectwarnings" {print $1}') HeldEmail=$(awk '$2=="held" {print $1}' /tmp/GrandTotals) DiscardedEmailCount=$(awk '$2=="discarded" {print $1}' /tmp/GrandTotals) DiscardedEmailPercentage=$(awk '$2=="discarded" {print $3}' /tmp/GrandTotals) BytesReceivedEmail=$(sed 's/bytes received/bytesreceived/' /tmp/GrandTotals | awk '$2=="bytesreceived" {print $1}'|sed 's/[^0-9]*//g' ) BytesDeliveredEmail=$(sed 's/bytes delivered/bytesdelivered/' /tmp/GrandTotals | awk '$2=="bytesdelivered" {print $1}'|sed 's/[^0-9]*//g') SendersEmail=$(awk '$2=="senders" {print $1}' /tmp/GrandTotals) SendingHostsDomainsEmail=$(sed 's/sending hosts\/domains/sendinghostsdomains/' /tmp/GrandTotals | awk '$2=="sendinghostsdomains" {print $1}') RecipientsEmail=$(awk '$2=="recipients" {print $1}' /tmp/GrandTotals) RecipientHostsDomainsEmail=$(sed 's/recipient hosts\/domains/recipienthostsdomains/' /tmp/GrandTotals | awk '$2=="recipienthostsdomains" {print $1}') #====================================================== # Extract Information into variable -> Per-Day Traffic Summary #====================================================== while IFS= read -r var do PerDayTrafficSummaryTable="" PerDayTrafficSummaryTable+="<tr>" PerDayTrafficSummaryTable+=$(echo "$var" | awk '{print "<td>"$1" "$2" "$3"</td>""<td>"$4"</td>""<td>"$5"</td>""<td>"$6"</td>""<td>"$7"</td>""<td>"$8"</td>"}') PerDayTrafficSummaryTable+="</tr>" echo $PerDayTrafficSummaryTable >> /tmp/PerDayTrafficSummary_tmp done < /tmp/PerDayTrafficSummary $MOVEF /tmp/PerDayTrafficSummary_tmp /tmp/PerDayTrafficSummary &> /dev/null #====================================================== # Extract Information into variable -> Per-Hour Traffic Daily Average #====================================================== while IFS= read -r var do PerHourTrafficDailyAverageTable="" PerHourTrafficDailyAverageTable+="<tr>" PerHourTrafficDailyAverageTable+=$(echo "$var" | awk '{print "<td>"$1"</td>""<td>"$2"</td>""<td>"$3"</td>""<td>"$4"</td>""<td>"$5"</td>""<td>"$6"</td>"}') PerHourTrafficDailyAverageTable+="</tr>" echo $PerHourTrafficDailyAverageTable >> /tmp/PerHourTrafficDailyAverage_tmp done < /tmp/PerHourTrafficDailyAverage $MOVEF /tmp/PerHourTrafficDailyAverage_tmp /tmp/PerHourTrafficDailyAverage &> /dev/null #====================================================== # Extract Information into variable -> Per-Hour Traffic Daily Average #====================================================== while IFS= read -r var do HostDomainSummaryMessageDeliveryTable="" HostDomainSummaryMessageDeliveryTable+="<tr>" HostDomainSummaryMessageDeliveryTable+=$(echo "$var" | awk '{print "<td>"$1"</td>""<td>"$2"</td>""<td>"$3"</td>""<td>"$4" "$5"</td>""<td>"$6" "$7"</td>""<td>"$8"</td>" }') HostDomainSummaryMessageDeliveryTable+="</tr>" echo $HostDomainSummaryMessageDeliveryTable >> /tmp/HostDomainSummaryMessageDelivery_tmp done < /tmp/HostDomainSummaryMessageDelivery $MOVEF /tmp/HostDomainSummaryMessageDelivery_tmp /tmp/HostDomainSummaryMessageDelivery &> /dev/null #====================================================== # Extract Information into variable -> Host Domain Summary Messages Received #====================================================== while IFS= read -r var do HostDomainSummaryMessagesReceivedTable="" HostDomainSummaryMessagesReceivedTable+="<tr>" HostDomainSummaryMessagesReceivedTable+=$(echo "$var" | awk '{print "<td>"$1"</td>""<td>"$2"</td>""<td>"$3"</td>"}') HostDomainSummaryMessagesReceivedTable+="</tr>" echo $HostDomainSummaryMessagesReceivedTable >> /tmp/HostDomainSummaryMessagesReceived_tmp done < /tmp/HostDomainSummaryMessagesReceived $MOVEF /tmp/HostDomainSummaryMessagesReceived_tmp /tmp/HostDomainSummaryMessagesReceived &> /dev/null #====================================================== # Extract Information into variable -> Host Domain Summary Messages Received #====================================================== while IFS= read -r var do SendersbymessagecountTable="" SendersbymessagecountTable+="<tr>" SendersbymessagecountTable+=$(echo "$var" | awk '{print "<td>"$1"</td>""<td>"$2"</td>"}') SendersbymessagecountTable+="</tr>" echo $SendersbymessagecountTable >> /tmp/Sendersbymessagecount_tmp done < /tmp/Sendersbymessagecount $MOVEF /tmp/Sendersbymessagecount_tmp /tmp/Sendersbymessagecount &> /dev/null #====================================================== # Extract Information into variable -> Recipients by message count #====================================================== while IFS= read -r var do RecipientsbymessagecountTable="" RecipientsbymessagecountTable+="<tr>" RecipientsbymessagecountTable+=$(echo "$var" | awk '{print "<td>"$1"</td>""<td>"$2"</td>"}') RecipientsbymessagecountTable+="</tr>" echo $RecipientsbymessagecountTable >> /tmp/Recipientsbymessagecount_tmp done < /tmp/Recipientsbymessagecount $MOVEF /tmp/Recipientsbymessagecount_tmp /tmp/Recipientsbymessagecount &> /dev/null #====================================================== # Extract Information into variable -> Senders by message size #====================================================== while IFS= read -r var do SendersbymessagesizeTable="" SendersbymessagesizeTable+="<tr>" SendersbymessagesizeTable+=$(echo "$var" | awk '{print "<td>"$1"</td>""<td>"$2"</td>"}') SendersbymessagesizeTable+="</tr>" echo $SendersbymessagesizeTable >> /tmp/Sendersbymessagesize_tmp done < /tmp/Sendersbymessagesize $MOVEF /tmp/Sendersbymessagesize_tmp /tmp/Sendersbymessagesize &> /dev/null #====================================================== # Extract Information into variable -> Recipients by messagesize Table #====================================================== while IFS= read -r var do RecipientsbymessagesizeTable="" RecipientsbymessagesizeTable+="<tr>" RecipientsbymessagesizeTable+=$(echo "$var" | awk '{print "<td>"$1"</td>""<td>"$2"</td>"}') RecipientsbymessagesizeTable+="</tr>" echo $RecipientsbymessagesizeTable >> /tmp/Recipientsbymessagesize_tmp done < /tmp/Recipientsbymessagesize $MOVEF /tmp/Recipientsbymessagesize_tmp /tmp/Recipientsbymessagesize &> /dev/null #====================================================== # Extract Information into variable -> Recipients by messagesize Table #====================================================== while IFS= read -r var do MessageswithnosizedataTable="" MessageswithnosizedataTable+="<tr>" MessageswithnosizedataTable+=$(echo "$var" | awk '{print "<td>"$1"</td>""<td>"$2"</td>"}') MessageswithnosizedataTable+="</tr>" echo $MessageswithnosizedataTable >> /tmp/Messageswithnosizedata_tmp echo $MessageswithnosizedataTable done < /tmp/Messageswithnosizedata $MOVEF /tmp/Messageswithnosizedata_tmp /tmp/Messageswithnosizedata &> /dev/null #====================================================== # Single PAGE INDEX HTML TEMPLATE # Using embedded HTML makes the script highly portable # SED search and replace tags to fill the content #====================================================== cat > $HTMLOUTPUTDIR/$HTMLOUTPUT_INDEXDASHBOARD << 'HTMLOUTPUTINDEXDASHBOARD' <!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <meta name="description" content="Postfix PFLOGSUMM Dashboard Index"> <meta name="author" content="Riaan Pretorius"> <link rel="icon" href="http://www.postfix.org/favicon.ico"> <title>Postfix PFLOGSUMM Dashboard Index</title> <!-- Bootstrap core CSS --> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.3/css/bootstrap.min.css"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css"> <style> body { padding-top: 5rem; } footer { background-color: #eee; padding: 25px; } .spacer10 { height: 10px; } </style> </head> <body> <nav class="navbar navbar-expand-md navbar-dark bg-dark fixed-top"> <a class="navbar-brand" href="#">Postfix PFLOGSUMM Dashboard</a> </nav> <div class="container"> <h3 class="pb-3 mb-4 font-italic border-bottom"> Select Report <dl class="row"> <dt class="col-sm-3" style="font-size: 0.5em;">Last Update</dt> <dd class="col-sm-9" style="font-size: 0.5em;">##REPORTDATE##</dd> <dt class="col-sm-3" style="font-size: 0.5em;">Server</dt> <dd class="col-sm-9" style="font-size: 0.5em;">##ACTIVEHOSTNAME##</dd> </dl> </h3> <div class="row"> <div class="col-sm"> <!-- January Start--> <div class="card flex-md-row mb-4 shadow-sm h-md-250"> <div class="card-body d-flex flex-column align-items-start"> <h5><strong class="d-inline-block mb-2 text-primary">January</strong></h5> <h6>Report Count <span class="badge badge-primary">##JanuaryCount##</span></h6> <div class="spacer10"></div> <a data-toggle="collapse" href="#JanuaryCard" aria-expanded="true" class="d-block"> View Reports </a> <div id="JanuaryCard" class="collapse hide"> <div class="card-body "> <div class="list-group list-group-flush JanuaryList "> <!-- Dynamic Item List--> </div> </div> </div> </div> </div> <!-- January End --> </div> <div class="col-sm"> <!-- February Start--> <div class="card flex-md-row mb-4 shadow-sm h-md-250"> <div class="card-body d-flex flex-column align-items-start"> <h5><strong class="d-inline-block mb-2 text-primary">February</strong></h5> <h6>Report Count <span class="badge badge-primary">##FebruaryCount##</span></h6> <div class="spacer10"></div> <a data-toggle="collapse" href="#FebruaryCard" aria-expanded="true" class="d-block"> View Reports </a> <div id="FebruaryCard" class="collapse hide"> <div class="card-body "> <div class="list-group list-group-flush FebruaryList "> <!-- Dynamic Item List--> </div> </div> </div> </div> </div> <!-- February End --> </div> <div class="col-sm"> <!-- March Start--> <div class="card flex-md-row mb-4 shadow-sm h-md-250"> <div class="card-body d-flex flex-column align-items-start"> <h5><strong class="d-inline-block mb-2 text-primary">March</strong></h5> <h6>Report Count <span class="badge badge-primary">##MarchCount##</span></h6> <div class="spacer10"></div> <a data-toggle="collapse" href="#MarchCard" aria-expanded="true" class="d-block"> View Reports </a> <div id="MarchCard" class="collapse hide"> <div class="card-body "> <div class="list-group list-group-flush MarchList "> <!-- Dynamic Item List--> </div> </div> </div> </div> </div> <!-- March End --> </div> <div class="col-sm"> <!-- April Start--> <div class="card flex-md-row mb-4 shadow-sm h-md-250"> <div class="card-body d-flex flex-column align-items-start"> <h5><strong class="d-inline-block mb-2 text-primary">April</strong></h5> <h6>Report Count <span class="badge badge-primary">##AprilCount##</span></h6> <div class="spacer10"></div> <a data-toggle="collapse" href="#AprilCard" aria-expanded="true" class="d-block"> View Reports </a> <div id="AprilCard" class="collapse hide"> <div class="card-body "> <div class="list-group list-group-flush AprilList "> <!-- Dynamic Item List--> </div> </div> </div> </div> </div> <!-- April End --> </div> </div> <br> <div class="row"> <div class="col-sm"> <!-- May Start--> <div class="card flex-md-row mb-4 shadow-sm h-md-250"> <div class="card-body d-flex flex-column align-items-start"> <h5><strong class="d-inline-block mb-2 text-primary">May</strong></h5> <h6>Report Count <span class="badge badge-primary">##MayCount##</span></h6> <div class="spacer10"></div> <a data-toggle="collapse" href="#MayCard" aria-expanded="true" class="d-block"> View Reports </a> <div id="MayCard" class="collapse hide"> <div class="card-body "> <div class="list-group list-group-flush MayList "> <!-- Dynamic Item List--> </div> </div> </div> </div> </div> <!-- May End --> </div> <div class="col-sm"> <!-- June Start--> <div class="card flex-md-row mb-4 shadow-sm h-md-250"> <div class="card-body d-flex flex-column align-items-start"> <h5><strong class="d-inline-block mb-2 text-primary">June</strong></h5> <h6>Report Count <span class="badge badge-primary">##JuneCount##</span></h6> <div class="spacer10"></div> <a data-toggle="collapse" href="#JuneCard" aria-expanded="true" class="d-block"> View Reports </a> <div id="JuneCard" class="collapse hide"> <div class="card-body "> <div class="list-group list-group-flush JuneList "> <!-- Dynamic Item List--> </div> </div> </div> </div> </div> <!-- June End --> </div> <div class="col-sm"> <!-- July Start--> <div class="card flex-md-row mb-4 shadow-sm h-md-250"> <div class="card-body d-flex flex-column align-items-start"> <h5><strong class="d-inline-block mb-2 text-primary">July</strong></h5> <h6>Report Count <span class="badge badge-primary">##JulyCount##</span></h6> <div class="spacer10"></div> <a data-toggle="collapse" href="#JulyCard" aria-expanded="true" class="d-block"> View Reports </a> <div id="JulyCard" class="collapse hide"> <div class="card-body "> <div class="list-group list-group-flush JulyList "> <!-- Dynamic Item List--> </div> </div> </div> </div> </div> <!-- July End --> </div> <div class="col-sm"> <!-- August Start--> <div class="card flex-md-row mb-4 shadow-sm h-md-250"> <div class="card-body d-flex flex-column align-items-start"> <h5><strong class="d-inline-block mb-2 text-primary">August</strong></h5> <h6>Report Count <span class="badge badge-primary">##AugustCount##</span></h6> <div class="spacer10"></div> <a data-toggle="collapse" href="#AugustCard" aria-expanded="true" class="d-block"> View Reports </a> <div id="AugustCard" class="collapse hide"> <div class="card-body "> <div class="list-group list-group-flush AugustList "> <!-- Dynamic Item List--> </div> </div> </div> </div> </div> <!-- August End --> </div> </div> <br> <div class="row"> <div class="col-sm"> <!-- September Start--> <div class="card flex-md-row mb-4 shadow-sm h-md-250"> <div class="card-body d-flex flex-column align-items-start"> <h5><strong class="d-inline-block mb-2 text-primary">September</strong></h5> <h6>Report Count <span class="badge badge-primary">##SeptemberCount##</span></h6> <div class="spacer10"></div> <a data-toggle="collapse" href="#SeptemberCard" aria-expanded="true" class="d-block"> View Reports </a> <div id="SeptemberCard" class="collapse hide"> <div class="card-body "> <div class="list-group list-group-flush SeptemberList "> <!-- Dynamic Item List--> </div> </div> </div> </div> </div> <!-- September End --> </div> <div class="col-sm"> <!-- October Start--> <div class="card flex-md-row mb-4 shadow-sm h-md-250"> <div class="card-body d-flex flex-column align-items-start"> <h5><strong class="d-inline-block mb-2 text-primary">October</strong></h5> <h6>Report Count <span class="badge badge-primary">##OctoberCount##</span></h6> <div class="spacer10"></div> <a data-toggle="collapse" href="#OctoberCard" aria-expanded="true" class="d-block"> View Reports </a> <div id="OctoberCard" class="collapse hide"> <div class="card-body "> <div class="list-group list-group-flush OctoberList "> <!-- Dynamic Item List--> </div> </div> </div> </div> </div> <!-- October End --> </div> <div class="col-sm"> <!-- November Start--> <div class="card flex-md-row mb-4 shadow-sm h-md-250"> <div class="card-body d-flex flex-column align-items-start"> <h5><strong class="d-inline-block mb-2 text-primary">November</strong></h5> <h6>Report Count <span class="badge badge-primary">##NovemberCount##</span></h6> <div class="spacer10"></div> <a data-toggle="collapse" href="#NovemberCard" aria-expanded="true" class="d-block"> View Reports </a> <div id="NovemberCard" class="collapse hide"> <div class="card-body "> <div class="list-group list-group-flush NovemberList "> <!-- Dynamic Item List--> </div> </div> </div> </div> </div> <!-- November End --> </div> <div class="col-sm"> <!-- December Start--> <div class="card flex-md-row mb-4 shadow-sm h-md-250"> <div class="card-body d-flex flex-column align-items-start"> <h5><strong class="d-inline-block mb-2 text-primary">December</strong></h5> <h6>Report Count <span class="badge badge-primary">##DecemberCount##</span></h6> <div class="spacer10"></div> <a data-toggle="collapse" href="#DecemberCard" aria-expanded="true" class="d-block"> View Reports </a> <div id="DecemberCard" class="collapse hide"> <div class="card-body "> <div class="list-group list-group-flush DecemberList "> <!-- Dynamic Item List--> </div> </div> </div> </div> </div> <!-- December End --> </div> </div> </div> <br> <!-- Footer --> <footer class="container-fluid bg-dark text-center text-white-50"> <div class="copyrights" style="margin-top:5px;"> <p>© <script>new Date().getFullYear() > 2010 && document.write(new Date().getFullYear());</script> <br> <span>Powered by <a href="https://github.com/KTamas/pflogsumm">PFLOGSUMM</a> </span> / <span><a href="https://github.com/RiaanPretoriusSA/PFLogSumm-HTML-GUI">PFLOGSUMM HTML UI Report</a> </span> </p> </div> </footer> <!-- Footer --> <!-- Bootstrap core JavaScript ================================================== --> <!-- Placed at the end of the document so the pages load faster --> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.3/js/bootstrap.min.js"></script> <!-- Popper.JS --> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.5/umd/popper.min.js"></script> </body> <script> $(document).ready(function () { $('.JanuaryList').load("data/jan_rpt.html?rnd=" + Math.random()); $('.FebruaryList').load("data/feb_rpt.html?rnd=" + Math.random()); $('.MarchList').load("data/mar_rpt.html?rnd=" + Math.random()); $('.AprilList').load("data/apr_rpt.html?rnd=" + Math.random()); $('.MayList').load("data/may_rpt.html?rnd=" + Math.random()); $('.JuneList').load("data/jun_rpt.html?rnd=" + Math.random()); $('.JulyList').load("data/jul_rpt.html?rnd=" + Math.random()); $('.AugustList').load("data/aug_rpt.html?rnd=" + Math.random()); $('.SeptemberList').load("data/sep_rpt.html?rnd=" + Math.random()); $('.OctoberList').load("data/oct_rpt.html?rnd=" + Math.random()); $('.NovemberList').load("data/nov_rpt.html?rnd=" + Math.random()); $('.DecemberList').load("data/dec_rpt.html?rnd=" + Math.random()); }); </script> </body> </html> HTMLOUTPUTINDEXDASHBOARD #====================================================== # Single PAGE REPORT HTML TEMPLATE # Using embedded HTML makes the script highly portable # SED search and replace tags to fill the content #====================================================== #2018-Nov-17.html cat > $HTMLOUTPUTDIR/data/$CURRENTYEAR-$CURRENTMONTH-$CURRENTDAY.html << 'HTMLREPORTDASHBOARD' <!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <meta name="description" content="Postfix Report"> <meta name="author" content=""> <link rel="icon" href="http://www.postfix.org/favicon.ico"> <title>Postfix PFLOGSUMM Report</title> <!-- Bootstrap core CSS --> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.3/css/bootstrap.min.css"> <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.4.2/css/all.css" integrity="sha384-/rXc/GQVaYpyDdyxK+ecHPVYJSN9bmVFBvjA/9eOB+pb3F2w2N6fc5qB9Ew5yIns" crossorigin="anonymous"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.15.0/themes/prism.css"> <style> body { padding-top: 5rem; } footer { background-color: #eee; padding: 25px; } .spacer15 { height: 15px; } </style> </head> <body> <nav class="navbar navbar-expand-md navbar-dark bg-dark fixed-top"> <a class="navbar-brand" href="../">Postfix Report</a> </nav> <!-- Server/Report INFO --> <div class="container rounded shadow-sm p-3 my-3 text-white-50 bg-dark "> <div class="row"> <div class="card-body"> <div class="row mb-4"> <div class="col-sm-12"> <div> <strong>Hostname</strong> </div> <h6 class="mb-3">##ACTIVEHOSTNAME##</h6> <div> <strong>Report Date</strong> </div> <div>##REPORTDATE##</div> <div class="spacer15"></div> <div>This report exposes email addresses of end users / Please password protect this resource</div> </div> </div> </div> </div> </div> <!-- Server/Report INFO --> <br> <!-- Quick Status Blocks --> <div class="container rounded shadow-sm text-white bg-dark "> <!-- Row --> <div class="row counter-box text-center"> <!-- column --> <div class="col-lg-2 col-6"> <div class=""> <h5 class="font-mute text-mute"><span class="counter font-weight-bold">##ReceivedEmail##</span></h5> <span style="font-size: 0.85em;">Received Email</span> </div> </div> <!-- column --> <!-- column --> <div class="col-lg-2 col-6"> <div class=""> <h5 class="font-mute text-mute"><span class="counter font-weight-bold">##DeliveredEmail##</span></h5> <span style="font-size: 0.85em;">Delivered Mail</span> </div> </div> <!-- column --> <!-- column --> <div class="col-lg-2 col-6"> <div class=""> <h5 class="font-mute text-mute"><span class="counter font-weight-bold">##ForwardedEmail##</span></h5> <span style="font-size: 0.85em;">Forwarded Mail</span> </div> </div> <!-- column --> <!-- column --> <div class="col-lg-2 col-6"> <div class=""> <h5 class="font-mute text-mute"><span class="counter font-weight-bold">##DeferredEmailCount##</span></h5> <span style="font-size: 0.85em;">Deferred ##DeferredEmailDeferralsCount##</span> </div> </div> <!-- column --> <!-- column --> <div class="col-lg-2 col-6"> <div class=""> <h5 class="font-mute text-mute"><span class="counter font-weight-bold">##BouncedEmail##</span></h5> <span style="font-size: 0.85em;">Bounced Mail</span> </div> </div> <!-- column --> <!-- column --> <div class="col-lg-2 col-6"> <div class=""> <h5 class="font-mute text-mute"><span class="counter font-weight-bold">##RejectedWarningsEmail##</span></h5> <span style="font-size: 0.85em;">Rejected Warning ##RejectedEmailPercentage##</span> </div> </div> <!-- column --> </div> <div class="spacer15"></div> <!-- Row --> <div class="row counter-box text-center"> <!-- column --> <div class="col-lg-2 col-6"> <div class=""> <h5 class="font-mute text-mute"><span class="counter font-weight-bold">##RejectedEmailCount##</span></h5> <span style="font-size: 0.85em;">Rejected Mail ##RejectedEmailPercentage##</span> </div> </div> <!-- column --> <!-- column --> <div class="col-lg-2 col-6"> <div class=""> <h5 class="font-mute text-mute"><span class="counter font-weight-bold">##HeldEmail##</span></h5> <span style="font-size: 0.85em;">Held Mail</span> </div> </div> <!-- column --> <!-- column --> <div class="col-lg-2 col-6"> <div class=""> <h5 class="font-mute text-mute"><span class="counter font-weight-bold">##DiscardedEmailCount##</span></h5> <span style="font-size: 0.85em;">Discarded Mail ##DiscardedEmailPercentage##</span> </div> </div> <!-- column --> <!-- column --> <div class="col-lg-2 col-6"> <div class=""> <h5 class="font-mute text-mute"><span class="counter font-weight-bold">##BytesReceivedEmail##</span></h5> <span style="font-size: 0.85em;">Bytes Received</span> </div> </div> <!-- column --> <!-- column --> <div class="col-lg-2 col-6"> <div class=""> <h5 class="font-mute text-mute"><span class="counter font-weight-bold">##BytesDeliveredEmail##</span></h5> <span style="font-size: 0.85em;">Bytes Delivered</span> </div> </div> <!-- column --> <!-- column --> <div class="col-lg-2 col-6"> <div class=""> <h5 class="font-mute text-mute"><span class="counter font-weight-bold">##SendersEmail##</span></h5> <span style="font-size: 0.85em;">Mail Senders</span> </div> </div> <!-- column --> </div> <div class="spacer15"></div> <!-- Row --> <div class="row counter-box text-center"> <!-- column --> <div class="col-lg-2 col-6"> <div class=""> <h5 class="font-mute text-mute"><span class="counter font-weight-bold">##SendingHostsDomainsEmail##</span></h5> <span style="font-size: 0.85em;">Sending Hosts/Domains</span> </div> </div> <!-- column --> <!-- column --> <div class="col-lg-2 col-6"> <div class=""> <h5 class="font-mute text-mute"><span class="counter font-weight-bold">##RecipientsEmail##</span></h5> <span style="font-size: 0.85em;">Mail Recipients</span> </div> </div> <!-- column --> </div> <!-- Quick Status Blocks --> </div> <div class="container rounded shadow-sm p-3 my-3 "> <div class="my-3 p-3 bg-white rounded shadow-sm"> <h6 class="border-bottom border-gray pb-2 mb-0">Graphs</h6> <div class="container"> <div class="row"> <div class="col-md-12"> <div id="PerDayTrafficSummaryTableGraph" style="width: auto; height: 400px; "></div> </div> </div> </div> <div class="container"> <div class="row"> <div class="col-md-12"> <div id="PerHourTrafficDailyAverageTableGraph" style="width: auto; height: 400px;"></div> </div> </div> </div> </div> <div class="my-3 p-3 bg-white rounded shadow-sm"> <a data-toggle="collapse" href="#PerDayTrafficSummary" role="button" aria-expanded="false" aria-controls="PerDayTrafficSummary"> <h6 class="border-bottom border-gray pb-2 mb-0">Per-Day Traffic Summary</h6> </a> <div class="container collapse" id="PerDayTrafficSummary"> <div class="row"> <div class="col-md-12"> <div class="table-responsive" id="PerDayTrafficSummaryTable"> <table class="table-responsive table-striped table-sm"> <thead> <tr> <th scope="col">Date</th> <th scope="col">Received</th> <th scope="col">Delivered</th> <th scope="col">Deferred</th> <th scope="col">Bounced</th> <th scope="col">Rejected</th> </tr> </thead> <tbody> ##PerDayTrafficSummaryTable## </tbody> </table> </div> </div> </div> </div> </div> <div class="my-3 p-3 bg-white rounded shadow-sm"> <a data-toggle="collapse" href="#PerHourTrafficDailyAverage" role="button" aria-expanded="false" aria-controls="PerHourTrafficDailyAverage"> <h6 class="border-bottom border-gray pb-2 mb-0">Per-Hour Traffic Daily Average</h6> </a> <div class="container collapse" id="PerHourTrafficDailyAverage"> <div class="row"> <div class="col-md-12"> <div class="table-responsive" id="PerHourTrafficDailyAverageTable"> <table class="table-responsive table-striped table-sm"> <thead> <tr> <th scope="col">Time</th> <th scope="col">Received</th> <th scope="col">Delivered</th> <th scope="col">Deferred</th> <th scope="col">Bounced</th> <th scope="col">Rejected</th> </tr> </thead> <tbody> ##PerHourTrafficDailyAverageTable## </tbody> </table> </div> </div> </div> </div> </div> <div class="my-3 p-3 bg-white rounded shadow-sm"> <a data-toggle="collapse" href="#HostDomainSummaryMessagesReceived" role="button" aria-expanded="false" aria-controls="HostDomainSummaryMessagesReceived"> <h6 class="border-bottom border-gray pb-2 mb-0">Host/Domain Summary: Messages Received</h6> </a> <div class="container collapse" id="HostDomainSummaryMessagesReceived"> <div class="row"> <div class="col-md-12"> <div class="table-responsive"> <table class="table-responsive table-striped table-sm"> <thead> <tr> <th scope="col">Message Count</th> <th scope="col">Bytes</th> <th scope="col">Host/Domain</th> </tr> </thead> <tbody> ##HostDomainSummaryMessagesReceived## </tbody> </table> </div> </div> </div> </div> </div> <div class="my-3 p-3 bg-white rounded shadow-sm"> <a data-toggle="collapse" href="#SendersbyMessageSize" role="button" aria-expanded="false" aria-controls="SendersbyMessageSize"> <h6 class="border-bottom border-gray pb-2 mb-0">Senders by Message Size</h6> </a> <div class="container collapse" id="SendersbyMessageSize"> <div class="row"> <div class="col-md-12"> <div class="table-responsive"> <table class="table-responsive table-striped table-sm"> <thead> <tr> <th scope="col">Size</th> <th scope="col">Sender</th> </tr> </thead> <tbody> ##SendersbyMessageSize## </tbody> </table> </div> </div> </div> </div> </div> <div class="my-3 p-3 bg-white rounded shadow-sm"> <a data-toggle="collapse" href="#SendersbyMessageCount" role="button" aria-expanded="false" aria-controls="SendersbyMessageCount"> <h6 class="border-bottom border-gray pb-2 mb-0">Senders by Message Count</h6> </a> <div class="container collapse" id="SendersbyMessageCount"> <div class="row"> <div class="col-md-12"> <div class="table-responsive"> <table class="table-responsive table-striped table-sm"> <thead> <tr> <th scope="col">Message Count</th> <th scope="col">Sender</th> </tr> </thead> <tbody> ##Sendersbymessagecount## </tbody> </table> </div> </div> </div> </div> </div> <div class="my-3 p-3 bg-white rounded shadow-sm"> <a data-toggle="collapse" href="#RecipientsbyMessageCount" role="button" aria-expanded="false" aria-controls="RecipientsbyMessageCount"> <h6 class="border-bottom border-gray pb-2 mb-0">Recipients by Message Count</h6> </a> <div class="container collapse" id="RecipientsbyMessageCount"> <div class="row"> <div class="col-md-12"> <div class="table-responsive"> <table class="table-responsive table-striped table-sm"> <thead> <tr> <th scope="col">Message Count</th> <th scope="col">Recipient</th> </tr> </thead> <tbody> ##RecipientsbyMessageCount## </tbody> </table> </div> </div> </div> </div> </div> <div class="my-3 p-3 bg-white rounded shadow-sm"> <a data-toggle="collapse" href="#HostDomainSummaryMessageDelivery" role="button" aria-expanded="false" aria-controls="HostDomainSummaryMessageDelivery"> <h6 class="border-bottom border-gray pb-2 mb-0">Host/Domain Summary: Message Delivery</h6> </a> <div class="container collapse" id="HostDomainSummaryMessageDelivery"> <div class="row"> <div class="col-md-12"> <div class="table-responsive"> <table class="table-responsive table-striped table-sm"> <thead> <tr> <th scope="col">Sent Count</th> <th scope="col">Bytes</th> <th scope="col">Defers</th> <th scope="col">Average Daily</th> <th scope="col">Maximum Daily</th> <th scope="col">Host/Domain</th> </tr> </thead> <tbody> ##HostDomainSummaryMessageDelivery## </tbody> </table> </div> </div> </div> </div> </div> <div class="my-3 p-3 bg-white rounded shadow-sm"> <a data-toggle="collapse" href="#Recipientsbymessagesize" role="button" aria-expanded="false" aria-controls="Recipientsbymessagesize"> <h6 class="border-bottom border-gray pb-2 mb-0">Recipients by message size</h6> </a> <div class="container collapse" id="Recipientsbymessagesize"> <div class="row"> <div class="col-md-12"> <div class="table-responsive"> <table class="table-responsive table-striped table-sm"> <thead> <tr> <th scope="col">Size</th> <th scope="col">Recipient</th> </tr> </thead> <tbody> ##Recipientsbymessagesize## </tbody> </table> </div> </div> </div> </div> </div> <div class="my-3 p-3 bg-white rounded shadow-sm"> <a data-toggle="collapse" href="#Messageswithnosizedata" role="button" aria-expanded="false" aria-controls="Messageswithnosizedata"> <h6 class="border-bottom border-gray pb-2 mb-0">Messages with no size data</h6> </a> <div class="container collapse" id="Messageswithnosizedata"> <div class="row"> <div class="col-md-12"> <div class="table-responsive"> <table class="table-responsive table-striped table-sm"> <thead> <tr> <th scope="col">Queue ID</th> <th scope="col">Email Address</th> </tr> </thead> <tbody> ##Messageswithnosizedata## </tbody> </table> </div> </div> </div> </div> </div> <div class="my-3 p-3 bg-white rounded shadow-sm"> <a data-toggle="collapse" href="#MessageDeferralDetail" role="button" aria-expanded="false" aria-controls="MessageDeferralDetail"> <h6 class="border-bottom border-gray pb-2 mb-0">Message Deferral Detail</h6> </a> <div class="container collapse" id="MessageDeferralDetail"> <div class="row"> <div class="col-md-12"> <br> <div class="pre-scrollable" style="max-height: 40vh; "> <pre> ##MessageDeferralDetail## </pre> </div> <br> </div> </div> </div> </div> <div class="my-3 p-3 bg-white rounded shadow-sm"> <a data-toggle="collapse" href="#MessageBounceDetailbyrelay" role="button" aria-expanded="false" aria-controls="MessageBounceDetailbyrelay"> <h6 class="border-bottom border-gray pb-2 mb-0">Message Bounce Detail (By Relay)</h6> </a> <div class="container collapse" id="MessageBounceDetailbyrelay"> <div class="row"> <div class="col-md-12"> <br> <div class="pre-scrollable" style="max-height: 40vh; "> <pre> ##MessageBounceDetailbyrelay## </pre> </div> <br> </div> </div> </div> </div> <div class="my-3 p-3 bg-white rounded shadow-sm"> <a data-toggle="collapse" href="#MailWarnings" role="button" aria-expanded="false" aria-controls="MailWarnings"> <h6 class="border-bottom border-gray pb-2 mb-0">Mail Warnings</h6> </a> <div class="container collapse" id="MailWarnings"> <div class="row"> <div class="col-md-12"> <br> <div class="pre-scrollable" style="max-height: 40vh; "> <pre> ##MailWarnings## </pre> </div> <br> </div> </div> </div> </div> <div class="my-3 p-3 bg-white rounded shadow-sm"> <a data-toggle="collapse" href="#MailFatalErrors" role="button" aria-expanded="false" aria-controls="MailFatalErrors"> <h6 class="border-bottom border-gray pb-2 mb-0">Mail Fatal Errors</h6> </a> <div class="container collapse" id="MailFatalErrors"> <div class="row"> <div class="col-md-12"> <br> <div class="pre-scrollable" style="max-height: 40vh; "> <pre> ##MailFatalErrors## </pre> </div> <br> </div> </div> </div> </div> </div> <br> <!-- Footer --> <footer class="container-fluid bg-dark text-center text-white-50"> <div class="copyrights" style="margin-top:5px;"> <p>© <script>new Date().getFullYear() > 2010 && document.write(new Date().getFullYear());</script> <br> <span>Powered by <a href="https://github.com/KTamas/pflogsumm">PFLOGSUMM</a> </span> / <span><a href="https://github.com/RiaanPretoriusSA/PFLogSumm-HTML-GUI">PFLOGSUMM HTML UI Report</a> </span> </p> </div> </footer> <!-- Bootstrap core JavaScript ================================================== --> <!-- Placed at the end of the document so the pages load faster --> <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.3/js/bootstrap.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/waypoints/4.0.1/jquery.waypoints.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/Counter-Up/1.0.0/jquery.counterup.js"></script> <!-- Icons --> <script src="https://unpkg.com/feather-icons/dist/feather.min.js"></script> <script> feather.replace() </script> <!-- Graphs --> <script src="https://code.highcharts.com/highcharts.js"></script> <script src="https://code.highcharts.com/modules/data.js"></script> <script src="https://code.highcharts.com/modules/exporting.js"></script> <script src="https://code.highcharts.com/modules/export-data.js"></script> <!-- Code Highlight--> <script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.15.0/prism.min.js"></script> <script> Highcharts.chart('PerDayTrafficSummaryTableGraph', { data: { table: 'PerDayTrafficSummaryTable' }, chart: { type: 'line' }, title: { text: 'Per-Day Traffic Summary' }, yAxis: { allowDecimals: false, title: { text: 'Units' } }, plotOptions: { line: { dataLabels: { enabled: true }, enableMouseTracking: false } } }); Highcharts.chart('PerHourTrafficDailyAverageTableGraph', { data: { table: 'PerHourTrafficDailyAverageTable' }, chart: { type: 'line' }, title: { text: 'Per-Hour Traffic Daily Average' }, yAxis: { allowDecimals: false, title: { text: 'Units' } }, plotOptions: { line: { dataLabels: { enabled: true }, enableMouseTracking: false } }, }); </script> <script> jQuery(document).ready(function ($) { $('.counter').counterUp({ delay: 1, time: 100 }); }); </script> </body> </html> HTMLREPORTDASHBOARD #====================================================== # Replace Placeholders with values - GrandTotals #====================================================== sed -i "s/##REPORTDATE##/$REPORTDATE/g" $HTMLOUTPUTDIR/data/$CURRENTYEAR-$CURRENTMONTH-$CURRENTDAY.html sed -i "s/##ACTIVEHOSTNAME##/$ACTIVEHOSTNAME/g" $HTMLOUTPUTDIR/data/$CURRENTYEAR-$CURRENTMONTH-$CURRENTDAY.html sed -i "s/##ReceivedEmail##/$ReceivedEmail/g" $HTMLOUTPUTDIR/data/$CURRENTYEAR-$CURRENTMONTH-$CURRENTDAY.html sed -i "s/##DeliveredEmail##/$DeliveredEmail/g" $HTMLOUTPUTDIR/data/$CURRENTYEAR-$CURRENTMONTH-$CURRENTDAY.html sed -i "s/##ForwardedEmail##/$ForwardedEmail/g" $HTMLOUTPUTDIR/data/$CURRENTYEAR-$CURRENTMONTH-$CURRENTDAY.html sed -i "s/##DeferredEmailCount##/$DeferredEmailCount/g" $HTMLOUTPUTDIR/data/$CURRENTYEAR-$CURRENTMONTH-$CURRENTDAY.html sed -i "s/##DeferredEmailDeferralsCount##/$DeferredEmailDeferralsCount/g" $HTMLOUTPUTDIR/data/$CURRENTYEAR-$CURRENTMONTH-$CURRENTDAY.html sed -i "s/##BouncedEmail##/$BouncedEmail/g" $HTMLOUTPUTDIR/data/$CURRENTYEAR-$CURRENTMONTH-$CURRENTDAY.html sed -i "s/##RejectedEmailCount##/$RejectedEmailCount/g" $HTMLOUTPUTDIR/data/$CURRENTYEAR-$CURRENTMONTH-$CURRENTDAY.html sed -i "s/##RejectedEmailPercentage##/$RejectedEmailPercentage/g" $HTMLOUTPUTDIR/data/$CURRENTYEAR-$CURRENTMONTH-$CURRENTDAY.html sed -i "s/##RejectedWarningsEmail##/$RejectedWarningsEmail/g" $HTMLOUTPUTDIR/data/$CURRENTYEAR-$CURRENTMONTH-$CURRENTDAY.html sed -i "s/##HeldEmail##/$HeldEmail/g" $HTMLOUTPUTDIR/data/$CURRENTYEAR-$CURRENTMONTH-$CURRENTDAY.html sed -i "s/##DiscardedEmailCount##/$DiscardedEmailCount/g" $HTMLOUTPUTDIR/data/$CURRENTYEAR-$CURRENTMONTH-$CURRENTDAY.html sed -i "s/##DiscardedEmailPercentage##/$DiscardedEmailPercentage/g" $HTMLOUTPUTDIR/data/$CURRENTYEAR-$CURRENTMONTH-$CURRENTDAY.html sed -i "s/##BytesReceivedEmail##/$BytesReceivedEmail/g" $HTMLOUTPUTDIR/data/$CURRENTYEAR-$CURRENTMONTH-$CURRENTDAY.html sed -i "s/##BytesDeliveredEmail##/$BytesDeliveredEmail/g" $HTMLOUTPUTDIR/data/$CURRENTYEAR-$CURRENTMONTH-$CURRENTDAY.html sed -i "s/##SendersEmail##/$SendersEmail/g" $HTMLOUTPUTDIR/data/$CURRENTYEAR-$CURRENTMONTH-$CURRENTDAY.html sed -i "s/##SendingHostsDomainsEmail##/$SendingHostsDomainsEmail/g" $HTMLOUTPUTDIR/data/$CURRENTYEAR-$CURRENTMONTH-$CURRENTDAY.html sed -i "s/##RecipientsEmail##/$RecipientsEmail/g" $HTMLOUTPUTDIR/data/$CURRENTYEAR-$CURRENTMONTH-$CURRENTDAY.html sed -i "s/##RecipientHostsDomainsEmail##/$RecipientHostsDomainsEmail/g" $HTMLOUTPUTDIR/data/$CURRENTYEAR-$CURRENTMONTH-$CURRENTDAY.html #====================================================== # Replace Placeholders with values - Table PerDayTrafficSummaryTable #====================================================== sed -i '/##PerDayTrafficSummaryTable##/ { r /tmp/PerDayTrafficSummary d }' $HTMLOUTPUTDIR/data/$CURRENTYEAR-$CURRENTMONTH-$CURRENTDAY.html #====================================================== # Replace Placeholders with values - Table PerHourTrafficDailyAverageTable #====================================================== sed -i '/##PerHourTrafficDailyAverageTable##/ { r /tmp/PerHourTrafficDailyAverage d }' $HTMLOUTPUTDIR/data/$CURRENTYEAR-$CURRENTMONTH-$CURRENTDAY.html #====================================================== # Replace Placeholders with values - Table HostDomainSummaryMessageDelivery #====================================================== sed -i '/##HostDomainSummaryMessageDelivery##/ { r /tmp/HostDomainSummaryMessageDelivery d }' $HTMLOUTPUTDIR/data/$CURRENTYEAR-$CURRENTMONTH-$CURRENTDAY.html #====================================================== # Replace Placeholders with values - Table HostDomainSummaryMessagesReceived #====================================================== sed -i '/##HostDomainSummaryMessagesReceived##/ { r /tmp/HostDomainSummaryMessagesReceived d }' $HTMLOUTPUTDIR/data/$CURRENTYEAR-$CURRENTMONTH-$CURRENTDAY.html #====================================================== # Replace Placeholders with values - Table Sendersbymessagecount #====================================================== sed -i '/##Sendersbymessagecount##/ { r /tmp/Sendersbymessagecount d }' $HTMLOUTPUTDIR/data/$CURRENTYEAR-$CURRENTMONTH-$CURRENTDAY.html #====================================================== # Replace Placeholders with values - Table RecipientsbyMessageCount #====================================================== sed -i '/##RecipientsbyMessageCount##/ { r /tmp/Recipientsbymessagecount d }' $HTMLOUTPUTDIR/data/$CURRENTYEAR-$CURRENTMONTH-$CURRENTDAY.html #====================================================== # Replace Placeholders with values - Table SendersbyMessageSize #====================================================== sed -i '/##SendersbyMessageSize##/ { r /tmp/Sendersbymessagesize d }' $HTMLOUTPUTDIR/data/$CURRENTYEAR-$CURRENTMONTH-$CURRENTDAY.html #====================================================== # Replace Placeholders with values - Table Recipientsbymessagesize #====================================================== sed -i '/##Recipientsbymessagesize##/ { r /tmp/Recipientsbymessagesize d }' $HTMLOUTPUTDIR/data/$CURRENTYEAR-$CURRENTMONTH-$CURRENTDAY.html #====================================================== # Replace Placeholders with values - Table Messageswithnosizedata #====================================================== sed -i '/##Messageswithnosizedata##/ { r /tmp/Messageswithnosizedata d }' $HTMLOUTPUTDIR/data/$CURRENTYEAR-$CURRENTMONTH-$CURRENTDAY.html #====================================================== # Replace Placeholders with values - MessageDeferralDetail #====================================================== sed -i '/##MessageDeferralDetail##/ { r /tmp/messagedeferraldetail d }' $HTMLOUTPUTDIR/data/$CURRENTYEAR-$CURRENTMONTH-$CURRENTDAY.html #====================================================== # Replace Placeholders with values - MessageBounceDetailbyrelay #====================================================== sed -i '/##MessageBounceDetailbyrelay##/ { r /tmp/messagebouncedetaibyrelay d }' $HTMLOUTPUTDIR/data/$CURRENTYEAR-$CURRENTMONTH-$CURRENTDAY.html #====================================================== # Replace Placeholders with values - warnings #====================================================== sed -i '/##MailWarnings##/ { r /tmp/warnings d }' $HTMLOUTPUTDIR/data/$CURRENTYEAR-$CURRENTMONTH-$CURRENTDAY.html #====================================================== # Replace Placeholders with values - FatalErrors #====================================================== sed -i '/##MailFatalErrors##/ { r /tmp/FatalErrors d }' $HTMLOUTPUTDIR/data/$CURRENTYEAR-$CURRENTMONTH-$CURRENTDAY.html #====================================================== # Count Existing Reports - For Dashboard Display #====================================================== JanRPTCount=$(find $HTMLOUTPUTDIR/data -maxdepth 1 -type f -name $CURRENTYEAR-Jan*.html | wc -l) FebRPTCount=$(find $HTMLOUTPUTDIR/data -maxdepth 1 -type f -name $CURRENTYEAR-Feb*.html | wc -l) MarRPTCount=$(find $HTMLOUTPUTDIR/data -maxdepth 1 -type f -name $CURRENTYEAR-Mar*.html | wc -l) AprRPTCount=$(find $HTMLOUTPUTDIR/data -maxdepth 1 -type f -name $CURRENTYEAR-Apr*.html | wc -l) MayRPTCount=$(find $HTMLOUTPUTDIR/data -maxdepth 1 -type f -name $CURRENTYEAR-May*.html | wc -l) JunRPTCount=$(find $HTMLOUTPUTDIR/data -maxdepth 1 -type f -name $CURRENTYEAR-Jun*.html | wc -l) JulRPTCount=$(find $HTMLOUTPUTDIR/data -maxdepth 1 -type f -name $CURRENTYEAR-Jul*.html | wc -l) AugRPTCount=$(find $HTMLOUTPUTDIR/data -maxdepth 1 -type f -name $CURRENTYEAR-Aug*.html | wc -l) SepRPTCount=$(find $HTMLOUTPUTDIR/data -maxdepth 1 -type f -name $CURRENTYEAR-Sep*.html | wc -l) OctRPTCount=$(find $HTMLOUTPUTDIR/data -maxdepth 1 -type f -name $CURRENTYEAR-Oct*.html | wc -l) NovRPTCount=$(find $HTMLOUTPUTDIR/data -maxdepth 1 -type f -name $CURRENTYEAR-Nov*.html | wc -l) DecRPTCount=$(find $HTMLOUTPUTDIR/data -maxdepth 1 -type f -name $CURRENTYEAR-Dec*.html | wc -l) #====================================================== # Replace Report Totals for Report - Index #====================================================== sed -i "s/##JanuaryCount##/$JanRPTCount/g" $HTMLOUTPUTDIR/$HTMLOUTPUT_INDEXDASHBOARD sed -i "s/##FebruaryCount##/$FebRPTCount/g" $HTMLOUTPUTDIR/$HTMLOUTPUT_INDEXDASHBOARD sed -i "s/##MarchCount##/$MarRPTCount/g" $HTMLOUTPUTDIR/$HTMLOUTPUT_INDEXDASHBOARD sed -i "s/##AprilCount##/$AprRPTCount/g" $HTMLOUTPUTDIR/$HTMLOUTPUT_INDEXDASHBOARD sed -i "s/##MayCount##/$MayRPTCount/g" $HTMLOUTPUTDIR/$HTMLOUTPUT_INDEXDASHBOARD sed -i "s/##JuneCount##/$JunRPTCount/g" $HTMLOUTPUTDIR/$HTMLOUTPUT_INDEXDASHBOARD sed -i "s/##JulyCount##/$JulRPTCount/g" $HTMLOUTPUTDIR/$HTMLOUTPUT_INDEXDASHBOARD sed -i "s/##AugustCount##/$AugRPTCount/g" $HTMLOUTPUTDIR/$HTMLOUTPUT_INDEXDASHBOARD sed -i "s/##SeptemberCount##/$SepRPTCount/g" $HTMLOUTPUTDIR/$HTMLOUTPUT_INDEXDASHBOARD sed -i "s/##OctoberCount##/$OctRPTCount/g" $HTMLOUTPUTDIR/$HTMLOUTPUT_INDEXDASHBOARD sed -i "s/##NovemberCount##/$NovRPTCount/g" $HTMLOUTPUTDIR/$HTMLOUTPUT_INDEXDASHBOARD sed -i "s/##DecemberCount##/$DecRPTCount/g" $HTMLOUTPUTDIR/$HTMLOUTPUT_INDEXDASHBOARD sed -i "s/##REPORTDATE##/$REPORTDATE/g" $HTMLOUTPUTDIR/$HTMLOUTPUT_INDEXDASHBOARD sed -i "s/##ACTIVEHOSTNAME##/$ACTIVEHOSTNAME/g" $HTMLOUTPUTDIR/$HTMLOUTPUT_INDEXDASHBOARD #====================================================== # Update Clickable Index Files (imported dynamicly) #====================================================== #Delete Exisitng File Indexs rm -fr $HTMLOUTPUTDIR/data/*_rpt.html #Get List of report files for filename in $HTMLOUTPUTDIR/data/*.html; do filenameWithExtOnly="${filename##*/}" filenameWithoutExtension="${filenameWithExtOnly%.*}" case $filenameWithExtOnly in *Jan* ) echo "<a href=\"data/${filenameWithoutExtension}.html\" class=\"list-group-item list-group-item-action\">$filenameWithoutExtension</a>" >> $HTMLOUTPUTDIR/data/jan_rpt.html ;; *Feb* ) echo "<a href=\"data/${filenameWithoutExtension}.html\" class=\"list-group-item list-group-item-action\">$filenameWithoutExtension</a>" >> $HTMLOUTPUTDIR/data/feb_rpt.html ;; *Mar* ) echo "<a href=\"data/${filenameWithoutExtension}.html\" class=\"list-group-item list-group-item-action\">$filenameWithoutExtension</a>" >> $HTMLOUTPUTDIR/data/mar_rpt.html ;; *Apr* ) echo "<a href=\"data/${filenameWithoutExtension}.html\" class=\"list-group-item list-group-item-action\">$filenameWithoutExtension</a>" >> $HTMLOUTPUTDIR/data/apr_rpt.html ;; *May* ) echo "<a href=\"data/${filenameWithoutExtension}.html\" class=\"list-group-item list-group-item-action\">$filenameWithoutExtension</a>" >> $HTMLOUTPUTDIR/data/may_rpt.html ;; *Jun* ) echo "<a href=\"data/${filenameWithoutExtension}.html\" class=\"list-group-item list-group-item-action\">$filenameWithoutExtension</a>" >> $HTMLOUTPUTDIR/data/jun_rpt.html ;; *Jul* ) echo "<a href=\"data/${filenameWithoutExtension}.html\" class=\"list-group-item list-group-item-action\">$filenameWithoutExtension</a>" >> $HTMLOUTPUTDIR/data/jul_rpt.html ;; *Aug* ) echo "<a href=\"data/${filenameWithoutExtension}.html\" class=\"list-group-item list-group-item-action\">$filenameWithoutExtension</a>" >> $HTMLOUTPUTDIR/data/aug_rpt.html ;; *Sep* ) echo "<a href=\"data/${filenameWithoutExtension}.html\" class=\"list-group-item list-group-item-action\">$filenameWithoutExtension</a>" >> $HTMLOUTPUTDIR/data/sep_rpt.html ;; *Oct* ) echo "<a href=\"data/${filenameWithoutExtension}.html\" class=\"list-group-item list-group-item-action\">$filenameWithoutExtension</a>" >> $HTMLOUTPUTDIR/data/oct_rpt.html ;; *Nov* ) echo "<a href=\"data/${filenameWithoutExtension}.html\" class=\"list-group-item list-group-item-action\">$filenameWithoutExtension</a>" >> $HTMLOUTPUTDIR/data/nov_rpt.html ;; *Dec* ) echo "<a href=\"data/${filenameWithoutExtension}.html\" class=\"list-group-item list-group-item-action\">$filenameWithoutExtension</a>" >> $HTMLOUTPUTDIR/data/dec_rpt.html ;; esac done #====================================================== # Clean UP #======================================================