64 parser.add_option('-d', action='store_true', dest='countByDom', |
64 parser.add_option('-d', action='store_true', dest='countByDom', |
65 default=False, help='summarize all MX by domain') |
65 default=False, help='summarize all MX by domain') |
66 parser.add_option('-m', action='store_false', dest='countByDom', |
66 parser.add_option('-m', action='store_false', dest='countByDom', |
67 help='count per MX host [default]') |
67 help='count per MX host [default]') |
68 parser.add_option('-o', dest='oFormat', default='table',metavar='FORMAT', |
68 parser.add_option('-o', dest='oFormat', default='table',metavar='FORMAT', |
|
69 choices=('csv', 'table'), |
69 help='the output format: table or csv [default: %default]') |
70 help='the output format: table or csv [default: %default]') |
70 parser.add_option('-p', action='store_true', dest='percent', default=False, |
71 parser.add_option('-p', action='store_true', dest='percent', default=False, |
71 help='show also percentages in table output [default: %default]') |
72 help='show also percentages in table output [default: %default]') |
72 parser.add_option('-s', dest='order', default='name', metavar='SORTBY', |
73 parser.add_option('-s', dest='order', default='name', metavar='SORTBY', |
73 help='arrange output by: name or count [default: %default]') |
74 help='arrange output by: name or count [default: %default]') |
74 parser.add_option('-t', dest='format', default='postfix',metavar='MTA', |
75 parser.add_option('-t', dest='format', default='postfix',metavar='MTA', |
|
76 choices=('postfix',), |
75 help='MTA that generated the maillog [default: %default]') |
77 help='MTA that generated the maillog [default: %default]') |
76 return parser |
78 return parser |
|
79 |
77 |
80 |
78 def openLogFile(fname): |
81 def openLogFile(fname): |
79 try: |
82 try: |
80 fh = open(fname) |
83 fh = open(fname) |
81 return fh |
84 return fh |
82 except IOError, e: |
85 except IOError, e: |
83 os.sys.stderr.write('Warning: %s\nskipped file: %s\n' % (e.strerror, |
86 os.sys.stderr.write('Warning: %s\nskipped file: %s\n' % (e.strerror, |
84 fname)) |
87 fname)) |
85 |
88 |
86 def getDomLen(domainnames): |
|
87 dlen = 0 |
|
88 for d in domainnames: |
|
89 l = len(d) |
|
90 if l > dlen: |
|
91 dlen = l |
|
92 return dlen |
|
93 |
89 |
94 def buildTable(output, domains, percent, orderBy): |
90 def buildTable(output, domains, percent, orderBy): |
95 k = 0 if orderBy == 'name' else 1 |
91 k = 0 if orderBy == 'name' else 1 |
96 doms = sorted(domains.items(), lambda d,c: cmp(d[k],c[k]), reverse=k) |
92 doms = sorted(domains.items(), lambda d,c: cmp(d[k],c[k]), reverse=k) |
97 dlen = getDomLen(domains.keys())+1 |
93 dlen = len(max(domains.iterkeys(), key=len)) + 1 |
98 clen = len(str(max(domains.values()))) |
94 clen = len(str(max(domains.values()))) |
99 total = sum(domains.values()) |
95 total = sum(domains.values()) |
100 if percent: |
96 if percent: |
101 format = ' %%%ds %%%dd %%6.2f %%%%\n' % (-dlen, clen) |
97 format = ' %%%ds %%%dd %%6.2f %%%%\n' % (-dlen, clen) |
102 for d, c in doms: |
98 for d, c in doms: |