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