diff options
author | David Sommerseth <davids@redhat.com> | 2012-09-16 15:22:49 +0200 |
---|---|---|
committer | David Sommerseth <davids@redhat.com> | 2012-09-16 15:22:49 +0200 |
commit | 286cb5485637ff4a4a0371beb775812c0c0ef0b5 (patch) | |
tree | 712849a6c05fc8ffac3e7a86c1ca1a3baea34e90 | |
parent | 2fd3b0c451ce8e3d007029520bf2e4f48afd5d40 (diff) | |
download | logactio-286cb5485637ff4a4a0371beb775812c0c0ef0b5.tar.gz logactio-286cb5485637ff4a4a0371beb775812c0c0ef0b5.tar.xz logactio-286cb5485637ff4a4a0371beb775812c0c0ef0b5.zip |
Added a simple HTTP reporter module
This will send alerts to a web server via HTTP GET/POST requests
Signed-off-by: David Sommerseth <davids@redhat.com>
-rw-r--r-- | LogActio/Reporters/HTTPreporter.py | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/LogActio/Reporters/HTTPreporter.py b/LogActio/Reporters/HTTPreporter.py new file mode 100644 index 0000000..a006310 --- /dev/null +++ b/LogActio/Reporters/HTTPreporter.py @@ -0,0 +1,106 @@ +# +# logactio - simple framework for doing configured action on certain +# log file events +# +# Copyright 2012 David Sommerseth <dazo@users.sourceforge.net> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# For the avoidance of doubt the "preferred form" of this code is one which +# is in an open unpatent encumbered format. Where cryptographic key signing +# forms part of the process of creating an executable the information +# including keys needed to generate an equivalently functional executable +# are deemed to be part of the source code. +# + +import sys, urllib, urllib2 +from LogActio import Message, ReporterQueue + + +class HTTPreporter(ReporterQueue.ReporterQueue): + """Simple LogActio reporter module, sending alerts via HTTP/HTTPS + + Example configuration to be used in /etc/logactio.cfg + + [Reporter:HTTP] + module: HTTPreporter + method: POST + url: http://alerts.example.com/logactio/alerts.php + + This will send reports to the given URL using POST. If you want + to use GET instead of POST, modify or remove the 'method' variable + """ + + def __init__(self, config, logger = None): + if not config.has_key("url"): + raise Exception("HTTPreporter is not configured with a URL") + + self.__method = config.has_key("method") and config["method"] or "GET" + self.__url = config["url"] + self.__log = logger and logger or self.__logfnc + + if self.__method != "GET" and self.__method != "POST": + raise Exception("HTTPreporter is configured with an invalid submission method: '%s'" % + str(self.__method)) + + ReporterQueue.ReporterQueue.__init__(self, + "HTTPreporter", + "HTTP Reporter", + self.__processqueue) + + def __logfnc(self, lvl, msg): + print "%s" % msg + sys.stdout.flush() + + + def __processqueue(self): + done = False + + # Process the message queue + while not done: + msg = self._QueueGet() + + if( msg.MessageType() == Message.MSG_SHUTDOWN ): + # Prepare for shutdown + done = True + + elif( msg.MessageType() == Message.MSG_SEND ): + m = msg.Message() + m["priority"] = msg.Priority() + data = urllib.urlencode(m) + + if self.__method == "GET": + req = urllib2.Request("%s?%s" % (self.__url, data)) + self.__log(1, "[HTTPreporter] GET %s?%s" % (self.__url, data)) + elif self.__method == "POST": + req = urllib2.Request(self.__url, data) + self.__log(1, "[HTTPreporter] POST %s {%s}" % (self.__url, data)) + else: + self.__log(0, "[HTTPreporter] Unknown method '%s'" % + self.__method) + res = urllib2.urlopen(req) + self.__log(4, "[HTTPreporter] Repsonse: %s" % res.read()) + + + def ProcessEvent(self, logfile, prefix, msg, count, threshold): + # Format the report message + msg = {"prefix": prefix, "count": count, "threshold": threshold, + "message": msg, "logfile": logfile} + + # Queue the message for sending + self._QueueMsg(0, msg) + + +def InitReporter(config, logger = None): + return HTTPreporter(config, logger) |