Mercurial > p > roundup > code
comparison test/benchmark.py @ 1174:8e318dfaf479
Verify contents of tracker module when the tracker is opened
Performance improvements in *dbm and sq backends
New benchmark module. To use:
PYTHONPATH=. python2 test/benchmark.py
(yes, it's a little basic at present ;)
| author | Richard Jones <richard@users.sourceforge.net> |
|---|---|
| date | Fri, 20 Sep 2002 01:20:32 +0000 |
| parents | |
| children | 49aebf5a8691 |
comparison
equal
deleted
inserted
replaced
| 1173:58f1a2c174ed | 1174:8e318dfaf479 |
|---|---|
| 1 import sys, os, time, shutil | |
| 2 | |
| 3 from roundup.hyperdb import String, Password, Link, Multilink, Date, \ | |
| 4 Interval, DatabaseError, Boolean, Number | |
| 5 from roundup import date, password | |
| 6 from roundup.indexer import Indexer | |
| 7 | |
| 8 def setupSchema(db, module): | |
| 9 status = module.Class(db, "status", name=String()) | |
| 10 status.setkey("name") | |
| 11 user = module.Class(db, "user", username=String(), password=Password(), | |
| 12 assignable=Boolean(), age=Number(), roles=String()) | |
| 13 user.setkey("username") | |
| 14 file = module.FileClass(db, "file", name=String(), type=String(), | |
| 15 comment=String(indexme="yes")) | |
| 16 issue = module.IssueClass(db, "issue", title=String(indexme="yes"), | |
| 17 status=Link("status"), nosy=Multilink("user"), deadline=Date(), | |
| 18 foo=Interval(), files=Multilink("file"), assignedto=Link('user')) | |
| 19 session = module.Class(db, 'session', title=String()) | |
| 20 session.disableJournalling() | |
| 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() | |
| 29 | |
| 30 class config: | |
| 31 DATABASE='_test_dir' | |
| 32 GADFLY_DATABASE = ('test', DATABASE) | |
| 33 MAILHOST = 'localhost' | |
| 34 MAIL_DOMAIN = 'fill.me.in.' | |
| 35 TRACKER_NAME = 'Roundup issue tracker' | |
| 36 TRACKER_EMAIL = 'issue_tracker@%s'%MAIL_DOMAIN | |
| 37 TRACKER_WEB = 'http://some.useful.url/' | |
| 38 ADMIN_EMAIL = 'roundup-admin@%s'%MAIL_DOMAIN | |
| 39 FILTER_POSITION = 'bottom' # one of 'top', 'bottom', 'top and bottom' | |
| 40 ANONYMOUS_ACCESS = 'deny' # either 'deny' or 'allow' | |
| 41 ANONYMOUS_REGISTER = 'deny' # either 'deny' or 'allow' | |
| 42 MESSAGES_TO_AUTHOR = 'no' # either 'yes' or 'no' | |
| 43 EMAIL_SIGNATURE_POSITION = 'bottom' | |
| 44 | |
| 45 def main(backendname, time=time.time, numissues=10): | |
| 46 try: | |
| 47 exec('from roundup.backends import %s as backend'%backendname) | |
| 48 except ImportError: | |
| 49 return | |
| 50 | |
| 51 if os.path.exists(config.DATABASE): | |
| 52 shutil.rmtree(config.DATABASE) | |
| 53 | |
| 54 times = [] | |
| 55 db = backend.Database(config, 'test') | |
| 56 setupSchema(db, backend) | |
| 57 | |
| 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)) | |
| 70 sys.stdout.flush() | |
| 71 | |
| 72 times.append(('start', time())) | |
| 73 | |
| 74 # fetch | |
| 75 for i in db.issue.list(): | |
| 76 db.issue.get(i, 'title') | |
| 77 times.append(('fetch', time())) | |
| 78 | |
| 79 # journals | |
| 80 for i in db.issue.list(): | |
| 81 db.issue.history(i) | |
| 82 times.append(('journal', time())) | |
| 83 | |
| 84 # "calculated" props | |
| 85 for i in db.issue.list(): | |
| 86 db.issue.get(i, 'activity') | |
| 87 db.issue.get(i, 'creator') | |
| 88 db.issue.get(i, 'creation') | |
| 89 times.append(('jprops', time())) | |
| 90 | |
| 91 # lookup | |
| 92 for i in range(numissues): | |
| 93 db.user.lookup('user %s'%i) | |
| 94 times.append(('lookup', time())) | |
| 95 | |
| 96 # filter | |
| 97 for i in range(100): | |
| 98 db.issue.filter(None, {'nosy': ['1'], 'assignedto': '1', | |
| 99 'title':'issue'}, ('+', 'activity'), ('+', 'status')) | |
| 100 times.append(('filter', time())) | |
| 101 | |
| 102 # results | |
| 103 last = None | |
| 104 for event, stamp in times: | |
| 105 if last is None: | |
| 106 first = stamp | |
| 107 else: | |
| 108 sys.stdout.write(' %-6.2f'%(stamp-last)) | |
| 109 last = stamp | |
| 110 print ' %-6.2f'%(last-first) | |
| 111 sys.stdout.flush() | |
| 112 | |
| 113 if __name__ == '__main__': | |
| 114 # 0 1 2 3 4 5 6 | |
| 115 # 01234567890123456789012345678901234567890123456789012345678901234 | |
| 116 print 'Test name fetch journl jprops lookup filter TOTAL ' | |
| 117 for name in 'anydbm bsddb bsddb3 metakit sqlite'.split(): | |
| 118 main(name) | |
| 119 for name in 'anydbm bsddb bsddb3 metakit sqlite'.split(): | |
| 120 main(name, numissues=20) | |
| 121 # for name in 'anydbm bsddb bsddb3 metakit sqlite'.split(): | |
| 122 # main(name, numissues=100) | |
| 123 |
