diff --git a/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/RulesReader.java b/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/RulesReader.java index ff5d96fb6e6655fcf75a1439c2d2a7a0f198561c..e540e0751f4a5db3334fcbc312f0e6fa885461dd 100644 --- a/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/RulesReader.java +++ b/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/RulesReader.java @@ -21,16 +21,20 @@ package org.apache.skywalking.oap.server.core.alarm.provider; import java.io.InputStream; import java.io.Reader; import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; -import java.util.HashMap; +import java.util.stream.Collectors; +import org.apache.skywalking.apm.util.StringUtil; import org.apache.skywalking.oap.server.core.alarm.provider.dingtalk.DingtalkSettings; import org.apache.skywalking.oap.server.core.alarm.provider.feishu.FeishuSettings; import org.apache.skywalking.oap.server.core.alarm.provider.grpc.GRPCAlarmSetting; import org.apache.skywalking.oap.server.core.alarm.provider.slack.SlackSettings; import org.apache.skywalking.oap.server.core.alarm.provider.wechat.WechatSettings; import org.apache.skywalking.oap.server.core.alarm.provider.welink.WeLinkSettings; +import org.apache.skywalking.oap.server.library.util.CollectionUtils; import org.yaml.snakeyaml.Yaml; import org.yaml.snakeyaml.constructor.SafeConstructor; @@ -257,28 +261,24 @@ public class RulesReader { /** * Read WeLink hook config into {@link WeLinkSettings} */ + @SuppressWarnings("unchecked") private void readWeLinkConfig(Rules rules) { - Map welinkConfig = (Map) yamlData.get("welinkHooks"); - if (welinkConfig != null) { - WeLinkSettings welinkSettings = new WeLinkSettings(); - Object textTemplate = welinkConfig.getOrDefault("textTemplate", ""); - welinkSettings.setTextTemplate((String) textTemplate); - List> welinkWebHooks = (List>) welinkConfig.get("webhooks"); - if (welinkWebHooks != null) { - welinkWebHooks.forEach(welinkWebhook -> { - String clientId = (String) welinkWebhook.getOrDefault("client_id", ""); - String clientSecret = (String) welinkWebhook.getOrDefault("client_secret", ""); - String accessTokenUrl = (String) welinkWebhook.getOrDefault("access_token_url", ""); - String messageUrl = (String) welinkWebhook.getOrDefault("message_url", ""); - String groupIds = (String) welinkWebhook.getOrDefault("group_ids", ""); - String rebootName = (String) welinkWebhook.getOrDefault("robot_name", "reboot"); - welinkSettings.getWebhooks() - .add(new WeLinkSettings.WebHookUrl(clientId, clientSecret, accessTokenUrl, messageUrl, - rebootName, groupIds - )); - }); - } - rules.setWelinks(welinkSettings); + Map welinkConfig = (Map) yamlData.getOrDefault( + "welinkHooks", + Collections.EMPTY_MAP + ); + String textTemplate = (String) welinkConfig.get("textTemplate"); + List> welinkWebHooks = (List>) welinkConfig.get("webhooks"); + if (StringUtil.isBlank(textTemplate) || CollectionUtils.isEmpty(welinkWebHooks)) { + return; } + List webHookUrls = welinkWebHooks.stream().map( + WeLinkSettings.WebHookUrl::generateFromMap + ).collect(Collectors.toList()); + + WeLinkSettings welinkSettings = new WeLinkSettings(); + welinkSettings.setTextTemplate(textTemplate); + welinkSettings.setWebhooks(webHookUrls); + rules.setWelinks(welinkSettings); } } diff --git a/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/welink/WeLinkSettings.java b/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/welink/WeLinkSettings.java index 5861ba6adb110faf82521879a3708223080c5403..4c7f2b8d14f1f700940452ad581cab92d8a06601 100644 --- a/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/welink/WeLinkSettings.java +++ b/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/welink/WeLinkSettings.java @@ -20,6 +20,7 @@ package org.apache.skywalking.oap.server.core.alarm.provider.welink; import java.util.ArrayList; import java.util.List; +import java.util.Map; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; @@ -56,5 +57,17 @@ public class WeLinkSettings { private final String robotName; // The groupIds message to send private final String groupIds; + + public static WebHookUrl generateFromMap(Map params) { + String clientId = params.get("client_id"); + String clientSecret = params.get("client_secret"); + String accessTokenUrl = params.get("access_token_url"); + String messageUrl = params.get("message_url"); + String groupIds = params.get("group_ids"); + String robotName = params.getOrDefault("robot_name", "robot"); + return new WebHookUrl(clientId, clientSecret, accessTokenUrl, messageUrl, + robotName, groupIds + ); + } } } diff --git a/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/welink/WeLinkHookCallbackTest.java b/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/welink/WeLinkHookCallbackTest.java index 8a6e980cb9105e57e9638596ee5052b450ee84c0..1be8f117fdeaa211151110837992ec5c17ff5f53 100644 --- a/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/welink/WeLinkHookCallbackTest.java +++ b/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/welink/WeLinkHookCallbackTest.java @@ -74,7 +74,7 @@ public class WeLinkHookCallbackTest implements Servlet { webHooks.add(new WeLinkSettings.WebHookUrl("clientId", "clientSecret", "http://127.0.0.1:" + port + "/welinkhook/api/auth/v2/tickets", "http://127.0.0.1:" + port + "/welinkhook/api/welinkim/v1/im-service/chat/group-chat", - "rebootName", "1,2,3" + "robotName", "1,2,3" )); Rules rules = new Rules(); String template = "Apache SkyWalking Alarm: \n %s.";