#!/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. ideal key

    常用快捷键 设置快捷键:File -> Settings -> IDE Settings -> Keymap -> 选择“eclipse” -> 然后“Copy”一份 - ...

  2. Repeat Number(数论)

    Repeat Number 题目描述: Definition: a+b = c, if all the digits of c are same ( c is more than ten), then ...

  3. android popupwindow位置显示

    1.在控件的上方: private void showPopUp(View v) { LinearLayout layout = new LinearLayout(this); layout.setB ...

  4. 购物车动画(Android)

    购物车动画(Android) 前言:当我们写商城类的项目的时候,一般都会有加入购物车的功能,加入购物车的时候会有一些抛物线动画,最近做到这个功能,借助别人的demo写了一个. 效果: 开发环境:And ...

  5. 任务十五:零基础JavaScript编码(三)

    任务目的 在上一任务基础上继续JavaScript的体验 接触一下JavaScript中的高级选择器 学习JavaScript中的数组对象遍历.读写.排序等操作 学习简单的字符串处理操作 任务描述 参 ...

  6. restful课程凌杂知识点

      request.post:字典形式数据 request.body:收到的是源数据

  7. 无缓冲和带缓冲channel的区别

    常规定义的channel都是默认不带缓冲的,如下代码所示 package main import ( "fmt" ) func main() { c := make(chan in ...

  8. vagrant 安装虚拟机

    目录 搭建属于你的环境 安装virtualbox 安装 vagrant vagrant 添加系统镜像box 新建虚拟机 相关配置 ==遇到问题== [TOC] 搭建属于你的环境 安装环境有时也是头疼的 ...

  9. 如何使git忽略某些文件或文件夹

    为什么要忽略某些文件或文件夹的变化? git作为一款项目文件变更版本管理软件,其主要功能之一就是追踪项目文件夹内各种文件及文件夹的变更情况.但是,在日常使用中,并非项目文件夹下的所有文件及文件夹变更都 ...

  10. 【海龟汤策略】反趋势交易策略源代码分享(基于BOTVS)

    策略介绍: 海龟之汤,简称“龟汤”,是个与海龟交易法则相反的交易策略,它利用了跟势交易(特别是海龟方式)在很多假突破方面的缺陷来获利(把海龟做成汤吃掉).上世纪八十年代早期,有个非常著名的交易员团体— ...