Mercurial > p > roundup > code
comparison test/benchmark.py @ 1181:49aebf5a8691
some speedups, some fixes to the benchmarking
| author | Richard Jones <richard@users.sourceforge.net> |
|---|---|
| date | Mon, 23 Sep 2002 00:50:32 +0000 |
| parents | 8e318dfaf479 |
| children | 69bf0d381fd7 |
comparison
equal
deleted
inserted
replaced
| 1180:ba133c895f2d | 1181:49aebf5a8691 |
|---|---|
| 17 status=Link("status"), nosy=Multilink("user"), deadline=Date(), | 17 status=Link("status"), nosy=Multilink("user"), deadline=Date(), |
| 18 foo=Interval(), files=Multilink("file"), assignedto=Link('user')) | 18 foo=Interval(), files=Multilink("file"), assignedto=Link('user')) |
| 19 session = module.Class(db, 'session', title=String()) | 19 session = module.Class(db, 'session', title=String()) |
| 20 session.disableJournalling() | 20 session.disableJournalling() |
| 21 db.post_init() | 21 db.post_init() |
| 22 status.create(name="unread") | |
| 23 status.create(name="in-progress") | |
| 24 status.create(name="testing") | |
| 25 status.create(name="resolved") | |
| 26 user.create(username='one') | |
| 27 user.create(username='two') | |
| 28 db.commit() | 22 db.commit() |
| 29 | 23 |
| 30 class config: | 24 class config: |
| 31 DATABASE='_test_dir' | 25 DATABASE='_benchmark' |
| 32 GADFLY_DATABASE = ('test', DATABASE) | 26 GADFLY_DATABASE = ('test', DATABASE) |
| 33 MAILHOST = 'localhost' | 27 MAILHOST = 'localhost' |
| 34 MAIL_DOMAIN = 'fill.me.in.' | 28 MAIL_DOMAIN = 'fill.me.in.' |
| 35 TRACKER_NAME = 'Roundup issue tracker' | 29 TRACKER_NAME = 'Roundup issue tracker' |
| 36 TRACKER_EMAIL = 'issue_tracker@%s'%MAIL_DOMAIN | 30 TRACKER_EMAIL = 'issue_tracker@%s'%MAIL_DOMAIN |
| 46 try: | 40 try: |
| 47 exec('from roundup.backends import %s as backend'%backendname) | 41 exec('from roundup.backends import %s as backend'%backendname) |
| 48 except ImportError: | 42 except ImportError: |
| 49 return | 43 return |
| 50 | 44 |
| 51 if os.path.exists(config.DATABASE): | 45 times = [] |
| 52 shutil.rmtree(config.DATABASE) | |
| 53 | 46 |
| 54 times = [] | 47 config.DATABASE = os.path.join('_benchmark', '%s-%s'%(backendname, |
| 55 db = backend.Database(config, 'test') | 48 numissues)) |
| 56 setupSchema(db, backend) | 49 if not os.path.exists(config.DATABASE): |
| 50 db = backend.Database(config, 'admin') | |
| 51 setupSchema(db, backend) | |
| 52 # create a whole bunch of stuff | |
| 53 db.user.create(**{'username': 'admin'}) | |
| 54 db.status.create(name="unread") | |
| 55 db.status.create(name="in-progress") | |
| 56 db.status.create(name="testing") | |
| 57 db.status.create(name="resolved") | |
| 58 pc = -1 | |
| 59 for i in range(numissues): | |
| 60 db.user.create(**{'username': 'user %s'%i}) | |
| 61 for j in range(10): | |
| 62 db.user.set(str(i+1), assignable=1) | |
| 63 db.user.set(str(i+1), assignable=0) | |
| 64 db.issue.create(**{'title': 'issue %s'%i}) | |
| 65 for j in range(10): | |
| 66 db.issue.set(str(i+1), status='2', assignedto='2', nosy=[]) | |
| 67 db.issue.set(str(i+1), status='1', assignedto='1', | |
| 68 nosy=['1','2']) | |
| 69 if (i*100/numissues) != pc: | |
| 70 pc = (i*100/numissues) | |
| 71 sys.stdout.write("%d%%\r"%pc) | |
| 72 sys.stdout.flush() | |
| 73 db.commit() | |
| 74 else: | |
| 75 db = backend.Database(config, 'admin') | |
| 76 setupSchema(db, backend) | |
| 57 | 77 |
| 58 # create a whole bunch of stuff | |
| 59 for i in range(numissues): | |
| 60 db.issue.create(**{'title': 'issue %s'%i}) | |
| 61 for j in range(10): | |
| 62 db.issue.set(str(i+1), status='2', assignedto='2', nosy=[]) | |
| 63 db.issue.set(str(i+1), status='1', assignedto='1', nosy=['1','2']) | |
| 64 db.user.create(**{'username': 'user %s'%i}) | |
| 65 for j in range(10): | |
| 66 db.user.set(str(i+1), assignable=1) | |
| 67 db.user.set(str(i+1), assignable=0) | |
| 68 db.commit() | |
| 69 sys.stdout.write('%7s: %-6d'%(backendname, numissues)) | 78 sys.stdout.write('%7s: %-6d'%(backendname, numissues)) |
| 70 sys.stdout.flush() | 79 sys.stdout.flush() |
| 71 | 80 |
| 72 times.append(('start', time())) | 81 times.append(('start', time())) |
| 73 | 82 |
| 74 # fetch | 83 # fetch |
| 84 db.clearCache() | |
| 75 for i in db.issue.list(): | 85 for i in db.issue.list(): |
| 76 db.issue.get(i, 'title') | 86 db.issue.get(i, 'title') |
| 77 times.append(('fetch', time())) | 87 times.append(('fetch', time())) |
| 78 | 88 |
| 79 # journals | 89 # journals |
| 90 db.clearCache() | |
| 80 for i in db.issue.list(): | 91 for i in db.issue.list(): |
| 81 db.issue.history(i) | 92 db.issue.history(i) |
| 82 times.append(('journal', time())) | 93 times.append(('journal', time())) |
| 83 | 94 |
| 84 # "calculated" props | 95 # "calculated" props |
| 96 db.clearCache() | |
| 85 for i in db.issue.list(): | 97 for i in db.issue.list(): |
| 86 db.issue.get(i, 'activity') | 98 db.issue.get(i, 'activity') |
| 87 db.issue.get(i, 'creator') | 99 db.issue.get(i, 'creator') |
| 88 db.issue.get(i, 'creation') | 100 db.issue.get(i, 'creation') |
| 89 times.append(('jprops', time())) | 101 times.append(('jprops', time())) |
| 90 | 102 |
| 91 # lookup | 103 # lookup |
| 104 db.clearCache() | |
| 92 for i in range(numissues): | 105 for i in range(numissues): |
| 93 db.user.lookup('user %s'%i) | 106 db.user.lookup('user %s'%i) |
| 94 times.append(('lookup', time())) | 107 times.append(('lookup', time())) |
| 95 | 108 |
| 96 # filter | 109 # filter |
| 110 db.clearCache() | |
| 111 for i in range(100): | |
| 112 db.issue.filter(None, {'assignedto': '1', 'title':'issue'}, | |
| 113 ('+', 'activity'), ('+', 'status')) | |
| 114 times.append(('filter', time())) | |
| 115 | |
| 116 # filter with multilink | |
| 117 db.clearCache() | |
| 97 for i in range(100): | 118 for i in range(100): |
| 98 db.issue.filter(None, {'nosy': ['1'], 'assignedto': '1', | 119 db.issue.filter(None, {'nosy': ['1'], 'assignedto': '1', |
| 99 'title':'issue'}, ('+', 'activity'), ('+', 'status')) | 120 'title':'issue'}, ('+', 'activity'), ('+', 'status')) |
| 100 times.append(('filter', time())) | 121 times.append(('filtml', time())) |
| 101 | 122 |
| 102 # results | 123 # results |
| 103 last = None | 124 last = None |
| 104 for event, stamp in times: | 125 for event, stamp in times: |
| 105 if last is None: | 126 if last is None: |
| 111 sys.stdout.flush() | 132 sys.stdout.flush() |
| 112 | 133 |
| 113 if __name__ == '__main__': | 134 if __name__ == '__main__': |
| 114 # 0 1 2 3 4 5 6 | 135 # 0 1 2 3 4 5 6 |
| 115 # 01234567890123456789012345678901234567890123456789012345678901234 | 136 # 01234567890123456789012345678901234567890123456789012345678901234 |
| 116 print 'Test name fetch journl jprops lookup filter TOTAL ' | 137 print 'Test name fetch journl jprops lookup filter filtml TOTAL ' |
| 117 for name in 'anydbm bsddb bsddb3 metakit sqlite'.split(): | 138 for name in 'anydbm bsddb bsddb3 metakit sqlite'.split(): |
| 118 main(name) | 139 main(name) |
| 119 for name in 'anydbm bsddb bsddb3 metakit sqlite'.split(): | 140 for name in 'anydbm bsddb bsddb3 metakit sqlite'.split(): |
| 120 main(name, numissues=20) | 141 main(name, numissues=20) |
| 121 # for name in 'anydbm bsddb bsddb3 metakit sqlite'.split(): | 142 for name in 'anydbm bsddb bsddb3 metakit sqlite'.split(): |
| 122 # main(name, numissues=100) | 143 main(name, numissues=100) |
| 123 | 144 |
