diff --git a/elasticRecheck.py b/elasticRecheck.py index 95d30bee..a7e1fac2 100755 --- a/elasticRecheck.py +++ b/elasticRecheck.py @@ -4,6 +4,7 @@ import gerritlib.gerrit from pyelasticsearch import ElasticSearch import ConfigParser +import json class Stream(object): @@ -26,6 +27,7 @@ class Stream(object): event = self.gerrit.getEvent() if event.get('type', '') != 'comment-added': continue + username = event['author'].get('username', '') if (event['author']['username'] == 'jenkins' and "Build failed. For information on how to proceed" in event['comment']): @@ -42,29 +44,35 @@ class Classifier(): that are mapped to specific bugs. """ ES_URL = "http://logstash.openstack.org/elasticsearch" - #TODO(jogo): make the query below a template that takes a query and - # change and patch number - tempest_failed_jobs = { + template = { "sort": { "@timestamp": {"order": "desc"} }, "query": { "query_string": { - "query": '@tags:"console.html" AND @message:"Finished: FAILURE" AND @fields.build_change:"46396" AND @fields.build_patchset:"1"' + "query": '%s AND @fields.build_change:"%s" AND @fields.build_patchset:"%s"' } } } + queries = None def __init__(self): self.es = ElasticSearch(self.ES_URL) + self.queries = json.loads(open('queries.json').read()) + for x in self.queries: + print x['bug'] #TODO(jogo): import a list of queries from a config file def test(self): - results = self.es.search(self.tempest_failed_jobs, size='10') + query = self.template.copy() + query['query']['query_string']['query'] = (query['query']['query_string']['query'] % + ('@tags:"console.html" AND @message:"Finished: FAILURE"', '34825', '3')) + results = self.es.search(query, size='10') for x in results['hits']['hits']: try: change = x["_source"]['@fields']['build_change'] patchset = x["_source"]['@fields']['build_patchset'] + print "build_name %s" % x["_source"]['@fields']['build_name'] print "https://review.openstack.org/#/c/%(change)s/%(patchset)s" % locals() except KeyError: print "build_name %s" % x["_source"]['@fields']['build_name'] diff --git a/queries.json b/queries.json new file mode 100644 index 00000000..b547d1ba --- /dev/null +++ b/queries.json @@ -0,0 +1,10 @@ +[ + { + "bug": "123", + "query": "a query" + }, + { + "bug": "1234", + "query": "a second query" + } +] diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/test_classifier.py b/tests/test_classifier.py new file mode 100644 index 00000000..27595433 --- /dev/null +++ b/tests/test_classifier.py @@ -0,0 +1,17 @@ +import testtools +import elasticRecheck + + +class TestClassifier(testtools.TestCase): + + def setUp(self): + super(TestClassifier, self).setUp() + self.classifier = elasticRecheck.Classifier() + + def test_read_qeuries_file(self): + self.assertNotEqual(self.classifier.queries, None) + + + def test_elasticSearch(self): + self.classifier.test() + self.assertFalse(True)