This is an automated email from the ASF dual-hosted git repository. lilin pushed a commit to branch alert_plugin_design in repository https://gitbox.apache.org/repos/asf/incubator-dolphinscheduler.git
commit 37c8f00e1ff3b4d215d4dd613cbc4b44abab20fa Author: samz406 <[email protected]> AuthorDate: Fri Nov 27 18:01:27 2020 +0800 modify http type --- .../pom.xml | 2 +- .../plugin/alert/http/HttpAlertChannel.java} | 19 ++- .../plugin/alert/http/HttpAlertChannelFactory.java | 78 ++++++++++ .../plugin/alert/http/HttpAlertConstants.java} | 19 ++- .../plugin/alert/http/HttpAlertPlugin.java} | 8 +- .../plugin/alert/http/HttpSender.java | 170 +++++++++++++++++++++ .../plugin/alert/sms/SMSAlertChannelFactory.java | 44 ------ .../plugin/alert/sms/SMSAlertConstants.java | 21 --- .../plugin/alert/sms/SMSAlertParamsConstants.java | 21 --- dolphinscheduler-alert-plugin/pom.xml | 2 +- 10 files changed, 277 insertions(+), 107 deletions(-) diff --git a/dolphinscheduler-alert-plugin/dolphinscheduler-alert-sms/pom.xml b/dolphinscheduler-alert-plugin/dolphinscheduler-alert-http/pom.xml similarity index 96% rename from dolphinscheduler-alert-plugin/dolphinscheduler-alert-sms/pom.xml rename to dolphinscheduler-alert-plugin/dolphinscheduler-alert-http/pom.xml index 40188e3..51cba27 100644 --- a/dolphinscheduler-alert-plugin/dolphinscheduler-alert-sms/pom.xml +++ b/dolphinscheduler-alert-plugin/dolphinscheduler-alert-http/pom.xml @@ -9,7 +9,7 @@ </parent> <modelVersion>4.0.0</modelVersion> - <artifactId>dolphinscheduler-alert-sms</artifactId> + <artifactId>dolphinscheduler-alert-http</artifactId> <dependencies> <dependency> diff --git a/dolphinscheduler-alert-plugin/dolphinscheduler-alert-sms/src/main/java/org/apache/dolphinscheduler/plugin/alert/sms/SMSAlertChannel.java b/dolphinscheduler-alert-plugin/dolphinscheduler-alert-http/src/main/java/org/apache/dolphinscheduler/plugin/alert/http/HttpAlertChannel.java similarity index 60% rename from dolphinscheduler-alert-plugin/dolphinscheduler-alert-sms/src/main/java/org/apache/dolphinscheduler/plugin/alert/sms/SMSAlertChannel.java rename to dolphinscheduler-alert-plugin/dolphinscheduler-alert-http/src/main/java/org/apache/dolphinscheduler/plugin/alert/http/HttpAlertChannel.java index 2e0210b..9707d76 100644 --- a/dolphinscheduler-alert-plugin/dolphinscheduler-alert-sms/src/main/java/org/apache/dolphinscheduler/plugin/alert/sms/SMSAlertChannel.java +++ b/dolphinscheduler-alert-plugin/dolphinscheduler-alert-http/src/main/java/org/apache/dolphinscheduler/plugin/alert/http/HttpAlertChannel.java @@ -15,19 +15,28 @@ * limitations under the License. */ -package org.apache.dolphinscheduler.plugin.alert.sms; +package org.apache.dolphinscheduler.plugin.alert.http; 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 org.apache.dolphinscheduler.spi.params.PluginParamsTransfer; + +import java.util.Map; /** - * sms alert channel,use sms message to seed the alertInfo + * http alert channel,use sms message to seed the alertInfo */ -public class SMSAlertChannel implements AlertChannel { +public class HttpAlertChannel implements AlertChannel { @Override - public AlertResult process(AlertInfo info) { - return null; + public AlertResult process(AlertInfo alertInfo) { + + AlertData alertData = alertInfo.getAlertData(); + String alertParams = alertInfo.getAlertParams(); + Map<String, String> paramsMap = PluginParamsTransfer.getPluginParamsMap(alertParams); + + return new HttpSender(paramsMap).send(alertData.getContent()); } } diff --git a/dolphinscheduler-alert-plugin/dolphinscheduler-alert-http/src/main/java/org/apache/dolphinscheduler/plugin/alert/http/HttpAlertChannelFactory.java b/dolphinscheduler-alert-plugin/dolphinscheduler-alert-http/src/main/java/org/apache/dolphinscheduler/plugin/alert/http/HttpAlertChannelFactory.java new file mode 100644 index 0000000..2e78056 --- /dev/null +++ b/dolphinscheduler-alert-plugin/dolphinscheduler-alert-http/src/main/java/org/apache/dolphinscheduler/plugin/alert/http/HttpAlertChannelFactory.java @@ -0,0 +1,78 @@ +/* + * 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.http; + +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.Arrays; +import java.util.List; + +/** + * http alert factory + */ +public class HttpAlertChannelFactory implements AlertChannelFactory { + @Override + public String getName() { + return "http alert"; + } + + @Override + public List<PluginParams> getParams() { + + InputParam url = InputParam.newBuilder(HttpAlertConstants.URL, HttpAlertConstants.URL) + .addValidate(Validate.newBuilder() + .setRequired(true) + .build()) + .build(); + + InputParam headerParams = InputParam.newBuilder(HttpAlertConstants.HEADER_PARAMS, HttpAlertConstants.HEADER_PARAMS) + .addValidate(Validate.newBuilder() + .setRequired(true) + .build()) + .build(); + + InputParam bodyParams = InputParam.newBuilder(HttpAlertConstants.BODY_PARAMS, HttpAlertConstants.BODY_PARAMS) + .addValidate(Validate.newBuilder() + .setRequired(true) + .build()) + .build(); + + InputParam contentField = InputParam.newBuilder(HttpAlertConstants.CONTENT_FIELD, HttpAlertConstants.CONTENT_FIELD) + .addValidate(Validate.newBuilder() + .setRequired(true) + .build()) + .build(); + + InputParam requestType = InputParam.newBuilder(HttpAlertConstants.REQUEST_TYPE, HttpAlertConstants.REQUEST_TYPE) + .addValidate(Validate.newBuilder() + .setRequired(true) + .build()) + .build(); + + return Arrays.asList(url, requestType, headerParams, bodyParams, contentField); + } + + @Override + public AlertChannel create() { + return new HttpAlertChannel(); + } +} diff --git a/dolphinscheduler-alert-plugin/dolphinscheduler-alert-sms/src/main/java/org/apache/dolphinscheduler/plugin/alert/sms/SMSSender.java b/dolphinscheduler-alert-plugin/dolphinscheduler-alert-http/src/main/java/org/apache/dolphinscheduler/plugin/alert/http/HttpAlertConstants.java similarity index 68% rename from dolphinscheduler-alert-plugin/dolphinscheduler-alert-sms/src/main/java/org/apache/dolphinscheduler/plugin/alert/sms/SMSSender.java rename to dolphinscheduler-alert-plugin/dolphinscheduler-alert-http/src/main/java/org/apache/dolphinscheduler/plugin/alert/http/HttpAlertConstants.java index ccfc059..5f3b1c2 100644 --- a/dolphinscheduler-alert-plugin/dolphinscheduler-alert-sms/src/main/java/org/apache/dolphinscheduler/plugin/alert/sms/SMSSender.java +++ b/dolphinscheduler-alert-plugin/dolphinscheduler-alert-http/src/main/java/org/apache/dolphinscheduler/plugin/alert/http/HttpAlertConstants.java @@ -15,20 +15,19 @@ * limitations under the License. */ -package org.apache.dolphinscheduler.plugin.alert.sms; +package org.apache.dolphinscheduler.plugin.alert.http; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +public class HttpAlertConstants { -/** - * send message - */ -public class SMSSender { - public static final Logger logger = LoggerFactory.getLogger(SMSSender.class); + public static final String URL = "url"; + + public static final String HEADER_PARAMS = "headerParams"; + + public static final String BODY_PARAMS = "bodyParams"; + public static final String CONTENT_FIELD = "contentField"; - public void send(){ + public static final String REQUEST_TYPE = "requestType"; - } } diff --git a/dolphinscheduler-alert-plugin/dolphinscheduler-alert-sms/src/main/java/org/apache/dolphinscheduler/plugin/alert/sms/SMSAlertPlugin.java b/dolphinscheduler-alert-plugin/dolphinscheduler-alert-http/src/main/java/org/apache/dolphinscheduler/plugin/alert/http/HttpAlertPlugin.java similarity index 83% rename from dolphinscheduler-alert-plugin/dolphinscheduler-alert-sms/src/main/java/org/apache/dolphinscheduler/plugin/alert/sms/SMSAlertPlugin.java rename to dolphinscheduler-alert-plugin/dolphinscheduler-alert-http/src/main/java/org/apache/dolphinscheduler/plugin/alert/http/HttpAlertPlugin.java index 55dae28..c3ab1a1 100644 --- a/dolphinscheduler-alert-plugin/dolphinscheduler-alert-sms/src/main/java/org/apache/dolphinscheduler/plugin/alert/sms/SMSAlertPlugin.java +++ b/dolphinscheduler-alert-plugin/dolphinscheduler-alert-http/src/main/java/org/apache/dolphinscheduler/plugin/alert/http/HttpAlertPlugin.java @@ -15,19 +15,19 @@ * limitations under the License. */ -package org.apache.dolphinscheduler.plugin.alert.sms; +package org.apache.dolphinscheduler.plugin.alert.http; import com.google.common.collect.ImmutableList; import org.apache.dolphinscheduler.spi.DolphinSchedulerPlugin; import org.apache.dolphinscheduler.spi.alert.AlertChannelFactory; /** - * sms alertPlugins + * http alertPlugins */ -public class SMSAlertPlugin implements DolphinSchedulerPlugin { +public class HttpAlertPlugin implements DolphinSchedulerPlugin { @Override public Iterable<AlertChannelFactory> getAlertChannelFactorys() { - return ImmutableList.of(new SMSAlertChannelFactory()); + return ImmutableList.of(new HttpAlertChannelFactory()); } } diff --git a/dolphinscheduler-alert-plugin/dolphinscheduler-alert-http/src/main/java/org/apache/dolphinscheduler/plugin/alert/http/HttpSender.java b/dolphinscheduler-alert-plugin/dolphinscheduler-alert-http/src/main/java/org/apache/dolphinscheduler/plugin/alert/http/HttpSender.java new file mode 100644 index 0000000..eb71ec3 --- /dev/null +++ b/dolphinscheduler-alert-plugin/dolphinscheduler-alert-http/src/main/java/org/apache/dolphinscheduler/plugin/alert/http/HttpSender.java @@ -0,0 +1,170 @@ +/* + * 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.http; + +import com.fasterxml.jackson.databind.node.ObjectNode; +import org.apache.dolphinscheduler.spi.alert.AlertResult; +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.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.client.methods.HttpRequestBase; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.util.EntityUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.HashMap; +import java.util.Map; + +/** + *http send message + */ +public class HttpSender { + + public static final Logger logger = LoggerFactory.getLogger(HttpSender.class); + + private String url; + + private String headerParams; + + private String bodyParams; + + private String contentField; + + private String requestType; + + private HttpRequestBase httpRequest; + + + private static final String URL_SPLICE_CHAR = "?"; + + /** + * request type post + */ + private static final String REQUEST_TYPE_POST = "POST"; + + /** + * request type get + */ + private static final String REQUEST_TYPE_GET = "GET"; + + private static final String DEFAULT_CHARSET = "utf-8"; + + public HttpSender(Map<String, String> paramsMap){ + + url = paramsMap.get(HttpAlertConstants.URL); + headerParams = paramsMap.get(HttpAlertConstants.HEADER_PARAMS); + bodyParams = paramsMap.get(HttpAlertConstants.BODY_PARAMS); + contentField = paramsMap.get(HttpAlertConstants.CONTENT_FIELD); + requestType = paramsMap.get(HttpAlertConstants.REQUEST_TYPE); + } + + + public AlertResult send(String msg) { + + AlertResult alertResult = new AlertResult(); + + getHttpRequest(msg); + + if (httpRequest == null){ + alertResult.setStatus("false"); + alertResult.setMessage("Request types are not supported"); + return alertResult; + } + + try { + CloseableHttpClient httpClient = HttpClientBuilder.create().build(); + CloseableHttpResponse response = httpClient.execute(httpRequest); + HttpEntity entity = response.getEntity(); + String resp = EntityUtils.toString(entity, DEFAULT_CHARSET); + alertResult.setStatus("true"); + alertResult.setMessage(resp); + }catch (Exception e) { + logger.error("send sms alert msg exception : {}", e.getMessage()); + alertResult.setStatus("false"); + alertResult.setMessage("send http request alert fail."); + } + + return alertResult; + } + + private void getHttpRequest(String msg){ + + if (REQUEST_TYPE_POST.equals(requestType)){ + httpRequest = new HttpPost(url); + //POST request add param in request body + setMsgInRequestBody(msg); + }else if (REQUEST_TYPE_GET.equals(requestType)){ + //GET request add param in url + setMsgInUrl(msg); + httpRequest = new HttpGet(url); + } + setHeader(); + } + + /** + * add msg param in url + * @param msg + */ + private void setMsgInUrl(String msg) { + + if (StringUtils.isNotBlank(contentField)){ + String type = "&"; + //check splice char is & or ? + if (!url.contains(URL_SPLICE_CHAR)){ + type = URL_SPLICE_CHAR; + } + url = String.format("%s%s%s=%s", url, type, contentField, msg); + } + } + + + /** + * set header params + */ + private void setHeader(){ + + if (httpRequest == null){ + return; + } + + HashMap<String,Object> map = JSONUtils.parseObject(headerParams, HashMap.class); + for (Map.Entry<String,Object> entry : map.entrySet()) { + httpRequest.setHeader(entry.getKey(), String.valueOf(entry.getValue())); + } + } + + /** + *set body params + * @param msg + * @return + */ + private String setMsgInRequestBody(String msg){ + ObjectNode objectNode = JSONUtils.parseObject(bodyParams); + //set msg content field + objectNode.put(contentField,msg); + return objectNode.toString(); + } + + +} diff --git a/dolphinscheduler-alert-plugin/dolphinscheduler-alert-sms/src/main/java/org/apache/dolphinscheduler/plugin/alert/sms/SMSAlertChannelFactory.java b/dolphinscheduler-alert-plugin/dolphinscheduler-alert-sms/src/main/java/org/apache/dolphinscheduler/plugin/alert/sms/SMSAlertChannelFactory.java deleted file mode 100644 index ac179ce..0000000 --- a/dolphinscheduler-alert-plugin/dolphinscheduler-alert-sms/src/main/java/org/apache/dolphinscheduler/plugin/alert/sms/SMSAlertChannelFactory.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * 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.sms; - -import org.apache.dolphinscheduler.spi.alert.AlertChannel; -import org.apache.dolphinscheduler.spi.alert.AlertChannelFactory; -import org.apache.dolphinscheduler.spi.params.base.PluginParams; - -import java.util.List; - -/** - * sms alert factory - */ -public class SMSAlertChannelFactory implements AlertChannelFactory { - @Override - public String getName() { - return null; - } - - @Override - public List<PluginParams> getParams() { - return null; - } - - @Override - public AlertChannel create() { - return null; - } -} diff --git a/dolphinscheduler-alert-plugin/dolphinscheduler-alert-sms/src/main/java/org/apache/dolphinscheduler/plugin/alert/sms/SMSAlertConstants.java b/dolphinscheduler-alert-plugin/dolphinscheduler-alert-sms/src/main/java/org/apache/dolphinscheduler/plugin/alert/sms/SMSAlertConstants.java deleted file mode 100644 index bf782a8..0000000 --- a/dolphinscheduler-alert-plugin/dolphinscheduler-alert-sms/src/main/java/org/apache/dolphinscheduler/plugin/alert/sms/SMSAlertConstants.java +++ /dev/null @@ -1,21 +0,0 @@ -/* - * 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.sms; - -public class SMSAlertConstants { -} diff --git a/dolphinscheduler-alert-plugin/dolphinscheduler-alert-sms/src/main/java/org/apache/dolphinscheduler/plugin/alert/sms/SMSAlertParamsConstants.java b/dolphinscheduler-alert-plugin/dolphinscheduler-alert-sms/src/main/java/org/apache/dolphinscheduler/plugin/alert/sms/SMSAlertParamsConstants.java deleted file mode 100644 index c0713d9..0000000 --- a/dolphinscheduler-alert-plugin/dolphinscheduler-alert-sms/src/main/java/org/apache/dolphinscheduler/plugin/alert/sms/SMSAlertParamsConstants.java +++ /dev/null @@ -1,21 +0,0 @@ -/* - * 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.sms; - -public class SMSAlertParamsConstants { -} diff --git a/dolphinscheduler-alert-plugin/pom.xml b/dolphinscheduler-alert-plugin/pom.xml index 9713198..707f0ce 100644 --- a/dolphinscheduler-alert-plugin/pom.xml +++ b/dolphinscheduler-alert-plugin/pom.xml @@ -34,7 +34,7 @@ <module>dolphinscheduler-alert-wechat</module> <module>dolphinscheduler-alert-dingtalk</module> <module>dolphinscheduler-alert-script</module> - <module>dolphinscheduler-alert-sms</module> + <module>dolphinscheduler-alert-http</module> </modules>
