コード例 #1
0
ファイル: agents.py プロジェクト: sdulsj/spider_platform
 def sync_nodes_exception(self):
     """同步节点异常(性能指标)"""
     system_settings = SystemSettingsModel.get_settings()
     # Master
     for key, value in self.get_master_performance().items():
         threshold = system_settings.get("threshold_{}".format(key))
         if not threshold or threshold > value:
             continue
         NodesExceptionsModel.merge_one(
             host_port="Master",
             node_type="master",
             exc_time=datetime.datetime.now(),
             exc_level="WARNING",
             exc_message="Current {} is {}(>={})!".format(
                 key, value, threshold))
         pass
     # Slave
     for host_port in self.slaves:
         for key, value in self.get_salve_performance(host_port).items():
             threshold = system_settings.get("threshold_{}".format(key))
             if not threshold or threshold > value:
                 continue
             NodesExceptionsModel.merge_one(
                 host_port=host_port,
                 node_type="slave",
                 exc_time=datetime.datetime.now(),
                 exc_level="WARNING",
                 exc_message="Current {} is {}(>={})!".format(
                     key, value, threshold))
             pass
     pass
コード例 #2
0
def node_exception_update():
    vc_md5 = request.form.get('id', request.form.get('vc_md5'))
    act = request.form.get('act')
    # 更新
    kwargs = request.form.to_dict()
    # 处理checkBox值
    is_closed = True if 'is_closed' in kwargs else False
    NodesExceptionsModel.update_one(vc_md5=vc_md5,
                                    is_closed=is_closed,
                                    remark=kwargs.get('remark', ''))
    flash('{} success!'.format(act))
    return redirect('/client/exception/manage', code=302)
    pass
コード例 #3
0
ファイル: schedulers.py プロジェクト: sdulsj/spider_platform
def sync_email_exception_job():
    """
    email exception by scheduler
    通过调度发送异常邮件
    :param self:
    :return:
    """
    logger.info('Start email exception job')
    eoh = EmailOperationHelper(**settings.MAIL_KWARGS)
    sys_conf = SystemSettingsModel.get_settings()
    if not sys_conf.get("use_email_alert"):
        logger.info('End email exception job, the email alert is closed')
        return
    default_recipients = sys_conf.get("default_recipients")
    for node in NodesModel.get_list():
        recipients = node.recipients or default_recipients
        if not recipients:
            continue
        recipients = recipients.split(";")
        subject = "Node({}-{}) Exception of SpiderPlatform".format(
            node.node_type, node.host_port)
        models = NodesExceptionsModel.get_limit(
            is_closed=False, is_emailed=False, node_md5=node.vc_md5)
        if not models:
            continue
        content = "\r\n\r\n".join([m.get_email_content() for m in models])
        eoh.send_mail(subject, content, recipients=recipients)
        for model in models:
            NodesExceptionsModel.update_one(model=model, is_emailed=True)
        pass
    for project in ProjectsModel.get_list():
        recipients = project.recipients or default_recipients
        if not recipients:
            continue
        recipients = recipients.split(";")
        subject = "Project({}) Exception of SpiderPlatform".format(
            project.project_name)
        models = JobsExceptionsModel.get_limit(
            is_closed=False, is_emailed=False,
            project_name=project.project_name)
        if not models:
            continue
        content = "\r\n\r\n".join([m.get_email_content() for m in models])
        eoh.send_mail(subject, content, recipients=recipients)
        for model in models:
            JobsExceptionsModel.update_one(model=model, is_emailed=True)
        pass
    logger.info('End email exception job')
    pass
コード例 #4
0
def node_exception_search():
    page_index = request.form.get('pageNum', 1)
    page_size = request.form.get('pageSize', 10)
    node_md5 = request.form.get('dataID')
    is_closed = request.form.get('dataType', False)
    keywords = request.form.get('keywords')
    # 查询分页结果集
    if node_md5:
        pagination = NodesExceptionsModel.get_pagination(page_index=page_index,
                                                         page_size=page_size,
                                                         is_closed=is_closed,
                                                         node_md5=node_md5,
                                                         keywords=keywords)
    else:
        pagination = NodesExceptionsModel.get_pagination(page_index=page_index,
                                                         page_size=page_size,
                                                         is_closed=is_closed,
                                                         node_type="slave",
                                                         keywords=keywords)
    return jsonify(pagination)
コード例 #5
0
def handle_error(e):
    code = 500
    if isinstance(e, HTTPException):
        code = e.code
    # app.logger.error(traceback.print_exc())
    msg = '{}==>{}\r\n{}'.format(type(e), e, traceback.print_exc())
    current_app.logger.error(msg)  # 写入日志
    # NodesExceptionsModel.merge_exception(msg)  # 写入数据库
    NodesExceptionsModel.merge_one(
        host_port="Master",
        node_type="master",
        exc_time=datetime.datetime.now(),
        exc_level="ERROR",
        exc_message=msg
    )
    return jsonify({
        'code': code,
        'success': False,
        'msg': str(e),
        'data': None
    })
コード例 #6
0
ファイル: schedulers.py プロジェクト: sdulsj/spider_platform
def my_listener(event):
    """
    监听Scheduler发出的事件并作出处理,如任务执行完、任务出错等
    :param event: Scheduler 事件
    :return:
    """
    if event.exception:
        # or logger.fatal
        logger.critical('The job of {} crashed :('.format(event.job_id))
        msg = '{}==>{}\r\n{}'.format(type(event.exception), event.exception,
                                     event.traceback)
        logger.error(msg)  # 写入日志
        # NodesExceptionsModel.merge_exception(msg)  # 写入数据库
        NodesExceptionsModel.merge_one(
            host_port="Master",
            node_type="master",
            exc_time=datetime.datetime.now(),
            exc_level="ERROR",
            exc_message=msg
        )
    else:
        logger.info('The job of {} worked :)'.format(event.job_id))
コード例 #7
0
def node_exception_send():
    sys_conf = SystemSettingsModel.get_settings()
    if not sys_conf.get("use_email_alert"):
        print('End email exception job, the email alert is closed')
        return
    default_recipients = sys_conf.get("default_recipients")
    for node in NodesModel.get_list():
        recipients = node.recipients or default_recipients
        if not recipients:
            continue
        recipients = recipients.split(";")
        subject = "Node({}-{}) Exception".format(node.node_type,
                                                 node.host_port)
        template = "nodes/email/exceptions"
        exceptions = [
            m.to_dict() for m in NodesExceptionsModel.get_limit(
                is_closed=False, is_emailed=False, node_md5=node.vc_md5)
        ]
        send_emails(subject, template, *recipients, exceptions=exceptions)
        pass
    pass
コード例 #8
0
def node_exception_delete(exception_md5):
    NodesExceptionsModel.del_one(vc_md5=exception_md5)
    flash('Delete success!')
    return redirect(request.referrer)
    pass