#!/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 redis
import datetime
import pymongo
import argparse
import commands
import os,sys,glob,re,time
import ConfigParser
from tempfile import TemporaryFile
class 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 error def 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,error if __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)

简单的mongo小工具 python的更多相关文章

  1. 用C语言实现解析简单配置文件的小工具

    本文介绍作者写的一个小工具,简单的代码中包含了C语言对字符串的处理技巧,对文本文件的简单解析,二进制文件的数据复制的方法,以及格式化输出文本文件的示例. 工具的输入是如下内容的配置文件: ;资源管理器 ...

  2. 简单bmp图片处理工具——python实现

    预备实现功能: 1.读取bmp文件 2.保存bmp文件 3.对bmp图片进行放大.缩小 4.对bmp图片进行灰度化 5.对bmp图片进行旋转 bmp文件格式非常简单,对于我这种初学者来说减少了不少不必 ...

  3. 发送邮件小工具(python)

    #!/usr/bin/python # -*- coding:UTF- -*- import sys import smtplib import email.mime.multipart import ...

  4. 几个可以提高工作效率的Python内置小工具

    在这篇文章里,我们将会介绍4个Python解释器自身提供的小工具.这些小工具在笔者的日常工作中经常用到,减少了各种时间的浪费,然而,却很容易被大家忽略.每当有新来的同事看到我这么使用时,都忍不住感叹, ...

  5. 18种CSS3loading效果完整版,兼容各大主流浏览器,提供在线小工具使用

    今天把之前分享的两篇博客<CSS3实现10种Loading效果>和 <CSS3实现8种Loading效果[二]>整理了一下.因为之前所分享的各种loading效果都只是做了we ...

  6. 基于百度通用翻译API的一个翻译小工具

    前几天写了一个简单的翻译小工具,是基于有道翻译的,不过那个翻译接口有访问限制,超过一定次数后会提示访问过于频繁,偶然发现百度翻译API如果月翻译字符少于200万是不收取费用的,所以就注册了一个百度开发 ...

  7. 实用在线小工具 -- Google URL Shortener

          实用在线小工具 -- Google URL Shortener 当你想分享一些你觉得有趣的东西,但是那个链接太长,以至于贴上去一大片.比如在微博上分享一张图片,然后贴上去图片的链接,url ...

  8. python开发目录合并小工具 PathMerge

    前言 这个程序陆陆续续开发了几天,正好我在学Python,就一边做一边学,倒是学到不少东西. 不得不说python是快速开发的好工具. 程序做了一些改进,这两天又忙着毕设,现在才想起来发到博客上.想想 ...

  9. 一个Json结构对比的Python小工具兼谈编程求解问题

    先上代码. jsondiff.py #!/usr/bin/python #_*_encoding:utf-8_*_ import argparse import json import sys rel ...

随机推荐

  1. C语言转置矩阵算法

    对一个nxn阶的矩阵进行转置,算法如下: #include <stdio.h> #define n 3 void MM(int a[][n]) { int i,j,temp; ;i < ...

  2. Android--Otto事件总线 -- 组件之间通讯框架使用 --模式解析

    前言:Otto事件总线 -- 组件之间通讯框架 对于之前的情况activity之间或者fragment之间等跳转传值一般都是用bundle.intent等,从activityA --- activit ...

  3. 微信jssdk 返回的 config invalid signature

    这几天一直在调试wxjssdk,按照api的需求,http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html ,先是根据a ...

  4. redis 存取问题

    今天在写短信接口时候,要把验证码存到缓存里面.因为之前别人已经写的有案例,按照之前写的,获取 值.存到数据库,存到redis. 因为有过期时间,需要传过期时间.但是怎么都是不出来... 源码: @Ov ...

  5. Oracle基础之Merge into

    Merge into语句是Oracle9i新增的语法,用来合并UPDATE和INSERT语句. 通过MERGE语句,根据一张表或多表联合查询的连接条件对另外一张表进行查询,连接条件匹配上的进行UPDA ...

  6. 17.分支的合并&遇到冲突时的分支合并

    分支的合并 假设你已经修正了 #53 问题,并且打算将你的工作合并入 master 分支. 为此,你需要合并 iss53 分支到 master 分支,这和之前你合并 hotfix 分支所做的工作差不多 ...

  7. [转]优化IIS7.5支持10万个同时请求的配置方法

    通过对IIS7的配置进行优化,调整IIS7应用池的队列长度,请求数限制,TCPIP连接数等方面,从而使WEB服务器的性能得以提升,保证WEB访问的访问流畅 通过对IIS7的配置进行优化,调整IIS7应 ...

  8. linux下生成带符号的随机密码

    cat /dev/urandom |tr -dc "[:graph:]"|fold -w 15|head 结果如下:

  9. 启动入口Start.java分析

    框架的启动器在包:org.ofbiz.base.start 入口为:Start.java的main方法 Start.java启动器内容: 步骤 详情 入参校验 help/status/shutdown ...

  10. HBase编程 API入门系列之put(客户端而言)(1)

    心得,写在前面的话,也许,中间会要多次执行,连接超时,多试试就好了. [hadoop@HadoopSlave1 conf]$ cat regionservers HadoopMasterHadoopS ...