Mercurial > bitten > bitten-test
diff bitten/trac_ext/web_ui.py @ 69:b92d7c7d70fd
Record build slave properties in database.
author | cmlenz |
---|---|
date | Thu, 30 Jun 2005 18:27:12 +0000 |
parents | 6ffa99b442bf |
children | 6d7753ea1798 |
line wrap: on
line diff
--- a/bitten/trac_ext/web_ui.py +++ b/bitten/trac_ext/web_ui.py @@ -27,7 +27,7 @@ from trac.web.chrome import INavigationContributor from trac.web.main import IRequestHandler from trac.wiki import wiki_to_html -from bitten.model import Build, BuildConfig +from bitten.model import Build, BuildConfig, SlaveInfo class BuildModule(Component): @@ -93,34 +93,23 @@ var:build.config.browser_href ?>"><?cs var:build.config.path ?></a></li><?cs /if ?></ul><?cs if:build.config.description ?><div class="description"><?cs - var:build.config.description ?></div><?cs /if ?> - <div id="builds"><h3>Builds</h3><?cs - if:len(build.config.builds) ?><ul><?cs - each:b = build.config.builds ?><li><a href="<?cs - var:b.href ?>">[<?cs var:b.rev ?>]</a> built by <?cs - var:len(b.slaves) ?> slave(s)<?cs - if:len(b.slaves) ?>:<ul><?cs - each:slave = b.slaves ?><li><strong><?cs var:slave.name ?></strong>: <?cs - var:slave.status ?> (started <?cs - var:slave.started_delta ?> ago<?cs - if:slave.stopped ?>, stopped <?cs - var:slave.stopped_delta ?> ago, took <?cs - var:slave.duration ?><?cs - /if ?>)</li><?cs - /each ?> - </ul><?cs - /if ?> - </li><?cs - /each ?> - </ul><?cs - else ?><p>(None)</p><?cs - /if ?></div><?cs + var:build.config.description ?></div><?cs /if ?><?cs if:build.can_modify ?><div class="buttons"> <form method="get" action=""><div> <input type="hidden" name="action" value="edit" /> <input type="submit" value="Edit configuration" /> </div></form><?cs /if ?></div><?cs + + elif:build.mode == 'view_build' ?> + <p class="trigger">Triggered by: Changeset <a href="<?cs + var:build.chgset_href ?>">[<?cs var:build.rev ?>]</a> of <a href="<?cs + var:build.config.href ?>"><?cs var:build.config.name ?></a></p> + <p class="slave">Built by: <strong><?cs + var:build.slave.name ?></strong> (<?cs var:build.slave.os ?> <?cs + var:build.slave.os.version ?> on <?cs var:build.slave.machine ?>)</p> + <p class="time">Completed: <?cs var:build.started ?> (<?cs + var:build.started_delta ?> ago)<br />Took: <?cs var:build.duration ?></p><?cs /if ?> </div> @@ -128,7 +117,7 @@ """ _status_label = {Build.IN_PROGRESS: 'in progress', - Build.SUCCESS: 'success', + Build.SUCCESS: 'completed', Build.FAILURE: 'failed'} # INavigationContributor methods @@ -146,7 +135,7 @@ # IRequestHandler methods def match_request(self, req): - match = re.match(r'/build(?:/([\w.-]+))?(?:/([\w+.-]))?', req.path_info) + match = re.match(r'/build(?:/([\w.-]+))?(?:/([\w.-]+))?', req.path_info) if match: if match.group(1): req.args['config'] = match.group(1) @@ -192,20 +181,20 @@ if 'build' in filters: db = self.env.get_db_cnx() cursor = db.cursor() - cursor.execute("SELECT name,label,rev,slave,time,status " + cursor.execute("SELECT id,config,label,rev,slave,stopped,status " "FROM bitten_build " " INNER JOIN bitten_config ON (name=config) " - "WHERE time>=%s AND time<=%s " - "AND status IN (%s, %s) ORDER BY time", + "WHERE stopped>=%s AND stopped<=%s " + "AND status IN (%s, %s) ORDER BY stopped", (start, stop, Build.SUCCESS, Build.FAILURE)) event_kinds = {Build.SUCCESS: 'successbuild', Build.FAILURE: 'failedbuild'} - for name, label, rev, slave, time, status in cursor: - title = '<em>%s</em> [%s] built by %s' \ - % (escape(label), escape(rev), escape(slave)) - href = self.env.href.build(name) - message = self._status_label[status] - yield event_kinds[status], href, title, time, None, message + for id, config, label, rev, slave, stopped, status in cursor: + title = 'Build <em title="[%s] of %s">%s</em> by %s %s' \ + % (escape(rev), escape(label), escape(id), + escape(slave), self._status_label[status]) + href = self.env.href.build(config, id) + yield event_kinds[status], href, title, stopped, None, '' # Internal methods @@ -271,35 +260,6 @@ 'browser_href': self.env.href.browser(config.path) } - builds = Build.select(self.env, config=config.name) - curr_rev = None - slave_idx = 0 - for idx, build in enumerate(builds): - if build.rev != curr_rev: - slave_idx = 0 - curr_rev = build.rev - req.hdf['build.config.builds.%d' % idx] = { - 'rev': build.rev, - 'href': self.env.href.changeset(build.rev) - } - if not build.slave: - continue - prefix = 'build.config.builds.%d.slaves.%d' % (idx, slave_idx) - req.hdf[prefix] = {'name': build.slave, - 'status': self._status_label[build.status]} - if build.time: - started = build.time - req.hdf[prefix + '.started'] = strftime('%x %X', - localtime(started)) - req.hdf[prefix + '.started_delta'] = pretty_timedelta(started) - if build.duration: - stopped = build.time + build.duration - req.hdf[prefix + '.duration'] = pretty_timedelta(stopped, - build.time) - req.hdf[prefix + '.stopped'] = strftime('%x %X', - localtime(stopped)) - req.hdf[prefix + '.stopped_delta'] = pretty_timedelta(stopped) - req.hdf['build.mode'] = 'view_config' req.hdf['build.can_modify'] = req.perm.has_permission('BUILD_MODIFY') @@ -320,4 +280,40 @@ req.hdf['build.mode'] = 'edit_config' def _render_build(self, req, config_name, build_id): - raise NotImplementedError, 'Not implemented yet' + build = Build(self.env, build_id) + assert build.exists + status2title = {Build.SUCCESS: 'Success', Build.FAILURE: 'Failure'} + req.hdf['title'] = 'Build %s - %s' % (build_id, + status2title[build.status]) + req.hdf['build'] = self._build_to_hdf(build) + req.hdf['build.mode'] = 'view_build' + + config = BuildConfig(self.env, build.config) + req.hdf['build.config'] = { + 'name': config.label, + 'href': self.env.href.build(config.name) + } + + slave_info = SlaveInfo(self.env, build.id) + req.hdf['build.slave'] = { + 'name': build.slave, + 'ip_address': slave_info.properties.get(SlaveInfo.IP_ADDRESS), + 'os': slave_info.properties.get(SlaveInfo.OS_NAME), + 'os.family': slave_info.properties.get(SlaveInfo.OS_FAMILY), + 'os.version': slave_info.properties.get(SlaveInfo.OS_VERSION), + 'machine': slave_info.properties.get(SlaveInfo.MACHINE), + 'processor': slave_info.properties.get(SlaveInfo.PROCESSOR) + } + + def _build_to_hdf(self, build): + hdf = {'name': build.slave, 'status': self._status_label[build.status], + 'rev': build.rev, + 'chgset_href': self.env.href.changeset(build.rev)} + if build.started: + hdf['started'] = strftime('%x %X', localtime(build.started)) + hdf['started_delta'] = pretty_timedelta(build.started) + if build.stopped: + hdf['stopped'] = strftime('%x %X', localtime(build.stopped)) + hdf['stopped_delta'] = pretty_timedelta(build.stopped) + hdf['duration'] = pretty_timedelta(build.stopped, build.started) + return hdf