跳转至

通知模块

通知模块

通知模块的所有代码都在 sql/notify.py 内, 大致思路如下: 1. view 调用 notify_for_execute, notify_for_audit, notify_for_m2sql 2. notify_for_execute 等函数 调用 auto_notify 3. auto_notifysettings.ENABLED_NOTIFIERS, notifier 格式为 xxx.xxx.xxx:yyy 其中 xxx 为 python 风格的 path, yyy 为文件内的对象 4. 初始化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, 然后实现其中的 rendersend 两个方法即可. 更多的请阅读 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

Back to top