87 l = len(d) |
84 l = len(d) |
88 if l > dlen: |
85 if l > dlen: |
89 dlen = l |
86 dlen = l |
90 return dlen |
87 return dlen |
91 |
88 |
|
89 def buildTable(output, domains, percent, orderBy): |
|
90 k = 0 if orderBy == 'name' else 1 |
|
91 doms = sorted(domains.items(), lambda d,c: cmp(d[k],c[k]), reverse=k) |
|
92 dlen = getDomLen(domains.keys())+1 |
|
93 clen = len(str(max(domains.values()))) |
|
94 total = sum(domains.values()) |
|
95 if percent: |
|
96 format = '%%%ds %%%dd %%5.2f %%%%\n' % (dlen, clen) |
|
97 for d, c in doms: |
|
98 dfrac = 100./total*c |
|
99 output.write(format % (d, c, dfrac)) |
|
100 else: |
|
101 format = '%%%ds %%%dd\n' % (dlen, clen) |
|
102 for d in doms: |
|
103 output.write(format % d) |
|
104 |
92 def showResult(nixspamsum, options): |
105 def showResult(nixspamsum, options): |
|
106 from cStringIO import StringIO |
|
107 output = StringIO() |
93 if options.countByDom: |
108 if options.countByDom: |
94 nixspamsum.countByDom() |
109 nixspamsum.countByDom() |
95 domains = nixspamsum.getDomains() |
110 domains = nixspamsum.getDomains() |
96 else: |
111 else: |
97 domains = nixspamsum.getMXs() |
112 domains = nixspamsum.getMXs() |
98 k = 0 if options.order == 'name' else 1 |
113 # build the table |
99 doms = sorted(domains.items(), lambda d,c: cmp(d[k],c[k]), reverse=k) |
|
100 # print table |
|
101 if options.oFormat == 'table': |
114 if options.oFormat == 'table': |
102 dlen = getDomLen(domains.keys())+1 |
115 buildTable(output, domains, options.percent, options.order) |
103 clen = len(str(max(domains.values()))) |
116 # generate comma separated values |
104 if options.percent: |
|
105 total = nixspamsum.getTotal() |
|
106 format = '%%%ds %%%dd %%5.2f %%%%' % (dlen, clen) |
|
107 for d, c in doms: |
|
108 dfrac = 100./total*c |
|
109 print format % (d, c, dfrac) |
|
110 else: |
|
111 format = '%%%ds: %%%dd' % (dlen, clen) |
|
112 for d in doms: |
|
113 print format % d |
|
114 # print comma separated values |
|
115 elif options.oFormat == 'csv': |
117 elif options.oFormat == 'csv': |
116 for d in doms: |
118 for d in domains.items(): |
117 print "'%s',%d" % d |
119 output.write("'%s',%d\n" % d) |
118 # print a hint ;-) |
120 # should never be reached |
119 else: |
121 else: |
120 print "Output format '%s' is not supported" % options.oFormat |
122 print "Oops, error in function showResult() happend" |
|
123 # show the result |
|
124 print output.getvalue() |
121 |
125 |
122 def main(): |
126 def main(): |
123 parser = getOptionParser() |
127 parser = getOptionParser() |
124 opts, args = parser.parse_args() |
128 opts, args = parser.parse_args() |
|
129 if opts.oFormat not in ('csv', 'table'): |
|
130 parser.error("Output format '%s' is not supported" % opts.oFormat) |
125 if len(args) < 1: |
131 if len(args) < 1: |
126 parser.error('No logfiles specified') |
132 parser.error('No logfiles specified') |
127 nixss = NiXSapmSum() |
133 nixss = NiXSapmSum() |
128 nixss.setLogFormat(opts.format) |
134 nixss.setLogFormat(opts.format) |
129 for fn in args: |
135 for fn in args: |