当前位置: 首页 > news >正文

实操教程 | 触发器实现 Apache DolphinScheduler 失败钉钉自动告警

file

作者 | sqlboy-yuzhenc

背景介绍

在实际应用中,我们经常需要将特定的任务通知给特定的人,虽然 Apache DolphinScheduler 在安全中心提供了告警组和告警实例,但是配置起来相对复杂,并且还需要在定时调度时指定告警组。通过这篇文章,你将学到一个简单的方法,无需任何配置,只需要在用户表(t_ds_user)表中增加字段钉钉名称(dignding_name),创建用户时指定用户的手机号码和维护对应的钉钉名称,就能轻松实现 Apache DolphinScheduler 任务失败时钉钉告警到指定的人。

安装插件plpython3u

psql etl -U postgres
create extension plpython3u

pip安装requests

cd /opt && wget https://bootstrap.pypa.io/get-pip.py
python get-pip.py
pip install requests

创建发送钉钉的存储过程

  • plpython3u为不受信语言,所以只能被超级用户使用
sql
create or replace function tool.sp_send(message json,webhook varchar ,secret varchar 
)returns textlanguage plpython3usecurity definer 
as $function$
import requests
import json
import time
import hmac
import hashlib
import base64
import urllib.parse
"""
/** 作者 : v-yuzhenc* 功能 : 给钉钉发送一条消息* message : 需要发送的消息,json格式,详情参考https://open.dingtalk.com/document/robots/custom-robot-access* webhook : 钉钉机器人的webhook* secret : 钉钉机器人的secret* */
"""
v_timestamp = str(round(time.time() * 1000))
p_secret = secret
secret_enc = p_secret.encode('utf-8')
string_to_sign = '{}\n{}'.format(v_timestamp, p_secret)
string_to_sign_enc = string_to_sign.encode('utf-8')
hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()
v_sign = urllib.parse.quote_plus(base64.b64encode(hmac_code))# 钉钉自定义机器人的webhook地址
p_webhook = webhook
webhook_url = p_webhook+"&timestamp="+v_timestamp+"&sign="+v_sign
# 要发送的消息内容
p_message = json.loads(message)
# 发送POST请求
response = requests.post(webhook_url, data=json.dumps(p_message), headers={"Content-Type": "application/json"})# 打印响应结果
return response.text
$function$;alter function tool.sp_send(json,varchar,varchar) owner to tool;
grant execute on function tool.sp_send(json,varchar,varchar) to public;

测试发送钉钉的存储过程

select sp_send('{"msgtype": "actionCard","actionCard": {"title": "我 20 年前想打造一间苹果咖啡厅,而它正是 Apple Store 的前身", "text": "![screenshot](https://img-blog.csdnimg.cn/9911ab6c84fb43ad97667e2ae61e56fc.png) \n\n #### 乔布斯 20 年前想打造的苹果咖啡厅 \n\n Apple Store 的设计正从原来满满的科技感走向生活化,而其生活化的走向其实可以追溯到 20 年前苹果一个建立咖啡馆的计划", "btnOrientation": "0", "btns": [{"title": "内容不错", "actionURL": "https://www.dingtalk.com/"}, {"title": "不感兴趣", "actionURL": "https://www.dingtalk.com/"}]}
}'::json);

file

参考

自定义机器人安全设置 - 钉钉开放平台

自定义机器人接入 - 钉钉开放平台

t_ds_user增加字段

alter table t_ds_user add column dingding_name varchar(100);
--人为将海豚账号对应的钉钉用户名更新上去

编写触发器

CREATE OR REPLACE FUNCTION dp.tg_ds_udef_alert_ding()RETURNS triggerLANGUAGE plpgsql
AS $function$
/** 作者:v-yuzhenc* 功能:海豚调度工作流失败自动告警* */
declarei record;v_user varchar;v_mobile varchar;v_content text;v_message varchar;
beginif new.state in (4,5,6) then for i in (select d.user_name,d.phone ,d.dingding_name,g.name project_name,e.name process_name,string_agg(distinct b.name||' '||to_char(b.end_time,'yyyy-mm-dd hh24:mi:ss'),'\r\n') task_namefrom t_ds_process_instance a inner join t_ds_task_instance b on (a.id = b.process_instance_id)inner join t_ds_task_definition c on (b.task_code = c.code and b.task_definition_version = c."version")inner join t_ds_user d on (c.user_id = d.id)inner join t_ds_process_definition e on (a.process_definition_code = e.code and a.process_definition_version = e."version")inner join t_ds_project g on (e.project_code = g.code)where c.task_type <> 'SUB_PROCESS'and a.state = 6and b.state = 6and a.id = new.idgroup by d.user_name,d.phone ,d.dingding_name,g.name,e.name) loop v_mobile := i.phone;v_user := i.dingding_name;v_content := '海豚工作流执行失败,请尽快处理!\r\n项目名称:\r\n'||i.project_name||'\r\n工作流名称:\r\n'||i.process_name||'\r\n任务名称:\r\n'||i.task_name;v_message := $v_message${"at": {"atMobiles":["$v_message$||v_mobile||$v_message$"],"atUserIds":["$v_message$||v_user||$v_message$"],"isAtAll": false},"text": {"content":"$v_message$||v_content||$v_message$"},"msgtype":"text"
}$v_message$;--告警perform tool.sp_send(v_message::json);end loop;end if;return new;
end;
$function$
;create trigger tg_state_ds_process_instance after update on t_ds_process_instance for each row execute procedure tg_ds_udef_alert_ding();

测试

file

本文转载自CSDN博主sqlboy-yuzhenc文章:https://blog.csdn.net/qq_33445829/article/details/131073349

本文由 白鲸开源科技 提供发布支持!

相关文章:

实操教程 | 触发器实现 Apache DolphinScheduler 失败钉钉自动告警

作者 | sqlboy-yuzhenc 背景介绍 在实际应用中&#xff0c;我们经常需要将特定的任务通知给特定的人&#xff0c;虽然 Apache DolphinScheduler 在安全中心提供了告警组和告警实例&#xff0c;但是配置起来相对复杂&#xff0c;并且还需要在定时调度时指定告警组。通过这篇文…...

以“迅”防“汛”!5G视频快线筑牢防汛“安全堤”

近期&#xff0c;西安多地突发山洪泥石流灾害。防洪救灾刻不容缓&#xff0c;为进一步做好防汛工作&#xff0c;加强防洪调度监管&#xff0c;切实保障群众的生命财产安全&#xff0c;当地政府管理部门亟需拓展智能化技术&#xff0c;通过人防技防双保障提升防灾救灾应急处置能…...

jmeter 性能测试工具的使用(Web性能测试)

1、下载 该软件不用安装&#xff0c;直接解压打开即可使用。 2、使用 这里就在win下进行&#xff0c;图形界面较为方便   在目录apache-jmeter-2.13\bin 下可以见到一个jmeter.bat文件&#xff0c;双击此文件&#xff0c;即看到JMeter控制面板。主界面如下&#xff1a; 3、创…...

springboot整合第三方技术邮件系统

springboot整合第三方技术邮件系统&#xff0c;发邮件是java程序的基本操作&#xff0c;springboot整合javamail其实就是简化开发。不熟悉邮件的小伙伴可以先学习完javamail的基础操作&#xff0c;再来看这一部分内容才能感触到springboot整合javamail究竟简化了哪些操作。简化…...

Python入门学习——Day2-变量和数据类型

一、Python 变量 在Python中&#xff0c;变量用于保存数据&#xff0c;方便程序对数据的处理和操作。下面是关于Python变量的一些重要概念&#xff1a; 变量命名规则&#xff1a; 变量名由字母、数字和下划线组成。变量名可以以字母或下划线开头&#xff0c;但不能以数字开头…...

Graylog 更改显示的时区(Display timezone)

每个 Graylog 用户都可以配置他们的显示时区。 这会更改用于查看日志消息的时区&#xff0c;但不会更改日志消息的原始时区。 默认情况下&#xff0c;Graylog 显示 UTC 格式的所有时间戳&#xff08;也就是 0:00&#xff09;。就像是下面这样 非Admin账户要更改时区&#xff1…...

【网络安全防护】上海道宁与Bitdefender帮助您构建弹性网络并降低安全运营成本

在网络的世界中 风险变得更加常见与复杂 企业需要从网络安全转向网络弹性 复杂的网络攻击已非常普遍 在面临攻击时 企业如何保持业务连续性&#xff1f; Bitdefender GravityZone将 风险分析、安全加固、威胁预防 检测和响应功能相结合 帮助您构建弹性网络 并降低安全…...

文心一言 VS CHATGPT

由于近几天来&#xff0c;我的手机短信不断收到百度公司对于“文心一言”大模型的体验邀请&#xff08;真是不胜其烦&#xff09;&#xff01;&#xff01;所以我就抱着试试看的态度点开了文心一言的链接&#xff1a;文心一言 目前看来&#xff0c;有以下两点与chatgpt是有比较…...

2023-09-01力扣每日一题

链接&#xff1a; 2240. 买钢笔和铅笔的方案数 题意&#xff1a; 一共total元&#xff0c;两种笔分别cost1和cost2元&#xff0c;求能买的的笔的所有情况&#xff0c;不要求花光钱 解&#xff1a; 枚举其中一个数字就行 实际代码&#xff1a; #include<bits/stdc.h&g…...

【Python】从入门到上头— IO编程(8)

文章目录 一.IO编程是什么二.文件读写1.读取文件2.file-like Object二进制文件字符编码 3.写文件file对象的常用函数常见标识符 三.StringIO和BytesIO1.StringIO2.BytesIO 四.操作文件和目录五.序列化和反序列化1.pickle.dumps()2.pickle.loads()3.JSON 一.IO编程是什么 IO在计…...

R语言对综合社会调查GSS数据进行自举法bootstrap统计推断、假设检验、探索性数据分析可视化|数据分享...

全文链接&#xff1a;https://tecdat.cn/?p33514 综合社会调查&#xff08;GSS&#xff09;是由国家舆论研究中心开展的一项观察性研究。自 1972 年以来&#xff0c;GSS 一直通过收集当代社会的数据来监测社会学和态度趋势。其目的是解释态度、行为和属性的趋势和常量。从 197…...

LeetCode 刷题第四轮 Offer I + 类型题

目录 剑指 Offer 04. 二维数组中的查找 剑指 Offer 29. 顺时针打印矩阵 剑指 Offer 09. 用两个栈实现队列 剑指 Offer 30. 包含min函数的栈 剑指 Offer 10- I. 斐波那契数列 [类型&#xff1a;记忆优化 递归 / 动态规划] 剑指 Offer 10- II. 青蛙跳台阶问题 [类型&am…...

LabVIEW计算测量路径输出端随机变量的概率分布密度

LabVIEW计算测量路径输出端随机变量的概率分布密度 今天&#xff0c;开发算法和软件来解决计量综合的问题&#xff0c;即为特定问题寻找最佳测量算法。提出了算法支持&#xff0c;以便从计量上综合测量路径并确定所开发测量仪器的测量误差。测量路径由串联的几个块组成&#x…...

[C++ 网络协议] 多进程服务器端

具有代表性的并发服务器端实现模型和方法&#xff1a; 多进程服务器&#xff1a;通过创建多个进程提供服务。✔ 多路复用服务器&#xff1a;通过捆绑并统一管理I/O对象提供服务。 多线程服务器&#xff1a;通过生成与客户端等量的线程提供服务。 目录 1. 进程的概念及应用 1.…...

李宏毅 2022机器学习 HW2 strong baseline 上分路线

strong baseline上分路线 baseline增加concat_nframes &#xff08;提升明显&#xff09;增加batchnormalization 和 dropout增加hidden layer宽度至512 &#xff08;提升明显&#xff09; 提交文件命名规则为 prediction_{concat_nframes}[{n_hidden_layers}{dropout}_bn].c…...

伦敦银交易时间怎么选择?

伦敦银和伦敦金都是全球性的交易品种&#xff0c;一般的现货贵金属交易平台&#xff0c;都可以同时经营这两个品种&#xff0c;而且它们的交易时间是一致的&#xff0c;以香港市场的平台为例&#xff0c;基本上交易时间都会从北京周一的早上7点&#xff0c;延续到周六凌晨5点左…...

解决FreeRTOS程序跑不起来,打印调试却提示“Error:..\FreeRTOS\port\RVDS\ARM_CM3\port.c,244“的方法

前言 今天来分享一个不会造成程序编译报错&#xff0c;但会使程序一直跑不起来&#xff0c;并且通过调试会发现有输出错误提示的错误例子分析&#xff0c;话不多说&#xff0c;我们就直接开始分析~ 首先&#xff0c;我们说过这个例子在编译时候没有明示的错误提示&#xff0c…...

Python序列类型

序列&#xff08;Sequence&#xff09;是有顺序的数据列&#xff0c;Python 有三种基本序列类型&#xff1a;list, tuple 和 range 对象&#xff0c;序列&#xff08;Sequence&#xff09;是有顺序的数据列&#xff0c;二进制数据&#xff08;bytes&#xff09; 和 文本字符串&…...

【python爬虫】5.爬虫实操(歌词爬取)

文章目录 前言项目&#xff1a;寻找周杰伦分析过程代码实现重新分析过程什么是NetworkNetwork怎么用什么是XHR&#xff1f;XHR怎么请求&#xff1f;json是什么&#xff1f;json数据如何解析&#xff1f;实操&#xff1a;完成代码实现 一个总结一个复习 前言 这关让我们一起来寻…...

浅探Android 逆向前景趋势~

前段时间&#xff0c;我和朋友偶然间谈起安卓逆向&#xff0c;他问我安卓逆向具体是什么&#xff0c;能给我们带来什么实质性的东西&#xff0c;我也和朋友大概的说了一下&#xff0c;今天在这里拿出来和大家讨论讨论&#xff0c;也希望帮助大家来了解安卓逆向。 谈起安卓逆向…...

1.2 struct page 与 PFN:VMA 背后的物理存储

本篇目标&#xff1a;理解 Linux 如何为每个物理页帧维护元数据&#xff08;struct page&#xff09;&#xff0c;以及虚拟地址最终如何落实到物理内存。HMM 的关键创新之一&#xff0c;是让设备内存&#xff08;GPU VRAM&#xff09;也拥有 struct page&#xff0c;从而被内核…...

2026免费在线去水印软件推荐:优缺点对比与测评

在2026年&#xff0c;处理带有水印的图片、视频和文档已经成为许多人日常工作中的常见需求。无论是内容创作者、自媒体运营者&#xff0c;还是普通用户&#xff0c;偶尔都需要从素材中移除水印。本文将全面介绍当前免费在线去水印软件的最新情况&#xff0c;帮助你了解各工具的…...

微信虚拟支付接入(道具支付)

1.描述本文档为最近因微信虚拟支付之前使用的是普通微信支付&#xff08;旧模式的支付&#xff1a;wx.requestPayment&#xff09;此类支付其实只适用于实物商品&#xff0c;ios端不支持&#xff08;会被封禁&#xff09;&#xff1b;因其费率更低&#xff08;大概在0.6%&#…...

为什么你的ElevenLabs四川话输出总像“普通话+口音”?3步声学特征解耦法让韵律自然度提升2.8倍(附Python声谱可视化代码)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;为什么你的ElevenLabs四川话输出总像“普通话口音”&#xff1f; ElevenLabs 当前并未提供原生四川话&#xff08;西南官话成渝片&#xff09;语音模型&#xff0c;其所谓“方言支持”实为在标准普通话…...

使用Taotoken后Keil5项目代码审查效率的直观提升

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 使用Taotoken后Keil5项目代码审查效率的直观提升 1. 背景与需求 在嵌入式开发领域&#xff0c;代码审查是保证软件质量的关键环节…...

洛圣都生存指南:YimMenu开源游戏增强工具与安全防护系统深度解析

洛圣都生存指南&#xff1a;YimMenu开源游戏增强工具与安全防护系统深度解析 【免费下载链接】YimMenu YimMenu, a GTA V menu protecting against a wide ranges of the public crashes and improving the overall experience. 项目地址: https://gitcode.com/GitHub_Trendi…...

Array作为顶层参数-优化设计(二)

一、核心代码#include "array_FIFO.h"void array_FIFO (dout_t d_o[4], din_t d_i[4], didx_t idx[4]) { //void array_FIFO (dout_t d_o[4], din_t *d_i, didx_t idx[4]) { #pragma HLS INTERFACE s_axilite register depth4 portd_i //#pragma HLS INTERFACE s_axi…...

如何安全提取未知文件:unblob的5大安全防护机制实战指南

如何安全提取未知文件&#xff1a;unblob的5大安全防护机制实战指南 【免费下载链接】unblob Extract files from any kind of container formats 项目地址: https://gitcode.com/gh_mirrors/un/unblob 在数字取证和固件分析工作中&#xff0c;我们经常需要处理来源不明…...

终极指南:如何用AhabAssistantLimbusCompany彻底解放《Limbus Company》游戏时间

终极指南&#xff1a;如何用AhabAssistantLimbusCompany彻底解放《Limbus Company》游戏时间 【免费下载链接】AhabAssistantLimbusCompany AALC&#xff0c;PC端Limbus Company小助手。AALC&#xff0c;Limbus Company Assistant on PC 项目地址: https://gitcode.com/gh_mi…...

为Claude Code配置Taotoken密钥解决频繁封号与token不足痛点

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 为Claude Code配置Taotoken密钥解决频繁封号与token不足痛点 Claude Code作为一款高效的编程助手&#xff0c;其核心能力依赖于底层…...