DolphinScheduler技术分析(八)
2021SC@SDUSC
DophinScheduler Alert模块代码分析
Alert服务入口
创建AlertServer 实例对象,调用start方法,启动
public static void main(String[] args) {AlertServer alertServer = AlertServer.getInstance();alertServer.start();}
start方法
- 改方通过while(true)循环方式,循环条件通过Stopper.isRunning()判断为TRUE或者FALSE,来实现循环
- Thread.sleep 循环体内通过线程每5秒启动一次
- 每次启动通过 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方法
- listWaitExecutionAlert方法逻辑功能为通过定时
- 到dolphinscheduler配置数据库中执行如下sql
- 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_alertwhere 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)
- 处理类
- 判断收件人、告警组、抄送人的邮箱是否为空
- 满足条件,调用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);}
DolphinScheduler技术分析(八)相关推荐
- DolphinScheduler技术分析(十)
2021SC@SDUSC 这篇分析一下十分重要的workserver类 首先 stop方法 首先调用Stopper.stop设置全局变量.停止所有线程的"死"循环,然后休眠3秒, ...
- YOLOV4各个创新功能模块技术分析(三)
YOLOV4各个创新功能模块技术分析(三) 八.数据增强相关-Stylized-ImageNet 论文名称:ImageNet-trained cnns are biased towards textu ...
- web报表开发技术专题八:总结
以前上博客园时,我是最怕看到一二三四之类的系列文章的,没想自己也这样做了.实在是因为无法在一篇文章之中讲清如此多的东西,现在写了这些有关web报表开发的文章之后,还是觉得有很多方面没有涉及,基本上只是 ...
- 技术分析在于少而精,多则惑
虽然是炒股心得,其实我很早就没有心得可谈了,能不断获得心得的时期是炒股的初级阶段,越往后你就越知道,股市就这么回事,哪有这么多心得可言. 但是我可以站在今天这个角度为大家梳理我从前的心得,哪些是炒股的 ...
- 投资入门第 3 步:技术分析法(常用技术分析)
1.OX图 1.绘制方法 OX图不是坐标表现价格的变化,而是通过小方格来表现价格的变化,其主要内容如下: ×=价格上升,O=价格下降.方格中的数字表示月份,图左边的数字表示单位价格. (1)当每次股票 ...
- 股票技术分析--任正德主编
股票技术分析:散户完全自救手册–任正德主编 第二章 K线分析 2.1 K线的含义及画法 K线画法和含义(日K线) 当日开盘价(a)与当日收盘价(b)组成的区域叫K线实体,若a<b,则称此K线为阳 ...
- 【恒指早盘分析】盘点技术分析的三个误区
技术分析是上乘武功,练的人虽多,但能掌握个八九成的凤毛麟角.许多人学了个一招半式,常以技术派自居,但未得技术分析精髓,甚至走火入魔.自己亏了不说,若是因此误导了新手,或是给外人留下技术分析不是好武功的 ...
- 阿里IM技术分享(八):深度解密钉钉即时消息服务DTIM的技术设计
本文引用自InfoQ社区"5亿用户如何高效沟通?钉钉首次对外揭秘即时消息服务DTIM"一文,作者陈万红等.策划褚杏娟,有修订和改动. 一.引言 本文是国内企业IM的事实王者钉钉首次 ...
- TOF与结构光技术分析
TOF与结构光技术分析 一.概述 结构光(Structuredlight),通常采用特定波长的不可见的激光作为光源,它发射出来的光带有编码信息,投射在物体上,通过一定算法来计算返回的编码图案的畸变来得 ...
最新文章
- 卡牌系统psv游戏推荐_索尼PSV已经凉了吗?等等,2020年六月还有一款PSV游戏发售...
- 3.7 为什么需要非线性激活函数-深度学习-Stanford吴恩达教授
- Jumping Jack
- 阿里云开发者大会:资源加应用酝酿云存储变局
- Linux 内核定时器实验————复习到这
- CD Linux U盘启动办法
- JSF 源代码赏析之Lifecycle
- Mysql datadir change on ubuntu
- libeio-异步I/O库初窥
- 明星AI芯片公司Graphcore获红杉5000万美元投资
- 机器学习代码实战——网格搜索和交叉验证(GridSearchCV)
- CC2530基础实验二 外部中断实验
- 系统集成项目管理师和高级项目管理师考试心得
- 最全面贴片电阻知识,封装、尺寸、最大承受功率及选型统统包括-电子技术方案|电路图讲解
- 分卷压缩 C#代码实现
- 生命主题dreamweaver作业静态HTML网页设计——卫生与健康 6页 带视频
- (八)苏世民:我的经验和教训:决策(567)
- AWS免费账号取消步骤
- echarts 环形图 不同区域背景色自定义
- 基于SVM算法的人脸表情识别
热门文章
- WorkFlow建立
- 微信最多人用的表情是它!朋友圈国内外最多人打卡的地方是这两个城市!
- tf.Variable() 和 tf.get_variable(),tf.name_scope() 和 tf.variable_scope()
- 【YOLOv5】yolov5训练中遇到的问题解决:BrokenPipeError: [Errno 32] Broken pipe
- UIImageJPEGRepresentation缓存导致圆图变方图
- (创建型)设计模式——工厂模式(factory)
- 动态壁纸安卓_梦象动态壁纸下载
- 西门子SMART200 通过Modbus 读取温湿度传感器数据实例
- 思维导图02----Java面向对象
- H3C交换机SSH登录配置