Автор |sqlboy-юженc
Редактор | Дебра Чен
В реальных приложениях принято уведомлять конкретных людей о конкретных задачах. Хотя Apache DolphinScheduler предоставляет группы оповещений и экземпляры оповещений в своем центре безопасности, конфигурация может быть относительно сложной, и вам необходимо указывать группы оповещений во время запланированных задач. В этой статье вы узнаете простой метод, не требующий сложной настройки. Вам просто нужно добавить поле «Имя DingTalk» (dingding_name) в таблицу пользователей (t_ds_user), указать номера телефонов пользователей, сохранить соответствующие имена DingTalk и добиться автоматических оповещений DingTalk для конкретных людей при сбое задач в Apache DolphinScheduler.
Установите плагин plpython3u.
psql etl -U postgres create extension plpython3u
Установите библиотеку запросов
cd /opt && wget https://bootstrap.pypa.io/get-pip.py python get-pip.py pip install requests
Создайте процедуру для отправки сообщений DingTalk
plpython3u — ненадежный язык, поэтому его могут использовать только суперпользователи.
create or replace function tool.sp_send( message json, webhook varchar, secret varchar ) returns text language plpython3u security definer as $function$ import requests import json import time import hmac import hashlib import base64 import urllib.parse 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)) p_webhook = webhook webhook_url = p_webhook+"×tamp="+v_timestamp+"&sign="+v_sign p_message = json.loads(message) 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
Проверьте процедуру отправки сообщений DingTalk
select sp_send('{ "msgtype": "actionCard", "actionCard": { "title": "20 Years Ago, I Wanted to Build an Apple Coffee Shop, Which Became the Predecessor of Apple Store", "text": "![screenshot](https://img.alicdn.com/tfs/TB1NwmBEL9TBuNjy1zbXXXpepXa-2400-1218.png) \n\n #### Steve Jobs Wanted to Build an Apple Coffee Shop 20 Years Ago \n\n The design of Apple Store is shifting from the original tech sense to a more lifestyle approach, a direction that can be traced back to Apple's plan to establish a coffee shop 20 years ago.", "btnOrientation": "0", "btns": [ { "title": "Good Content", "actionURL": "https://www.dingtalk.com/" }, { "title": "Not Interested", "actionURL": "https://www.dingtalk.com/" } ] } }'::json)
- Использованная литература:
Пользовательские настройки безопасности роботов — открытая платформа DingTalk
https://open.dingtalk.com/document/robots/customize-robot-security-settings
Доступ к пользовательскому роботу — открытая платформа DingTalk
https://open.dingtalk.com/document/robots/custom-robot-access
Добавьте поле «Имя DingTalk» в таблицу t_ds_user.
alter table t_ds_user add column dingding_name varchar(100); -- Update the DingTalk usernames corresponding to Dolphin accounts manually
Напишите триггер
CREATE OR REPLACE FUNCTION dp.tg_ds_udef_alert_ding() RETURNS trigger LANGUAGE plpgsql AS $function$ declare i record; v_user varchar; v_mobile varchar; v_content text; v_message varchar; begin if new.state in (4,5,6) then for i in ( -- Your query to fetch relevant data ) loop v_mobile := i.phone; v_user := i.dingding_name; v_content := 'Dolphin workflow execution failed, please handle it ASAP!\r\nProject Name:\r\n'||i.project_name||'\r\nWorkflow Name:\r\n'||i.process_name||'\r\nTask Names:\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()
Тестирование
Предупреждение о сбое выполнения рабочего процесса сообщается автоматически, и сообщение отправляется назначенному лицу.
Присоединяйтесь к сообществу
Добро пожаловать, заполните эту форму, чтобы стать докладчиком Apache DolphinScheduler: https://forms.gle/MS2fQDhG4n9Hh2yv5:)
Есть много способов принять участие и внести свой вклад в сообщество DolphinScheduler, в том числе:
Документы, перевод, Вопросы и ответы, тесты, коды, статьи,основные доклады,и т. д.
Мы предполагаем, что первый PR (документ, код), который будет способствовать, будет простым и его следует использовать для ознакомления с процессом подачи заявки и стилем сотрудничества с сообществом.
Итак, сообщество составило следующий список задач, подходящих для новичков: https://github.com/apache/dolphinscheduler/contribute
Список проблем, не связанных с новичками:
https://github.com/apache/dolphinscheduler/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22+
Как внести свой вклад:
Репозиторий кода GitHub: https://github.com/apache/dolphinscheduler
Официальный сайт:https://dolphinscheduler.apache.org/
Список рассылки:dev@[email protected]
Твиттер:@DolphinSchedule
YouTube:https://www.youtube.com/@apachedolphinscheduler
Slack:https://s.apache.org/dolphinscheduler-slack
Руководство для участников:https://dolphinscheduler.apache.org/en-us/community/index.html
Ваша звезда для проекта очень важна, не стесняйтесь зажечь звезду для Apache DolphinScheduler ❤️