# HG changeset patch # User cmlenz # Date 1119975445 0 # Node ID de1a7499f4d6e643fb2700c399b04b7e83125096 # Parent 2332aedba328b14cfc9f27229e2e60f1c817c287 Basic timeline provider for builds. diff --git a/bitten/trac_ext/web_ui.py b/bitten/trac_ext/web_ui.py --- a/bitten/trac_ext/web_ui.py +++ b/bitten/trac_ext/web_ui.py @@ -22,6 +22,7 @@ from time import localtime, strftime from trac.core import * +from trac.Timeline import ITimelineEventProvider from trac.util import escape, pretty_timedelta from trac.web.chrome import INavigationContributor from trac.web.main import IRequestHandler @@ -31,7 +32,7 @@ class BuildModule(Component): - implements(INavigationContributor, IRequestHandler) + implements(INavigationContributor, IRequestHandler, ITimelineEventProvider) build_cs = """ @@ -126,6 +127,10 @@ """ + _status_label = {Build.IN_PROGRESS: 'in progress', + Build.SUCCESS: 'success', + Build.FAILURE: 'failed'} + # INavigationContributor methods def get_active_navigation_item(self, req): @@ -177,6 +182,30 @@ return req.hdf.parse(self.build_cs), None + # ITimelineEventProvider methods + + def get_timeline_filters(self, req): + if req.perm.has_permission('BUILD_VIEW'): + yield ('build', 'Builds') + + def get_timeline_events(self, req, start, stop, filters): + if 'build' in filters: + db = self.env.get_db_cnx() + cursor = db.cursor() + cursor.execute("SELECT name,label,rev,slave,time,status " + "FROM bitten_build " + " INNER JOIN bitten_config ON (name=config) " + "WHERE time>=%s AND time<=%s ORDER BY time", + (start, stop)) + for name, label, rev, slave, time, status in cursor: + title = '%s [%s] built by %s' \ + % (escape(label), escape(rev), escape(slave)) + href = self.env.href.build(name) + message = self._status_label[status] + yield 'build', href, title, time, None, message + + # Internal methods + def _do_create(self, req): """Create a new build configuration.""" req.perm.assert_permission('BUILD_CREATE') @@ -252,11 +281,9 @@ } if not build.slave: continue - status_label = {Build.IN_PROGRESS: 'in progress', - Build.SUCCESS: 'success', Build.FAILURE: 'failed'} prefix = 'build.config.builds.%d.slaves.%d' % (idx, slave_idx) req.hdf[prefix] = {'name': build.slave, - 'status': status_label[build.status]} + 'status': self._status_label[build.status]} if build.time: started = build.time req.hdf[prefix + '.started'] = strftime('%x %X',