General code output cleanup
[fmail.git] / tools / benchsmtp.py
blob5ded77c95536c48ed4258f6a56bf17e791e72152
1 #!/usr/bin/env python
3 import smtplib
4 import time
5 import threading
7 #TODO: Refactor into nice classs
8 #TODO: Fix measures
10 tmsgcount = 100
11 tcount = [2, 5, 10] #[2, 5, 10, 15, 20]
12 ccount = 10
14 SMTP_HOST = 'localhost'
15 SMTP_PORT = 12000
17 from_msg = 'testmail@mymail.com'
18 to_msg = 'testuser@localhost'
20 msg = """"jdsjkdjkjkdskj jdsjkdjks"
21 "dsjkdkjskjdskkjdsjkkjdskkjds",
22 "jdsjkdjksjkdjksjkdjkskjdjksk",
23 "dsjkjkdsjkkdjsjdjkskdjsjkdjk",
24 "dsjkjdksjkdjksjkdjkskjdkalsl"""
26 print 'FancyMail SMTP Benchmark Suite'
27 print ' - Message Count:', tmsgcount
28 print ' - Thread Count:', tcount
29 print ' - Connection Count:', ccount
31 print 'Benchmarking Message over Session'
32 server = smtplib.SMTP(SMTP_HOST, SMTP_PORT)
33 tt = 0.0
34 for i in xrange(tmsgcount):
35 t1 = time.time()
36 server.sendmail(from_msg, to_msg, msg);
37 t2 = time.time()
38 tt += t2-t1
40 server.quit()
42 ms = tt / tmsgcount
44 print " * Total time:", tt
45 print " * Avg. Time per Message:", ms
46 print " * Messages/Second:", 1.0 / ms
48 print "Benchmarking Connection Speed"
50 tt = 0.0
51 for i in xrange(ccount):
52 t1 = time.time()
53 server = smtplib.SMTP(SMTP_HOST, SMTP_PORT)
54 server.sendmail(from_msg, to_msg, msg);
55 server.quit()
56 t2 = time.time()
57 tt += t2-t1
59 mt = tt / ccount
60 ms = 1.0 / mt
62 print " * Total time:", tt
63 print " * Avg. Time per Connection:", mt
64 print " * Connections per Second:", ms
66 print 'Benchmarking Multiple Connections'
68 class SBench(threading.Thread):
69 def __init__(self, msgcount):
70 threading.Thread.__init__(self)
71 self.msgcount = msgcount
72 def run(self):
73 conn = smtplib.SMTP(SMTP_HOST, SMTP_PORT)
74 self.tt = 0.0
75 for i in xrange(self.msgcount):
76 t1 = time.time()
77 conn.sendmail(from_msg, to_msg, msg);
78 t2 = time.time()
79 self.tt += t2 - t1
80 conn.quit()
81 self.mt = self.tt / self.msgcount
82 self.ms = 1 / self.mt
85 for tc in tcount:
86 print 'Benchmarking with %i Threads' % tc
87 ptmsg = tmsgcount / tc
88 threads = []
89 for i in xrange(tc):
90 threads.append(SBench(ptmsg))
91 i = 0
92 for t in threads:
93 t.start()
94 print 'Stared Thread', i
95 i += 1
96 i = 0
97 for t in threads:
98 t.join()
99 print 'Joined Thread', i
100 i += 1
101 print 'Results:'
102 tt = 0.0
103 mt = 0.0
104 ms = 0.0
105 for i in xrange(tc):
106 t = threads[i]
107 print ' * Thread', i
108 print ' - Total Time:', t.tt
109 print ' - Avg. Time per Msg:', t.mt
110 print ' - Messages per Second:', t.ms
111 tt += t.tt
112 mt += t.mt
113 ms += t.ms
114 del threads
115 print ' * Total Time:', tt
116 print ' * Avg. Time per Msg:', mt
117 print ' * Messages per Seccond:', ms