Changeset 190:75d280708ff5 for StormSiren
- Timestamp:
- 11/28/08 18:48:18 (22 months ago)
- Parents:
- 189:8190540dae37 (diff), 185:c20e85874308 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent. - Branch:
- default
- Location:
- StormSiren
- Files:
-
- 1 removed
- 3 modified
-
CAP.py (deleted)
-
StormConfig.py (modified) (6 diffs)
-
StormWeather.py (modified) (2 diffs)
-
XmlWeather.py (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
StormSiren/StormConfig.py
r184 r190 64 64 self.__states = [] 65 65 self.devices = [] 66 self.__history_file = '' 66 self.__history_file = self.config_dir + '/' + __APPNAME__ + '.history' 67 self.log = logging.getLogger('StormConfig') 67 68 self.__max_history = History.DEFAULT_MAX_HISTORICAL_EVENTS 68 self.__history_file = self.config_dir + '/' + __APPNAME__ + '.history' 69 self.log = logging.getLogger('StormConfig') 70 71 self.log.setLevel(logging.INFO) 72 73 self._load() 69 self.__proxy = '' 70 71 self.log.setLevel(logging.DEBUG) 72 self._load() 74 73 75 74 def _load(self): … … 88 87 89 88 xstates = self.getRequired('main','states') 90 if xstates:89 if(xstates): 91 90 self.__states = string.split(xstates, ',') 91 92 self.__proxy = self.get('main','proxy', None) 92 93 93 94 num_watchers = self.getRequired('main','watchers') … … 143 144 if(jabber_available): 144 145 to = self.getRequired(str(i),"to") 145 self.devices.append(JabberAlertDevice(to,jabberInfo,alerts,areas)) 146 wait_time = int(self.getRequired(str(i),"wait_time")) 147 self.devices.append(MythtvAlertDevice(MythtvAlertDeviceInfo(to,wait_time),alerts,areas)) 146 148 self.log.debug("Adding jabber device") 147 149 else: 148 150 self.log.error("Jabber Support Not Enabled, but Jabber Device Requested!") 151 if(dev == "media"): 152 self.devices.append(MediaAlertDevice(mediaInfo,alerts,areas)) 153 self.log.debug("Adding media device") 154 if(dev == "execution"): 155 self.devices.append(ExecutionAlertDevice(exeInfo,alerts,areas)) 156 self.log.debug("Adding execution device") 149 157 if(dev == "osd"): 150 158 if(not osdLoadAttempted): … … 166 174 font), 167 175 alerts,areas)) 168 self.log.debug("Adding OSDdevice")176 self.log.debug("Adding jabber device") 169 177 else: 170 178 self.log.error("OSD Support Not Enabled, but OSD Device Requested!") 171 179 if(dev == "mythtv"): 172 to = self.getRequired(str(i),"to") 173 wait_time = int(self.getRequired(str(i),"wait_time")) 174 self.devices.append(MythtvAlertDevice(MythtvAlertDeviceInfo(to,wait_time),alerts,areas)) 175 self.log.debug("Adding MythTv device") 176 if(dev == "media"): 177 self.devices.append(MediaAlertDevice(mediaInfo,alerts,areas)) 178 self.log.debug("Adding media device") 179 if(dev == "execution"): 180 self.devices.append(ExecutionAlertDevice(exeInfo,alerts,areas)) 181 self.log.debug("Adding execution device") 180 to = self.getRequired(str(i),"to") 181 wait_time = int(self.getRequired(str(i),"wait_time")) 182 self.devices.append(MythtvAlertDevice(MythtvAlertDeviceInfo(to,wait_time),alerts,areas)) 183 self.log.debug("Adding mythtv device") 182 184 183 185 def __str__(self): … … 185 187 str += "\n\t".join(self.__states) 186 188 187 str += "\nHistory: %i\n" % self.max_history 189 str += "\nProxy: %s" % self.proxy 190 str += "\nHistory: %i" % self.max_history 188 191 str += "\nDevices: %i\n" % len(self.devices) 189 192 … … 230 233 return self.__max_history 231 234 235 def getProxy(self): 236 return self.__proxy 237 232 238 debug = property(getDebug,None,None) 233 239 max_history = property(getMaxHistory,None,None) 240 proxy = property(getProxy,None,None) -
StormSiren/StormWeather.py
r184 r190 48 48 from WeatherAlert import * 49 49 from XmlWeather import * 50 from CAP import CAP51 50 52 51 class StormWeather(XmlWeather): 53 def __init__(self, state, history, simfetch = False, simalert = False ):54 super(StormWeather,self).__init__(state, history,simfetch)52 def __init__(self, state, history, simfetch = False, simalert = False, proxy = None): 53 super(StormWeather,self).__init__(state,simfetch,proxy) 55 54 self.log = logging.getLogger("StormWeather") 56 55 self.__alert_devs = [] 57 56 self.__simalert = simalert 57 self.__history = history 58 58 59 59 self.log.setLevel(logging.INFO) 60 60 61 def display(self):62 return self.__str__()63 64 61 def __str__(self): 65 62 str = "StormWeather: " + "\n" … … 72 69 return str 73 70 74 def display(self):75 print self.__str__()76 77 71 def registerDevice(self, dev): 78 72 self.log.debug("Registering Device") 79 73 self.__alert_devs.append(dev) 80 74 81 def handleAlert(self, cap_item): 82 alerted = False 75 def logAtomShort(self, cap_atom): 76 self.log.info("---------CAP ATOM---------") 77 for l in (cap_atom.__str__().split('\n')): 78 self.log.info(l) 79 self.log.info("---------CAP ATOM---------") 83 80 84 for dev in self.__alert_devs: 85 if(dev.isAlertWanted(cap_item)): 86 if(not self.__simalert): 87 dev.send(WeatherAlert(cap_item)) 88 alerted = True 89 else: 90 self.log.info("Simulated Alert on: %s" % cap_item.id) 81 def logAtomFull(self, cap_atom): 82 self.log.info("---------CAP ATOM---------") 83 for l in (cap_atom.__str__().split('\n')): 84 self.log.info(l) 85 self.log.info("========DESCRIPTION=======") 86 if(cap_atom.description): 87 for l in (cap_atom.description.split('\n')): 88 self.log.info(l) 89 self.log.info("========DESCRIPTION=======") 90 self.log.info("---------CAP ATOM---------") 91 91 92 return alerted 92 def handleAtom(self, cap_atom): 93 self.logAtomShort(cap_atom) 94 if(not self.__history.exists(cap_atom.id)): 95 for dev in self.__alert_devs: 96 if(dev.isAlertWanted(cap_atom)): 97 if(not self.__simalert): 98 cap_atom.expand(self.simfetch,self.proxy) 99 self.logAtomFull(cap_atom) 100 dev.send(cap_atom) 101 self.__history.add(cap_atom.id) 102 else: 103 self.log.info("Simulated Alert on: %s" % cap_atom.id) 104 else: 105 self.log.debug("Ignoring %s: Already alerted on" % cap_atom.id) -
StormSiren/XmlWeather.py
r184 r190 42 42 """ 43 43 44 import urllib45 44 import logging 46 import sys47 from xml.dom import minidom48 45 49 46 from WeatherTypes import * 50 from CAP import CAP 47 from XmlFetcher import * 48 from WeatherAlert import WeatherAlert 51 49 52 50 class XmlWeather(object): 53 def __init__(self, state, history, simfetch = False):51 def __init__(self, state, simfetch = False, proxy = None): 54 52 super(XmlWeather,self).__init__() 55 53 self.__data = '' 56 54 self.__state = state 57 55 self.__dom = [] 58 self.__baseurl = 'http://www.weather.gov/alerts/' 59 self.__namespace = 'http://purl.org/dc/elements/1.1/' 60 self.__url = self.__baseurl + self.__state.lower() + ".cap" 61 self.__tag_item = 'cap:info' 62 self.__history = history 56 self.__baseurl = 'http://www.weather.gov/wwarss-tst/' 57 self.__url = self.__baseurl + self.__state.lower() + ".php?x=0" 58 self.__tag_item = 'entry' 63 59 self.__simfetch = simfetch 64 self.log = logging.getLogger("XmlWeather") 60 self.__proxy = proxy 61 self.__atoms = XmlFetcher(self.__url, self.__simfetch, self.__proxy) 62 self.log = logging.getLogger("XmlWeather") 65 63 66 64 self.log.setLevel(logging.DEBUG) … … 74 72 75 73 def __fetch(self): 76 self.log.info("Fetching: " + self.__url) 77 try: 78 if(self.__simfetch): 79 self.log.info("Simulating fetch using examples directory") 80 self.__dom = minidom.parse("examples/" + self.__state.lower() + ".cap") 81 else: 82 self.__dom = minidom.parse(urllib.urlopen(self.__url)) 83 except IOError,e: 84 # No net connection available, exit. 85 self.log.error("Internet connection not available?, exiting: %s" % e) 86 sys.exit() 74 self.__dom = self.__atoms.fetch() 87 75 88 76 def __str__(self): 89 77 str = "XmlWeather:\n" + \ 78 "SimFetch: " + self.__simfetch + "\n" + \ 79 "Proxy: " + self.__proxy + "\n" + \ 90 80 "State: " + self.__state + "\n" + \ 91 81 "URL: " + self.__url + "\n" 92 93 if(self.__simfetch):94 str += "Sim Fetch: yes\n"95 else:96 str += "Sim Fetch: no\n"97 82 return str 98 83 … … 102 87 def __parse(self): 103 88 for capXmlText in self.__dom.getElementsByTagName(self.__tag_item): 104 cap_item = CAP(capXmlText, self.__state) 105 #cap_item.display() 106 if(not self.__history.exists(cap_item.id)): 107 alerted = self.handleAlert(cap_item) 108 if(alerted): 109 self.__history.add(cap_item.id) 110 else: 111 self.log.debug("Ignoring %s: Already alerted on" % cap_item.id) 89 self.handleAtom(WeatherAlert(capXmlText, self.__state)) 112 90 91 def getSimFetch(self): 92 return self.__simfetch 113 93 114 def handleAlert(self,cap_item): 115 self.log.debug("handleAlert(%s) - %s/%s" % (cap_item.id, cap_item.county, cap_item.state)) 116 return True 94 simfetch = property(getSimFetch,None,None) 95 96 def getProxy(self): 97 return self.__proxy 98 99 proxy = property(getProxy,None,None)
