def handle_sync_data(data, method): if 'contents' in data: dns_list, handle_list, result = [], [], [] for i in data['contents']: res = check_data(i, method) if res == 'true': if i['service'] == 'dns': #dns_list.append(i) dns_queue.put(i) else: handle_list.append(i) elif res == 'done': conf_logger.info('conf success: data: {}'.format(data)) content.add_oplog(i, 'success', '') r = { 'id': i['id'], 'status': 'success', 'description': 'conf success' } result.append(r) else: conf_logger.info('conf failed: {} data: {}'.format(res, data)) content.add_oplog(i, 'fail', res) r = {'id': i['id'], 'status': 'fail', 'description': res} result.append(r) if len(handle_list) > 0: task = sync_loop.create_task( pub_handle_conf({'contents': handle_list})) sync_loop.run_until_complete(task) res = task.result() return json.dumps(result + res), 200, { "Content-Type": "application/json" }
def cmp_update_db(data, proxy_res, xforward_res): data = change_data(data) proxy_res = change_data(proxy_res) xforward_res = change_data(xforward_res) l = [] for i in data: if i in xforward_res and i in proxy_res: if proxy_res[i]['status'] == 'success' and xforward_res[i][ 'status'] == 'success': content.add_oplog(data[i], 'success', '') handle_db_methods[data[i]['bt']][data[i]['sbt']][ data[i]['op']](data[i]) conf_logger.info('conf success: {}'.format(data[i])) l.append(proxy_res[i]) elif proxy_res[i]['status'] != 'success' and xforward_res[i][ 'status'] == 'success': content.add_oplog(data[i], proxy_res[i]['status'], proxy_res[i]['msg']) conf_logger.info('conf failed: {}'.format(data[i])) l.append(proxy_res[i]) elif proxy_res[i]['status'] == 'success' and xforward_res[i][ 'status'] != 'success': content.add_oplog(data[i], xforward_res[i]['status'], xforward_res[i]['msg']) conf_logger.info('conf failed: {}'.format(data[i])) l.append(xforward_res[i]) else: content.add_oplog(data[i], 'failed', 'conf failed') conf_logger.info('conf failed: {}'.format(data[i])) l.append(xforward_res[i]) else: content.add_oplog(data[i], 'failed', 'api return error') conf_logger.info('conf failed: {}'.format(data[i])) l.append({'id': i, 'status': 'faild', 'msg': 'api return error'}) return l
def beat_main_task(): d = register.get_all_register() if d is not None: for k in d: crm_cfg[k] = d[k] conf_logger.info('load register {}:{}'.format(k, d[k])) while True: #print(crm_cfg) if 'proxy' in crm_cfg and beat_connect( crm_cfg['proxy']['ip'], crm_cfg['proxy']['port']) == False: register.del_register('proxy') conf_logger.info('del register proxy:{}'.format(crm_cfg['proxy'])) del crm_cfg['proxy'] if 'xforward' in crm_cfg and beat_connect( crm_cfg['xforward']['ip'], crm_cfg['xforward']['port']) == False: register.del_register('xforward') conf_logger.info('del register xforward:{}'.format( crm_cfg['xforward'])) del crm_cfg['xforward'] if 'recursion' in crm_cfg and beat_connect( crm_cfg['recursion']['ip'], crm_cfg['recursion']['port']) == False: register.del_register('recursion') conf_logger.info('del register recursion:{}'.format( crm_cfg['recursion'])) del crm_cfg['recursion'] time.sleep(30)
def handle_data(data, method): if 'contents' in data: dns_list, handle_list = [], [] for i in data['contents']: res = check_data(i, method) if res == 'true': if i['service'] == 'dns': dns_queue.put(i) else: handle_list.append(i) elif res == 'done': conf_logger.info('conf success: data: {}'.format(data)) content.add_oplog(i, 'success', '') else: conf_logger.info('conf failed: {} data: {}'.format(res, data)) content.add_oplog(i, 'fail', res) if len(handle_list) > 0: contents = {'contents': handle_list} handle_queue.put(contents)
def update_db(data, res): data = change_data(data) res = change_data(res) for i in data: if i in res: content.add_oplog(data[i], res[i]['status'], res[i]['msg']) if res[i]['status'] == 'success': handle_db_methods[data[i]['bt']][data[i]['sbt']][ data[i]['op']](data[i]) conf_logger.info('conf success: {}'.format(data[i])) else: conf_logger.info('conf failed: {}'.format(data[i])) else: content.add_oplog(data[i], 'failed', 'api return error') conf_logger.info('conf failed: {}'.format(data[i]))
def handle_register(source, data, ip): if source == 'ms': return {'contents': gen_conf(handle.get_all_handle())} elif source == 'proxy': crm_cfg['proxy'] = get_url(data, ip) register.put_register('proxy', crm_cfg['proxy']) conf_logger.info('proxy register: {}'.format(crm_cfg['proxy'])) return {'contents': gen_conf(handle.get_all_proxy_handle())} elif source == 'xforward': crm_cfg['xforward'] = get_url(data, ip) register.put_register('xforward', crm_cfg['xforward']) conf_logger.info('xforward register: {}'.format(crm_cfg['xforward'])) return {'contents': gen_conf(handle.get_all_xforward_handle())} elif source == 'recursion': crm_cfg['recursion'] = get_url(data, ip) register.put_register('recursion', crm_cfg['recursion']) conf_logger.info('recursion register: {}'.format(crm_cfg['recursion'])) return {'contents': gen_conf(handle.get_all_recursion_handle())}
async def pub_conf(data): async with aiohttp.ClientSession() as client: if data['bt'] in fpga_bt: fpga_res = await conf_dnsys(client, data) conf_logger.debug('recv data from dnsys: {}'.format(fpga_res)) try: if fpga_res[0]['status'] == 'success': #可能还需调用ybind commit接口 content.add_oplog(data, 'success', '') handle_real_data(data) conf_logger.info('conf success: {}'.format(data)) return 'success' else: content.add_oplog(data, 'fail', fpga_res[0]['msg']) conf_logger.info('conf failed: {}'.format(data)) return fpga_res[0]['msg'] except Exception as e: conf_logger.error(str(e)) content.add_oplog(data, 'fail', 'fpga api return result error') conf_logger.info('conf failed: {}'.format(data)) return 'fpga api return result error' elif data['bt'] in ybind_bt: ybind_res = await conf_ybind(client, data) conf_logger.debug('recv ybind:{}'.format(ybind_res)) try: if ybind_res['description'] == 'Success': content.add_oplog(data, 'success', '') handle_real_data(data) conf_logger.info('conf success: {}'.format(data)) return 'success' else: content.add_oplog(data, 'fail', ybind_res['description']) conf_logger.info('conf failed: {}'.format(data)) return ybind_res['description'] except Exception as e: conf_logger.error(str(e)) content.add_oplog(data, 'fail', 'ybind api return result error') conf_logger.info('conf failed: {}'.format(data)) return 'ybind api return result error' else: fpga_res = await conf_dnsys(client, data) ybind_res = await conf_ybind(client, data) conf_logger.debug('recv data from ybind:{} dnsys:{}'.format( ybind_res, fpga_res)) try: if ybind_res['description'] == 'Success' and fpga_res[0][ 'status'] == 'success': #可能还需调用ybind commit接口 content.add_oplog(data, 'success', '') handle_real_data(data) conf_logger.info('conf success {}'.format(data)) return 'success' elif ybind_res['description'] == 'Success' and fpga_res[0][ 'status'] != 'success': # ybind回退操作 #ybind_res = await rollback_ybind(client,data) content.add_oplog( data, 'fail', 'ybind conf success and fpga conf failed') conf_logger.info('conf failed: {}'.format(data)) return fpga_res[0]['msg'] elif ybind_res['description'] != 'Success' and fpga_res[0][ 'status'] == 'success': # fpga回滚操作 #fpga_res = await rollback_fpga(client,data) content.add_oplog( data, 'fail', 'dnsys conf success and ybind conf failed') conf_logger.info('conf failed: {}'.format(data)) return ybind_res['description'] else: content.add_oplog(data, 'fail', 'dnsys and ybind conf failed') conf_logger.info('conf failed: {}'.format(data)) return 'dnsys and ybind conf failed' except Exception as e: conf_logger.error(str(e)) content.add_oplog(data, 'fail', 'api return result error') conf_logger.info('conf failed: {}'.format(data)) return 'api return result error'