博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
简单的mongo小工具 python
阅读量:4482 次
发布时间:2019-06-08

本文共 6883 字,大约阅读时间需要 22 分钟。

#!/bin/python#coding=utf-8### eg : mgotool.py  -i 127.0.0.1 -p 10001 -a xxxxx -u root -rc#import sys#sys.path.append('../')#reload(sys)#import MySQLdb#import redisimport datetimeimport pymongoimport argparseimport commandsimport os,sys,glob,re,timeimport ConfigParserfrom tempfile import TemporaryFileclass mymongo:    host=None    port=None    passwd=None    user=None    def __init__(self,host,port,user,passwd,dbname):        self.host=host        self.port=port        self.passwd=passwd        self.user=user        self.dbname=dbname        try:            self.conn=self.mongo_conn()            self.succ=True        except Exception as error:            print error            print  "Connect mongo error: %s,server ip:%s:%s" % (error,self.host,self.port)            self.succ=False           def mongo_conn(self):        try:            #self.connection=pymongo.MongoClient(host=self.host, port=int(self.port),serverSelectionTimeoutMS=3)            #uri='mongodb://' + user + ':' + pwd + '@' + server + ':' + port +'/'+ db_name            uri="mongodb://%s:%s@%s:%s/%s" % (self.user,self.passwd,self.host,self.port,self.dbname)            #print uri            self.connection=pymongo.MongoClient(uri)            #self.connection=pymongo.MongoClient(host=self.host, port=int(self.port),serverSelectionTimeoutMS=3)            return self.connection        except Exception as error:            print 'mongo  connect fail %s' % (error)    def admin_comm(self,stmt):        return self.conn.admin.command(stmt)def current_op(myconn):    db=myconn.conn['local']    #res=collection.find()    current_op=db.current_op(True)    #print current_op    print "%-8s %-10s %-10s %-20s %-10s %-10s %-20s %s" % ('opid','desc','op','ns','secs','wLock','client','query')    for one in current_op['inprog']:        #print one.get('client','me')        #print one        if one.get('op','none')=='none':            continue        print "%-8s %-10s %-10s %-20s %-10s %-10s %-20s %s" % (one.get('opid','none'),one['desc'],one.get('op','none'),one.get('ns','none'),one.get('secs_running','none'),one.get('waitingForLock','none'),one.get('client','none'),one.get('query','none')) def slow_log(myconn):    '获取慢日志'    db=myconn.conn['local']    collection=db.system.profile    #log=collection.find({"op":{ "$ne":'command'}).sort({ "ts" : -1 })    log=collection.find({
"$and": [{
"op":{ "$ne":'command'}},{
"ns":{
"$ne":"local.oplog.rs"}}]}).sort([('ts',-1)]) for one in log: #print one['ts'] #data['updata_time']+datetime.timedelta(hours=8) ts=str(one['ts']+datetime.timedelta(hours=8))[0:19] print "%-10s %-10s %-8s %-20s %-10s %-20s %-8s %-8s %-8s " %(one['op'],one['ns'],one['millis'],ts,one.get('client','none'),one.get('user','none'),one.get('nscanned','none'),one.get('nscannedObjects','none'),one.get('nreturned','none')) #print " %s" % (one.get('query','none')) if one.get("execStats"): print " %s" % (one.get("execStats",'none'))def count_coll(myconn): '返回每个集合的条目' try: alldb=myconn.conn.database_names() for one in alldb: if one not in ('admin','local'): print "[ {} ]:".format(one) db=myconn.conn[one] all_coll=db.collection_names() for one in all_coll: onecol=db[one] col_count=onecol.find().count() print "%-30s %-30s" % (one,col_count) #print all_coll except Exception, error: print error def user_list(myconn): '列出数据库用户列表' try: db=myconn.conn['admin'] col=db['system.users'] userlist=col.find() #print userlist for one in userlist: msg="" msg="""[ user_db: {} {} ]""".format(one['user'],one['db']) roles="" for onerole in one["roles"]: roles=roles+"\n db:%-15s role:%-20s" % (onerole['db'],onerole["role"]) allmsg=msg+roles+"\n" print allmsg except Exception, error: print error def repl_status(myconn): '查找复制集信息' try: db=myconn.conn['admin'] replstatus=db.command("replSetGetStatus") print "[ {} ]".format(replstatus["set"]) for one in replstatus["members"]: onemsg="""name:{}stateStr:{}health:{}uptime:{}""".format(one['name'],one["stateStr"],one["health"],one["uptime"]) print onemsg except Exception, error: print errordef repl_conf(myconn): '查找复制集的配置信息' try: db=myconn.conn['admin'] replconf=db.command("replSetGetConfig") print "[ {} ]".format(replconf["config"]["_id"]) for one in replconf["config"]["members"]: onemsg="""host:{}hidden:{}priority:{}slaveDelay:{}votes:{}""".format(one['host'],one['hidden'],one['priority'],one['slaveDelay'],one['votes']) print onemsg except Exception, error: print error def mongo_conn(host,port,user,password,dbname): '连接mongo' try: myconn=mymongo(host,port,user,password,dbname) if myconn.succ: return True,myconn return False,'连接失败' except Exception, error: print error return False,errorif __name__ == '__main__': parser = argparse.ArgumentParser(description='mgongo tools') parser.add_argument('-p','--port', type=int,required=True,help="指定实例端口") parser.add_argument('-i','--ip', type=str,required=True,help="ip") parser.add_argument('-u','--user', type=str,required=True,help="用户名") parser.add_argument('-a','--password', type=str,required=True,help="验证密码") parser.add_argument('-sl','--slowlog', action='store_true',default=False,help='查看慢日志') parser.add_argument('-c','--count', action='store_true',default=False,help='统计collction的文档数') parser.add_argument('-ul','--userlist', action='store_true',default=False,help='列出系统用户及权限') parser.add_argument('-co','--currentop', action='store_true',default=False,help='查看当前连接线程') parser.add_argument('-rs','--replstatus', action='store_true',default=False,help='查看rs.status') parser.add_argument('-rc','--replconf', action='store_true',default=False,help='查看rs.config') args = parser.parse_args() port = args.port slowlog = args.slowlog count=args.count userlist=args.userlist currentop=args.currentop replstatus=args.replstatus replconf=args.replconf host=args.ip user=args.user password=args.password mongo_status,myconn=mongo_conn(host,port,user,password,'admin') if mongo_status: if slowlog: slow_log(myconn) if count: count_coll(myconn) if userlist: user_list(myconn) if currentop: current_op(myconn) if replstatus: repl_status(myconn) if replconf: repl_conf(myconn)

 

转载于:https://www.cnblogs.com/vansky/p/9996322.html

你可能感兴趣的文章
机器算法中的数据预处理
查看>>
Oracle总结
查看>>
项目测试Wikis(1)门户_用户接口
查看>>
MUI 样式按钮的禁用
查看>>
选择排序线性顺序版
查看>>
为什么要把系统拆分成分布式的,为啥要用Dubbo?
查看>>
servlet乱码问题
查看>>
从C到C++ (2)
查看>>
欢迎来到我的博客!
查看>>
LeedCde 题解目录
查看>>
Extjs实现Grid表格显示【一】
查看>>
java 单例模式 几个实现方法
查看>>
JavaBean简单示例
查看>>
oracle select in超过1000条报错解决方法
查看>>
js对cookie的操作方法
查看>>
利用Apach ab对nodejs进行并发负载的压力测试
查看>>
Appium scroll 滑动查找
查看>>
php 文件操作之抓取网站图片
查看>>
hibernate框架工具类
查看>>
face detection and aligh
查看>>