All:

If you are having problems with the qmailstats script running successfully because you are getting an error similar to:

awk: cmd. line:60: (FILENAME=- FNR=15420) fatal: division by zero attempted


The problem is the zoverall script of qmailanalog. For some reason the duration in days is always zero. Until this is fixed or I decide to fix it and create a patch, you can use the attached file as a drop-in replacement.

MST


#!/bin/sh
# WARNING: This file was auto-generated. Do not edit!
echo 'Qmail Statistics

qtime is the time spent by a message in the queue.

ddelay is the latency for a successful delivery to one recipient---the
end of successful delivery, minus the time when the message was queued.

xdelay is the latency for a delivery attempt---the time when the attempt
finished, minus the time when it started. The average concurrency is the
total xdelay for all deliveries divided by the time span; this is a good
measure of how busy the mailer is.
'

awk '
  BEGIN {
    messages = 0
    recips = 0
    tries = 0
    deliveries = 0
    succ = 0
    fail = 0
    mbytes = 0
    rbytes = 0
  }
  /^m/ {
    ++messages
    mbytes += $4
    rbytes += $4 * $5
    qtime += $3 - $2
    recips += $5 + $6
    tries += $5 + $6 + $7
    if (!seen || ($2 < first)) first = $2
    if (!seen || ($3 > last)) last = $3
    seen = 1
  }
  /^d k/ { ++succ; ddelay += $5 - $3 }
  /^d d/ { ++fail }
  /^d/ {
    ++deliveries
    xdelay += $5 - $4
    if (!seen || ($3 < first)) first = $3
    if (!seen || ($5 > last)) last = $5
    seen = 1
  }
  END {
    print "Completed messages:           ", messages
    if (messages) {
      print "Recipients for messages:      ", recips
      print "Total attempts for messages:  ", tries
      print "Average attempts per message: ", tries / messages
      print "Bytes in messages:            ", mbytes
      print "Bytes weighted by success:    ", rbytes
      print "Average message qtime (s):    ", qtime / messages
    }
    print ""
    print "Total delivery attempts:      ", deliveries
    if (deliveries) {
      print "    success:                  ", succ
      print "    failure:                  ", fail
      print "    deferral:                 ", deliveries - succ - fail
      str = sprintf("%.6f",ddelay)
      print "Total ddelay (s):             ", str
      if (succ) {
        str = sprintf("%.6f",ddelay / succ)
        print "Avg ddelay per success (s):   ", str
      }
      str = sprintf("%.6f",xdelay)
      print "Total xdelay (s):             ", str
      str = sprintf("%.6f",xdelay / deliveries)
      print "Avg xdelay per attempt (s):   ", str
      if (last > first) {
        print "Time span (days):             ", (last - first) / 86400
      }
      if ((last - first) > 0) {
        print "Average concurrency:          ", xdelay / (last - first)
      }
    }
  }
'

Reply via email to