#!/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. [Java]private, public,protected,friendly的区别(转载)一下子就记住了

    http://teddyboy200382.blog.163.com/blog/static/320112002008825112549780/ 说明这四个关键字之前,我想就 class 之间的关系做 ...

  2. [小北De编程手记] : Lesson 02 - Selenium For C# 之 核心对象

    从这一篇开始,开始正式的介绍Selenium 以及相关的组件,本文的将讨论如下问题: Selenium基本的概念以及在企业化测试框架中的位置 Selenium核心对象(浏览器驱动) Web Drive ...

  3. Android 集成百度统计

    在这里简单的介绍下怎么统计自己研发的APP 的用户活跃度,和使用量,以此来展示自己APP的用户使用量! 我们的APP都需要注入数据分析,以供我们实时的了解APP的下载和使用量提供了依据! 不过我还是更 ...

  4. 1.初次运行git前的配置

    在系统上安装了 Git后,你会想要做几件事来定制你的 Git 环境. 每台计算机上只需要配置一次,程序升级时会保留配置信息. 你可以在任何时候再次通过运行命令来修改它们. Git 自带一个 git c ...

  5. tomcat + jdk 快速部署

    环境: apache-tomcat-7.0.73 java version "1.8.0_112" 注释:创建普通用户,使用 sudu进行操作,本文略写. 1.JDK 1.jdk配 ...

  6. win2008 svn 搬迁

    公司说电脑不够用,要我们将本地开发用的服务器贡献出来给别人当办公电脑用..汗 将SVN从一个win2008服务器上搬迁到另一个win2008服务器上面. 先将服务器上面的配置好的svn 跟目录备份下来 ...

  7. SQL Server ->> 高可用与灾难恢复(HADR)技术 -- AlwaysOn(实战篇)之AlwaysOn可用性组搭建

    因为篇幅原因,AlwaysOn可用性组被拆成了两部分:理论部分和实战部分.而实战部分又被拆成了准备工作和AlwaysOn可用性组搭建. 三篇文章各自的链接: SQL Server ->> ...

  8. Python初学者第五天 列表及简单操作

    5day 数据类型:列表 1.创建列表 user = ['aa','14',1,10,'aa',1,2,3,3,5,9] n = [] list() m = list() 2.查询 a.按索引查询 b ...

  9. 杨氏矩阵C++实现

    何为杨氏矩阵?这个网上的介绍很多,下面给出杨氏矩阵搜索算法: #include <iostream> using namespace std; // 杨氏矩阵查找算法 ], int N, ...

  10. Maven学习总结(一)——pom.xml文件配置详解

    <build>标签:<plugins>给出构建过程中所用到的插件 <plugins> <plugin> <groupId>org.apach ...