Exemplo n.º 1
0
def generate_backup():
    ''' 一天只备份一次, 在最早的一次发生(任何)配置变更后。

    每天的第一次配置改动后,触发 config reload_all,备份一次改动后的所有区的内容.

    每天第一次备份全部分区的全部配置时,可能会要花些时间,
    但实际测试显示是很快的, 基本在1秒内全备份完成。 

    如果 redis 重启了,要从mongo中调出所有的配置,再备份,则可能略花点时间。
    只要不是redis重启,实测速度基本可以接受。
    '''

    today_str = str(datetime.datetime.now().date())

    #need put into redis, or when program restarted, it will re-backup
    conf_backup_date = RedisTool.get('conf_backup_date')  #is a string

    if today_str == conf_backup_date:
        return

    #conf_with_multi_area = [ c['name'] for c in g_lConfig if c['use_subarea'] ]

    subarea_conf_obj = Config.get('subareas_conf_1')
    if not subarea_conf_obj:
        subarea_conf_obj = Config.create('subareas_conf_1')
    subarea_conf = eval(subarea_conf_obj.data)
    subarea_ids = subarea_conf.keys()

    #   print '#### in backup, subarea_config.data=', subarea_conf
    #   print '#### in backup, subarea_ids=', subarea_ids

    subarea_ids.sort()  #put 1 as first

    for area_id in subarea_ids:
        all_config_name_list = get_game_config_name_list(area_id)
        for conf_name in all_config_name_list:
            full_conf_name = conf_name + '_' + area_id
            print '##### in config backup,', full_conf_name, '@', datetime.datetime.now(
            )

            #need backup conf_obj.data, which has comments "# ... "
            conf_obj = Config.get(full_conf_name)
            if not conf_obj:
                continue

            #conf_bk = Config.get(full_conf_name + '_' + today_str)
            #if conf_bk is None:
            conf_bk = Config.create(full_conf_name + '_' + today_str)
            conf_bk.data = conf_obj.data
            conf_bk.put()

            #delete old backups
            old_conf_obj = Config.get(full_conf_name + '_' + conf_backup_date)
            if not old_conf_obj:
                continue
            old_conf_obj.delete()

    RedisTool.set('conf_backup_date', today_str)  # str
Exemplo n.º 2
0
def generate_backup():
    ''' 一天只备份一次, 在最早的一次发生(任何)配置变更后。

    每天的第一次配置改动后,触发 config reload_all,备份一次改动后的所有区的内容.

    每天第一次备份全部分区的全部配置时,可能会要花些时间,
    但实际测试显示是很快的, 基本在1秒内全备份完成。 

    如果 redis 重启了,要从mongo中调出所有的配置,再备份,则可能略花点时间。
    只要不是redis重启,实测速度基本可以接受。
    '''

    today_str = str( datetime.datetime.now().date() )

    #need put into redis, or when program restarted, it will re-backup
    conf_backup_date = RedisTool.get('conf_backup_date')  #is a string

    if today_str == conf_backup_date:
        return

    #conf_with_multi_area = [ c['name'] for c in g_lConfig if c['use_subarea'] ]

    subarea_conf_obj = Config.get('subareas_conf_1')
    if not subarea_conf_obj:
        subarea_conf_obj = Config.create('subareas_conf_1')
    subarea_conf = eval(subarea_conf_obj.data)
    subarea_ids = subarea_conf.keys()

#   print '#### in backup, subarea_config.data=', subarea_conf
#   print '#### in backup, subarea_ids=', subarea_ids

    subarea_ids.sort() #put 1 as first

    for area_id in subarea_ids:    
        all_config_name_list = get_game_config_name_list(area_id)
        for conf_name in all_config_name_list:
            full_conf_name = conf_name + '_' + area_id
            print '##### in config backup,', full_conf_name, '@', datetime.datetime.now()

            #need backup conf_obj.data, which has comments "# ... "
            conf_obj = Config.get(full_conf_name)
            if not conf_obj:
                continue

            #conf_bk = Config.get(full_conf_name + '_' + today_str)
            #if conf_bk is None:
            conf_bk = Config.create(full_conf_name + '_' + today_str)
            conf_bk.data = conf_obj.data
            conf_bk.put()
            
            
            #delete old backups
            old_conf_obj = Config.get(full_conf_name + '_' + conf_backup_date)
            if not old_conf_obj:
                continue
            old_conf_obj.delete()

    RedisTool.set('conf_backup_date', today_str) # str
Exemplo n.º 3
0
def set_config_version(subarea='1', config_name=''):
    subarea = str(subarea)
    redis_config_name = config_version_key(subarea, config_name)
    set_time = int(time.time())
    RedisTool.set(redis_config_name, set_time, 72*60*60)
    return set_time
Exemplo n.º 4
0
def set_config_version(subarea='1', config_name=''):
    subarea = str(subarea)
    redis_config_name = config_version_key(subarea, config_name)
    set_time = int(time.time())
    RedisTool.set(redis_config_name, set_time, 72 * 60 * 60)
    return set_time
Exemplo n.º 5
0
def send_mobile_message():
    #"""发送手机短信
    #"""
    try:
        if sms_config.SEND_MOBILE_MESSAGE is False:
            return 
        error_msg = traceback.format_exc()
        if error_msg.find('com.zeptolab.ctrbonus') >= 0:
            return
        if error_msg.find('IndexError') < 0 and \
         error_msg.find('KeyError') < 0 and \
         error_msg.find('Mongo') < 0 and \
         error_msg.find('mongo') < 0 and \
         error_msg.find('redis') < 0 and \
         error_msg.find('Redis') < 0 and \
         error_msg.find('AttributeError') < 0:
            return
        last_time = RedisTool.get(settings.CACHE_PRE+'mobile_time', None)
        error_num = RedisTool.get(settings.CACHE_PRE+'mobile_error_num', 0)
        error_time = RedisTool.get(settings.CACHE_PRE+'mobile_error_time', None)
        now = int(time.time())
        if error_time is None:
            error_num = 0
            RedisTool.set(settings.CACHE_PRE+'mobile_error_time', now, 0)
        else:
            total_second = now - error_time
            if total_second > 65:
                error_num = 0
                RedisTool.set(settings.CACHE_PRE+'mobile_error_time', now, 0)
                return
        #错误15条以上才开始发
        error_num += 1
        if error_num < 30:
            RedisTool.set(settings.CACHE_PRE+'mobile_error_num', error_num, 0) 
            return  
        if last_time is not None:
            total_second = now - last_time
            if total_second < 60 * 3:
                return 

        urllib2.urlopen(sms_config.MOBILE_URL + socket.gethostname(), 
                timeout=12)
        RedisTool.set(settings.CACHE_PRE+'mobile_time', now, 0) 
        RedisTool.set(settings.CACHE_PRE+'mobile_error_num', 0, 0)
        RedisTool.set(settings.CACHE_PRE+'mobile_error_time', now, 0)
    except:
        print 'send_mobile_message error'
        print_err()
Exemplo n.º 6
0
def send_mobile_message():
    #"""发送手机短信
    #"""
    try:
        if sms_config.SEND_MOBILE_MESSAGE is False:
            return
        error_msg = traceback.format_exc()
        if error_msg.find('com.zeptolab.ctrbonus') >= 0:
            return
        if error_msg.find('IndexError') < 0 and \
         error_msg.find('KeyError') < 0 and \
         error_msg.find('Mongo') < 0 and \
         error_msg.find('mongo') < 0 and \
         error_msg.find('redis') < 0 and \
         error_msg.find('Redis') < 0 and \
         error_msg.find('AttributeError') < 0:
            return
        last_time = RedisTool.get(settings.CACHE_PRE + 'mobile_time', None)
        error_num = RedisTool.get(settings.CACHE_PRE + 'mobile_error_num', 0)
        error_time = RedisTool.get(settings.CACHE_PRE + 'mobile_error_time',
                                   None)
        now = int(time.time())
        if error_time is None:
            error_num = 0
            RedisTool.set(settings.CACHE_PRE + 'mobile_error_time', now, 0)
        else:
            total_second = now - error_time
            if total_second > 65:
                error_num = 0
                RedisTool.set(settings.CACHE_PRE + 'mobile_error_time', now, 0)
                return
        #错误15条以上才开始发
        error_num += 1
        if error_num < 30:
            RedisTool.set(settings.CACHE_PRE + 'mobile_error_num', error_num,
                          0)
            return
        if last_time is not None:
            total_second = now - last_time
            if total_second < 60 * 3:
                return

        urllib2.urlopen(sms_config.MOBILE_URL + socket.gethostname(),
                        timeout=12)
        RedisTool.set(settings.CACHE_PRE + 'mobile_time', now, 0)
        RedisTool.set(settings.CACHE_PRE + 'mobile_error_num', 0, 0)
        RedisTool.set(settings.CACHE_PRE + 'mobile_error_time', now, 0)
    except:
        print 'send_mobile_message error'
        print_err()