DolphinScheduler告警模块源码分析

DolphinScheduler 版本

1.3.5版本,现在时间为2021年8月10 日。此时为次新版本

DolphinScheduler 服务

MasterServer ----- master服务
WorkerServer ----- worker服务
LoggerServer ----- logger服务
ApiApplicationServer ----- api服务
AlertServer ----- alert服务

程序入口

1、从官网下载源码后导入idea,更新maven后,可得到如下项目结构
在这里插入图片描述
2、dolphinscheduler-alert包下为告警模块服务,每个模块需要单独启动,找到main方法即找到alert服务入口,如下图
在这里插入图片描述

源码

创建AlertServer 实例对象,调用start方法,启动
public static void main(String[] args) {
        AlertServer alertServer = AlertServer.getInstance();
        alertServer.start();
    }
start方法
  1. 改方通过while(true)循环方式,循环条件通过Stopper.isRunning()判断为TRUE或者FALSE,来实现循环
  2. Thread.sleep 循环体内通过线程每5秒启动一次
  3. 每次启动通过 alertDao.listWaitExecutionAlert()执行具体逻辑
 public void start() {
        logger.info("alert server ready start ");
        while (Stopper.isRunning()) {  //5秒循环
            try {
                Thread.sleep(Constants.ALERT_SCAN_INTERVAL); // 5000 ms
            } catch (InterruptedException e) {
                logger.error(e.getMessage(), e);
                Thread.currentThread().interrupt();
            }
            List<Alert> alerts = alertDao.listWaitExecutionAlert();  // 扫描数据库中表 t_ds_alert 中 alert_status 字段为0等待发送,1成功,2失败 判断是否有需要发送的邮件 如果有
            alertSender = new AlertSender(alerts, alertDao, alertPluginManager);
            alertSender.run();
        }
    }
listWaitExecutionAlert方法
  1. listWaitExecutionAlert方法逻辑功能为通过定时
  2. 到dolphinscheduler配置数据库中执行如下sql
  3. t_ds_alert可以理解成告警信息相关表,在表中查找状态为等待发送的数据

在这里插入图片描述

List<Alert> alerts = alertDao.listWaitExecutionAlert();

//调用
public List<Alert> listWaitExecutionAlert(){
        return alertMapper.listAlertByStatus(AlertStatus.WAIT_EXECUTION);
    }

//调用
List<Alert> listAlertByStatus(@Param("alertStatus") AlertStatus alertStatus);

//底层执行sql为
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="org.apache.dolphinscheduler.dao.mapper.AlertMapper">
    <select id="listAlertByStatus" resultType="org.apache.dolphinscheduler.dao.entity.Alert">
        select *
        from t_ds_alert
        where alert_status = #{alertStatus}
    </select>
</mapper>
alertSender.run()方法
  1. alertDao.listWaitExecutionAlert()方法会定时扫描出需要发送的数据,数据会逐条进行分析、发送
  2. alertDao.listUserByAlertgroupId(alert.getAlertGroupId())方法通过 t_ds_alert 表 alertgroup_id 去t_ds_user表中查找相应用户的email,即任务运行配置告警通知分组的用户获取email、与收件人的email
for (Alert alert : alertList) {
.......
}
 public List<User> listUserByAlertgroupId(int alertgroupId){
        return userAlertGroupMapper.listUserByAlertgroupId(alertgroupId);
    }
    

在这里插入图片描述

emailPlugin.process(alertInfo)
  1. 处理类
  2. 判断收件人、告警组、抄送人的邮箱是否为空
  3. 满足条件,调用emailManager.send方法
    在这里插入图片描述
emailManager.send
public Map<String,Object> send(List<String> receviersList,List<String> receviersCcList,String title,String content,String showType){

        return MailUtils.sendMails(receviersList, receviersCcList, title, content, showType);
    }

MailUtils.sendMails

邮件发送有四种类型

  • 0 TABLE;表格
  • 1 TEXT;
  • 2 attachment;附件
  • 3 TABLE+attachment;
    通过页面配置,选择不同类型进行触发邮件发送
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值