def retry_new_work(task): logger.info("retry worker get uids {0}".format(task[0])) devs_f = [] devs = [] devices = [] results = {} dev_fail = [] uid_list = task[0] isDir = False if len(uid_list) < 1: return elif len(uid_list) == 1: isDir = query_db_session.url.find_one({"_id": uid_list[0]})['isdir'] urls = [] for uid in uid_list: urls.append(get_url_add_id(uid)) db_ref_err = query_db_session.ref_err.find_one({"uid": uid_list[0]}) rcms_dev_s, rcms_dev_f = get_rcms_devices( urls) #根据url中的channels信息,从redis中寻找设备,redis中 if db_ref_err['firstLayer']: devs_f = [{ "name": k, "host": v, 'firstLayer': True, "status": "OPEN" if k in rcms_dev_f else "SUSPEND" } for k, v in list(db_ref_err['f_devs'].items())] if isDir: logger.info("dir retry id list: %s" % uid_list) devices.extend( update_result(devs_f, postal.do_send_dir(urls[0], devs_f))) #保存设备,下发url else: devices.extend(update_result(devs_f, postal.do_send_url(urls, devs_f))) #保存设备,下发url logger.info("send first layer devs {0}".format(len(devs_f))) devs = [{ "name": k, "host": v, 'firstLayer': False, "status": "OPEN" if k in rcms_dev_s else "SUSPEND" } for d in db_ref_err['failed'] for dd in d["devices"] for k, v in list(dd.items())] if devs: if isDir: devices.extend( update_result(devs, postal.do_send_dir(urls[0], devs))) else: devices.extend(update_result(devs, postal.do_send_url(urls, devs))) logger.debug(devices) results["devices"] = devices dev_fail, retry_obj = save_rey_devices(results) #保存重试device数据库 for uid in uid_list: update_url(ObjectId(uid), retry_obj, dev_fail) #保存url数据库,插入成功的数据,错误列表 logger.info("send second layer devs {0}".format(len(devs)))
def retry_worker(task): logger.info("retry worker get uid {0}".format(task[0])) uid = task[0] devs_f = [] devs = [] devices = [] results = {} dev_fail = [] results = {"created_time": datetime.datetime.now()} db_ref_err = query_db_session.ref_err.find_one({"uid": ObjectId(uid)}) db_url = query_db_session.url.find_one({"_id": ObjectId(uid)}) try: if db_ref_err: urls = [get_url(uid)] rcms_dev_s, rcms_dev_f = get_rcms_devices(urls) if db_ref_err['firstLayer']: devs_f = [{ "name": k, "host": v, 'firstLayer': True, "status": "OPEN" if k in rcms_dev_f else "SUSPEND" } for k, v in list(db_ref_err['f_devs'].items())] if db_url['isdir']: devices.extend( update_result(devs_f, postal.do_send_dir(urls, devs_f))) else: devices.extend( update_result(devs_f, postal.do_send_url(urls, devs_f))) logger.info("send first layer devs {0}".format(len(devs_f))) devs = [{ "name": k, "host": v, 'firstLayer': False, "status": "OPEN" if k in rcms_dev_s else "SUSPEND" } for d in db_ref_err['failed'] for dd in d["devices"] for k, v in list(dd.items())] if devs: if db_url['isdir']: devices.extend( update_result(devs, postal.do_send_dir(urls, devs))) else: devices.extend( update_result(devs, postal.do_send_url(urls, devs))) logger.debug(devices) results["devices"] = devices dev_fail, retry_obj = save_rey_devices(results) update_url(ObjectId(uid), retry_obj, dev_fail) logger.info("send second layer devs {0}".format(len(devs))) except Exception: logger.info("retry worker get devices {0}".format( traceback.format_exc()))
def layer_refresh(self, urls, layer_level): """ 下发命令到FC,并将结果保存到device表内 :param urls: :param layer_level: the level of refresh :param is_frist_layer: is first_layer or not """ logger.debug( 'layer_refresh starting ... worker_id:%s, dev_id:%s, layer_level:%s' % (self.get_id_in_requestofwork(), urls[0].get('dev_id'), layer_level)) devs = [ dev for dev in list(self.db_dev.get("devices").values()) if dev.get('layerNum') == layer_level ] self.db_dev["unprocess"] -= len(devs) results = postal.do_send_url(urls, devs) self.get_refresh_results(results) logger.debug( "layer_refresh successed worker_id: %s ,dev_id: %s, layer_level:%s, " "dev_count = %d response_count = %d" % (self.get_id_in_requestofwork(), urls[0].get("dev_id"), layer_level, len(devs), len(results)))
from __init__ import *