1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
|
### Author: <gianfranco@mongodb.com>
global mongodb_user
mongodb_user = os.getenv('DSTAT_MONGODB_USER') or os.getenv('USER')
global mongodb_pwd
mongodb_pwd = os.getenv('DSTAT_MONGODB_PWD')
global mongodb_host
mongodb_host = os.getenv('DSTAT_MONGODB_HOST') or '127.0.0.1:27017'
class dstat_plugin(dstat):
"""
Plugin for MongoDB.
"""
def __init__(self):
global pymongo
import pymongo
try:
self.m = pymongo.MongoClient(mongodb_host)
if mongodb_pwd:
self.m.admin.authenticate(mongodb_user, mongodb_pwd)
self.db = self.m.admin
except Exception as e:
raise Exception('Cannot interface with MongoDB server: %s' % e)
stats = self.db.command("listDatabases")
self.dbList = []
for db in stats.get('databases'):
self.dbList.append(db.get('name'))
line = self.db.command("serverStatus")
if 'storageEngine' in line:
self.storageEngine = line.get('storageEngine').get('name')
else:
self.storageEngine = 'mmapv1'
self.name = 'mongodb stats'
self.nick = ('dsize', 'isize', 'ssize')
self.vars = ('dataSize', 'indexSize', 'storageSize')
self.type = 'b'
self.width = 5
self.scale = 2
self.count = 1
if self.storageEngine == 'mmapv1':
self.nick = self.nick + ('fsize',)
self.vars = self.vars + ('fileSize',)
def extract(self):
self.set = {}
# refresh the database list every 10 iterations
if (self.count % 10) == 0:
stats = self.m.admin.command("listDatabases")
self.dbList = []
for db in stats.get('databases'):
self.dbList.append(db.get('name'))
self.count += 1
for name in self.vars:
self.set[name] = 0
for db in self.dbList:
self.db = self.m.get_database(db)
stats = self.db.command("dbStats")
for name in self.vars:
self.set[name] += int(stats.get(name)) / (1024 * 1024)
self.val = self.set
|