Greasemonkey script for CI system
Here in Caplin Towers (it’s not really called that) we’ve got a couple of projectors displaying the Continuous Integration builds up on the walls. It’s pretty useful until you get to the point where you’ve got more projects than space on the wall. We got to that point a while ago, and have had to resort to only displaying the “most important” builds on the wall. Clearly this is not very cool, because all the builds are important.

Sorry, there's no room here!
I decided to write a script which would scroll through all of the build groups and display this on the wall. I worked out that it would take about a minute to scroll through the whole lot, with a 4 second pause on each build group. My first thought was to use Watir (a ruby based browser scripting tool), and this would have probably worked fine on a Jenkins, Bamboo or CruiseControl system, but not for Go (I needed my solution to work for Go as many of our builds are in this system at present). You see, Go displays build groups by use of “views” (like Jenkins does). Unfortunately in Go there isn’t a different url for each view, meaning I can’t just write a simple ruby script that loads up a different page for each build group. I guess it must be handled by javascript.
So, I decided to try selenium. In theory this should have worked
fine, and indeed it would have if I could be bothered to spend a bit
more time on it. My plan was to record a journey which loaded up each
view, one after another, and then play back this journey using selenium
RC so that I could put it into a scheduled cron job and have it run over
and over again. Like I said, in theory it works fine, but in practice
it wasn’t such a great idea afterall. Firstly, there’s always that delay
as selenium initializes and loads the browser, then there’s the
presence of the selenium window, and then there’s the problem of having
to update the script every time a new build group is added. I know most
of these issues can be overcome fairly easy, especially if you’re
selenium savvy or if you have a java framework for laoding and running
selenium tests in place. I was just about to go down the route of
writing my journey in java (mainly so that I can manipulate the window
sizes more easily), when my colleague Edmund Dipple, said “I saw you struggling, so I’ve
knocked this up” and showed me a greasemonkey script which does exactly
what I was looking for.
Basically the script runs through each pipeline group, one after the other, and pauses for 5 seconds on each one before moving on. Perfect. He used the chrome developer tools (or you could use Firebug on Firefox) to find out the name of the pipeline group container (which turned out to be “pipeline_groups_container”) and then iterate through each of the child elements (the child elements represent each pipeline group). The full script is here:
var timeout = 5000;
var counter = 0;
var groups = document.getElementById(“pipeline_groups_container”).children;
var groupsLength = groups.length;function scroll()
{for(i=0;i<groupsLength;i++)
{
groups[i].style.display = “none”;
}
groups[counter].style.display = “block”;counter++;
if(counter == groupsLength)
{
counter = 0;
}setTimeout(scroll,timeout);
}
scroll();
And now we see each build group on screen, one at a time:

This is one pipeline group....

...and this is another
(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)




