salt

import os
import re
import sys
import mysql.connector
from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex
from apscheduler.schedulers.blocking import BlockingScheduler
 
class prpcrypt():
    def __init__(self, key):
        self.key = key
        self.mode = AES.MODE_CBC
     
    def encrypt(self, text):
        cryptor = AES.new(self.key, self.mode, self.key)
        length = 16
        count = len(text)
        add = length - (count % length)
        text = text + ('\0' * add)
        self.ciphertext = cryptor.encrypt(text)
        return b2a_hex(self.ciphertext)
    
    def decrypt(self, text):
        cryptor = AES.new(self.key, self.mode, self.key)
        plain_text = cryptor.decrypt(a2b_hex(text))
        return plain_text.rstrip('\0')

sched = BlockingScheduler()  
pc=prpcrypt('keyskeyskeyskeys')
a='260199a8f9a293a588da0fc899769464'
b='2dba8883803126a63bd2827ca7fc95e7'
c='4986df766bbad540ce3e028a8fcbf57d'
d='824e3a2a5a5824eb63ecc46e9fba9332'
e='7c523d21f61a61b9a1eb85b183e49567'

list=['192.168.31.111','192.168.31.112','192.168.31.113']


def diskTest(arg1):
    data=os.popen("salt-ssh "+arg1+" cmd.run 'df -h'").readlines()
    global result
    result=[]
    #print data
    for (index,char) in enumerate(data):
        if index==0:
            ip=char[0:14]
            result.append(ip)
        if index==2:
            disk_use=char[36:40]
            result.append(disk_use)
 
def ioTest(arg1):
    data=os.popen("salt-ssh "+arg1+" cmd.run 'iostat'").readlines()
    for (index,char) in enumerate(data):
        if index==4:
            iowait=char[35:43]
            idle=char[53:59]
            result.append(iowait)
            result.append(idle)
        if index==7:
            tps=char[20:27]
            result.append(tps)
def utilTest(arg1):
    data=os.popen("salt-ssh "+arg1+" cmd.run 'iostat -d -x -k 1 1'").readlines()  
    for (index,char) in enumerate(data):
        if index==4:
            util1=char[-6:]
            util=util1.replace("\n","")
            result.append(util)

           
def memTest(arg1):
    data=os.popen("salt-ssh "+arg1+" cmd.run 'free -m'").readlines()

    for (index,char) in enumerate(data):
        if index==2:
            mem_used=char[28:33]
            mem_free=char[38:44]
            result.append(mem_used)
            result.append(mem_free)

def statusTest():
    conn = mysql.connector.connect(host=pc.decrypt(c), user=pc.decrypt(a), passwd=pc.decrypt(b), charset="utf8")
    cur=conn.cursor()
    cur.execute('show slave status;')
    for row in cur:
        slave_io1=row[10]
        slave_io=slave_io1.encode("utf-8")
        slave_sql1=row[11]
        slave_sql=slave_sql1.encode("utf-8")
    result.append(slave_io)
    result.append(slave_sql)
    cur.close()
    conn.close()
    print result


def mysqlStatus():
    data=os.popen("mysql -u"+pc.decrypt(a)+" -p"+pc.decrypt(b)+" -h"+pc.decrypt(c)+" -e'status;'").readlines()
    print '8888888888'
    for (index,char) in enumerate(data):
        if index==18:
            updatetime1=re.findall(r":(.+)",char)        
            updatetime="".join(updatetime1).replace('\t','')
            result.append(updatetime)
        if index==20:
            threads=re.search('(Threads:\s+)(.*)(\s+Questions)',char, re.S).group(2)
            questions=re.search('(Questions:\s+)(.*)(\s+Slow queries)',char, re.S).group(2)
            slow_queries=re.search('(Slow queries:\s+)(.*)(\s+Opens)',char, re.S).group(2)
            opens=re.search('(Opens:\s+)(.*)(\s+Flush tables)',char, re.S).group(2)
            flush_tables=re.search('(Flush tables:\s+)(.*)(\s+Open tables)',char, re.S).group(2)
            open_tables=re.search('(Open tables:\s+)(.*)(\s+Queries per second avg)',char, re.S).group(2)
            queries_per_second_avg1=re.findall('Queries per second avg:(.+)',char)
            queries_per_second_avg="".join(queries_per_second_avg1)
            result.append(threads)
            result.append(questions)
            result.append(slow_queries)
            result.append(opens)
            result.append(flush_tables)
            result.append(open_tables)
            result.append(queries_per_second_avg)
            print result

def itest():
    sql="insert into mysql_condictions(IP,disk_use,iowait,idle,tps,util,mem_used,mem_free,slave_io,slave_sql,updatetime,threads,questions,slow_queries,opens,flush_tables,open_tables,queries_per_second_avg) values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"
    conn = mysql.connector.connect(host=pc.decrypt(e), user=pc.decrypt(a), passwd=pc.decrypt(b),database=pc.decrypt(d), charset="utf8")
    cur=conn.cursor()
    print result
    cur.execute(sql,result)
    conn.commit()
    print "==============================="
    cur.close()
    conn.close()





@sched.scheduled_job('interval', seconds=5)  
def scheduled_job():
    for i in list:
        diskTest(i)
        ioTest(i)
        utilTest(i)
        memTest(i)
        statusTest()
        mysqlStatus()
        itest()

            

if __name__=='__main__':
    sched.start()

posted on 2018-03-14 14:39  步行者811  阅读(124)  评论(0)    收藏  举报

导航