From: Bernhard Tittelbach Date: Fri, 11 Sep 2009 01:42:48 +0000 (+0000) Subject: update-web-status.py gets a config file X-Git-Url: https://git.realraum.at/?p=svn42.git;a=commitdiff_plain;h=fe1fb5caee5453ccba502b9ef8550b2186f0dc96 update-web-status.py gets a config file --- diff --git a/update-web-status.py b/update-web-status.py index 437021a..767a910 100755 --- a/update-web-status.py +++ b/update-web-status.py @@ -1,6 +1,7 @@ #!/usr/bin/python # -*- coding: utf-8 -*- import os +import os.path import sys #import threading import logging @@ -11,24 +12,81 @@ import re import socket import subprocess import types +import ConfigParser #logging.basicConfig(level=logging.INFO,filename='/var/log/tmp/tuer.log',format="%(asctime)s %(message)s",datefmt="%Y-%m-%d %H:%M") logging.basicConfig( - level=logging.ERROR, + level=logging.ERROR, + #level=logging.DEBUG, format="%(asctime)s %(message)s", datefmt="%Y-%m-%d %H:%M" ) -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' -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' -SENDXMPP_RECIPIENTS_DEBUG = 'xro@jabber.tittelbach.at' -SENDXMPP_RECIPIENTS_NORMAL = ['xro@jabber.tittelbach.at', 'otti@wirdorange.org'] -SENDXMPP_RECIPIENTS_NOOFFLINE = 'the-equinox@jabber.org' -SENDXMPP_MSG_OPENED = "Realraum Tür wurde%s geöffnet" -SENDXMPP_MSG_CLOSED = "Realraum Tür wurde%s geschlossen" -sendxmpp_msg_lastmsg = "" +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('xmpp') + self.config_parser.set('xmpp','recipients_debug','xro@jabber.tittelbach.at') + self.config_parser.set('xmpp','recipients_normal','xro@jabber.tittelbach.at otti@wirdorange.org') + self.config_parser.set('xmpp','recipients_nooffline','the-equinox@jabber.org') + self.config_parser.set('xmpp','msg_opened',"Realraum Tür wurde%s geöffnet") + self.config_parser.set('xmpp','msg_closed',"Realraum Tür wurde%s geschlossen") + self.config_mtime=0 + if not self.configfile is None: + try: + cf_handle = open(self.configfile,"r") + cf_handle.close() + except IOError: + self.writeConfigFile() + else: + self.checkConfigUpdates() + + def checkConfigUpdates(self): + if self.configfile is None: + return + logging.debug("Reading Configfile "+self.configfile) + try: + mtime = os.path.getmtime(self.configfile) + except IOError: + return + if self.config_mtime < mtime: + try: + self.config_parser.read(self.configfile) + self.config_mtime=os.path.getmtime(self.configfile) + except ConfigParser.ParsingError, pe_ex: + logging.error("Error parsing Configfile: "+str(pe_ex)) + + def writeConfigFile(self): + if self.configfile is None: + return + logging.debug("Writing Configfile "+self.configfile) + try: + cf_handle = open(self.configfile,"w") + self.config_parser.write(cf_handle) + cf_handle.close() + self.config_mtime=os.path.getmtime(self.configfile) + except IOError, io_ex: + logging.error("Error writing Configfile: "+str(io_ex)) + self.configfile=None + + def __getattr__(self, name): + underscore_pos=name.find('_') + if underscore_pos < 0: + raise AttributeError + try: + return self.config_parser.get(name[0:underscore_pos], name[underscore_pos+1:]) + except (ConfigParser.NoOptionError, ConfigParser.NoSectionError): + raise AttributeError + + + +xmpp_msg_lastmsg = "" action_by = "" -sendxmpp_firstmsg = True +xmpp_firstmsg = True def sendXmppMsg(recipients, msg, resource = "torwaechter", addtimestamp = True, noofflinemsg = False): if type(recipients) == types.ListType: @@ -60,16 +118,16 @@ def sendXmppMsg(recipients, msg, resource = "torwaechter", addtimestamp = True, logging.debug("XMPPmessage sent: '%s'" % msg) def distributeXmppMsg(msg): - global sendxmpp_firstmsg, sendxmpp_msg_lastmsg - if sendxmpp_firstmsg: - sendxmpp_msg_lastmsg = msg - sendxmpp_firstmsg = False - if msg != sendxmpp_msg_lastmsg: - sendXmppMsg(SENDXMPP_RECIPIENTS_NORMAL, msg) - sendXmppMsg(SENDXMPP_RECIPIENTS_NOOFFLINE, msg, noofflinemsg=True) + global xmpp_firstmsg, xmpp_msg_lastmsg + if xmpp_firstmsg: + xmpp_msg_lastmsg = msg + xmpp_firstmsg = False + if msg != xmpp_msg_lastmsg: + sendXmppMsg(uwscfg.xmpp_recipients_normal, msg) + sendXmppMsg(uwscfg.xmpp_recipients_nooffline, msg, noofflinemsg=True) else: - sendXmppMsg(SENDXMPP_RECIPIENTS_DEBUG, "D: " + msg) - sendxmpp_msg_lastmsg = msg + sendXmppMsg(uwscfg.xmpp_recipients_debug, "D: " + msg) + xmpp_msg_lastmsg = msg def touchURL(url): try: @@ -80,12 +138,12 @@ def touchURL(url): logging.error(str(e)) def displayOpen(): - touchURL(URL_OPEN) - distributeXmppMsg(SENDXMPP_MSG_OPENED % action_by) + touchURL(uwscfg.url_open) + distributeXmppMsg(uwscfg.xmpp_msg_opened % action_by) def displayClosed(): - touchURL(URL_CLOSED) - distributeXmppMsg(SENDXMPP_MSG_CLOSED % action_by) + touchURL(uwscfg.url_closed) + distributeXmppMsg(uwscfg.xmpp_msg_closed % action_by) def exitHandler(signum, frame): logging.info("Door Status Listener stopping") @@ -112,9 +170,11 @@ else: socketfile = "/var/run/tuer/door_cmd.socket" if len(sys.argv) > 2: - SENDXMPP_RECIPIENTS_NORMAL = sys.argv[2:] + uwscfg = UWSConfig(sys.argv[2]) +else: + uwscfg = UWSConfig() -sendXmppMsg(SENDXMPP_RECIPIENTS_DEBUG,"D: update-web-status.py started") +sendXmppMsg(uwscfg.xmpp_recipients_debug,"D: update-web-status.py started") sockhandle = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) RE_STATUS = re.compile(r'Status: (\w+), idle') @@ -128,7 +188,10 @@ while True: sockhandle.send("status\n") while True: line = conn.readline() - logging.info("Got Line: " + line) + logging.debug("Got Line: " + line) + + uwscfg.checkConfigUpdates() + m = RE_STATUS.match(line) if not m is None: status = m.group(1) @@ -146,9 +209,9 @@ while True: if not m is None: errorstr = m.group(1) if "too long!" in errorstr: - distributeXmppMsg(SENDXMPP_RECIPIENTS_DEBUG, "Door Error: "+errorstr) + distributeXmppMsg(uwscfg.xmpp_recipients_debug, "Door Error: "+errorstr) else: - sendXmppMsg(SENDXMPP_RECIPIENTS_DEBUG, "D: Error: "+errorstr) + sendXmppMsg(uwscfg.xmpp_recipients_debug, "D: Error: "+errorstr) except Exception, ex: logging.error(str(ex)) try: