You can create something in any suitable environment, for example. Flex / AS3. which can read XML, as well as generate a splash screen design and an executable file that you need (depending on your target platform).
You can simply create on a simple web page and use hudson data over AJAX and display your display in HTML / CSS, it is up to you, but it is pretty trivial.
Hudson will provide a current list of tasks and their status color over the base API (XML in this example)
http:
You will get something like ...
<hudson> <assignedLabel></assignedLabel> <mode>NORMAL</mode> <nodeDescription>the master Hudson node</nodeDescription> <nodeName></nodeName> <numExecutors>5</numExecutors> <job> <name>JobOne</name> <url>http://hostname:8080/job/JobOne/</url> <color>blue</color> </job> <job> <name>JobTwo</name> <url>http://hostname:8080/job/JobTwo/</url> <color>blue</color> </job> <job> <name>JobThree</name> <url>http://hostname:8080/job/JobThree/</url> <color>blue</color> </job> <overallLoad></overallLoad> <primaryView> <name>All</name> <url>http://hostname:8080/</url> </primaryView> <slaveAgentPort>0</slaveAgentPort> <useCrumbs>false</useCrumbs> <useSecurity>true</useSecurity> <view> <name>All</name> <url>http://hostname:8080/</url> </view> <view> <name>Dashboard</name> <url>http://hostname:8080/view/Dashboard/</url> </view> </hudson>
You will be interested in these nodes ...
<job> <name>JobOne</name> <url>http://hostname:8080/job/JobOne/</url> <color>blue</color> </job> <job> <name>JobTwo</name> <url>http://hostname:8080/job/JobTwo/</url> <color>blue</color> </job> <job> <name>JobThree</name> <url>http://hostname:8080/job/JobThree/</url> <color>blue</color> </job>
That would be easy to select and get the desired color (build status - red or blue) and the name of the job. If you want more information, I will gladly throw something basic together.
Update: A very simple Flex example.
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns="*" creationComplete="start()"> <mx:HTTPService id="jobsRequest" url="http://localhost:8080/api/xml" useProxy="false" method="POST"> <mx:request xmlns=""> </mx:request> </mx:HTTPService> <mx:Script> <![CDATA[ import flash.utils.Timer; import flash.events.TimerEvent; private var t:Timer = new Timer(5000, 0); // repeat every 5 seconds; private function start():void { t.addEventListener(TimerEvent.TIMER, getHudsonStatus); t.start(); } private function getHudsonStatus(e:TimerEvent):void { jobsRequest.send(); } ]]> </mx:Script> <mx:DataGrid id="hudsonJobsDataGrid" x="22" y="128" dataProvider="{jobsRequest.lastResult.hudson.job}"> <mx:columns> <mx:DataGridColumn headerText="Name" dataField="status"/> <mx:DataGridColumn headerText="Status" dataField="color"/> </mx:columns> </mx:DataGrid> </mx:Application>
This is pretty bad, but it requires getting data, Flex 4 or Silverlight will provide you with better data-driven lists using ItemRenders (Flex4 Spark) or DataTemplates (Silverlight), I think Flex4 route will need less code, and if it MUST be a screen saver, just convert SWF to screensavers, and many tools are available to automate the process.
Update 2: A slightly better example of Flex 4 ...
I created a nicer view as a full-screen AIR application with Flex 4 using the Spark components (DataGroup + ItemRenderer) here http://gist.github.com/623167 as a source. It requires a Flashbuilder4 or AIR SDK to create it. Of course, this is not a finished product!
It looks like this: http://i.stack.imgur.com/8I92U.png - when it was tracking http://deadlock.netbeans.org/hudson