X-Git-Url: https://git.realraum.at/?a=blobdiff_plain;f=update-web-status.py;h=7c297ce24322b16a1472bdd066104c1ed81b9454;hb=5b856a88fc79e962229d1c8ec58d196ed17b00d0;hp=7e928bb9cd5564c6ca8e319d21ddccee232a46fd;hpb=ed5e7e306b88e1662073e0db1da6e521b8ab711c;p=svn42.git diff --git a/update-web-status.py b/update-web-status.py index 7e928bb..7c297ce 100755 --- a/update-web-status.py +++ b/update-web-status.py @@ -5,6 +5,7 @@ import os.path import sys #import threading import logging +import logging.handlers import urllib import time import signal @@ -14,22 +15,24 @@ import subprocess import types import ConfigParser -logging.basicConfig( - level=logging.INFO, - #level=f, - #level=logging.DEBUG, - filename='/var/log/tmp/update-web-status.log', - format="%(asctime)s %(message)s", - datefmt="%Y-%m-%d %H:%M:%S" - ) +logger = logging.getLogger() +logger.setLevel(logging.INFO) +lh_syslog = logging.handlers.SysLogHandler(address="/dev/log",facility=logging.handlers.SysLogHandler.LOG_LOCAL2) +lh_syslog.setFormatter(logging.Formatter('update-web-status.py: %(levelname)s %(message)s')) +logger.addHandler(lh_syslog) +lh_stderr = logging.StreamHandler() +logger.addHandler(lh_stderr) class UWSConfig: def __init__(self,configfile=None): self.configfile=configfile self.config_parser=ConfigParser.ConfigParser() - self.config_parser.add_section('url') - self.config_parser.set('url','open','https://www.realraum.at/cgi/status.cgi?pass=jako16&set=%3Chtml%3E%3Cbody%20bgcolor=%22lime%22%3E%3Ccenter%3E%3Cb%3ET%26uuml%3Br%20ist%20Offen%3C/b%3E%3C/center%3E%3C/body%3E%3C/html%3E') - self.config_parser.set('url','closed','https://www.realraum.at/cgi/status.cgi?pass=jako16&set=%3Chtml%3E%3Cbody%20bgcolor=%22red%22%3E%3Cb%3E%3Ccenter%3ET%26uuml%3Br%20ist%20Geschlossen%3C/center%3E%3C/b%3E%3C/body%3E%3C/html%3E') + 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.add_section('debug') + self.config_parser.set('debug','enabled',"False") self.config_mtime=0 if not self.configfile is None: try: @@ -41,20 +44,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: @@ -136,16 +144,23 @@ def popenTimeout2(cmd, pinput, returncode_ok=[0], ptimeout=21): def touchURL(url): try: f = urllib.urlopen(url) - f.read() + rq_response = f.read() + logging.debug("touchURL: Response "+rq_response) f.close() + return rq_response except Exception, e: - logging.error("tochURL: "+str(e)) + logging.error("touchURL: "+str(e)) +def setRealraumHtmlStatus(htmlcode): + htmlcode_escaped = re.sub(r'[^\x30-\x39\x41-\x7E]',lambda m:"%%%x"%ord(m.group(0)),htmlcode) + if touchURL(uwscfg.web_cgiuri + htmlcode_escaped) != htmlcode: + logging.error("setRealraumHtmlStatus: Error setting Status, Output does not match Input") + def displayOpen(): - touchURL(uwscfg.url_open) + setRealraumHtmlStatus(uwscfg.web_htmlopen) def displayClosed(): - touchURL(uwscfg.url_closed) + setRealraumHtmlStatus(uwscfg.web_htmlclosed) def exitHandler(signum, frame): logging.info("Update-Web-Status stopping") @@ -176,12 +191,17 @@ if len(sys.argv) > 2: else: uwscfg = UWSConfig() -sockhandle = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) +#socket.setdefaulttimeout(10.0) #affects all new Socket Connections (urllib as well) RE_STATUS = re.compile(r'Status: (\w+), idle') RE_REQUEST = re.compile(r'Request: (\w+) (?:Card )?(.+)') RE_ERROR = re.compile(r'Error: (.+)') while True: try: + if not os.path.exists(socketfile): + logging.debug("Socketfile '%s' not found, waiting 5 secs" % socketfile) + time.sleep(5) + continue + sockhandle = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) sockhandle.connect(socketfile) conn = os.fdopen(sockhandle.fileno()) sockhandle.send("listen\n") @@ -192,6 +212,9 @@ while True: uwscfg.checkConfigUpdates() + if line == "": + raise Exception("EOF on Socket, daemon seems to have quit") + m = RE_STATUS.match(line) if not m is None: status = m.group(1) @@ -212,12 +235,9 @@ while True: 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) -