* [Feature][Alert plugin] Support slack alert (#5382) * fix code smell * add markdown table
This commit is contained in:
parent
88a07f7b55
commit
ee95d07a90
|
|
@ -0,0 +1,84 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
~ Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
~ contributor license agreements. See the NOTICE file distributed with
|
||||
~ this work for additional information regarding copyright ownership.
|
||||
~ The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
~ (the "License"); you may not use this file except in compliance with
|
||||
~ the License. You may obtain a copy of the License at
|
||||
~
|
||||
~ http://www.apache.org/licenses/LICENSE-2.0
|
||||
~
|
||||
~ Unless required by applicable law or agreed to in writing, software
|
||||
~ distributed under the License is distributed on an "AS IS" BASIS,
|
||||
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
~ See the License for the specific language governing permissions and
|
||||
~ limitations under the License.
|
||||
-->
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<artifactId>dolphinscheduler-alert-plugin</artifactId>
|
||||
<groupId>org.apache.dolphinscheduler</groupId>
|
||||
<version>${revision}</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<groupId>org.apache.dolphinscheduler</groupId>
|
||||
<artifactId>dolphinscheduler-alert-slack</artifactId>
|
||||
<packaging>dolphinscheduler-plugin</packaging>
|
||||
|
||||
<dependencies>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.dolphinscheduler</groupId>
|
||||
<artifactId>dolphinscheduler-spi</artifactId>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.httpcomponents</groupId>
|
||||
<artifactId>httpclient</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.google.guava</groupId>
|
||||
<artifactId>guava</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>ch.qos.logback</groupId>
|
||||
<artifactId>logback-classic</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>slf4j-api</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.fasterxml.jackson.core</groupId>
|
||||
<artifactId>jackson-annotations</artifactId>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.mockito</groupId>
|
||||
<artifactId>mockito-core</artifactId>
|
||||
<type>jar</type>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<finalName>dolphinscheduler-alert-slack-${project.version}</finalName>
|
||||
</build>
|
||||
|
||||
</project>
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.apache.dolphinscheduler.plugin.alert.slack;
|
||||
|
||||
import org.apache.dolphinscheduler.spi.alert.AlertChannel;
|
||||
import org.apache.dolphinscheduler.spi.alert.AlertData;
|
||||
import org.apache.dolphinscheduler.spi.alert.AlertInfo;
|
||||
import org.apache.dolphinscheduler.spi.alert.AlertResult;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* SlackAlertChannel
|
||||
*/
|
||||
public class SlackAlertChannel implements AlertChannel {
|
||||
|
||||
@Override
|
||||
public AlertResult process(AlertInfo alertInfo) {
|
||||
AlertData alertData = alertInfo.getAlertData();
|
||||
Map<String, String> alertParams = alertInfo.getAlertParams();
|
||||
if (alertParams == null || alertParams.size() == 0) {
|
||||
return new AlertResult("false", "Slack alert params is empty");
|
||||
}
|
||||
SlackSender slackSender = new SlackSender(alertParams);
|
||||
String response = slackSender.sendMessage(alertData.getTitle(), alertData.getContent());
|
||||
return new AlertResult("ok".equals(response) ? "true" : "false", response);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,66 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.apache.dolphinscheduler.plugin.alert.slack;
|
||||
|
||||
import org.apache.dolphinscheduler.spi.alert.AlertChannel;
|
||||
import org.apache.dolphinscheduler.spi.alert.AlertChannelFactory;
|
||||
import org.apache.dolphinscheduler.spi.params.InputParam;
|
||||
import org.apache.dolphinscheduler.spi.params.base.PluginParams;
|
||||
import org.apache.dolphinscheduler.spi.params.base.Validate;
|
||||
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Slack alert factory, see {@link AlertChannelFactory}
|
||||
*/
|
||||
public class SlackAlertChannelFactory implements AlertChannelFactory {
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "Slack";
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<PluginParams> getParams() {
|
||||
List<PluginParams> paramsList = new LinkedList<>();
|
||||
|
||||
InputParam webHookParam = InputParam.newBuilder(SlackParamsConstants.SLACK_WEN_HOOK_URL_NAME, SlackParamsConstants.SLACK_WEB_HOOK_URL)
|
||||
.addValidate(Validate.newBuilder()
|
||||
.setRequired(true)
|
||||
.build())
|
||||
.setPlaceholder("Input WebHook Url")
|
||||
.build();
|
||||
|
||||
InputParam botName = InputParam.newBuilder(SlackParamsConstants.SLACK_BOT_NAME, SlackParamsConstants.SLACK_BOT)
|
||||
.addValidate(Validate.newBuilder()
|
||||
.setRequired(true)
|
||||
.build())
|
||||
.setPlaceholder("Input the bot username")
|
||||
.build();
|
||||
|
||||
paramsList.add(webHookParam);
|
||||
paramsList.add(botName);
|
||||
return paramsList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AlertChannel create() {
|
||||
return new SlackAlertChannel();
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.apache.dolphinscheduler.plugin.alert.slack;
|
||||
|
||||
import org.apache.dolphinscheduler.spi.DolphinSchedulerPlugin;
|
||||
import org.apache.dolphinscheduler.spi.alert.AlertChannelFactory;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
|
||||
/**
|
||||
* Slack alert plugin
|
||||
*/
|
||||
public class SlackAlertPlugin implements DolphinSchedulerPlugin {
|
||||
|
||||
@Override
|
||||
public Iterable<AlertChannelFactory> getAlertChannelFactorys() {
|
||||
return ImmutableList.of(new SlackAlertChannelFactory());
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.apache.dolphinscheduler.plugin.alert.slack;
|
||||
|
||||
public class SlackParamsConstants {
|
||||
|
||||
private SlackParamsConstants() {
|
||||
|
||||
}
|
||||
|
||||
public static final String SLACK_WEB_HOOK_URL = "WebHook";
|
||||
public static final String SLACK_WEN_HOOK_URL_NAME = "webHook";
|
||||
public static final String SLACK_BOT = "Username";
|
||||
public static final String SLACK_BOT_NAME = "username";
|
||||
public static final String TEXT = "text";
|
||||
public static final String ATTACHMENT = "attachments";
|
||||
|
||||
public static final Integer MAX_SHOW_NUMBER = 100;
|
||||
}
|
||||
|
|
@ -0,0 +1,149 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.apache.dolphinscheduler.plugin.alert.slack;
|
||||
|
||||
import org.apache.dolphinscheduler.spi.utils.JSONUtils;
|
||||
import org.apache.dolphinscheduler.spi.utils.StringUtils;
|
||||
|
||||
import org.apache.http.HttpEntity;
|
||||
import org.apache.http.client.methods.CloseableHttpResponse;
|
||||
import org.apache.http.client.methods.HttpPost;
|
||||
import org.apache.http.entity.StringEntity;
|
||||
import org.apache.http.impl.client.CloseableHttpClient;
|
||||
import org.apache.http.impl.client.HttpClients;
|
||||
import org.apache.http.util.EntityUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
|
||||
public class SlackSender {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(SlackSender.class);
|
||||
|
||||
private String webHookUrl;
|
||||
|
||||
private String botName;
|
||||
|
||||
public SlackSender(Map<String, String> slackAlertParam) {
|
||||
webHookUrl = slackAlertParam.get(SlackParamsConstants.SLACK_WEN_HOOK_URL_NAME);
|
||||
botName = slackAlertParam.get(SlackParamsConstants.SLACK_BOT_NAME);
|
||||
Preconditions.checkArgument(!Objects.isNull(webHookUrl), "SlackWebHookURL can not be null");
|
||||
Preconditions.checkArgument(webHookUrl.startsWith("https://hooks.slack.com/services/"), "SlackWebHookURL invalidate");
|
||||
Preconditions.checkArgument(!Objects.isNull(botName), "slack bot name can not be null");
|
||||
}
|
||||
|
||||
/**
|
||||
* Send message to slack channel
|
||||
*
|
||||
* @param title title
|
||||
* @param content content
|
||||
* @return slack response
|
||||
*/
|
||||
public String sendMessage(String title, String content) {
|
||||
try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
|
||||
Map<String, Object> paramMap = new HashMap<>();
|
||||
paramMap.put(SlackParamsConstants.SLACK_BOT_NAME, botName);
|
||||
paramMap.put(SlackParamsConstants.TEXT, title);
|
||||
if (StringUtils.isNotEmpty(content)) {
|
||||
Map<String, String> attachmentTable = new HashMap<>();
|
||||
attachmentTable.put(SlackParamsConstants.TEXT, generateMarkDownTable(content));
|
||||
List<Map<String, String>> attachments = new ArrayList<>();
|
||||
attachments.add(attachmentTable);
|
||||
paramMap.put(SlackParamsConstants.ATTACHMENT, attachments);
|
||||
}
|
||||
|
||||
HttpPost httpPost = new HttpPost(webHookUrl);
|
||||
httpPost.setEntity(new StringEntity(JSONUtils.toJsonString(paramMap), "UTF-8"));
|
||||
CloseableHttpResponse response = httpClient.execute(httpPost);
|
||||
|
||||
HttpEntity entity = response.getEntity();
|
||||
return EntityUtils.toString(entity, "UTF-8");
|
||||
} catch (Exception e) {
|
||||
logger.error("Send message to slack error.", e);
|
||||
return "System Exception";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Because the slack does not support table we can transform to specific markdown table
|
||||
*
|
||||
* @param content sql data content
|
||||
*/
|
||||
private String generateMarkDownTable(String content) {
|
||||
List<LinkedHashMap> linkedHashMaps = JSONUtils.toList(content, LinkedHashMap.class);
|
||||
if (linkedHashMaps.size() > SlackParamsConstants.MAX_SHOW_NUMBER) {
|
||||
linkedHashMaps = linkedHashMaps.subList(0, SlackParamsConstants.MAX_SHOW_NUMBER);
|
||||
}
|
||||
int maxLen = 0;
|
||||
List<String> headers = new LinkedList<>();
|
||||
LinkedHashMap<String, Object> tmp = linkedHashMaps.get(0);
|
||||
for (Entry<String, Object> entry : tmp.entrySet()) {
|
||||
maxLen = Math.max(maxLen, entry.getKey().length());
|
||||
headers.add(entry.getKey());
|
||||
}
|
||||
List<List<String>> elements = new ArrayList<>(tmp.size());
|
||||
// build header
|
||||
for (LinkedHashMap<String, Object> linkedHashMap : linkedHashMaps) {
|
||||
List<String> element = new ArrayList<>(linkedHashMap.size());
|
||||
for (Object value : linkedHashMap.values()) {
|
||||
String valueStr = value.toString();
|
||||
maxLen = Math.max(maxLen, valueStr.length());
|
||||
element.add(valueStr);
|
||||
}
|
||||
elements.add(element);
|
||||
}
|
||||
final int elementLen = maxLen;
|
||||
StringBuilder stringBuilder = new StringBuilder(200);
|
||||
stringBuilder.append(headers.stream()
|
||||
.map(header -> generateString(header, elementLen, " "))
|
||||
.collect(Collectors.joining("|")));
|
||||
stringBuilder.append("\n");
|
||||
for (List<String> element : elements) {
|
||||
stringBuilder.append(element.stream()
|
||||
.map(lement -> generateString("", elementLen, "-"))
|
||||
.collect(Collectors.joining("|")));
|
||||
stringBuilder.append("\n");
|
||||
stringBuilder.append(element.stream()
|
||||
.map(e -> generateString(e, elementLen, " "))
|
||||
.collect(Collectors.joining("|")));
|
||||
stringBuilder.append("\n");
|
||||
}
|
||||
return String.format("```%s```", stringBuilder);
|
||||
}
|
||||
|
||||
private String generateString(String value, int len, String supplement) {
|
||||
StringBuilder stringBuilder = new StringBuilder(len);
|
||||
stringBuilder.append(value);
|
||||
for (int i = 0; i < len - stringBuilder.length(); i++) {
|
||||
stringBuilder.append(supplement);
|
||||
}
|
||||
return stringBuilder.toString();
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.apache.dolphinscheduler.plugin.alert.slack;
|
||||
|
||||
import org.apache.dolphinscheduler.spi.alert.AlertChannel;
|
||||
import org.apache.dolphinscheduler.spi.params.base.PluginParams;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
public class SlackAlertChannelFactoryTest {
|
||||
|
||||
private SlackAlertChannelFactory slackAlertChannelFactory = new SlackAlertChannelFactory();
|
||||
|
||||
@Test
|
||||
public void testTestGetName() {
|
||||
Assert.assertEquals("Slack", slackAlertChannelFactory.getName());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetParams() {
|
||||
List<PluginParams> params = slackAlertChannelFactory.getParams();
|
||||
Assert.assertEquals(2, params.size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCreate() {
|
||||
AlertChannel alertChannel = slackAlertChannelFactory.create();
|
||||
Assert.assertTrue(alertChannel instanceof SlackAlertChannel);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.apache.dolphinscheduler.plugin.alert.slack;
|
||||
|
||||
import org.apache.dolphinscheduler.spi.alert.AlertChannelFactory;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
public class SlackAlertPluginTest {
|
||||
|
||||
private SlackAlertPlugin slackAlertPlugin = new SlackAlertPlugin();
|
||||
|
||||
@Test
|
||||
public void testGetAlertChannelFactorys() {
|
||||
Iterable<AlertChannelFactory> alertChannelFactorys = slackAlertPlugin.getAlertChannelFactorys();
|
||||
for (AlertChannelFactory alertChannelFactory : alertChannelFactorys) {
|
||||
Assert.assertTrue(alertChannelFactory instanceof SlackAlertChannelFactory);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.apache.dolphinscheduler.plugin.alert.slack;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
public class SlackSenderTest {
|
||||
|
||||
@Test
|
||||
public void testSendMessage() {
|
||||
Map<String, String> alertparam = new HashMap<>();
|
||||
alertparam.put(SlackParamsConstants.SLACK_WEN_HOOK_URL_NAME,
|
||||
"https://hooks.slack.com/services/123456");
|
||||
alertparam.put(SlackParamsConstants.SLACK_BOT_NAME, "Dolphinscheduler");
|
||||
|
||||
SlackSender slackSender = new SlackSender(alertparam);
|
||||
String response = slackSender.sendMessage("test title", "test content");
|
||||
Assert.assertNotEquals("ok", response);
|
||||
}
|
||||
}
|
||||
|
|
@ -36,7 +36,7 @@
|
|||
<module>dolphinscheduler-alert-script</module>
|
||||
<module>dolphinscheduler-alert-http</module>
|
||||
<module>dolphinscheduler-alert-feishu</module>
|
||||
<module>dolphinscheduler-alert-slack</module>
|
||||
</modules>
|
||||
|
||||
|
||||
</project>
|
||||
6
pom.xml
6
pom.xml
|
|
@ -1033,16 +1033,18 @@
|
|||
<include>**/plugin/alert/feishu/FeiShuSenderTest.java</include>
|
||||
<include>**/plugin/alert/http/HttpAlertPluginTest.java</include>
|
||||
<include>**/plugin/alert/http/HttpSenderTest.java</include>
|
||||
<include>**/plugin/alert/slack/SlackAlertChannelFactoryTest.java</include>
|
||||
<include>**/plugin/alert/slack/SlackAlertPluginTest.java</include>
|
||||
<include>**/plugin/alert/slack/SlackSenderTest.java</include>
|
||||
<include>**/spi/params/PluginParamsTransferTest.java</include>
|
||||
<include>**/alert/plugin/EmailAlertPluginTest.java</include>
|
||||
<include>**/alert/plugin/AlertPluginManagerTest.java</include>
|
||||
<include>**/alert/plugin/DolphinPluginLoaderTest.java</include>
|
||||
<include>**/alert/utils/DingTalkUtilsTest.java</include>
|
||||
<include>**/alert/utils/EnterpriseWeChatUtilsTest.java</include>
|
||||
<include>**/alert/utils/FuncUtilsTest.java</include>
|
||||
<include>**/alert/processor/AlertRequestProcessorTest.java</include>
|
||||
<include>**/alert/runner/AlertSenderTest.java</include>
|
||||
<include>**/alert/AlertServerTest.java</include>
|
||||
|
||||
</includes>
|
||||
<!-- <skip>true</skip> -->
|
||||
</configuration>
|
||||
|
|
|
|||
Loading…
Reference in New Issue