From 4f026433a52bc1fc4e349a555de1676825f06bde Mon Sep 17 00:00:00 2001 From: nsano-rururu Date: Fri, 4 Jun 2021 19:50:28 +0900 Subject: [PATCH] Changed required items of dingtalk alerter --- docs/source/ruletypes.rst | 2 +- elastalert/alerters/dingtalk.py | 6 ++-- tests/alerters/dingtalk_test.py | 50 +++++++++++++++++++++++++++++++++ 3 files changed, 54 insertions(+), 4 deletions(-) diff --git a/docs/source/ruletypes.rst b/docs/source/ruletypes.rst index 2480e4fa..4e9fd505 100644 --- a/docs/source/ruletypes.rst +++ b/docs/source/ruletypes.rst @@ -1779,7 +1779,7 @@ Required: ``dingtalk_access_token``: Dingtalk access token. -``dingtalk_msgtype``: Dingtalk msgtype. ``text``, ``markdown``, ``single_action_card``, ``action_card``. +``dingtalk_msgtype``: Dingtalk msgtype, default to ``text``. ``markdown``, ``single_action_card``, ``action_card``. dingtalk_msgtype single_action_card Required: diff --git a/elastalert/alerters/dingtalk.py b/elastalert/alerters/dingtalk.py index 3c5282f1..e87eca6b 100644 --- a/elastalert/alerters/dingtalk.py +++ b/elastalert/alerters/dingtalk.py @@ -11,13 +11,13 @@ class DingTalkAlerter(Alerter): """ Creates a DingTalk room message for each alert """ - required_options = frozenset(['dingtalk_access_token', 'dingtalk_msgtype']) + required_options = frozenset(['dingtalk_access_token']) def __init__(self, rule): super(DingTalkAlerter, self).__init__(rule) - self.dingtalk_access_token = self.rule.get('dingtalk_access_token') + self.dingtalk_access_token = self.rule['dingtalk_access_token'] self.dingtalk_webhook_url = 'https://oapi.dingtalk.com/robot/send?access_token=%s' % (self.dingtalk_access_token) - self.dingtalk_msgtype = self.rule.get('dingtalk_msgtype') + self.dingtalk_msgtype = self.rule.get('dingtalk_msgtype', 'text') self.dingtalk_single_title = self.rule.get('dingtalk_single_title', 'elastalert') self.dingtalk_single_url = self.rule.get('dingtalk_single_url', '') self.dingtalk_btn_orientation = self.rule.get('dingtalk_btn_orientation', '') diff --git a/tests/alerters/dingtalk_test.py b/tests/alerters/dingtalk_test.py index 77f47556..5a4a59ae 100644 --- a/tests/alerters/dingtalk_test.py +++ b/tests/alerters/dingtalk_test.py @@ -292,3 +292,53 @@ def test_dingtalk_ea_exception(): alert.alert([match]) except EAException: assert True + + +def test_dingtalk_getinfo(): + rule = { + 'name': 'Test DingTalk Rule', + 'type': 'any', + 'dingtalk_access_token': 'xxxxxxx', + 'alert': [], + 'alert_subject': 'Test DingTalk' + } + rules_loader = FileRulesLoader({}) + rules_loader.load_modules(rule) + alert = DingTalkAlerter(rule) + + expected_data = { + 'type': 'dingtalk', + "dingtalk_webhook_url": 'https://oapi.dingtalk.com/robot/send?access_token=xxxxxxx' + } + actual_data = alert.get_info() + assert expected_data == actual_data + + +@pytest.mark.parametrize('dingtalk_access_token,, expected_data', [ + ('', True), + ('xxxxxxx', + { + 'type': 'dingtalk', + "dingtalk_webhook_url": 'https://oapi.dingtalk.com/robot/send?access_token=xxxxxxx' + }), +]) +def test_dingtalk_key_error(dingtalk_access_token, expected_data): + try: + rule = { + 'name': 'Test DingTalk Rule', + 'type': 'any', + 'alert': [], + 'alert_subject': 'Test DingTalk' + } + + if dingtalk_access_token != '': + rule['dingtalk_access_token'] = dingtalk_access_token + + rules_loader = FileRulesLoader({}) + rules_loader.load_modules(rule) + alert = DingTalkAlerter(rule) + + actual_data = alert.get_info() + assert expected_data == actual_data + except KeyError: + assert expected_data