diff 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
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/benchmark.py	Fri Sep 20 01:20:32 2002 +0000
@@ -0,0 +1,123 @@
+import sys, os, time, shutil
+
+from roundup.hyperdb import String, Password, Link, Multilink, Date, \
+    Interval, DatabaseError, Boolean, Number
+from roundup import date, password
+from roundup.indexer import Indexer
+
+def setupSchema(db, module):
+    status = module.Class(db, "status", name=String())
+    status.setkey("name")
+    user = module.Class(db, "user", username=String(), password=Password(),
+        assignable=Boolean(), age=Number(), roles=String())
+    user.setkey("username")
+    file = module.FileClass(db, "file", name=String(), type=String(),
+        comment=String(indexme="yes"))
+    issue = module.IssueClass(db, "issue", title=String(indexme="yes"),
+        status=Link("status"), nosy=Multilink("user"), deadline=Date(),
+        foo=Interval(), files=Multilink("file"), assignedto=Link('user'))
+    session = module.Class(db, 'session', title=String())
+    session.disableJournalling()
+    db.post_init()
+    status.create(name="unread")
+    status.create(name="in-progress")
+    status.create(name="testing")
+    status.create(name="resolved")
+    user.create(username='one')
+    user.create(username='two')
+    db.commit()
+
+class config:
+    DATABASE='_test_dir'
+    GADFLY_DATABASE = ('test', DATABASE)
+    MAILHOST = 'localhost'
+    MAIL_DOMAIN = 'fill.me.in.'
+    TRACKER_NAME = 'Roundup issue tracker'
+    TRACKER_EMAIL = 'issue_tracker@%s'%MAIL_DOMAIN
+    TRACKER_WEB = 'http://some.useful.url/'
+    ADMIN_EMAIL = 'roundup-admin@%s'%MAIL_DOMAIN
+    FILTER_POSITION = 'bottom'      # one of 'top', 'bottom', 'top and bottom'
+    ANONYMOUS_ACCESS = 'deny'       # either 'deny' or 'allow'
+    ANONYMOUS_REGISTER = 'deny'     # either 'deny' or 'allow'
+    MESSAGES_TO_AUTHOR = 'no'       # either 'yes' or 'no'
+    EMAIL_SIGNATURE_POSITION = 'bottom'
+
+def main(backendname, time=time.time, numissues=10):
+    try:
+        exec('from roundup.backends import %s as backend'%backendname)
+    except ImportError:
+        return
+
+    if os.path.exists(config.DATABASE):
+        shutil.rmtree(config.DATABASE)
+
+    times = []
+    db = backend.Database(config, 'test')
+    setupSchema(db, backend)
+
+    # create a whole bunch of stuff
+    for i in range(numissues):
+        db.issue.create(**{'title': 'issue %s'%i})
+        for j in range(10):
+            db.issue.set(str(i+1), status='2', assignedto='2', nosy=[])
+            db.issue.set(str(i+1), status='1', assignedto='1', nosy=['1','2'])
+        db.user.create(**{'username': 'user %s'%i})
+        for j in range(10):
+            db.user.set(str(i+1), assignable=1)
+            db.user.set(str(i+1), assignable=0)
+    db.commit()
+    sys.stdout.write('%7s: %-6d'%(backendname, numissues))
+    sys.stdout.flush()
+
+    times.append(('start', time()))
+
+    # fetch
+    for i in db.issue.list():
+        db.issue.get(i, 'title')
+    times.append(('fetch', time()))
+
+    # journals
+    for i in db.issue.list():
+        db.issue.history(i)
+    times.append(('journal', time()))
+
+    # "calculated" props
+    for i in db.issue.list():
+        db.issue.get(i, 'activity')
+        db.issue.get(i, 'creator')
+        db.issue.get(i, 'creation')
+    times.append(('jprops', time()))
+
+    # lookup
+    for i in range(numissues):
+        db.user.lookup('user %s'%i)
+    times.append(('lookup', time()))
+
+    # filter
+    for i in range(100):
+        db.issue.filter(None, {'nosy': ['1'], 'assignedto': '1',
+            'title':'issue'}, ('+', 'activity'), ('+', 'status'))
+    times.append(('filter', time()))
+
+    # results
+    last = None
+    for event, stamp in times:
+        if last is None:
+            first = stamp
+        else:
+            sys.stdout.write(' %-6.2f'%(stamp-last))
+        last = stamp
+    print ' %-6.2f'%(last-first)
+    sys.stdout.flush()
+
+if __name__ == '__main__':
+    #      0         1         2         3         4         5         6
+    #      01234567890123456789012345678901234567890123456789012345678901234
+    print 'Test name       fetch  journl jprops lookup filter TOTAL '
+    for name in 'anydbm bsddb bsddb3 metakit sqlite'.split():
+        main(name)
+    for name in 'anydbm bsddb bsddb3 metakit sqlite'.split():
+        main(name, numissues=20)
+#    for name in 'anydbm bsddb bsddb3 metakit sqlite'.split():
+#        main(name, numissues=100)
+

Roundup Issue Tracker: http://roundup-tracker.org/