Re: Last Build Status
"Hahn, Christopher (SAN DIEGO)" <[email protected]> Thu, 22 Sep 2011 18:01:13 +0000
| Newsgroups | gmane.comp.java.cruise-control.user |
|---|---|
| Message-ID | <7FABA4234424A74C8EB762DB494C5B4501F18B@G9W0750.americas.hpqcorp.net> |
Thanks for sharing Paul. I have had to do similar things, but with perl. My team is wanting to use python more, and so I am happy to have another snippet to ponder. Take care, Chris From: Paul Willworth [mailto:[email protected]] Sent: Thursday, September 22, 2011 9:43 AM To: [email protected] Subject: Re: [Cruisecontrol-user] Last Build Status I wrote this python script to calculate the time to fix the build. Thought I'd share incase anyone else can use it. #!/usr/bin/python # This script is meant to be used with the Cruise Control RSS feed for a project. # If the build label given is a successful build and has at least 1 failed build # immediately prior to it, the script returns the number of minutes since the # build last became broken to the time of this successful build. import sys from optparse import OptionParser from xml.dom import minidom import urllib from datetime import timedelta, datetime parser = OptionParser("usage: %prog projectName buildLabel") (options, args) = parser.parse_args() projectName = args[0] buildLabel = args[1] cruiseFeedTemplate = "http://buildserver:8080/cruisecontrol/rss/{0}" # utility function for getting text out of xml element child nodes def getText(nodelist): rc = [] for node in nodelist: if node.nodeType == node.TEXT_NODE: rc.append(node.data) return ''.join(rc) # parse xml dom for build times def getTimeToFix(builds): buildStatus = "" buildTime = "" failTime = "" items = builds.getElementsByTagName("item") for item in items: # get the important bits of info from this build attempt title = getText(item.getElementsByTagName("title")[0].childNodes) itemTime = title[:title.find(",")].strip() itemStatus = title[title.find(",")+1:].strip() link = getText(item.getElementsByTagName("link")[0].childNodes) itemLabel = link[link.find("?")+23:] # See if this is the build we are looking for if itemLabel == buildLabel and buildStatus == "": buildStatus = itemStatus # bail if build is failed if itemStatus != 'passed': break else: buildTime = itemTime continue # look for prior build info after this build found if buildStatus == 'passed': if itemStatus != 'passed': failTime = itemTime else: break # debugging print "buildStatus: {0} buildTime: {1} failTime: {2}".format(buildStatus, buildTime, failTime) # Return the minutes to fix or 0 if not a fixing build if buildTime != "" and failTime != "": timeToFix = datetime.strptime(buildTime, "%a %b %d %H:%M:%S %Z %Y") - datetime.strptime(failTime, "%a %b %d %H:%M:%S %Z %Y") return (timeToFix.seconds/60)+1 else: return 0 # Get the project RSS feed domp = None try: f = urllib.urlopen(cruiseFeedTemplate.format(projectName)) domp = minidom.parse(f) except Exception as e: print "Failed to get feed:", e # Get and print the time to fix this build or zero if build was not broken if domp != None: print "Minutes to fix: {0}\n".format(getTimeToFix(domp)) -Paul ________________________________ From: Julian Simpson [mailto:[email protected]] Sent: Wednesday, September 14, 2011 1:22 PM To: [email protected] Subject: Re: [Cruisecontrol-user] Last Build Status I'd probably write a script to work on the XML feed. J. On Wednesday, 14 September 2011, Paul Willworth wrote: I am trying to figure out a way to measure time taken to fix a broken build. I'm thinking I would need a way to check the status of the last build, and trigger a calculation of the time if the current build is successful. As far as I can tell though, there are only handy properties available to tell you when the last successful build was, not what the last build was. Has anyone found a good way to calculate this metric? Paul Willworth -- Julian Simpson The Build Doctor Ltd. http://www.build-doctor.com [email protected]<mailto:[email protected]> (+44) 207 183 0323 ------------------------------------------------------------------------------ All the data continuously generated in your IT infrastructure contains a definitive record of customers, application performance, security threats, fraudulent activity and more. Splunk takes this data and makes sense of it. Business sense. IT sense. Common sense. http://p.sf.net/sfu/splunk-d2dcopy1 _______________________________________________ Cruisecontrol-user mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/cruisecontrol-user