备份检查脚本

#!/usr/bin/env python
# -*- coding=utf-8 -*-
#coding=utf-8
import requests
import urllib
import time,datetime
import json
import sys
import codecs
import random
import os
import commands
import base64
import smtplib

#import logging
def _wrap_with(code):

    def inner(text, bold=False):
        c = code
        if bold:
            c = "1;%s" % c
        return "\033[%sm%s\033[0m" % (c, text)
    return inner

red = _wrap_with('31')
green = _wrap_with('32')
yellow = _wrap_with('33')


def print_log_record_on_error(func):
    def wrap(self, *args, **kwargs):
        try:
            return func(self, *args, **kwargs)
        except:
            import sys
            print >>sys.stderr, "Unable to create log message msg=%r, args=%r " % (
                                getattr(self, 'msg', '?'), getattr(self, 'args', '?'))
            raise
    return wrap
import logging
#logging.LogRecord.getMessage = print_log_record_on_error(logging.LogRecord.getMessage)

filetime = time.strftime("%Y-%m-%d", time.localtime())
filename = "data-%s.log" %filetime
#print filename
logging.basicConfig(level=logging.DEBUG,  
                    format='%(asctime)s %(levelname)s %(message)s',  
                    datefmt='%Y-%b-%d  %H:%M:%S',  
                    filename='./data-%s.log' %filetime,  
                    filemode='a')

#def exitprint(msg):
#    print red(msg) 
#    sys.exit(9)

def get_all_game_mes(game_id):
    if game_id == 136:
        api_url="http://api.uoc.uuzu.com/ucc/%s/KO-SN" % game_id
    elif game_id == 148:
        api_url="http://api.uoc.uuzu.com/ucc/%s/JP-SN" % game_id
    else:
        api_url="http://api.uoc.uuzu.com/ucc/%s/G-SN" % game_id
    r = requests.get(api_url).json()
    result = json.dumps(r , indent =2 ,ensure_ascii=False).encode('utf-8')
    sapi_data = json.loads(result)
    msg = sapi_data['data']
    return msg

def random_serid(mse):
    num = len(mse) -1
    random_num = random.randint(0 , num)
    server_data = mse[random_num]['name']
#   print server_data
    m = server_data.encode("utf-8")
    serverid = m.split(']')[0].split('[')[1]
    ip = m.split('_')[1].split(',')
#   print serverid,ip
    return ip,serverid


def get_serid(num,mse):
    random_num = num
    server_data = mse[random_num]['name']
    m = server_data.encode("utf-8")
    serverid = m.split(']')[0].split('[')[1]
    ip = m.split('_')[1].split(',')
    return ip,serverid


def cmd(ip,command):
    ret = commands.getstatusoutput(command)
    if ret[0] == 0:
        return ret[1]
    else:
        logging.info('error:%s IP:%s %s' %(ret[1],ip,cmd))
def num_days_ago(num):
    few_day_ago = datetime.datetime.now() - datetime.timedelta(days=num)
    return few_day_ago


def  ready_to_recovery(ip,serverid):
    cmd(ip,"rm -rf /tmp/*3306.tar.gz;rm -rf /tmp/*_3306-increase.tar.gz;rm -rf /data/mysql/var.*")
    if os.path.isfile('/tmp/uuzuback_restore.py'):
        pass
    else:
        cmd(ip,"wget http://10.0.2.253/scripts/uuzuback_restore.py -O /tmp/uuzuback_restore.py;chmod 777 /tmp/uuzuback_restore.py")

    three_days_ago = num_days_ago(3)
    recovery_time= three_days_ago.strftime("%Y-%m-%d %H:%M:00")
    loginfomsg = ("recovery_time = %s" %(recovery_time))
#   logging.info(loginfomsg)
#   print green(recovery_time)
    script = "/tmp/uuzuback_restore.py" 
    recovery_cmd="python %s -t '%s' -s %s -b mysql -I 3306"%(script,recovery_time,serverid)
    logging.info(recovery_cmd)
    res = cmd(ip,recovery_cmd)
    if "error" in res:
        logging.error("%s,IP:%s"%(res,ip))
    else:
        logging.info("IP:%s Backup restore successful" %(ip))

def get_backup_recovery_time (ip):
    connect_mysql = "mysql -udbmanager -peyDqNafZ6pq39Rah"
    log_name_cmd = "%s -e 'show databases' |grep log " %(connect_mysql)
    log_name = cmd(ip,log_name_cmd)
    three_days_ago = num_days_ago(3)
    three_days_ago_d =  three_days_ago.strftime("%Y_%m_%d")
    newestime_log_cmd = "%s %s -e 'show tables' |grep player_count | grep %s |grep -v ad" %(connect_mysql,log_name,three_days_ago_d)
#   data_log_name = cmd(ip,newestime_log_cmd)
    r_data_name = commands.getstatusoutput(newestime_log_cmd)
    data_log_name = r_data_name[1]
    logging.info ("data_log_name3= %s" %(data_log_name))
    if data_log_name:
        pass
    else:
        four_days_ago = num_days_ago(4)
            four_days_ago_d =  four_days_ago.strftime("%Y_%m_%d")
            newestime_log_cmd = "%s %s -e 'show tables' |grep player_count | grep %s |grep -v ad" %(connect_mysql,log_name,four_days_ago_d)
            data_log_name = cmd(ip,newestime_log_cmd)
        logging.info ("data_log_name4= %s" %(data_log_name))
    try:
        if data_log_name:
            databaktime_cmd = "%s %s -e 'select create_time from %s order by create_time desc limit 1'" %(connect_mysql,log_name,data_log_name)
            backup_newestime_m = cmd(ip,databaktime_cmd)
            backup_newestime = "%s %s" %(backup_newestime_m.split()[1],backup_newestime_m.split()[2])
            if backup_newestime !=None:
                loginfomsg  = ("%s Database log time is  %s" %(ip,backup_newestime))
                logging.info(loginfomsg)
                return backup_newestime
    except Exception,e:
        logging.info ("%s;%s"%(e,ip))
    else:
        backup_newestime = "1990-09-01 00:00:01" 
        return (backup_newestime)   

def get_backfile_time(ip):
    if len(ip) == 1:
        inet_ip = ip[0] 
    else:
        inet_ip = ip[0]
        outnet_ip = ip[1]
    get_backfile_name = "ls -lrt /tmp |grep %s |tail -1 |awk '{print $9}'" %(inet_ip)
    if get_backfile_name.strip() =='':
        logging.error("don't hava backfile or server ip had change %s" %(ip))
    backfile_name = cmd(ip,get_backfile_name)
    backfile_info = os.stat("/tmp/%s" %(backfile_name))
    backfile_t = time.localtime(backfile_info.st_mtime)
    backfile_time = time.strftime("%Y-%m-%d %H:%M:00" , backfile_t)
    loginfomsg = ("Backup file timestamp is %s"%backfile_time)
    logging.info(loginfomsg)
    return backfile_time    

def compare_time(db_log_t,bak_file_t):
    d1_t = datetime.datetime.strptime(bak_file_t, '%Y-%m-%d %H:%M:%S')
    d2_t = datetime.datetime.strptime(db_log_t, '%Y-%m-%d %H:%M:%S')
    difftime = d1_t -d2_t

    d1_s = time.strptime(db_log_t, "%Y-%m-%d %H:%M:%S")
    d2_s = time.strptime(bak_file_t, "%Y-%m-%d %H:%M:%S")
    d1_s_Stamp = int(time.mktime(d1_s))
    d2_s_Stamp = int(time.mktime(d2_s))
    if d1_s_Stamp > d2_s_Stamp + int(60*60*15):
        logging.error('Greater than 15 minutes')
        return difftime,1
    else:
        logging.info('Less than 15 minutes')
        return difftime,0


def compare_opentime(serverid):
        try:
                opgame_url="http://opgame.uuzu.com/api/group/key/myzEHP14/server_id/%s/debug/1"  % serverid
                r = requests.get(opgame_url).json()
                op_result = json.dumps(r , indent =2 ,ensure_ascii=False).encode('utf-8')
                msg = json.loads(op_result)
                op_data = msg['data']
                opentim = op_data['first_opentime']
                opentime = int (opentim)

        except Exception,e:
                logging.info (e)
        four_time = int(time.time()) - 86400 * int(4)
        if four_time > opentime:
                pass
        return 1
        else:
                logging.info ("%s didn't go to service time" % serverid)
        return 0


def Sendmail(to_addr_list = [],subject_header = 'Test',body = 'This is just for test'):
    #邮件主题
    subject_header = 'Subject: ' + subject_header + '\r'
    #发送服务器smtp地址
    mail_server = 'smtp.163.com'
    #发送服务器smtp端口
    mail_server_port = 25
    #发件人邮件地址
    from_addr = 'sendmail151@163.com'
    #邮件的头信息
    from_header = 'From: %s\r' % from_addr

    #引用smtplib模块
    smtp = smtplib.SMTP()
    #连接发送邮件服务器
    smtp.connect(mail_server,mail_server_port)
    #登陆smtp服务器
        mail_passwd = base64.decodestring('U2VuZG1haWwxNjM=')
    smtp.login('sendmail151@163.com',mail_passwd)
    #多个邮件地址的批量发送
    for to_addr in to_addr_list:
        to_header = 'To: %s\r' % to_addr
        #邮件文本信息
        email_message = '%s\n%s\n%s\n\r\n%s' %(from_header,to_header,subject_header,body)
        #发送邮件
        smtp.sendmail(from_addr, to_addr, email_message)
    #退出smtp服务器
    smtp.quit()

#mse = get_all_game_mes(180)
#ip,serverid =  random_serid(mse)
#print ip,serverid
#ip= ['10.10.110.242', '110.10.40.242']
#ip = ['10.6.56.11']
#serverid = 2184310034
#print green(ip,serverid)
#ready_to_recovery(ip,serverid)
#db_log_t = get_backup_recovery_time(ip)
#bak_file_t = get_backfile_time(ip)
#compare_time(db_log_t,bak_file_t)

if __name__=='__main__':
    game_id = [97,119,121,136,148,159,169,180]
    game_name =['大皇帝','大皇帝手游','大皇帝(台湾)','大皇帝(韩国)','日本大皇帝','东南亚大皇帝','韩国大皇帝手游','东南亚手游']
    game_id = [97,119,159,180]
    game_name =['大皇帝','大皇帝手游','东南亚大皇帝','东南亚手游']
    for i in range(0, len(game_id)):
        logging.info(game_name[i])
        mse = get_all_game_mes(game_id[i])
        num = len(mse)
        for i in range(num):
            ip,serverid = get_serid(i,mse)
            logging.info ("start to recovery %s" %serverid)
            res = compare_opentime (serverid)
            try:
                if res == 1:
                    ready_to_recovery(ip,serverid)
                    db_log_t = get_backup_recovery_time(ip)
                    bak_file_t = get_backfile_time(ip)
                    compare_time(db_log_t,bak_file_t)
                    time.sleep(120)
                else:
                    continue
            except Exception,e:
                        logging.info (e)

cmd_error = "cat %s|grep -B 1 -i error" %filename 
Mes = commands.getoutput(cmd_error)
if len(Mes) > 0:
    to_addr_list = ['xxxb@youzu.com','xxxa@youzu.com','xxxb@youzu.com']
    Sendmail(to_addr_list = to_addr_list,subject_header='DHD_CHEK', body=Mes)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值