munin-contrib/plugins/mongodb/mongo_lock

70 lines
1.5 KiB
Python
Executable File

#!/usr/bin/env python
"""
=head1 NAME
mongo_lock - MongoDB lock Plugin
=head1 APPLICABLE SYSTEMS
MongoDB 2.X. The "lockTime" field was removed in later versions.
=head1 CONFIGURATION
[mongo_lock]
env.MONGO_DB_URI mongodb://user:password@host:port/dbname
=head1 AUTHOR
Original script there : https://github.com/comerford/mongo-munin
Doc added by Alban Espie-Guillon <alban.espie@alterway.fr>
=cut
"""
import urllib2
import sys
try:
import json
except ImportError:
import simplejson as json
def getServerStatus():
raw = urllib2.urlopen( "http://127.0.0.1:28017/_status" ).read()
return json.loads( raw )["serverStatus"]
name = "locked"
def doData():
status = getServerStatus()
if status["version"] >= "2.2.0":
if status["globalLock"]["lockTime"]["$numberLong"]:
ratio = float(status["globalLock"]["lockTime"]["$numberLong"]) / float(status["globalLock"]["totalTime"]["$numberLong"])
else:
ratio = float(status["globalLock"]["lockTime"]) / status["globalLock"]["totalTime"]
else:
ratio = status["globalLock"]["ratio"]
print name + ".value " + str( 100 * ratio )
def doConfig():
print "graph_title MongoDB write lock percentage"
print "graph_args --base 1000 -l 0 "
print "graph_vlabel percentage"
print "graph_category db"
print name + ".label " + name
if __name__ == "__main__":
if len(sys.argv) > 1 and sys.argv[1] == "config":
doConfig()
else:
doData()