cc_dashboard - Aggregates the build status of projects from multiple CruiseControl servers on to a single “dashboard” web page
cc_dashboard will combine the build status of projects from multiple CruiseControl servers (actually, from any Continuous Integration server that exposes build status information using the “cctray xml format” - see below) on to a single “dashboard” web page.
cc_dashboard is a Rails application. It has been tested against Rails 2.1 and Rails 2.3.5, but because it is very, very simple it should run under earlier and later versions of Rails.
As the number of Rails projects I was using increased I was then forced to split them amongst multiple CruiseControl.rb servers to improve build times. However, I now had the problem of monitoring multiple CruiseControl.rb servers. So the answer was to aggregate all the build status using cc_dashboard!
Why did I write it in Rails? Because I was working with a large number of Rails projects at the time and had the Rails infrastructure in place to host cc_dashboard!
Assuming you have the base Rails gems installed (no database needed):
Unpack the cc_dashboard zip/tar
Create a config/cc_dashboard_config.rb file with a list of “cctray xml format” (see below) feed URLs. You can use config/cc_dashboard_config.rb.example as a template
Start the cc_dashboard Rails server by running the script/server script. If no arguments are supplied this will start the server on port 3332.
Point your web browser at the application root. e.g.
cc_dashboard has support for changing the look, or “skin”, of its dashboard page.
Built-in skins are:
doom - yep, the original first-person shooter Doom
hudson - some images borrowed from the Hudson continuous integration server
kitten - aaawww, how cute :)
spaceinvaders - yep, the arcade classic
You choose the skin by setting the DashboardConfig.skin value in the config/cc_dashboard_config.rb configuration file. You can also choose the skin per-HTTP-request by adding a “?skin=SKIN” to the end of the URL (e.g. “?skin=hudson”).
“cctray xml format”
Originally developed for CruiseControl.NET, the “cctray xml format” is an RSS-like way of exposing the build status of projects. This format has caught on and is now supported by a number of continuous integration servers:
See Multiple Project Summary Reporting Standard for details of the cctray XML feed format. This doco is mostly correct, the only difference i've seen “in the wild” are:
An additional “Pending” activity
An additional “Unknown” status. I've seen Unknown reported by CruiseControl.rb when project builds are serialized (“Configuration.serialize_builds = true” set in .cruise/site_config.rb) and one build is waiting for another build to finish. I've seen Unknown reported by Hudson when a project is disabled.
Oh, cctray is a .NET application that sits in your Windows system tray and can alert you via popups or sounds when a project build is successful or fails. It is available as part of a CruiseControl.NET release.
ccmenu is a cctray equivalent for the Mac.
CruiseControl.rb cctray times in the wrong timezone bug
CruiseControl.rb versions 1.4.0 and 1.3.0 (and probably earlier versions) incorrectly report local server time as UTC in the cctray feeds. To fix change the following method in lib/time_formatter.rb
def round_trip_local(time) time.strftime('%Y-%m-%dT%H:%M:%S.0000000-00:00') # yyyy'-'MM'-'dd'T'HH':'mm':'ss.fffffffK) end
def round_trip_local(time) time.xmlschema end
cc_dashboard has been tested successfully against Firefox 3, Internet Explorer 7 and Internet Explorer 8.
cc_dashboard does not render correctly using Internet Explorer 6 and I have no intention of supporting IE6 :)
License and Acknowledgements
The 'spaceinvaders' images are derived from those on The History Of Space Invaders. Space Invaders copyright Taito Corp.
The rest of cc_dashboard is licensed under the terms of the the Apache 2.0 license. See www.apache.org/licenses/LICENSE-2.0 for details.
The 'Chuck Norris Facts' widget was inspired by the Hudson Chuck Norris Plugin, which in turn was inspired by The Ultimate Top 25 Chuck Norris “The Programmer” Jokes. (Which I think was in turn inspired by ChuckNorrisFacts.com.)
Other CruiseControl Aggregators
bigvisiblewall is implemented in Scala and packaged as a Java web application.