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()