summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xextras/failed-tests.py64
1 files changed, 64 insertions, 0 deletions
diff --git a/extras/failed-tests.py b/extras/failed-tests.py
new file mode 100755
index 00000000000..4b21d132c1f
--- /dev/null
+++ b/extras/failed-tests.py
@@ -0,0 +1,64 @@
+#!/usr/bin/python
+
+import blessings
+import HTMLParser
+import requests
+import sys
+
+BASE='https://build.gluster.org'
+TERM=blessings.Terminal()
+
+class FailureFinder (HTMLParser.HTMLParser):
+ def __init__ (*args):
+ apply(HTMLParser.HTMLParser.__init__,args)
+ self = args[0]
+ self.last_href = None
+ def handle_starttag (self, tag, attrs):
+ if tag == 'a':
+ return self.is_a_tag (attrs)
+ if tag == 'img':
+ return self.is_img_tag (attrs)
+ def is_a_tag (self, attrs):
+ attrs_dict = dict(attrs)
+ try:
+ if attrs_dict['class'] != 'build-status-link':
+ return
+ except KeyError:
+ return
+ self.last_href = attrs_dict['href']
+ def is_img_tag (self, attrs):
+ if self.last_href == None:
+ return
+ attrs_dict = dict(attrs)
+ try:
+ if attrs_dict['alt'].find('Failed') == -1:
+ return
+ except KeyError:
+ return
+ self.process_failure(self.last_href)
+ self.last_href = None
+ def process_failure (self, url):
+ text = requests.get(BASE+url+'Full',verify=False).text
+ accum = []
+ for t in text.split('\n'):
+ if t == 'Result: FAIL':
+ print TERM.red + ('FAILURE on %s' % BASE+url) + TERM.normal
+ for t2 in accum:
+ print t2.encode('utf-8')
+ accum = []
+ elif t == 'Result: PASS':
+ accum = []
+ else:
+ accum.append(t)
+
+def main (url):
+ parser = FailureFinder()
+ text = requests.get(url,verify=False).text
+ parser.feed(text)
+
+
+if len(sys.argv) < 2:
+ main(BASE+'/job/rackspace-regression-2GB-triggered/')
+else:
+ for u in sys.argv[1:]:
+ main(BASE+u)