Ejemplo n.º 1
0
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)))
Ejemplo n.º 2
0
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()))
Ejemplo n.º 3
0
    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)))
Ejemplo n.º 4
0
from __init__ import *