summaryrefslogtreecommitdiff
path: root/sqmail-4.3.07/src/zoverall.sh
blob: d19ec338d45a8a86a6544ef85cdcc61ff2232cfc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
echo 'Basic 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 completed messages:", recips
      print "Total delivery attempts for completed messages:", tries
      print "Average delivery attempts per completed message:", tries / messages
      print "Bytes in completed 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 "Average ddelay per success (s):", str
      }
      str = sprintf("%.6f",xdelay)
      print "Total xdelay (s):", str
      str = sprintf("%.6f",xdelay / deliveries)
      print "Average xdelay per delivery attempt (s):", str
      if (last > first) {
        print "Time span (days):", (last - first) / 86400
        print "Average concurrency:", xdelay / (last - first)
      }
    }
  }
'