X-Git-Url: https://git.realraum.at/?p=svn42.git;a=blobdiff_plain;f=update-web-status.py;h=e1e24126eb068e6da95cf45d5a765569b7423388;hp=19bda772420f536c0ed77d0df498e93e5f80a64a;hb=9b57ad36fa772a94f8f38321a88f2b1df1818a51;hpb=bea2d14d1a0f5f1b18c0dab0b204aa2d9b4b1d78 diff --git a/update-web-status.py b/update-web-status.py index 19bda77..e1e2412 100755 --- a/update-web-status.py +++ b/update-web-status.py @@ -29,8 +29,15 @@ class UWSConfig: self.config_parser=ConfigParser.ConfigParser() self.config_parser.add_section('web') self.config_parser.set('web','cgiuri','https://www.realraum.at/cgi/status.cgi?pass=jako16&set=') - self.config_parser.set('web','htmlopen','
Tür ist Offen
') - self.config_parser.set('web','htmlclosed','
Tür ist Geschlossen
') + #~ self.config_parser.set('web','htmlopen','
Tür ist Offen
') + #~ self.config_parser.set('web','htmlclosed','
Tür ist Geschlossen
') + self.config_parser.set('web','htmlbored','
Panic! Present&Bored
') + self.config_parser.set('web','htmlopen','
Leute Anwesend
') + self.config_parser.set('web','htmlclosed','
Keiner Da
') + self.config_parser.add_section('debug') + self.config_parser.set('debug','enabled',"False") + self.config_parser.add_section('tracker') + self.config_parser.set('tracker','socket',"/var/run/tuer/presence.socket") self.config_mtime=0 if not self.configfile is None: try: @@ -42,20 +49,25 @@ class UWSConfig: self.checkConfigUpdates() def checkConfigUpdates(self): + global logger if self.configfile is None: return logging.debug("Checking Configfile mtime: "+self.configfile) try: mtime = os.path.getmtime(self.configfile) - except IOError: + except (IOError,OSError): return if self.config_mtime < mtime: logging.debug("Reading Configfile") try: self.config_parser.read(self.configfile) self.config_mtime=os.path.getmtime(self.configfile) - except ConfigParser.ParsingError, pe_ex: + except (ConfigParser.ParsingError, IOError), pe_ex: logging.error("Error parsing Configfile: "+str(pe_ex)) + if self.config_parser.get('debug','enabled') == "True": + logger.setLevel(logging.DEBUG) + else: + logger.setLevel(logging.INFO) def writeConfigFile(self): if self.configfile is None: @@ -154,7 +166,10 @@ def displayOpen(): def displayClosed(): setRealraumHtmlStatus(uwscfg.web_htmlclosed) - + +def displayPanic(): + setRealraumHtmlStatus(uwscfg.web_htmlbored) + def exitHandler(signum, frame): logging.info("Update-Web-Status stopping") try: @@ -175,58 +190,76 @@ signal.signal(signal.SIGQUIT, exitHandler) logging.info("Door Status Listener started") if len(sys.argv) > 1: - socketfile = sys.argv[1] -else: - socketfile = "/var/run/tuer/door_cmd.socket" - -if len(sys.argv) > 2: - uwscfg = UWSConfig(sys.argv[2]) + uwscfg = UWSConfig(sys.argv[1]) else: uwscfg = UWSConfig() -socket.setdefaulttimeout(10.0) #affects all new Socket Connections (urllib as well) -sockhandle = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) -RE_STATUS = re.compile(r'Status: (\w+), idle') -RE_REQUEST = re.compile(r'Request: (\w+) (?:Card )?(.+)') -RE_ERROR = re.compile(r'Error: (.+)') +if len(sys.argv) > 2: + if sys.argv[2] == "open": + displayOpen() + elif sys.argv[2] == "closed": + displayClosed() + elif sys.argv[2] == "panic": + displayPanic() + print "Satus submitted to Web, now exiting..." + sys.exit(0) + +#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?') while True: try: - sockhandle.connect(socketfile) + if not os.path.exists(uwscfg.tracker_socket): + logging.debug("Socketfile '%s' not found, waiting 5 secs" % uwscfg.tracker_socket) + time.sleep(5) + continue + sockhandle = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) + sockhandle.connect(uwscfg.tracker_socket) conn = os.fdopen(sockhandle.fileno()) - sockhandle.send("listen\n") - sockhandle.send("status\n") + #sockhandle.send("listen\n") + #sockhandle.send("status\n") + last_status=None + unixts_panic_button=None while True: line = conn.readline() logging.debug("Got Line: " + line) uwscfg.checkConfigUpdates() - m = RE_STATUS.match(line) + if line == "": + raise Exception("EOF on Socket, daemon seems to have quit") + + m = RE_PRESENCE.match(line) if not m is None: status = m.group(1) - if status == "opened": + last_status=(status == "yes") + unixts_panic_button=None + if last_status: + displayOpen() + else: + displayClosed() + continue + + m = RE_BUTTON.match(line) + if not m is None: + displayPanic() + unixts_panic_button=time.time() + continue + + if not last_status is None and not unixts_panic_button is None and time.time() - unixts_panic_button > 3600: + unixts_panic_button=None + if last_status: displayOpen() - if status == "closed": + else: displayClosed() - #~ m = RE_REQUEST.match(line) - #~ if not m is None: - #~ #(rq_action,rq_by) = m.group(1,2) - #~ action_by = " von " + m.group(2) - #~ else: - #~ action_by = "" - #~ m = RE_ERROR.match(line) - #~ if not m is None: - #~ errorstr = m.group(1) - #~ #handle Error + continue + except Exception, ex: logging.error("main: "+str(ex)) try: - conn.close() - except: - pass - try: sockhandle.close() except: pass + conn=None + sockhandle=None time.sleep(5) -