Repository navigation
notifier
Leo Q edited this page Oct 19, 2023
·
2 revisions
通知模块的所有代码都在 sql/notify.py 内, 大致思路如下:
- view 调用
notify_for_execute,notify_for_audit,notify_for_m2sql -
notify_for_execute等函数 调用auto_notify -
auto_notify读settings.ENABLED_NOTIFIERS, notifier 格式为xxx.xxx.xxx:yyy其中 xxx 为 python 风格的 path, yyy 为文件内的对象 - 初始化notifier 对象, 可以理解为
import yyy from xxx.xxx.xxx
我们实际来看一下一个实际的 Notifier class
class GenericWebhookNotifier(Notifier): # 继承基础的 Notifier
name = "generic_webhook"
sys_config_key: str = "generic_webhook_url" # 只有在 sys config 内配置了这个键才会真正启用
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.request_data = None
def render(self):
...
def send(self):
...如果你需要实现一个你自定义的通知组件, 那么你可以集成 notify.py 里的 Notifier, 然后实现其中的 render 和 send 两个方法即可. 更多的请阅读 Notifier 的代码
实现完成后, 将代码挂载至 archery 目录下, 比如你的文件名是 my.py , 挂载到 private 文件夹内, notifier 对象是 MySecretNotifier. 最终目录结构是
├── archery
│ ├── __init__.py
│ ├── __pycache__
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── private
│ ├── __init__.py
│ ├── my.py
最后设置环境变量ENABLED_NOTIFIERS, 设置为 xxxx,private.my:MySecretNotifier, 前面可以加上系统自带的一些 notifier , 比如 sql.notify:DingdingWebhookNotifier, 这样 archery 就会在工单流转时自动调用你的 notifier 了
如果你想分享你的 Notifier, 欢迎提交 pr