Created
August 27, 2012 13:29
-
-
Save yyuu/3488402 to your computer and use it in GitHub Desktop.
mon monitor plugin to test mongodb
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/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