broken logs after 9 upgrade
Greg MacDonald
gmacdonald at trionworlds.com
Thu Oct 15 19:12:28 UTC 2015
Hi Everyone,
So after I upgraded to 0.9.0b2, my custom ObservedShellCommand class broke. The logs show up blank. I added some test output but it just outputs a single zero character. Any ideas? I'm not sure where to start looking. Thx!
-Greg
class _LogObserver(util.LogLineObserver):
def __init__(self, warningPatterns=None, errorPatterns=None, failImmediately=True):
util.LogLineObserver.__init__(self)
self.step = None
self.warningPatterns = [compile(i, IGNORECASE) for i in warningPatterns] if warningPatterns else []
self.errorPatterns = [compile(i, IGNORECASE) for i in errorPatterns] if errorPatterns else []
self.failImmediately = failImmediately
self.warnings = []
self.errors = []
self._log = None
@property
def log(self):
return self.step.observerLog
def _processLine(self, line):
if any([i.search(line) for i in self.errorPatterns]):
self.errors.append(line)
yield self.log.addStdout(unicode('Error: ' + line))
if self.failImmediately:
yield self.log.addStdout(u'Aborting step from observed errors.')
# TODO: Interrupt step cleanly.
raise buildstep.BuildStepFailed('Aborting step from observed errors.')
elif any([i.search(line) for i in self.warningPatterns]):
self.warnings.append(line)
yield self.log.addStdout(unicode('Warning: ' + line))
def outLineReceived(self, line):
self._processLine(line)
def errLineReceived(self, line):
self._processLine(line)
def getResults(self):
if len(self.errors) > 0:
return FAILURE
if len(self.warnings) > 0:
return WARNINGS
return None
class ObservedShellCommand(buildstep.ShellMixin, buildstep.BuildStep):
"""Detects errors and warnings in stdio of a shell command."""
name = "observed_shell"
def __init__(self, warningPatterns=None, errorPatterns=None, failImmediately=True, **kwargs):
kwargs = self.setupShellMixin(kwargs)
buildstep.BuildStep.__init__(self, **kwargs)
self.observerLog = None
self.logObserver = _LogObserver(warningPatterns, errorPatterns, failImmediately)
self.cmd = None
@defer.inlineCallbacks
def run(self):
self.observerLog = yield self.addLog('observer')
self.addLogObserver('stdio', self.logObserver)
yield self.observerLog.addStdout(u'Observation log output test.')
cmd = yield self.makeRemoteShellCommand()
self.cmd = cmd
yield self.runCommand(cmd)
if cmd.results() in [FAILURE, EXCEPTION]:
results = cmd.results()
else:
observedResults = self.logObserver.getResults()
results = observedResults if observedResults else cmd.results()
defer.returnValue(results)
def interrupt(self, reason):
buildstep.BuildStep.interrupt(self, reason)
if self.cmd:
d = self.cmd.interrupt(reason)
d.addErrback(log.err, 'while interrupting command')
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.buildbot.net/pipermail/users/attachments/20151015/e5a31c77/attachment.html>
More information about the users
mailing list