diff --git a/elastic_recheck/bot.py b/elastic_recheck/bot.py index 5da6dac0..792a1866 100755 --- a/elastic_recheck/bot.py +++ b/elastic_recheck/bot.py @@ -52,6 +52,7 @@ from launchpadlib import launchpad LPCACHEDIR = os.path.expanduser('~/.launchpadlib/cache') + try: import daemon.pidlockfile pid_file_module = daemon.pidlockfile @@ -61,8 +62,6 @@ except Exception: import daemon.pidfile pid_file_module = daemon.pidfile -LOG = logging.getLogger('recheckwatchbot') - class RecheckWatchBot(irc.bot.SingleServerIRCBot): def __init__(self, channels, nickname, password, server, port=6667, @@ -72,28 +71,29 @@ class RecheckWatchBot(irc.bot.SingleServerIRCBot): self.channel_list = channels self.nickname = nickname self.password = password + self.log = logging.getLogger('recheckwatchbot') def on_nicknameinuse(self, c, e): - LOG.info('Nick previously in use, recovering.') + self.log.info('Nick previously in use, recovering.') c.nick(c.get_nickname() + "_") c.privmsg("nickserv", "identify %s " % self.password) c.privmsg("nickserv", "ghost %s %s" % (self.nickname, self.password)) c.privmsg("nickserv", "release %s %s" % (self.nickname, self.password)) time.sleep(1) c.nick(self.nickname) - LOG.info('Nick previously in use, recovered.') + self.log.info('Nick previously in use, recovered.') def on_welcome(self, c, e): - LOG.info('Identifying with IRC server.') + self.log.info('Identifying with IRC server.') c.privmsg("nickserv", "identify %s " % self.password) - LOG.info('Identified with IRC server.') + self.log.info('Identified with IRC server.') for channel in self.channel_list: c.join(channel) - LOG.info('Joined channel %s' % channel) + self.log.info('Joined channel %s' % channel) time.sleep(0.5) def send(self, channel, msg): - LOG.info('Sending "%s" to %s' % (msg, channel)) + self.log.info('Sending "%s" to %s' % (msg, channel)) self.connection.privmsg(channel, msg) time.sleep(0.5) @@ -104,6 +104,7 @@ class RecheckWatch(threading.Thread): super(RecheckWatch, self).__init__() self.ircbot = ircbot self.channel_config = channel_config + self.log = logging.getLogger('recheckwatchbot') self.username = username self.queries = queries self.host = host @@ -144,12 +145,12 @@ class RecheckWatch(threading.Thread): if display: self.print_msg(channel, msg) else: - LOG.info("Didn't leave a message on channel %s for %s because the " - "bug doesn't target an appropriate project" % ( - channel, event.url)) + self.log.info("Didn't leave a message on channel %s for %s because" + " the bug doesn't target an appropriate project" % ( + channel, event.url)) def print_msg(self, channel, msg): - LOG.info('Compiled Message %s: %s' % (channel, msg)) + self.log.info('Compiled Message %s: %s' % (channel, msg)) if self.ircbot: self.ircbot.send(channel, msg) @@ -197,10 +198,10 @@ class RecheckWatch(threading.Thread): event, debug=not self.commenting) except er.ResultTimedOut as e: - LOG.warn(e.msg) + self.log.warn(e.msg) self._read(msg=e.msg) except Exception: - LOG.exception("Uncaught exception processing event.") + self.log.exception("Uncaught exception processing event.") class ChannelConfig(object): diff --git a/elastic_recheck/cmd/check_success.py b/elastic_recheck/cmd/check_success.py index 9f63169b..f529b929 100755 --- a/elastic_recheck/cmd/check_success.py +++ b/elastic_recheck/cmd/check_success.py @@ -27,7 +27,6 @@ from launchpadlib import launchpad import elastic_recheck.elasticRecheck as er import elastic_recheck.results as er_results -LOG = logging.getLogger('recheckwatchbot') LPCACHEDIR = os.path.expanduser('~/.launchpadlib/cache') @@ -170,7 +169,8 @@ def collect_metrics(classifier, fails): for q in classifier.queries: start = time.time() results = classifier.hits_by_query(q['query'], size=30000) - LOG.debug("Took %d seconds to run (uncached) query for bug %s" % + log = logging.getLogger('recheckwatchbot') + log.debug("Took %d seconds to run (uncached) query for bug %s" % (time.time() - start, q['bug'])) hits = _status_count(results) data[q['bug']] = { diff --git a/elastic_recheck/elasticRecheck.py b/elastic_recheck/elasticRecheck.py index 78c7ff59..95fd86b8 100644 --- a/elastic_recheck/elasticRecheck.py +++ b/elastic_recheck/elasticRecheck.py @@ -25,8 +25,6 @@ import elastic_recheck.loader as loader import elastic_recheck.query_builder as qb from elastic_recheck import results -LOG = logging.getLogger("recheckwatchbot") - ES_URL = "http://logstash.openstack.org/elasticsearch" @@ -184,6 +182,9 @@ class Stream(object): Monitors gerrit stream looking for tempest-devstack failures. """ + + log = logging.getLogger("recheckwatchbot") + def __init__(self, user, host, key, thread=True): port = 29418 self.gerrit = gerritlib.gerrit.Gerrit(host, user, port, key) @@ -195,20 +196,14 @@ class Stream(object): def parse_jenkins_failure(event): """Is this comment a jenkins failure comment.""" if event.get('type', '') != 'comment-added': - LOG.debug("Skipping event type %s" % event.get('type', '')) return False username = event['author'].get('username', '') if (username != 'jenkins'): - LOG.debug("Skipping comment from %s" % - event['author'].get('username', '')) return False if not ("Build failed. For information on how to proceed" in event['comment']): - change = event['change']['number'] - rev = event['patchSet']['number'] - LOG.debug("Skipping passing job %s,%s" % (change, rev)) return False failed_tests = [] @@ -226,8 +221,8 @@ class Stream(object): (name, change, patch, short_build_uuid)) raise ConsoleNotReady(msg) else: - LOG.debug("Console ready for %s %s,%s,%s" % - (name, change, patch, short_build_uuid)) + self.log.debug("Console ready for %s %s,%s,%s" % + (name, change, patch, short_build_uuid)) def _has_required_files(self, change, patch, name, short_build_uuid): query = qb.files_ready(change, patch, name, short_build_uuid) @@ -259,14 +254,14 @@ class Stream(object): break except ConsoleNotReady as e: - LOG.debug(e.msg) + self.log.debug(e.msg) time.sleep(SLEEP_TIME) continue except pyelasticsearch.exceptions.InvalidJsonResponseError: # If ElasticSearch returns an error code, sleep and retry # TODO(jogo): if this works pull out search into a helper # function that does this. - LOG.exception( + self.log.exception( "Elastic Search not responding on attempt %d" % i) time.sleep(NUMBER_OF_RETRIES) continue @@ -278,7 +273,7 @@ class Stream(object): job.short_build_uuid)) raise ResultTimedOut(msg) - LOG.debug( + self.log.debug( "Found hits for change_number: %s, patch_number: %s" % (event.change, event.rev)) @@ -288,7 +283,7 @@ class Stream(object): self._has_required_files( event.change, event.rev, job.name, job.short_build_uuid) - LOG.info( + self.log.info( "All files present for change_number: %s, patch_number: %s" % (event.change, event.rev)) time.sleep(10) @@ -304,7 +299,7 @@ class Stream(object): raise ResultTimedOut(msg) def get_failed_tempest(self): - LOG.debug("entering get_failed_tempest") + self.log.debug("entering get_failed_tempest") while True: event = self.gerrit.getEvent() @@ -319,9 +314,9 @@ class Stream(object): if not fevent.is_openstack_project(): continue - LOG.info("Looking for failures in %s,%s on %s" % - (fevent.change, fevent.rev, - ", ".join(fevent.failed_job_names()))) + self.log.info("Looking for failures in %s,%s on %s" % + (fevent.change, fevent.rev, + ", ".join(fevent.failed_job_names()))) if self._does_es_have_data(fevent): return fevent @@ -346,8 +341,8 @@ You have some unrecognized errors.""" message = ("I noticed jenkins failed, refer to: " "https://wiki.openstack.org/wiki/" "GerritJenkinsGithub#Test_Failures") - LOG.debug("Compiled comment for commit %s:\n%s" % - (event.name(), message)) + self.log.debug("Compiled comment for commit %s:\n%s" % + (event.name(), message)) if not debug: self.gerrit.review(event.project, event.name(), message) @@ -358,6 +353,8 @@ class Classifier(): Given a change and revision, query logstash with a list of known queries that are mapped to specific bugs. """ + log = logging.getLogger("recheckwatchbot") + queries = None def __init__(self, queries_dir): @@ -375,12 +372,12 @@ class Classifier(): def classify(self, change_number, patch_number, short_build_uuid, skip_resolved=True): """Returns either empty list or list with matched bugs.""" - LOG.debug("Entering classify") + self.log.debug("Entering classify") #Reload each time self.queries = loader.load(self.queries_dir, skip_resolved) bug_matches = [] for x in self.queries: - LOG.debug( + self.log.debug( "Looking for bug: https://bugs.launchpad.net/bugs/%s" % x['bug']) query = qb.single_patch(x['query'], change_number, patch_number, diff --git a/elastic_recheck/loader.py b/elastic_recheck/loader.py index 7129f283..84ade1c6 100644 --- a/elastic_recheck/loader.py +++ b/elastic_recheck/loader.py @@ -18,12 +18,9 @@ A set of utility methods to load queries for elastic recheck. """ import glob -import logging import os.path import yaml -LOG = logging.getLogger('recheckwatchbot') - def load(directory='queries'): """Load queries from a set of yaml files in a directory."""