X-Git-Url: https://git.realraum.at/?a=blobdiff_plain;ds=sidebyside;f=play-sound-status.py;h=ca495869366d3040045e6d918cc574a99c692610;hb=a319ee88b0505b094445cdb1491afb61f766caf4;hp=2e6b34c7087d634f042ac8316ab4772608940f5e;hpb=0e08ee9d35c5cf9e618280144892a1798fb8a8ad;p=svn42.git diff --git a/play-sound-status.py b/play-sound-status.py index 2e6b34c..ca49586 100755 --- a/play-sound-status.py +++ b/play-sound-status.py @@ -28,6 +28,8 @@ class UWSConfig: def __init__(self,configfile=None): self.configfile=configfile self.config_parser=ConfigParser.ConfigParser() + #make option variable names case sensitive + self.config_parser.optionxform = str self.config_parser.add_section('cmdlog') self.config_parser.set('cmdlog','cmd',"logger %ARG%") self.config_parser.set('cmdlog','timeout',"2.0") @@ -64,12 +66,16 @@ class UWSConfig: self.config_parser.add_section('gladosreplaced') self.config_parser.set('gladosreplaced','arg',"/home/glados_replaced_with_life_fire.mp3") self.config_parser.set('gladosreplaced','type',"slugplaymp3") + self.config_parser.add_section('nothing') + self.config_parser.set('nothing','type',"nothing") self.config_parser.add_section('mapping') - self.config_parser.set('mapping','default',"halflife2") - self.config_parser.set('mapping','panic',"monkeyscream") + self.config_parser.set('mapping','DEFAULT',"halflife2") + self.config_parser.set('mapping','PANIC',"monkeyscream") + self.config_parser.set('mapping','ERROR',"nothing") self.config_parser.set('mapping','stratos',"tardis") self.config_parser.set('mapping','xro',"gladosreplaced") self.config_parser.set('mapping','equinox',"gladosparty") + self.config_parser.set('mapping','Rachel',"nothing") self.config_parser.add_section('debug') self.config_parser.set('debug','enabled',"False") self.config_parser.add_section('tracker') @@ -138,13 +144,14 @@ class UWSConfig: -def runRemoteCommand(config,args=[]): +def runRemoteCommand(remote_host,remote_shell,args=[]): global sshp,uwscfg sshp = None try: - cmd = "ssh -i /flash/tuer/id_rsa -o PasswordAuthentication=no -o StrictHostKeyChecking=no %RHOST% %RSHELL%".replace("%RHOST%",uwscfg.getValue(config+"_remote_host")).replace("%RSHELL%",uwscfg.getValue(config+"_remote_shell")).replace("%ARG%"," ".join(args)).split(" ") - logging.debug("runRemoteCommand: Executing: "+" ".join(cmd)) - sshp = subprocess.Popen(cmd, bufsize=1024, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=False) + cmd = "ssh -i /flash/tuer/id_rsa -o PasswordAuthentication=no -o StrictHostKeyChecking=no %RHOST% %RSHELL%" + cmd = cmd.replace("%RHOST%",remote_host).replace("%RSHELL%",remote_shell).replace("%ARG%", " ".join(args)) + logging.debug("runRemoteCommand: Executing: "+cmd) + sshp = subprocess.Popen(cmd.split(" "), bufsize=1024, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=False) logging.debug("runRemoteCommand: pid %d: running=%d" % (sshp.pid,sshp.poll() is None)) if not sshp.poll() is None: logging.error("runRemoteCommand: subprocess %d not started ?, returncode: %d" % (sshp.pid,sshp.returncode)) @@ -167,16 +174,14 @@ def runRemoteCommand(config,args=[]): subprocess.call(["kill","-9",str(sshp.pid)]) time.sleep(5) -def runShellCommand(config,args=[]): +def runShellCommand(cmd,ptimeout,stdinput,args=[]): global uwscfg - cmd = uwscfg.getValue(config+"_cmd").replace("%ARG%"," ".join(args)) - ptimeout = uwscfg.getValue(config+"_timeout") - stdinput = uwscfg.getValue(config+"_stdinput") + cmd = cmd.replace("%ARG%"," ".join(args)) if ptimeout is None or float(ptimeout) > 45: ptimeout = 45 popenTimeout2(cmd,stdinput,float(ptimeout)) -def executeAction(action_name, user, args=[]): +def executeAction(action_name, args=[]): if action_name is None: logging.error("executeAction: action_name is None") return False @@ -185,7 +190,7 @@ def executeAction(action_name, user, args=[]): logging.error("executeAction: action %s not found or has no type" % action_name) return False action_delay=uwscfg.getValue(action_name+"_delay") - logging.debug("executeAction, user=%s, action_name=%s, action_type=%s, action_delay=%s" % (user,config,action_type,action_delay)) + logging.debug("executeAction, action_name=%s, action_type=%s, action_delay=%s" % (action_name,action_type,action_delay)) if not action_delay is None: time.sleep(float(action_delay)) @@ -193,21 +198,24 @@ def executeAction(action_name, user, args=[]): if not action_arg is None: args += [action_arg] + #"registered" actions if action_type == "remotecmd": - return runRemoteCommand(config,args) + return runRemoteCommand(uwscfg.getValue(action_name+"_remote_host"), uwscfg.getValue(action_name+"_remote_shell"), args) elif action_type == "shellcmd": - return runShellCommand(config,args) + return runShellCommand(cmd=uwscfg.getValue(action_name+"_cmd"), ptimeout=uwscfg.getValue(action_name+"_timeout"), stdinput=uwscfg.getValue(action_name+"_stdinput"), args=args) + elif action_type == "nothing": + return True else: return executeAction(action_type,args) -def playThemeOf(user): +def playThemeOf(user,fallback_default): global uwscfg uwscfg.checkConfigUpdates() - useraction=None config=uwscfg.getValue("mapping_"+str(user)) if config is None: - config=uwscfg.getValue("mapping_default") - executeAction(config,user) + config=uwscfg.getValue("mapping_"+str(fallback_default)) + logging.debug("playThemeOf: action for user %s: %s" % (user,config)) + executeAction(config,[]) def popenTimeout1(cmd, pinput, returncode_ok=[0], ptimeout = 20.0, pcheckint = 0.25): logging.debug("popenTimeout1: starting: " + cmd) @@ -292,7 +300,9 @@ else: #socket.setdefaulttimeout(10.0) #affects all new Socket Connections (urllib as well) RE_PRESENCE = re.compile(r'Presence: (yes|no)(?:, (opened|closed), (.+))?') RE_BUTTON = re.compile(r'PanicButton|button\d?') -RE_REQUEST = re.compile(r'Request: (\w+) (?:(Card|Phone) )?(.+)') +#RE_REQUEST = re.compile(r'Request: (\w+) (?:(Card|Phone) )?(.+)') +RE_ERROR = re.compile(r'Error: (.+)') + while True: try: if not os.path.exists(uwscfg.tracker_socket): @@ -321,13 +331,18 @@ while True: last_status=(status == "yes") unixts_panic_button=None if last_status: - playThemeOf(user=m.group(3)) + playThemeOf(user=m.group(3), fallback_default="DEFAULT") continue m = RE_BUTTON.match(line) if not m is None: - playThemeOf(user="panic") - continue + playThemeOf(user="PANIC", fallback_default="nothing") + continue + + m = RE_ERROR.match(line) + if not m is None: + playThemeOf(user="ERROR", fallback_default="nothing") + continue except Exception, ex: logging.error("main: "+str(ex))