Process Monit HTTP/XML
Nomit is a small library that can be used to process HTTP/XML POST requests from Monit instances. While it is a relatively trivial adaption of Python’s BaseHTTPRequestHandler, it may be useful to multiple other projects. For this reason Nomit is registered as its own little project.
Monit is a free utility for managing Unix systems. Multiple Monit instances can be centrally managed by its sister project MMonit. Monit communicates with MMonit through HTTP/XML POST request.
Nomit provides a single class
MonitHandler which is a sub-class of
MonitHandler is meant to be sub-classed
It provides two methods:
handle_unparsed()is called with the raw XML of the HTTP/XML POST request.
handle_parsed()is called after the XML has been parsed by
The default implementation of these methods does nothing. Any derived class must implement these methods as necessary.
The example below implements
handle_unparsed() to print the raw XML as
POSTed by the Monit agent and uses
handle_parsed() to display the data
structure returned by
import BaseHTTPServer import xml.dom.minidom import lxml.objectify import nomit class ExampleHandler(nomit.MonitXmlHandler): def handle_unparsed(self, s): print xml.dom.minidom.parseString(s).toprettyxml() def handle_parsed(self, o): print lxml.objectify.dump(o) server = BaseHTTPServer.HTTPServer(("127.0.0.1", 2811), ExampleHandler) server.serve_forever()
The Monit agent must be told to POST status information to the Python script above. From the agent’s point of view the script is simply (another_) MMonit server.
set mmonit http://monit:email@example.com:8080/collector http://localhost:2811/
_ The set mmonit directive accepts multiple URLs.