Skip to content

Instantly share code, notes, and snippets.

@yyuu
Created August 27, 2012 13:29
Show Gist options
  • Select an option

  • Save yyuu/3488402 to your computer and use it in GitHub Desktop.

Select an option

Save yyuu/3488402 to your computer and use it in GitHub Desktop.
mon monitor plugin to test mongodb
#!/usr/bin/env python
#
# mongodb.monitor - mon monitor plugin to test mongodb.
#
from __future__ import with_statement
import logging
import optparse
import os
import pymongo
import re
import sys
def monitor(host, port, options):
logging.debug('Connecting to %s:%d...' % (host, port))
try:
mongo = pymongo.Connection(host, port, network_timeout=options.timeout)
resp = mongo[options.database].command(options.query)
logging.debug('%s.%s //=> %s' % (options.database, options.query, repr(resp)))
return True if resp else False
except Exception, error:
logging.error('Unhandled Exception: %s' % (error,))
return False
def main(args):
# by default, query "listDatabases" to "admin" database.
parser = optparse.OptionParser("usage %prog [OPTIONS]", add_help_option=False)
parser.add_option('--help', action='help', help='show this message and exit.')
parser.add_option('-d', '--database', default='admin', dest='database', help='MongoDB database.')
parser.add_option('-p', '--port', type='int', default=[], action='append', dest='ports', help='MongoDB port.')
parser.add_option('-q', '--query', default='listDatabases', dest='query', help='MongoDB query.')
parser.add_option('-t', '--timeout', type='int', default=None, dest='timeout', help='timeout')
parser.add_option('-v', '--verbose', default=False, action='store_true', dest='verbose', help='show verbose message.')
options, args = parser.parse_args(args)
if options.verbose:
logging.basicConfig(level=logging.DEBUG)
if len(options.ports) < 1:
options.ports.append(27017) # default port
result = all([monitor(host, port, options) for host in args[1:] for port in options.ports])
sys.exit(0 if result else 1)
if __name__ == "__main__":
main(sys.argv)
# vim:set ft=python :
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment