diff --git a/TuxNotifier/src/RemoteListener.py b/TuxNotifier/src/RemoteListener.py new file mode 100644 index 0000000..83fef88 --- /dev/null +++ b/TuxNotifier/src/RemoteListener.py @@ -0,0 +1,30 @@ +''' +Created on May 2, 2011 + +@author: marthyn +''' +import time +import threading +class RemoteListener(threading.Thread): + + def __init__(self, tux, runner): + threading.Thread.__init__(self) + self.tux = tux + self.runner = runner + self.comList = {"K_1":"ideal", "K_2":"live", "K_3":"independent", "K_4":"order", "K_5":"payment", "K_6":"test", "K_STANDBY":"stop"} + + + def run(self): + self.run = 'true' + self.stateOld = '' + while self.run=='true': + self.state = self.tux.tux.remote.getState() + if self.state != self.stateOld: + if self.state in self.comList: + self.runner.commands.put(self.comList[self.state]) + + time.sleep(0.01) + self.stateOld = self.state + + def stop(self): + self.run = 'false' \ No newline at end of file diff --git a/TuxNotifier/src/Runner.py b/TuxNotifier/src/Runner.py index 52c5f3b..fc1270e 100644 --- a/TuxNotifier/src/Runner.py +++ b/TuxNotifier/src/Runner.py @@ -4,6 +4,7 @@ @author: marthyn ''' import threading +import Queue class Runner( threading.Thread ): ''' @@ -13,27 +14,29 @@ class Runner( threading.Thread ): def __init__(self, tux): threading.Thread.__init__(self) + self.commands = Queue.Queue() self.myTux = tux def setListeners(self, listeners): self.listeners = listeners - + + def setRemote(self, remote): + self.remote = remote + + def setText(self, text): + self.text = text + def run(self): while True: - command = self.myTux.commands.get() + command = self.commands.get() if command == "stop": self.myTux.disconnect() for listener in self.listeners: listener.stop() return - if command == "left": - self.myTux.links() - if command == "right": - self.myTux.rechts() if command == "say": - self.myTux.speak() + self.myTux.speak(self.text) if self.listeners.has_key(command): self.listeners[command].getLastBuildStatus() - print command \ No newline at end of file diff --git a/TuxNotifier/src/Tux.py b/TuxNotifier/src/Tux.py index 829358d..644de68 100644 --- a/TuxNotifier/src/Tux.py +++ b/TuxNotifier/src/Tux.py @@ -14,75 +14,19 @@ class Tux( threading.Thread ): def __init__(self, host, port): threading.Thread.__init__(self) - self.commands = Queue.Queue() self.tux = TuxAPI(host, port) time.sleep(0.5) - - def setListeners(self, listeners): - self.listeners = listeners - - def setMessage(self, message): - self.message = message - - def links(self): - self.tux.spinning.leftOn(1.0, 5) - - def rechts(self): - self.tux.spinning.rightOn(1.0, 5) - + def disconnect(self): self.tux.server.destroy() self.limit = 0 - def speak(self): + def speak(self, text): self.tux.mouth.open() self.tux.eyes.open() - self.tux.tts.speak(self.message) + self.tux.tts.speak(text) self.tux.mouth.open() - self.tux.eyes.close() - - def stop(self): - self.commands.put('stop') - - def listen(self): - self.state = self.tux.remote.getState() - if self.state == "K_LEFT": - if(self.state != self.stateOld): - self.commands.put('left') - if self.state == "K_1": - if(self.state != self.stateOld): - self.commands.put('ideal') - if self.state == "K_2": - if(self.state != self.stateOld): - self.commands.put('live') - if self.state == "K_3": - if(self.state != self.stateOld): - self.commands.put('independent') - if self.state == "K_4": - if(self.state != self.stateOld): - self.commands.put('order') - if self.state == "K_5": - if(self.state != self.stateOld): - self.commands.put('payment') - if self.state == "K_6": - if(self.state != self.stateOld): - self.commands.put('test') - - if self.state == "K_RIGHT": - if(self.state != self.stateOld): - self.commands.put('right') - - if self.state == "K_STANDBY": - if(self.state != self.stateOld): - self.commands.put('stop') - return - - if self.state == "K_OK": - - self.commands.put('say') - - time.sleep(0.01) - self.stateOld = self.state + self.tux.eyes.close() def connect(self): self.tux.server.connect(CLIENT_LEVEL_FREE, "TuxShell", "NoPasswd") diff --git a/TuxNotifier/src/XmlListener.py b/TuxNotifier/src/XmlListener.py index fa29939..4c9c3b3 100644 --- a/TuxNotifier/src/XmlListener.py +++ b/TuxNotifier/src/XmlListener.py @@ -9,14 +9,10 @@ import re class XmlListener(threading.Thread): - ''' - classdocs - ''' - - def __init__(self, tux, url): + def __init__(self, runner, url): threading.Thread.__init__(self) - self.myTux = tux + self.runner = runner self.url=url def parse(self): @@ -39,10 +35,10 @@ def run(self): timestamp = timestamp[-19:] self.date = timestamp.split('_')[0] self.time = timestamp.split('_')[1].replace('-', ':') - self.curString = "Name %s.\r Build#%s.\r State: %s.\r Date: %s.\r Time: %s." % (self.name, self.number, self.state, self.date, self.time) + self.curString = "Name %s.\rBuild#%s.\rState: %s.\rDate: %s.\rTime: %s." % (self.name, self.number, self.state, self.date, self.time) if self.number != self.oldNumber and self.oldNumber != "" : - self.myTux.setMessage(str(self.curString)) - self.myTux.commands.put('say') + self.runner.setText(str("Status of build #"+self.number+" of job "+self.name+" is "+self.state)) + self.runner.commands.put('say') print self.curString if 'broken' in self.state: self.countFailures+=1 @@ -54,8 +50,9 @@ def stop(self): self.run = "false" def getLastBuildStatus(self): - self.myTux.setMessage(str("Last build of job "+self.name+" was "+self.state)) - self.myTux.commands.put('say') + self.runner.setText(str("Last build of job "+self.name+" was "+self.state)) + print self.curString + self.runner.commands.put('say') \ No newline at end of file diff --git a/TuxNotifier/src/main.py b/TuxNotifier/src/main.py index 4e92236..2f96218 100644 --- a/TuxNotifier/src/main.py +++ b/TuxNotifier/src/main.py @@ -6,29 +6,28 @@ from Tux import * from Runner import * from XmlListener import * +from RemoteListener import * if __name__ == '__main__': myTux = Tux("127.0.0.1", 54321) myTux.connect() - IdealListener = XmlListener( myTux, "http://www.wtstest.com:8080/job/Ideal/rssAll" ) - IndependentListener = XmlListener( myTux, "http://www.wtstest.com:8080/job/Independent/rssAll") - LiveListener = XmlListener( myTux, "http://www.wtstest.com:8080/job/Live/rssAll") - OrderListener = XmlListener( myTux, "http://www.wtstest.com:8080/job/Order/rssAll") - PaymentListener = XmlListener( myTux, "http://www.wtstest.com:8080/job/Payment/rssAll") - TestjobListener = XmlListener( myTux, "http://www.wtstest.com:8080/job/Test%20job/rssAll") - listeners = {'ideal':IdealListener, 'independent':IndependentListener, 'live':LiveListener, 'order':OrderListener, 'payment':PaymentListener, 'test':TestjobListener} runner = Runner(myTux) + remote = RemoteListener(myTux, runner) + + + IdealListener = XmlListener( runner, "http://www.wtstest.com:8080/job/Ideal/rssAll" ) + IndependentListener = XmlListener( runner, "http://www.wtstest.com:8080/job/Independent/rssAll") + LiveListener = XmlListener( runner, "http://www.wtstest.com:8080/job/Live/rssAll") + OrderListener = XmlListener( runner, "http://www.wtstest.com:8080/job/Order/rssAll") + PaymentListener = XmlListener( runner, "http://www.wtstest.com:8080/job/Payment/rssAll") + TestjobListener = XmlListener( runner, "http://www.wtstest.com:8080/job/Test%20job/rssAll") + listeners = {'ideal':IdealListener, 'independent':IndependentListener, 'live':LiveListener, 'order':OrderListener, 'payment':PaymentListener, 'test':TestjobListener} + + runner.setRemote(remote) runner.setListeners(listeners) + remote.start() runner.start() - myTux.setListeners(listeners) + for listener in listeners: listeners.get(listener).start() - #IdealListener.start() - #IndependentListener.start() - #LiveListener.start() - #OrderListener.start() - #PaymentListener.start() - - myTux.listen() - myTux.stop() \ No newline at end of file