Index: third_party/buildbot_7_12/buildbot/scripts/logwatcher.py |
diff --git a/third_party/buildbot_7_12/buildbot/scripts/logwatcher.py b/third_party/buildbot_7_12/buildbot/scripts/logwatcher.py |
deleted file mode 100644 |
index 20fb13292b7b2bc251c79e7e3e445986da800fcc..0000000000000000000000000000000000000000 |
--- a/third_party/buildbot_7_12/buildbot/scripts/logwatcher.py |
+++ /dev/null |
@@ -1,101 +0,0 @@ |
- |
-import os |
-from twisted.python.failure import Failure |
-from twisted.internet import defer, reactor, protocol, error |
-from twisted.protocols.basic import LineOnlyReceiver |
- |
-class FakeTransport: |
- disconnecting = False |
- |
-class BuildmasterTimeoutError(Exception): |
- pass |
-class BuildslaveTimeoutError(Exception): |
- pass |
-class ReconfigError(Exception): |
- pass |
-class BuildSlaveDetectedError(Exception): |
- pass |
- |
-class TailProcess(protocol.ProcessProtocol): |
- def outReceived(self, data): |
- self.lw.dataReceived(data) |
- def errReceived(self, data): |
- print "ERR: '%s'" % (data,) |
- |
- |
-class LogWatcher(LineOnlyReceiver): |
- POLL_INTERVAL = 0.1 |
- TIMEOUT_DELAY = 10.0 |
- delimiter = os.linesep |
- |
- def __init__(self, logfile): |
- self.logfile = logfile |
- self.in_reconfig = False |
- self.transport = FakeTransport() |
- self.pp = TailProcess() |
- self.pp.lw = self |
- self.processtype = "buildmaster" |
- self.timer = None |
- |
- def start(self): |
- # If the log file doesn't exist, create it now. |
- if not os.path.exists(self.logfile): |
- open(self.logfile, 'a').close() |
- |
- # return a Deferred that fires when the reconfig process has |
- # finished. It errbacks with TimeoutError if the finish line has not |
- # been seen within 10 seconds, and with ReconfigError if the error |
- # line was seen. If the logfile could not be opened, it errbacks with |
- # an IOError. |
- self.p = reactor.spawnProcess(self.pp, "/usr/bin/tail", |
- ("tail", "-f", "-n", "0", self.logfile), |
- env=os.environ, |
- ) |
- self.running = True |
- d = defer.maybeDeferred(self._start) |
- return d |
- |
- def _start(self): |
- self.d = defer.Deferred() |
- self.timer = reactor.callLater(self.TIMEOUT_DELAY, self.timeout) |
- return self.d |
- |
- def timeout(self): |
- self.timer = None |
- if self.processtype == "buildmaster": |
- e = BuildmasterTimeoutError() |
- else: |
- e = BuildslaveTimeoutError() |
- self.finished(Failure(e)) |
- |
- def finished(self, results): |
- try: |
- self.p.signalProcess("KILL") |
- except error.ProcessExitedAlready: |
- pass |
- if self.timer: |
- self.timer.cancel() |
- self.timer = None |
- self.running = False |
- self.in_reconfig = False |
- self.d.callback(results) |
- |
- def lineReceived(self, line): |
- if not self.running: |
- return |
- if "Log opened." in line: |
- self.in_reconfig = True |
- if "loading configuration from" in line: |
- self.in_reconfig = True |
- if "Creating BuildSlave" in line: |
- self.processtype = "buildslave" |
- |
- if self.in_reconfig: |
- print line |
- |
- if "message from master: attached" in line: |
- return self.finished("buildslave") |
- if "I will keep using the previous config file" in line: |
- return self.finished(Failure(ReconfigError())) |
- if "configuration update complete" in line: |
- return self.finished("buildmaster") |