summaryrefslogtreecommitdiffstats
path: root/sca-cpp/branches/cpp-contrib/contrib/samples/AlertAggregator/sample.alerter/AlertCheckerImpl.py
diff options
context:
space:
mode:
Diffstat (limited to 'sca-cpp/branches/cpp-contrib/contrib/samples/AlertAggregator/sample.alerter/AlertCheckerImpl.py')
-rw-r--r--sca-cpp/branches/cpp-contrib/contrib/samples/AlertAggregator/sample.alerter/AlertCheckerImpl.py116
1 files changed, 116 insertions, 0 deletions
diff --git a/sca-cpp/branches/cpp-contrib/contrib/samples/AlertAggregator/sample.alerter/AlertCheckerImpl.py b/sca-cpp/branches/cpp-contrib/contrib/samples/AlertAggregator/sample.alerter/AlertCheckerImpl.py
new file mode 100644
index 0000000000..d9aab820ac
--- /dev/null
+++ b/sca-cpp/branches/cpp-contrib/contrib/samples/AlertAggregator/sample.alerter/AlertCheckerImpl.py
@@ -0,0 +1,116 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+import xml.etree.ElementTree, datetime
+
+def getAllNewAlerts ():
+
+ returnXML = "<alerts xmlns=\"http://tuscany.apache.org/samples/alerter\">\n</alerts>"
+ returnElem = xml.etree.ElementTree.XML(returnXML)
+
+ # Use the alertConfigService to get the configuration
+ configElem = alertConfigService.getAlertConfig()
+
+ for sourceElem in configElem.findall("./{http://tuscany.apache.org/samples/alerter}source"):
+
+ sourceid = sourceElem.attrib["id"]
+
+ newAlerts = getAlerts(sourceElem)
+ if xml.etree.ElementTree.iselement(newAlerts):
+ # Add the sourceid to each alert and append to the entire list
+ for alert in newAlerts.findall("./{http://tuscany.apache.org/samples/alerter}alert"):
+ alert.attrib["sourceid"] = sourceid
+ returnElem.append(alert)
+
+ return returnElem
+
+def getAlerts (sourceElem):
+
+ lastcheckedElem = sourceElem.find("./{http://tuscany.apache.org/samples/alerter}lastChecked")
+ if not xml.etree.ElementTree.iselement(lastcheckedElem):
+ lastcheckedElem = xml.etree.ElementTree.SubElement(sourceElem, "lastChecked")
+ lastcheckedElem.text = ""
+
+ if sourceElem.attrib["type"] == "rss":
+
+ feedaddress = sourceElem.find("./{http://tuscany.apache.org/samples/alerter}feedAddress").text
+
+ if feedaddress:
+ # Use the rssCheckerService to get new articles for this config
+ newAlerts = rssCheckerService.getNewAlerts(feedaddress, lastcheckedElem.text)
+
+ lastcheckedElem.text = datetime.datetime.now().replace(microsecond=0).isoformat()
+ alertConfigService.updateSourceConfig(sourceElem)
+ return newAlerts
+
+ elif sourceElem.attrib["type"] == "pop":
+
+ popserver = sourceElem.find("./{http://tuscany.apache.org/samples/alerter}popServer").text
+ popusername = sourceElem.find("./{http://tuscany.apache.org/samples/alerter}popUsername").text
+ poppassword = sourceElem.find("./{http://tuscany.apache.org/samples/alerter}popPassword").text
+
+ if popserver and popusername and poppassword:
+ # Use the popCheckerService to get new emails for this config
+ newAlerts = popCheckerService.getNewAlerts(popserver, popusername, poppassword, lastcheckedElem.text)
+
+ lastcheckedElem.text = datetime.datetime.now().replace(microsecond=0).isoformat()
+ alertConfigService.updateSourceConfig(sourceElem)
+ return newAlerts
+
+ else:
+ print "Source type not supported: ", sourceElem.attrib["type"]
+
+ return None
+
+
+def getNewAlerts (sourceId):
+ # Use the alertConfigService to get the configuration
+ sourceConfigElem = alertConfigService.getSourceConfig(sourceId)
+
+ # Get the alerts
+ newAlerts = getAlerts(sourceConfigElem)
+
+ if xml.etree.ElementTree.iselement(newAlerts):
+ # Add the sourceid to each alert
+ for alert in newAlerts.findall("./{http://tuscany.apache.org/samples/alerter}alert"):
+ alert.attrib["sourceid"] = sourceId
+
+ return newAlerts
+
+def addAlertSource (sourceElem):
+ # Add the source directly to the configuration
+ return alertConfigService.addSourceConfig(sourceElem)
+
+def updateAlertSource (sourceElem):
+ # Update the source in the configuration
+ return alertConfigService.updateSourceConfig(sourceElem)
+
+def removeAlertSource (sourceId):
+ # Remove the source from the configuration
+ alertConfigService.removeSourceConfig(sourceId)
+
+def getAlertSources ():
+ # Get the config for all the sources
+ return alertConfigService.getAlertConfig()
+
+# # Testing
+# import AlertConfigImpl as alertConfigService
+# import RSSCheckerImpl as rssCheckerService
+# import POPCheckerImpl as popCheckerService
+#
+# print xml.etree.ElementTree.tostring(getAlertSources())
+# print xml.etree.ElementTree.tostring(getAllNewAlerts())