From owner-svn-ports-head@FreeBSD.ORG Mon May 12 11:32:55 2014 Return-Path: Delivered-To: svn-ports-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 21AD9C3E; Mon, 12 May 2014 11:32:55 +0000 (UTC) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 0DACE2B3B; Mon, 12 May 2014 11:32:55 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.8/8.14.8) with ESMTP id s4CBWtmb085690; Mon, 12 May 2014 11:32:55 GMT (envelope-from demon@svn.freebsd.org) Received: (from demon@localhost) by svn.freebsd.org (8.14.8/8.14.8/Submit) id s4CBWs6V085685; Mon, 12 May 2014 11:32:54 GMT (envelope-from demon@svn.freebsd.org) Message-Id: <201405121132.s4CBWs6V085685@svn.freebsd.org> From: Dmitry Sivachenko Date: Mon, 12 May 2014 11:32:54 +0000 (UTC) To: ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org Subject: svn commit: r353804 - in head/databases: . nagios-check_mongodb nagios-check_mongodb/files X-SVN-Group: ports-head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-ports-head@freebsd.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: SVN commit messages for the ports tree for head List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 12 May 2014 11:32:55 -0000 Author: demon Date: Mon May 12 11:32:53 2014 New Revision: 353804 URL: http://svnweb.freebsd.org/changeset/ports/353804 QAT: https://qat.redports.org/buildarchive/r353804/ Log: New port: nagios-check_mongodb. A Nagios plugin to check MongoDB status. Added: head/databases/nagios-check_mongodb/ head/databases/nagios-check_mongodb/Makefile (contents, props changed) head/databases/nagios-check_mongodb/distinfo (contents, props changed) head/databases/nagios-check_mongodb/files/ head/databases/nagios-check_mongodb/files/patch-check_mongodb.py (contents, props changed) head/databases/nagios-check_mongodb/pkg-descr (contents, props changed) Modified: head/databases/Makefile Modified: head/databases/Makefile ============================================================================== --- head/databases/Makefile Mon May 12 11:24:47 2014 (r353803) +++ head/databases/Makefile Mon May 12 11:32:53 2014 (r353804) @@ -229,6 +229,7 @@ SUBDIR += mysqltuner SUBDIR += mytop SUBDIR += mywwwatcher + SUBDIR += nagios-check_mongodb SUBDIR += nagios-check_postgres_replication SUBDIR += nagios-check_redis SUBDIR += namazu2 Added: head/databases/nagios-check_mongodb/Makefile ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/databases/nagios-check_mongodb/Makefile Mon May 12 11:32:53 2014 (r353804) @@ -0,0 +1,32 @@ +# Created by: Dmitry Sivachenko +# $FreeBSD$ + +PORTNAME= check_mongodb +PORTVERSION= 0.1 +CATEGORIES= databases perl5 +PKGNAMEPREFIX= nagios- + +MAINTAINER= demon@FreeBSD.org +COMMENT= Nagios plugin to check mongodb server + +RUN_DEPENDS= pymongo>=0:${PORTSDIR}/databases/pymongo + +USE_GITHUB= yes +GH_ACCOUNT= mzupan +GH_PROJECT= nagios-plugin-mongodb +GH_COMMIT= 9d17373 +GH_TAGNAME= ${GN_COMMIT} +USE_PYTHON= 3 +USES= shebangfix +SHEBANG_FILES= ${WRKSRC}/check_mongodb.py +python_OLD_CMD= "/usr/bin/env\ python" +python_CMD= ${PYTHON_CMD} +NO_BUILD= yes +PLIST_FILES= libexec/nagios/check_mongodb +PLIST_DIRSTRY= libexec/nagios + +do-install: + ${MKDIR} ${STAGEDIR}${PREFIX}/libexec/nagios + ${INSTALL_SCRIPT} ${WRKSRC}/check_mongodb.py ${STAGEDIR}${PREFIX}/libexec/nagios/check_mongodb + +.include Added: head/databases/nagios-check_mongodb/distinfo ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/databases/nagios-check_mongodb/distinfo Mon May 12 11:32:53 2014 (r353804) @@ -0,0 +1,2 @@ +SHA256 (check_mongodb-0.1.tar.gz) = cc728c673d56f44cfe50ab291c5808dec5226004406458e8e2935cf9fdcefd77 +SIZE (check_mongodb-0.1.tar.gz) = 14806 Added: head/databases/nagios-check_mongodb/files/patch-check_mongodb.py ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/databases/nagios-check_mongodb/files/patch-check_mongodb.py Mon May 12 11:32:53 2014 (r353804) @@ -0,0 +1,526 @@ +--- check_mongodb.py.orig 2014-03-10 20:01:19.000000000 +0400 ++++ check_mongodb.py 2014-05-12 15:22:50.000000000 +0400 +@@ -31,8 +31,8 @@ import os + + try: + import pymongo +-except ImportError, e: +- print e ++except ImportError as e: ++ print(e) + sys.exit(2) + + # As of pymongo v 1.9 the SON API is part of the BSON package, therefore attempt +@@ -84,29 +84,29 @@ def numeric_type(param): + def check_levels(param, warning, critical, message, ok=[]): + if (numeric_type(critical) and numeric_type(warning)): + if param >= critical: +- print "CRITICAL - " + message ++ print("CRITICAL - " + message) + sys.exit(2) + elif param >= warning: +- print "WARNING - " + message ++ print("WARNING - " + message) + sys.exit(1) + else: +- print "OK - " + message ++ print("OK - " + message) + sys.exit(0) + else: + if param in critical: +- print "CRITICAL - " + message ++ print("CRITICAL - " + message) + sys.exit(2) + + if param in warning: +- print "WARNING - " + message ++ print("WARNING - " + message) + sys.exit(1) + + if param in ok: +- print "OK - " + message ++ print("OK - " + message) + sys.exit(0) + + # unexpected param value +- print "CRITICAL - Unexpected value : %d" % param + "; " + message ++ print("CRITICAL - Unexpected value : %d" % param + "; " + message) + return 2 + + +@@ -268,11 +268,11 @@ def mongo_connect(host=None, port=None, + db = con["admin"] + if not db.authenticate(user, passwd): + sys.exit("Username/Password incorrect") +- except Exception, e: ++ except Exception as e: + if isinstance(e, pymongo.errors.AutoReconnect) and str(e).find(" is an arbiter") != -1: + # We got a pymongo AutoReconnect exception that tells us we connected to an Arbiter Server + # This means: Arbiter is reachable and can answer requests/votes - this is all we need to know from an arbiter +- print "OK - State: 7 (Arbiter)" ++ print("OK - State: 7 (Arbiter)") + sys.exit(0) + return exit_with_general_critical(e), None + return 0, con +@@ -282,7 +282,7 @@ def exit_with_general_warning(e): + if isinstance(e, SystemExit): + return e + else: +- print "WARNING - General MongoDB warning:", e ++ print("WARNING - General MongoDB warning:", e) + return 1 + + +@@ -290,7 +290,7 @@ def exit_with_general_critical(e): + if isinstance(e, SystemExit): + return e + else: +- print "CRITICAL - General MongoDB Error:", e ++ print("CRITICAL - General MongoDB Error:", e) + return 2 + + +@@ -324,7 +324,7 @@ def check_connections(con, warning, crit + (available, "available_connections")]) + return check_levels(used_percent, warning, critical, message) + +- except Exception, e: ++ except Exception as e: + return exit_with_general_critical(e) + + +@@ -347,9 +347,9 @@ def check_rep_lag(con, host, port, warni + # Get replica set status + try: + rs_status = con.admin.command("replSetGetStatus") +- except pymongo.errors.OperationFailure, e: ++ except pymongo.errors.OperationFailure as e: + if e.code == None and str(e).find('failed: not running with --replSet"'): +- print "OK - Not running with replSet" ++ print("OK - Not running with replSet") + return 0 + + serverVersion = tuple(con.server_info()['version'].split('.')) +@@ -376,19 +376,19 @@ def check_rep_lag(con, host, port, warni + + # Check if we're in the middle of an election and don't have a primary + if primary_node is None: +- print "WARNING - No primary defined. In an election?" ++ print("WARNING - No primary defined. In an election?") + return 1 + + # Check if we failed to find the current host + # below should never happen + if host_node is None: +- print "CRITICAL - Unable to find host '" + host + "' in replica set." ++ print("CRITICAL - Unable to find host '" + host + "' in replica set.") + return 2 + + # Is the specified host the primary? + if host_node["stateStr"] == "PRIMARY": + if max_lag == False: +- print "OK - This is the primary." ++ print("OK - This is the primary.") + return 0 + else: + #get the maximal replication lag +@@ -413,7 +413,7 @@ def check_rep_lag(con, host, port, warni + message += performance_data(perf_data, [(maximal_lag, "replication_lag", warning, critical)]) + return check_levels(maximal_lag, warning, critical, message) + elif host_node["stateStr"] == "ARBITER": +- print "OK - This is an arbiter" ++ print("OK - This is an arbiter") + return 0 + + # Find the difference in optime between current node and PRIMARY +@@ -465,12 +465,12 @@ def check_rep_lag(con, host, port, warni + + # Check if we're in the middle of an election and don't have a primary + if primary_node is None: +- print "WARNING - No primary defined. In an election?" ++ print("WARNING - No primary defined. In an election?") + sys.exit(1) + + # Is the specified host the primary? + if host_node["stateStr"] == "PRIMARY": +- print "OK - This is the primary." ++ print("OK - This is the primary.") + sys.exit(0) + + # Find the difference in optime between current node and PRIMARY +@@ -489,7 +489,7 @@ def check_rep_lag(con, host, port, warni + message += performance_data(perf_data, [(lag, "replication_lag", warning, critical)]) + return check_levels(lag, warning, critical, message) + +- except Exception, e: ++ except Exception as e: + return exit_with_general_critical(e) + + +@@ -502,7 +502,7 @@ def check_memory(con, warning, critical, + try: + data = get_server_status(con) + if not data['mem']['supported'] and not mapped_memory: +- print "OK - Platform not supported for memory info" ++ print("OK - Platform not supported for memory info") + return 0 + # + # convert to gigs +@@ -539,7 +539,7 @@ def check_memory(con, warning, critical, + else: + return check_levels(mem_resident, warning, critical, message) + +- except Exception, e: ++ except Exception as e: + return exit_with_general_critical(e) + + +@@ -552,7 +552,7 @@ def check_memory_mapped(con, warning, cr + try: + data = get_server_status(con) + if not data['mem']['supported']: +- print "OK - Platform not supported for memory info" ++ print("OK - Platform not supported for memory info") + return 0 + # + # convert to gigs +@@ -574,10 +574,10 @@ def check_memory_mapped(con, warning, cr + if not mem_mapped == -1: + return check_levels(mem_mapped, warning, critical, message) + else: +- print "OK - Server does not provide mem.mapped info" ++ print("OK - Server does not provide mem.mapped info") + return 0 + +- except Exception, e: ++ except Exception as e: + return exit_with_general_critical(e) + + +@@ -594,7 +594,7 @@ def check_lock(con, warning, critical, p + message += performance_data(perf_data, [("%.2f" % lock_percentage, "lock_percentage", warning, critical)]) + return check_levels(lock_percentage, warning, critical, message) + +- except Exception, e: ++ except Exception as e: + return exit_with_general_critical(e) + + +@@ -619,7 +619,7 @@ def check_flushing(con, warning, critica + + return check_levels(flush_time, warning, critical, message) + +- except Exception, e: ++ except Exception as e: + return exit_with_general_critical(e) + + +@@ -638,10 +638,10 @@ def index_miss_ratio(con, warning, criti + except KeyError: + not_supported_msg = "not supported on this platform" + if data['indexCounters'].has_key('note'): +- print "OK - MongoDB says: " + not_supported_msg ++ print("OK - MongoDB says: " + not_supported_msg) + return 0 + else: +- print "WARNING - Can't get counter from MongoDB" ++ print("WARNING - Can't get counter from MongoDB") + return 1 + + message = "Miss Ratio: %.2f" % miss_ratio +@@ -649,7 +649,7 @@ def index_miss_ratio(con, warning, criti + + return check_levels(miss_ratio, warning, critical, message) + +- except Exception, e: ++ except Exception as e: + return exit_with_general_critical(e) + + +@@ -663,7 +663,7 @@ def check_replset_state(con, perf_data, + except: + critical = [8, 4, -1] + +- ok = range(-1, 8) # should include the range of all posiible values ++ ok = list(range(-1, 8)) # should include the range of all posiible values + try: + try: + try: +@@ -672,7 +672,7 @@ def check_replset_state(con, perf_data, + except: + data = con.admin.command(son.SON([('replSetGetStatus', 1)])) + state = int(data['myState']) +- except pymongo.errors.OperationFailure, e: ++ except pymongo.errors.OperationFailure as e: + if e.code == None and str(e).find('failed: not running with --replSet"'): + state = -1 + +@@ -698,7 +698,7 @@ def check_replset_state(con, perf_data, + message = "State: %i (Unknown state)" % state + message += performance_data(perf_data, [(state, "state")]) + return check_levels(state, warning, critical, message, ok) +- except Exception, e: ++ except Exception as e: + return exit_with_general_critical(e) + + +@@ -714,7 +714,7 @@ def check_databases(con, warning, critic + message = "Number of DBs: %.0f" % count + message += performance_data(perf_data, [(count, "databases", warning, critical, message)]) + return check_levels(count, warning, critical, message) +- except Exception, e: ++ except Exception as e: + return exit_with_general_critical(e) + + +@@ -736,7 +736,7 @@ def check_collections(con, warning, crit + message += performance_data(perf_data, [(count, "collections", warning, critical, message)]) + return check_levels(count, warning, critical, message) + +- except Exception, e: ++ except Exception as e: + return exit_with_general_critical(e) + + +@@ -779,15 +779,15 @@ def check_database_size(con, database, w + #perfdata += " database=%s" %(database) + + if storage_size >= critical: +- print "CRITICAL - Database size: %.0f MB, Database: %s%s" % (storage_size, database, perfdata) ++ print("CRITICAL - Database size: %.0f MB, Database: %s%s" % (storage_size, database, perfdata)) + return 2 + elif storage_size >= warning: +- print "WARNING - Database size: %.0f MB, Database: %s%s" % (storage_size, database, perfdata) ++ print("WARNING - Database size: %.0f MB, Database: %s%s" % (storage_size, database, perfdata)) + return 1 + else: +- print "OK - Database size: %.0f MB, Database: %s%s" % (storage_size, database, perfdata) ++ print("OK - Database size: %.0f MB, Database: %s%s" % (storage_size, database, perfdata)) + return 0 +- except Exception, e: ++ except Exception as e: + return exit_with_general_critical(e) + + +@@ -806,15 +806,15 @@ def check_database_indexes(con, database + perfdata += " | database_indexes=%i;%i;%i" % (index_size, warning, critical) + + if index_size >= critical: +- print "CRITICAL - %s indexSize: %.0f MB %s" % (database, index_size, perfdata) ++ print("CRITICAL - %s indexSize: %.0f MB %s" % (database, index_size, perfdata)) + return 2 + elif index_size >= warning: +- print "WARNING - %s indexSize: %.0f MB %s" % (database, index_size, perfdata) ++ print("WARNING - %s indexSize: %.0f MB %s" % (database, index_size, perfdata)) + return 1 + else: +- print "OK - %s indexSize: %.0f MB %s" % (database, index_size, perfdata) ++ print("OK - %s indexSize: %.0f MB %s" % (database, index_size, perfdata)) + return 0 +- except Exception, e: ++ except Exception as e: + return exit_with_general_critical(e) + + +@@ -833,15 +833,15 @@ def check_collection_indexes(con, databa + perfdata += " | collection_indexes=%i;%i;%i" % (total_index_size, warning, critical) + + if total_index_size >= critical: +- print "CRITICAL - %s.%s totalIndexSize: %.0f MB %s" % (database, collection, total_index_size, perfdata) ++ print("CRITICAL - %s.%s totalIndexSize: %.0f MB %s" % (database, collection, total_index_size, perfdata)) + return 2 + elif total_index_size >= warning: +- print "WARNING - %s.%s totalIndexSize: %.0f MB %s" % (database, collection, total_index_size, perfdata) ++ print("WARNING - %s.%s totalIndexSize: %.0f MB %s" % (database, collection, total_index_size, perfdata)) + return 1 + else: +- print "OK - %s.%s totalIndexSize: %.0f MB %s" % (database, collection, total_index_size, perfdata) ++ print("OK - %s.%s totalIndexSize: %.0f MB %s" % (database, collection, total_index_size, perfdata)) + return 0 +- except Exception, e: ++ except Exception as e: + return exit_with_general_critical(e) + + +@@ -858,7 +858,7 @@ def check_queues(con, warning, critical, + message += performance_data(perf_data, [(total_queues, "total_queues", warning, critical), (readers_queues, "readers_queues"), (writers_queues, "writers_queues")]) + return check_levels(total_queues, warning, critical, message) + +- except Exception, e: ++ except Exception as e: + return exit_with_general_critical(e) + + +@@ -905,7 +905,7 @@ def check_queries_per_second(con, query_ + + return check_levels(query_per_sec, warning, critical, message) + +- except Exception, e: ++ except Exception as e: + return exit_with_general_critical(e) + + +@@ -952,7 +952,7 @@ def check_oplog(con, warning, critical, + message += performance_data(perf_data, [("%.2f" % hours_in_oplog, 'oplog_time', warning, critical), ("%.2f " % approx_level, 'oplog_time_100_percent_used')]) + return check_levels(-approx_level, -warning, -critical, message) + +- except Exception, e: ++ except Exception as e: + return exit_with_general_critical(e) + + +@@ -970,7 +970,7 @@ Under very high write situations it is n + message += performance_data(perf_data, [(j_commits_in_wl, "j_commits_in_wl", warning, critical)]) + return check_levels(j_commits_in_wl, warning, critical, message) + +- except Exception, e: ++ except Exception as e: + return exit_with_general_critical(e) + + +@@ -986,7 +986,7 @@ def check_journaled(con, warning, critic + message += performance_data(perf_data, [("%.2f" % journaled, "journaled", warning, critical)]) + return check_levels(journaled, warning, critical, message) + +- except Exception, e: ++ except Exception as e: + return exit_with_general_critical(e) + + +@@ -1003,7 +1003,7 @@ than the amount physically written to di + message += performance_data(perf_data, [("%.2f" % writes, "write_to_data_files", warning, critical)]) + return check_levels(writes, warning, critical, message) + +- except Exception, e: ++ except Exception as e: + return exit_with_general_critical(e) + + +@@ -1015,7 +1015,7 @@ def get_opcounters(data, opcounters_name + delete = data[opcounters_name]['delete'] + getmore = data[opcounters_name]['getmore'] + command = data[opcounters_name]['command'] +- except KeyError, e: ++ except KeyError as e: + return 0, [0] * 100 + total_commands = insert + query + update + delete + getmore + command + new_vals = [total_commands, insert, query, update, delete, getmore, command] +@@ -1181,7 +1181,7 @@ def check_page_faults(con, sample_time, + #on linux servers only + page_faults = (int(data2['extra_info']['page_faults']) - int(data1['extra_info']['page_faults'])) / sample_time + except KeyError: +- print "WARNING - Can't get extra_info.page_faults counter from MongoDB" ++ print("WARNING - Can't get extra_info.page_faults counter from MongoDB") + sys.exit(1) + + message = "Page Faults: %i" % (page_faults) +@@ -1189,7 +1189,7 @@ def check_page_faults(con, sample_time, + message += performance_data(perf_data, [(page_faults, "page_faults", warning, critical)]) + check_levels(page_faults, warning, critical, message) + +- except Exception, e: ++ except Exception as e: + exit_with_general_critical(e) + + +@@ -1205,11 +1205,11 @@ def chunks_balance(con, database, collec + shards = col.distinct("shard") + + except: +- print "WARNING - Can't get chunks infos from MongoDB" ++ print("WARNING - Can't get chunks infos from MongoDB") + sys.exit(1) + + if nscount == 0: +- print "WARNING - Namespace %s is not sharded" % (nsfilter) ++ print("WARNING - Namespace %s is not sharded" % (nsfilter)) + sys.exit(1) + + avgchunksnb = nscount / len(shards) +@@ -1221,19 +1221,19 @@ def chunks_balance(con, database, collec + message = "Namespace: %s, Shard name: %s, Chunk delta: %i" % (nsfilter, shard, delta) + + if delta >= criticalnb and delta > 0: +- print "CRITICAL - Chunks not well balanced " + message ++ print("CRITICAL - Chunks not well balanced " + message) + sys.exit(2) + elif delta >= warningnb and delta > 0: +- print "WARNING - Chunks not well balanced " + message ++ print("WARNING - Chunks not well balanced " + message) + sys.exit(1) + +- print "OK - Chunks well balanced across shards" ++ print("OK - Chunks well balanced across shards") + sys.exit(0) + +- except Exception, e: ++ except Exception as e: + exit_with_general_critical(e) + +- print "OK - Chunks well balanced across shards" ++ print("OK - Chunks well balanced across shards") + sys.exit(0) + + +@@ -1249,7 +1249,7 @@ def check_connect_primary(con, warning, + data = con.admin.command(son.SON([('isMaster', 1)])) + + if data['ismaster'] == True: +- print "OK - This server is primary" ++ print("OK - This server is primary") + return 0 + + phost = data['primary'].split(':')[0] +@@ -1267,17 +1267,17 @@ def check_connect_primary(con, warning, + + return check_levels(pconn_time, warning, critical, message) + +- except Exception, e: ++ except Exception as e: + return exit_with_general_critical(e) + + + def check_collection_state(con, database, collection): + try: + con[database][collection].find_one() +- print "OK - Collection %s.%s is reachable " % (database, collection) ++ print("OK - Collection %s.%s is reachable " % (database, collection)) + return 0 + +- except Exception, e: ++ except Exception as e: + return exit_with_general_critical(e) + + +@@ -1289,7 +1289,7 @@ def check_row_count(con, database, colle + + return check_levels(count, warning, critical, message) + +- except Exception, e: ++ except Exception as e: + return exit_with_general_critical(e) + + +@@ -1309,7 +1309,7 @@ def write_values(file_name, string): + f = None + try: + f = open(file_name, 'w') +- except IOError, e: ++ except IOError as e: + #try creating + if (e.errno == 2): + ensure_dir(file_name) +@@ -1328,11 +1328,11 @@ def read_values(file_name): + data = f.read() + f.close() + return 0, data +- except IOError, e: ++ except IOError as e: + if (e.errno == 2): + #no previous data + return 1, '' +- except Exception, e: ++ except Exception as e: + return 2, None + + Added: head/databases/nagios-check_mongodb/pkg-descr ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/databases/nagios-check_mongodb/pkg-descr Mon May 12 11:32:53 2014 (r353804) @@ -0,0 +1,3 @@ +This is a simple Nagios check script to monitor your MongoDB server(s). + +WWW: https://github.com/mzupan/nagios-plugin-mongodb