From 66548a2ef22ae0dd3d5a562da927e2f005c47320 Mon Sep 17 00:00:00 2001 From: xiangzihao <460888207@qq.com> Date: Mon, 19 Aug 2024 19:09:05 +0800 Subject: [PATCH] [DSIP-62][Http Alert Plugin] Refactor http alert plugin (#16484) * add dsip_62 * fix sonar * fix spotless --- docs/docs/en/guide/alert/http.md | 21 +- docs/docs/zh/guide/alert/http.md | 39 +-- docs/img/alert/http-alert-example.png | Bin 0 -> 133634 bytes docs/img/alert/http-get-example.png | Bin 15623 -> 0 bytes docs/img/alert/http-post-example.png | Bin 17889 -> 0 bytes .../dolphinscheduler-alert-http/pom.xml | 12 + .../alert/http/HttpAlertChannelFactory.java | 42 +-- .../plugin/alert/http/HttpAlertConstants.java | 11 +- .../plugin/alert/http/HttpRequestMethod.java | 22 ++ .../plugin/alert/http/HttpSender.java | 246 ++++++++++-------- .../plugin/alert/http/HttpSenderTest.java | 134 ++++++++-- .../alert/plugin/AlertPluginManager.java | 6 +- .../interceptor/LocaleChangeInterceptor.java | 4 +- .../spi/params/base/DataType.java | 7 +- .../spi/params/base/Validate.java | 29 +-- .../src/locales/en_US/security.ts | 2 +- .../src/locales/zh_CN/security.ts | 2 +- .../security/alarm-instance-manage/detail.tsx | 1 + 18 files changed, 345 insertions(+), 233 deletions(-) create mode 100644 docs/img/alert/http-alert-example.png delete mode 100644 docs/img/alert/http-get-example.png delete mode 100644 docs/img/alert/http-post-example.png create mode 100644 dolphinscheduler-alert/dolphinscheduler-alert-plugins/dolphinscheduler-alert-http/src/main/java/org/apache/dolphinscheduler/plugin/alert/http/HttpRequestMethod.java diff --git a/docs/docs/en/guide/alert/http.md b/docs/docs/en/guide/alert/http.md index ba5c009211..f765b9db0c 100644 --- a/docs/docs/en/guide/alert/http.md +++ b/docs/docs/en/guide/alert/http.md @@ -7,25 +7,16 @@ If you need to use `Http script` for alerting, create an alert instance in the a | **Parameter** | **Description** | |---------------|-----------------------------------------------------------------------------------------------------| | URL | The `Http` request URL needs to contain protocol, host, path and parameters if the method is `GET`. | -| Request Type | Select the request type from `POST` or `GET`. | -| Headers | The headers of the `Http` request in JSON format. | -| Body | The request body of the `Http` request in JSON format, when using `POST` method to alert. | -| Content Field | The field name to place the alert information. | +| Request Type | Select the request type from `POST` or `GET` or `PUT`. | +| Headers | The headers of the `Http` request in JSON format. Not including content-type. | +| Body | The request body of the `Http` request in JSON format, when using `POST` or `PUT` method to alert. | +| Content Type | The content-type of header. | -## Send Type - -Using `POST` and `GET` method to send `Http` request in the `Request Type`. +> Alarm message supports variables `$msg`, which can be used in `URL`, `Headers`, and `Body`. ### GET HTTP Send alert information by `Http` GET method. The following shows the `GET` configuration example: -![enterprise-wechat-app-msg-config](../../../../img/alert/http-get-example.png) - -### POST HTTP - -Send alert information inside `Http` body by `Http` POST method. -The following shows the `POST` configuration example: - -![enterprise-wechat-app-msg-config](../../../../img/alert/http-post-example.png) +![http-alert-msg-config](../../../../img/alert/http-alert-example.png) diff --git a/docs/docs/zh/guide/alert/http.md b/docs/docs/zh/guide/alert/http.md index 9f72723d6c..51524ac786 100644 --- a/docs/docs/zh/guide/alert/http.md +++ b/docs/docs/zh/guide/alert/http.md @@ -4,40 +4,19 @@ ## 参数配置 -* URL +| **参数** | **描述** | +|--------------|------------------------------------------------| +| URL | 访问的`Http`连接URL,需要包含协议、Host、路径,如果是GET方法可以添加参数 | +| 请求方式 | 当前支持`GET`和`POST`以及`PUT`三种请求方式 | +| 请求头(Headers) | `Http`请求的完整请求头,以JSON为格式(注意不包含Content-Type),非必填 | +| 请求体(Body) | Http`请求的完整请求体,以JSON为格式,非必填 | +| Content-Type | 请求体的`Content-Type`,默认为`application/json` | - > 访问的`Http`连接URL,需要包含协议、Host、路径,如果是GET方法可以添加参数 - -* 请求方式 - - > 选择该请求为POST或GET方法 - -* 请求头 - - > `Http`请求的完整请求头,以JSON为格式 - -* 请求体 - - > `Http`请求的完整请求体,以JSON为格式,GET方法不需要写该参数 - -* 内容字段 - - > 放置本次告警告警信息的字段名称 - -## 发送类型 - -其中`Request Type`分别对应使用`POST`方法和`GET`方法进行`Http`告警。 +> 告警消息,支持变量`$msg`,可在`URL`,`请求头`,`请求体`中使用,非必填。 ### GET Http告警 GET `Http`告警指将告警结果作为参数通过`Http` GET方法进行请求。 下图是GET告警配置的示例: -![enterprise-wechat-app-msg-config](../../../../img/alert/http-get-example.png) - -### POST Http告警 - -POST `Http`告警指将告警结果作为`BODY`参数通过`Http`POST方法进行请求。 -下图是POST告警配置的示例: - -![enterprise-wechat-app-msg-config](../../../../img/alert/http-post-example.png) +![http-alert-msg-config](../../../../img/alert/http-alert-example.png) diff --git a/docs/img/alert/http-alert-example.png b/docs/img/alert/http-alert-example.png new file mode 100644 index 0000000000000000000000000000000000000000..b2fd5e457643ea4bdec59e803afc298c245da9a3 GIT binary patch literal 133634 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.PD|Ylx+w|Pj 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�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 literal 0 HcmV?d00001 diff --git a/docs/img/alert/http-get-example.png b/docs/img/alert/http-get-example.png deleted file mode 100644 index a6c29b48c93bdeb9b6e19f48721fe09fd5f76576..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15623 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 BM%MrU diff --git a/docs/img/alert/http-post-example.png b/docs/img/alert/http-post-example.png deleted file mode 100644 index 5cf0d3e64d1972127c733b6bfee21b3524305752..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17889 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 diff --git a/dolphinscheduler-alert/dolphinscheduler-alert-plugins/dolphinscheduler-alert-http/pom.xml b/dolphinscheduler-alert/dolphinscheduler-alert-plugins/dolphinscheduler-alert-http/pom.xml index 3ce4dfd186..274ec7f1d9 100644 --- a/dolphinscheduler-alert/dolphinscheduler-alert-plugins/dolphinscheduler-alert-http/pom.xml +++ b/dolphinscheduler-alert/dolphinscheduler-alert-plugins/dolphinscheduler-alert-http/pom.xml @@ -41,5 +41,17 @@ jackson-databind provided + + + com.squareup.okhttp3 + mockwebserver + test + + + junit + junit + + + diff --git a/dolphinscheduler-alert/dolphinscheduler-alert-plugins/dolphinscheduler-alert-http/src/main/java/org/apache/dolphinscheduler/plugin/alert/http/HttpAlertChannelFactory.java b/dolphinscheduler-alert/dolphinscheduler-alert-plugins/dolphinscheduler-alert-http/src/main/java/org/apache/dolphinscheduler/plugin/alert/http/HttpAlertChannelFactory.java index 0e117b0f20..3b7dc84d4b 100644 --- a/dolphinscheduler-alert/dolphinscheduler-alert-plugins/dolphinscheduler-alert-http/src/main/java/org/apache/dolphinscheduler/plugin/alert/http/HttpAlertChannelFactory.java +++ b/dolphinscheduler-alert/dolphinscheduler-alert-plugins/dolphinscheduler-alert-http/src/main/java/org/apache/dolphinscheduler/plugin/alert/http/HttpAlertChannelFactory.java @@ -20,11 +20,14 @@ package org.apache.dolphinscheduler.plugin.alert.http; import org.apache.dolphinscheduler.alert.api.AlertChannel; import org.apache.dolphinscheduler.alert.api.AlertChannelFactory; import org.apache.dolphinscheduler.alert.api.AlertInputTips; +import org.apache.dolphinscheduler.common.model.OkHttpRequestHeaderContentType; import org.apache.dolphinscheduler.spi.params.base.DataType; +import org.apache.dolphinscheduler.spi.params.base.ParamsOptions; import org.apache.dolphinscheduler.spi.params.base.PluginParams; import org.apache.dolphinscheduler.spi.params.base.Validate; import org.apache.dolphinscheduler.spi.params.input.InputParam; import org.apache.dolphinscheduler.spi.params.input.number.InputNumberParam; +import org.apache.dolphinscheduler.spi.params.radio.RadioParam; import java.util.Arrays; import java.util.List; @@ -52,35 +55,42 @@ public final class HttpAlertChannelFactory implements AlertChannelFactory { InputParam headerParams = InputParam.newBuilder(HttpAlertConstants.NAME_HEADER_PARAMS, HttpAlertConstants.HEADER_PARAMS) .setPlaceholder(AlertInputTips.HEADER.getMsg()) - .addValidate(Validate.newBuilder() - .setRequired(true) - .build()) - .build(); - - InputParam bodyParams = - InputParam.newBuilder(HttpAlertConstants.NAME_BODY_PARAMS, HttpAlertConstants.BODY_PARAMS) - .setPlaceholder(AlertInputTips.JSON_BODY.getMsg()) .addValidate(Validate.newBuilder() .setRequired(false) .build()) .build(); - InputParam contentField = - InputParam.newBuilder(HttpAlertConstants.NAME_CONTENT_FIELD, HttpAlertConstants.CONTENT_FIELD) - .setPlaceholder(AlertInputTips.FIELD_NAME.getMsg()) + RadioParam contentType = + RadioParam.newBuilder(HttpAlertConstants.NAME_CONTENT_TYPE, HttpAlertConstants.CONTENT_TYPE) + .addParamsOptions(new ParamsOptions(OkHttpRequestHeaderContentType.APPLICATION_JSON.getValue(), + OkHttpRequestHeaderContentType.APPLICATION_JSON.getValue(), false)) + .addParamsOptions( + new ParamsOptions(OkHttpRequestHeaderContentType.APPLICATION_FORM_URLENCODED.getValue(), + OkHttpRequestHeaderContentType.APPLICATION_FORM_URLENCODED.getValue(), false)) + .setValue(OkHttpRequestHeaderContentType.APPLICATION_JSON.getValue()) .addValidate(Validate.newBuilder() .setRequired(true) .build()) .build(); - InputParam requestType = - InputParam.newBuilder(HttpAlertConstants.NAME_REQUEST_TYPE, HttpAlertConstants.REQUEST_TYPE) - .setPlaceholder(AlertInputTips.HTTP_METHOD.getMsg()) + InputParam bodyParams = + InputParam.newBuilder(HttpAlertConstants.NAME_BODY_PARAMS, HttpAlertConstants.BODY_PARAMS) + .setPlaceholder(AlertInputTips.JSON_BODY.getMsg()) .addValidate(Validate.newBuilder() - .setRequired(true) + .setRequired(false) .build()) .build(); + RadioParam requestType = RadioParam + .newBuilder(HttpAlertConstants.NAME_REQUEST_TYPE, HttpAlertConstants.REQUEST_TYPE) + .addParamsOptions(new ParamsOptions(HttpRequestMethod.GET.name(), HttpRequestMethod.GET.name(), false)) + .addParamsOptions( + new ParamsOptions(HttpRequestMethod.POST.name(), HttpRequestMethod.POST.name(), false)) + .addParamsOptions(new ParamsOptions(HttpRequestMethod.PUT.name(), HttpRequestMethod.PUT.name(), false)) + .setValue(HttpRequestMethod.GET.name()) + .addValidate(Validate.newBuilder().setRequired(true).build()) + .build(); + InputNumberParam timeout = InputNumberParam.newBuilder(HttpAlertConstants.NAME_TIMEOUT, HttpAlertConstants.TIMEOUT) .setValue(HttpAlertConstants.DEFAULT_TIMEOUT) @@ -90,7 +100,7 @@ public final class HttpAlertChannelFactory implements AlertChannelFactory { .build()) .build(); - return Arrays.asList(url, requestType, headerParams, bodyParams, contentField, timeout); + return Arrays.asList(url, requestType, headerParams, bodyParams, contentType, timeout); } @Override diff --git a/dolphinscheduler-alert/dolphinscheduler-alert-plugins/dolphinscheduler-alert-http/src/main/java/org/apache/dolphinscheduler/plugin/alert/http/HttpAlertConstants.java b/dolphinscheduler-alert/dolphinscheduler-alert-plugins/dolphinscheduler-alert-http/src/main/java/org/apache/dolphinscheduler/plugin/alert/http/HttpAlertConstants.java index ab4e6dd1c1..775bc03860 100644 --- a/dolphinscheduler-alert/dolphinscheduler-alert-plugins/dolphinscheduler-alert-http/src/main/java/org/apache/dolphinscheduler/plugin/alert/http/HttpAlertConstants.java +++ b/dolphinscheduler-alert/dolphinscheduler-alert-plugins/dolphinscheduler-alert-http/src/main/java/org/apache/dolphinscheduler/plugin/alert/http/HttpAlertConstants.java @@ -17,6 +17,9 @@ package org.apache.dolphinscheduler.plugin.alert.http; +import lombok.experimental.UtilityClass; + +@UtilityClass public final class HttpAlertConstants { public static final String URL = "$t('url')"; @@ -27,6 +30,10 @@ public final class HttpAlertConstants { public static final String NAME_HEADER_PARAMS = "headerParams"; + public static final String CONTENT_TYPE = "$t('contentType')"; + + public static final String NAME_CONTENT_TYPE = "contentType"; + public static final String BODY_PARAMS = "$t('bodyParams')"; public static final String NAME_BODY_PARAMS = "bodyParams"; @@ -45,7 +52,5 @@ public final class HttpAlertConstants { public static final int DEFAULT_TIMEOUT = 120; - private HttpAlertConstants() { - throw new UnsupportedOperationException("This is a utility class and cannot be instantiated"); - } + public static final String MSG_PARAMS = "${msg}"; } diff --git a/dolphinscheduler-alert/dolphinscheduler-alert-plugins/dolphinscheduler-alert-http/src/main/java/org/apache/dolphinscheduler/plugin/alert/http/HttpRequestMethod.java b/dolphinscheduler-alert/dolphinscheduler-alert-plugins/dolphinscheduler-alert-http/src/main/java/org/apache/dolphinscheduler/plugin/alert/http/HttpRequestMethod.java new file mode 100644 index 0000000000..1f8b3a27b5 --- /dev/null +++ b/dolphinscheduler-alert/dolphinscheduler-alert-plugins/dolphinscheduler-alert-http/src/main/java/org/apache/dolphinscheduler/plugin/alert/http/HttpRequestMethod.java @@ -0,0 +1,22 @@ +/* + * 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; + +public enum HttpRequestMethod { + GET, POST, PUT +} diff --git a/dolphinscheduler-alert/dolphinscheduler-alert-plugins/dolphinscheduler-alert-http/src/main/java/org/apache/dolphinscheduler/plugin/alert/http/HttpSender.java b/dolphinscheduler-alert/dolphinscheduler-alert-plugins/dolphinscheduler-alert-http/src/main/java/org/apache/dolphinscheduler/plugin/alert/http/HttpSender.java index e2a6606a39..42f1474de4 100644 --- a/dolphinscheduler-alert/dolphinscheduler-alert-plugins/dolphinscheduler-alert-http/src/main/java/org/apache/dolphinscheduler/plugin/alert/http/HttpSender.java +++ b/dolphinscheduler-alert/dolphinscheduler-alert-plugins/dolphinscheduler-alert-http/src/main/java/org/apache/dolphinscheduler/plugin/alert/http/HttpSender.java @@ -18,146 +18,172 @@ package org.apache.dolphinscheduler.plugin.alert.http; import org.apache.dolphinscheduler.alert.api.AlertResult; -import org.apache.dolphinscheduler.alert.api.HttpServiceRetryStrategy; +import org.apache.dolphinscheduler.common.model.OkHttpRequestHeaderContentType; +import org.apache.dolphinscheduler.common.model.OkHttpRequestHeaders; +import org.apache.dolphinscheduler.common.model.OkHttpResponse; import org.apache.dolphinscheduler.common.utils.JSONUtils; +import org.apache.dolphinscheduler.common.utils.OkHttpUtils; import org.apache.commons.lang3.StringUtils; -import org.apache.http.HttpEntity; -import org.apache.http.client.config.RequestConfig; -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.HttpClients; -import org.apache.http.util.EntityUtils; +import org.apache.http.HttpStatus; import java.io.UnsupportedEncodingException; -import java.net.MalformedURLException; -import java.net.URI; -import java.net.URISyntaxException; -import java.net.URL; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; +import java.util.Collections; import java.util.HashMap; import java.util.Map; +import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; -import com.fasterxml.jackson.databind.node.ObjectNode; - @Slf4j public final class HttpSender { - 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 final String headerParams; - private final String bodyParams; - private final String contentField; - private final String requestType; - private final int timeout; + private Map headerParams; + private OkHttpRequestHeaderContentType contentType; + private Map bodyParams; + private HttpRequestMethod requestType; + private int timeout; private String url; - private HttpRequestBase httpRequest; public HttpSender(Map paramsMap) { + paramsValidator(paramsMap); + } + private void paramsValidator(Map paramsMap) { url = paramsMap.get(HttpAlertConstants.NAME_URL); - headerParams = paramsMap.get(HttpAlertConstants.NAME_HEADER_PARAMS); - bodyParams = paramsMap.get(HttpAlertConstants.NAME_BODY_PARAMS); - contentField = paramsMap.get(HttpAlertConstants.NAME_CONTENT_FIELD); - requestType = paramsMap.get(HttpAlertConstants.NAME_REQUEST_TYPE); + if (StringUtils.isBlank(url)) { + throw new IllegalArgumentException("url can not be null"); + } + + String headerParamsString = paramsMap.get(HttpAlertConstants.NAME_HEADER_PARAMS); + if (StringUtils.isNotBlank(headerParamsString)) { + headerParams = JSONUtils.toMap(headerParamsString); + if (headerParams == null) { + throw new IllegalArgumentException("headerParams is not a valid json"); + } + } else { + headerParams = new HashMap<>(); + } + + String bodyParamsString = paramsMap.get(HttpAlertConstants.NAME_BODY_PARAMS); + if (StringUtils.isNotBlank(bodyParamsString)) { + bodyParams = JSONUtils.toMap(bodyParamsString); + if (bodyParams == null) { + throw new IllegalArgumentException("bodyParams is not a valid json"); + } + } else { + bodyParams = new HashMap<>(); + } + + try { + requestType = HttpRequestMethod.valueOf(paramsMap.get(HttpAlertConstants.NAME_REQUEST_TYPE)); + } catch (IllegalArgumentException e) { + throw new IllegalArgumentException("requestType is not a valid value"); + } + + contentType = OkHttpRequestHeaderContentType.fromValue(paramsMap.get(HttpAlertConstants.NAME_CONTENT_TYPE)); + if (contentType == null) { + throw new IllegalArgumentException("contentType is not a valid value"); + } + timeout = StringUtils.isNotBlank(paramsMap.get(HttpAlertConstants.NAME_TIMEOUT)) ? Integer.parseInt(paramsMap.get(HttpAlertConstants.NAME_TIMEOUT)) - : HttpAlertConstants.DEFAULT_TIMEOUT; + : HttpAlertConstants.DEFAULT_TIMEOUT * 1000; } public AlertResult send(String msg) { AlertResult alertResult = new AlertResult(); + OkHttpResponse okHttpResponse; try { - createHttpRequest(msg); - } catch (MalformedURLException e) { - throw new RuntimeException(e); - } catch (URISyntaxException e) { + okHttpResponse = sendHttpRequest(msg); + } catch (RuntimeException e) { throw new RuntimeException(e); } - if (httpRequest == null) { - alertResult.setSuccess(false); - alertResult.setMessage("Request types are not supported"); - return alertResult; - } + validateResponse(okHttpResponse, alertResult); - try { - String resp = this.getResponseString(httpRequest); - alertResult.setSuccess(true); - alertResult.setMessage(resp); - } catch (Exception e) { - log.error("send http alert msg exception : {}", e.getMessage()); + return alertResult; + } + + private void validateResponse(OkHttpResponse okHttpResponse, AlertResult alertResult) { + if (okHttpResponse.getStatusCode() != HttpStatus.SC_OK) { alertResult.setSuccess(false); - alertResult.setMessage( - String.format("Send http request alert failed: %s", e.getMessage())); + alertResult + .setMessage(String.format("send http alert failed, response body: %s", okHttpResponse.getBody())); + } else { + alertResult.setSuccess(true); + alertResult + .setMessage(String.format("send http alert success, response body: %s", okHttpResponse.getBody())); } - - return alertResult; } - public String getResponseString(HttpRequestBase httpRequest) throws Exception { + private OkHttpResponse sendHttpRequest(String msg) throws RuntimeException { + switch (requestType) { + case POST: + setMsgInHeader(msg); + setMsgInRequestBody(msg); + return sendPostRequest(); + case GET: + setMsgInUrl(msg); + setMsgInHeader(msg); + return sendGetRequest(); + case PUT: + setMsgInHeader(msg); + setMsgInRequestBody(msg); + return sendPutRequest(); + default: + throw new RuntimeException(String.format("http request method %s not supported", + requestType)); + } + } - RequestConfig requestConfig = RequestConfig.custom() - .setConnectTimeout(timeout * 1000) - .setConnectionRequestTimeout(timeout * 1000) - .setSocketTimeout(timeout * 1000) - .build(); - CloseableHttpClient httpClient = HttpClients.custom() - .setDefaultRequestConfig(requestConfig) - .setRetryHandler(HttpServiceRetryStrategy.retryStrategy).build(); + @SneakyThrows + private OkHttpResponse sendGetRequest() { + OkHttpRequestHeaders okHttpRequestHeaders = new OkHttpRequestHeaders(); + okHttpRequestHeaders.setHeaders(headerParams); + okHttpRequestHeaders.setOkHttpRequestHeaderContentType(contentType); + Map requestParams = new HashMap<>(); + log.info("sending http alert get request, url: {}, header: {}, requestParams: {}, contentType: {}", + url, headerParams, requestParams, contentType.getValue()); + return OkHttpUtils.get(url, okHttpRequestHeaders, + requestParams, timeout, timeout, timeout); + } - CloseableHttpResponse response = httpClient.execute(httpRequest); - HttpEntity entity = response.getEntity(); - return EntityUtils.toString(entity, StandardCharsets.UTF_8); + @SneakyThrows + private OkHttpResponse sendPostRequest() { + OkHttpRequestHeaders okHttpRequestHeaders = new OkHttpRequestHeaders(); + okHttpRequestHeaders.setHeaders(headerParams); + okHttpRequestHeaders.setOkHttpRequestHeaderContentType(contentType); + Map requestBody = Collections.unmodifiableMap(bodyParams); + log.info("sending http alert post request, url: {}, header: {}, requestBody: {}, contentType: {}", + url, headerParams, requestBody, contentType.getValue()); + return OkHttpUtils.post(url, okHttpRequestHeaders, null, + requestBody, timeout, timeout, timeout); } - private void createHttpRequest(String msg) throws MalformedURLException, URISyntaxException { - if (REQUEST_TYPE_POST.equalsIgnoreCase(requestType)) { - httpRequest = new HttpPost(url); - setHeader(); - // POST request add param in request body - setMsgInRequestBody(msg); - } else if (REQUEST_TYPE_GET.equalsIgnoreCase(requestType)) { - // GET request add param in url - setMsgInUrl(msg); - URL unencodeUrl = new URL(url); - URI uri = new URI(unencodeUrl.getProtocol(), unencodeUrl.getAuthority(), unencodeUrl.getPath(), - unencodeUrl.getQuery(), null); - - httpRequest = new HttpGet(uri); - setHeader(); - } + @SneakyThrows + private OkHttpResponse sendPutRequest() { + OkHttpRequestHeaders okHttpRequestHeaders = new OkHttpRequestHeaders(); + okHttpRequestHeaders.setHeaders(headerParams); + okHttpRequestHeaders.setOkHttpRequestHeaderContentType(contentType); + Map requestBody = Collections.unmodifiableMap(bodyParams); + log.info("sending http alert put request, url: {}, header: {}, requestBody: {}, contentType: {}", + url, headerParams, requestBody, contentType.getValue()); + return OkHttpUtils.put(url, okHttpRequestHeaders, + requestBody, timeout, timeout, timeout); } /** * add msg param in url */ 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; - } + if (url.contains(HttpAlertConstants.MSG_PARAMS)) { try { - url = String.format("%s%s%s=%s", url, type, contentField, + url = url.replace(HttpAlertConstants.MSG_PARAMS, URLEncoder.encode(msg, StandardCharsets.UTF_8.name())); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); @@ -168,37 +194,31 @@ public final class HttpSender { /** * set header params */ - private void setHeader() { - - if (httpRequest == null) { + private void setMsgInHeader(String msg) { + if (msg == null) { return; } - HashMap map = JSONUtils.parseObject(headerParams, HashMap.class); - for (Map.Entry entry : map.entrySet()) { - httpRequest.setHeader(entry.getKey(), String.valueOf(entry.getValue())); - } + headerParams.forEach((key, value) -> { + if (value.contains(HttpAlertConstants.MSG_PARAMS)) { + headerParams.put(key, value.replace(HttpAlertConstants.MSG_PARAMS, msg)); + } + }); } /** * set body params */ private void setMsgInRequestBody(String msg) { - try { - ObjectNode objectNode = JSONUtils.createObjectNode(); - if (StringUtils.isNotBlank(bodyParams)) { - objectNode = JSONUtils.parseObject(bodyParams); - } - // set msg content field - objectNode.put(contentField, msg); - StringEntity entity = new StringEntity(JSONUtils.toJsonString(objectNode), StandardCharsets.UTF_8); - ((HttpPost) httpRequest).setEntity(entity); - } catch (Exception e) { - log.error("send http alert msg exception : {}", e.getMessage()); + if (bodyParams == null) { + return; } - } - public String getRequestUrl() { - return httpRequest.getURI().toString(); + bodyParams.forEach((key, value) -> { + if (value.contains(HttpAlertConstants.MSG_PARAMS)) { + bodyParams.put(key, value.replace(HttpAlertConstants.MSG_PARAMS, msg)); + } + }); } + } diff --git a/dolphinscheduler-alert/dolphinscheduler-alert-plugins/dolphinscheduler-alert-http/src/test/java/org/apache/dolphinscheduler/plugin/alert/http/HttpSenderTest.java b/dolphinscheduler-alert/dolphinscheduler-alert-plugins/dolphinscheduler-alert-http/src/test/java/org/apache/dolphinscheduler/plugin/alert/http/HttpSenderTest.java index 40f589a10b..e833a70f9e 100644 --- a/dolphinscheduler-alert/dolphinscheduler-alert-plugins/dolphinscheduler-alert-http/src/test/java/org/apache/dolphinscheduler/plugin/alert/http/HttpSenderTest.java +++ b/dolphinscheduler-alert/dolphinscheduler-alert-plugins/dolphinscheduler-alert-http/src/test/java/org/apache/dolphinscheduler/plugin/alert/http/HttpSenderTest.java @@ -17,37 +17,131 @@ package org.apache.dolphinscheduler.plugin.alert.http; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.spy; - import org.apache.dolphinscheduler.alert.api.AlertResult; +import org.apache.dolphinscheduler.common.model.OkHttpRequestHeaderContentType; +import org.apache.dolphinscheduler.common.utils.JSONUtils; + +import org.apache.commons.io.IOUtils; +import org.apache.http.HttpStatus; +import java.io.IOException; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; +import okhttp3.mockwebserver.Dispatcher; +import okhttp3.mockwebserver.MockResponse; +import okhttp3.mockwebserver.MockWebServer; +import okhttp3.mockwebserver.RecordedRequest; + +import org.jetbrains.annotations.NotNull; +import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.junit.jupiter.MockitoExtension; +@ExtendWith(MockitoExtension.class) public class HttpSenderTest { + private final List mockWebServers = new ArrayList<>(); + + private Map paramsMap = new HashMap<>(); + + @AfterEach + public void after() { + mockWebServers.forEach(IOUtils::closeQuietly); + mockWebServers.clear(); + } + @Test - public void sendTest() throws Exception { - Map paramsMap = new HashMap<>(); - String url = "https://www.dolphinscheduler-not-exists-web.com:12345"; - String contentField = "content"; - paramsMap.put(HttpAlertConstants.NAME_URL, url); - paramsMap.put(HttpAlertConstants.NAME_REQUEST_TYPE, "GET"); - paramsMap.put(HttpAlertConstants.NAME_HEADER_PARAMS, "{\"Content-Type\":\"application/json\"}"); - paramsMap.put(HttpAlertConstants.NAME_BODY_PARAMS, "{\"number\":\"123456\"}"); - paramsMap.put(HttpAlertConstants.NAME_CONTENT_FIELD, contentField); - paramsMap.put(HttpAlertConstants.NAME_TIMEOUT, String.valueOf(HttpAlertConstants.DEFAULT_TIMEOUT)); - - HttpSender httpSender = spy(new HttpSender(paramsMap)); - doReturn("success").when(httpSender).getResponseString(any()); - AlertResult alertResult = httpSender.send("Fault tolerance warning"); + void testHttpSenderGet() throws Exception { + String msg = "msg_test"; + Map headerParams = new HashMap<>(); + headerParams.put("msg", msg); + paramsMap.put(HttpAlertConstants.NAME_HEADER_PARAMS, JSONUtils.toJsonString(headerParams)); + paramsMap.put(HttpAlertConstants.NAME_CONTENT_TYPE, OkHttpRequestHeaderContentType.APPLICATION_JSON.getValue()); + + String mockGetUrl = createMockWebServer(String.format("/get/%s", msg), HttpStatus.SC_OK); + String actualGetUrl = mockGetUrl.replace(msg, HttpAlertConstants.MSG_PARAMS); + paramsMap.put(HttpAlertConstants.NAME_URL, actualGetUrl); + + paramsMap.put(HttpAlertConstants.NAME_REQUEST_TYPE, HttpRequestMethod.GET.name()); + + HttpSender httpSender = new HttpSender(paramsMap); + + AlertResult alertResult = httpSender.send(msg); + Assertions.assertTrue(alertResult.isSuccess()); - Assertions.assertTrue(httpSender.getRequestUrl().contains(url)); - Assertions.assertTrue(httpSender.getRequestUrl().contains(contentField)); + Assertions.assertTrue(alertResult.getMessage().contains(msg)); + } + + @Test + void testHttpSenderPost() throws Exception { + String msg = "msg_test"; + Map bodyParams = new HashMap<>(); + bodyParams.put("msg", msg); + paramsMap.put(HttpAlertConstants.NAME_BODY_PARAMS, JSONUtils.toJsonString(bodyParams)); + paramsMap.put(HttpAlertConstants.NAME_CONTENT_TYPE, OkHttpRequestHeaderContentType.APPLICATION_JSON.getValue()); + + String mockPostUrl = createMockWebServer("/post", HttpStatus.SC_OK); + paramsMap.put(HttpAlertConstants.NAME_URL, mockPostUrl); + + paramsMap.put(HttpAlertConstants.NAME_REQUEST_TYPE, HttpRequestMethod.POST.name()); + + HttpSender httpSender = new HttpSender(paramsMap); + + AlertResult alertResult = httpSender.send(msg); + + Assertions.assertTrue(alertResult.isSuccess()); + Assertions.assertTrue(alertResult.getMessage().contains(msg)); + } + + @Test + void testHttpSenderPut() throws Exception { + String msg = "msg_test"; + Map bodyParams = new HashMap<>(); + bodyParams.put("msg", msg); + paramsMap.put(HttpAlertConstants.NAME_BODY_PARAMS, JSONUtils.toJsonString(bodyParams)); + paramsMap.put(HttpAlertConstants.NAME_CONTENT_TYPE, OkHttpRequestHeaderContentType.APPLICATION_JSON.getValue()); + + String mockPostUrl = createMockWebServer("/post", HttpStatus.SC_OK); + paramsMap.put(HttpAlertConstants.NAME_URL, mockPostUrl); + + paramsMap.put(HttpAlertConstants.NAME_REQUEST_TYPE, HttpRequestMethod.PUT.name()); + + HttpSender httpSender = new HttpSender(paramsMap); + + AlertResult alertResult = httpSender.send(msg); + + Assertions.assertTrue(alertResult.isSuccess()); + Assertions.assertTrue(alertResult.getMessage().contains(msg)); + } + + private String createMockWebServer(String path, int actualResponseCode) throws IOException { + MockWebServer server = new MockWebServer(); + mockWebServers.add(server); + server.start(); + server.setDispatcher(generateMockDispatcher(actualResponseCode)); + return server.url(path).toString(); + } + + private Dispatcher generateMockDispatcher(int actualResponseCode) { + return new Dispatcher() { + + @NotNull + @Override + public MockResponse dispatch(@NotNull RecordedRequest request) { + Map responseMap = new HashMap<>(); + responseMap.put("url", request.getRequestUrl().toString()); + responseMap.put("headers", request.getHeaders().toString()); + responseMap.put("body", request.getBody().toString()); + String responseBody = JSONUtils.toJsonString(responseMap); + return new MockResponse() + .setResponseCode(actualResponseCode) + .setBody(responseBody); + } + }; } } diff --git a/dolphinscheduler-alert/dolphinscheduler-alert-server/src/main/java/org/apache/dolphinscheduler/alert/plugin/AlertPluginManager.java b/dolphinscheduler-alert/dolphinscheduler-alert-server/src/main/java/org/apache/dolphinscheduler/alert/plugin/AlertPluginManager.java index 35d75297a3..2a701ab143 100644 --- a/dolphinscheduler-alert/dolphinscheduler-alert-server/src/main/java/org/apache/dolphinscheduler/alert/plugin/AlertPluginManager.java +++ b/dolphinscheduler-alert/dolphinscheduler-alert-server/src/main/java/org/apache/dolphinscheduler/alert/plugin/AlertPluginManager.java @@ -54,10 +54,10 @@ public final class AlertPluginManager { private final Map alertPluginMap = new HashMap<>(); public void start() { - log.info("AlertPluginManager start ..."); + log.info("AlertPluginManager start..."); checkAlertPluginExist(); installAlertPlugin(); - log.info("AlertPluginManager started ..."); + log.info("AlertPluginManager started..."); } public Optional getAlertChannel(int id) { @@ -70,7 +70,7 @@ public final class AlertPluginManager { private void checkAlertPluginExist() { if (!pluginDao.checkPluginDefineTableExist()) { - log.error("Plugin Define Table t_ds_plugin_define Not Exist . Please Create it First !"); + log.error("Plugin Define Table t_ds_plugin_define Not Exist. Please Create it First!"); System.exit(1); } } diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/interceptor/LocaleChangeInterceptor.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/interceptor/LocaleChangeInterceptor.java index 69c358dc28..27b7fb8c74 100644 --- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/interceptor/LocaleChangeInterceptor.java +++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/interceptor/LocaleChangeInterceptor.java @@ -28,10 +28,10 @@ import javax.servlet.http.HttpServletResponse; import org.springframework.context.i18n.LocaleContextHolder; import org.springframework.lang.Nullable; import org.springframework.util.StringUtils; -import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; +import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.util.WebUtils; -public class LocaleChangeInterceptor extends HandlerInterceptorAdapter { +public class LocaleChangeInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { diff --git a/dolphinscheduler-spi/src/main/java/org/apache/dolphinscheduler/spi/params/base/DataType.java b/dolphinscheduler-spi/src/main/java/org/apache/dolphinscheduler/spi/params/base/DataType.java index 2b94ac1a73..0b33e56127 100644 --- a/dolphinscheduler-spi/src/main/java/org/apache/dolphinscheduler/spi/params/base/DataType.java +++ b/dolphinscheduler-spi/src/main/java/org/apache/dolphinscheduler/spi/params/base/DataType.java @@ -17,9 +17,12 @@ package org.apache.dolphinscheduler.spi.params.base; +import lombok.Getter; + /** * param datetype */ +@Getter public enum DataType { STRING("string"), @@ -32,8 +35,4 @@ public enum DataType { this.dataType = dataType; } - public String getDataType() { - return this.dataType; - } - } diff --git a/dolphinscheduler-spi/src/main/java/org/apache/dolphinscheduler/spi/params/base/Validate.java b/dolphinscheduler-spi/src/main/java/org/apache/dolphinscheduler/spi/params/base/Validate.java index cc02e9581f..17cccb12f8 100644 --- a/dolphinscheduler-spi/src/main/java/org/apache/dolphinscheduler/spi/params/base/Validate.java +++ b/dolphinscheduler-spi/src/main/java/org/apache/dolphinscheduler/spi/params/base/Validate.java @@ -17,6 +17,8 @@ package org.apache.dolphinscheduler.spi.params.base; +import lombok.Data; + import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; @@ -25,6 +27,7 @@ import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; * form validate */ @JsonDeserialize(builder = Validate.Builder.class) +@Data public class Validate { @JsonProperty("required") @@ -62,7 +65,7 @@ public class Validate { return new Builder(); } - @JsonPOJOBuilder(buildMethodName = "build", withPrefix = "set") + @JsonPOJOBuilder(withPrefix = "set") public static class Builder { private boolean required = false; @@ -111,28 +114,4 @@ public class Validate { return new Validate(this); } } - - public boolean isRequired() { - return required; - } - - public String getMessage() { - return message; - } - - public String getType() { - return type; - } - - public String getTrigger() { - return trigger; - } - - public Double getMin() { - return min; - } - - public Double getMax() { - return max; - } } diff --git a/dolphinscheduler-ui/src/locales/en_US/security.ts b/dolphinscheduler-ui/src/locales/en_US/security.ts index f43adb839e..a79211bec7 100644 --- a/dolphinscheduler-ui/src/locales/en_US/security.ts +++ b/dolphinscheduler-ui/src/locales/en_US/security.ts @@ -244,7 +244,7 @@ export default { requestType: 'Request Type', headerParams: 'Headers', bodyParams: 'Body', - contentField: 'Content Field', + contentType: 'Content Type', timeout: 'Timeout(s)', Keyword: 'Keyword', userParams: 'User Params', diff --git a/dolphinscheduler-ui/src/locales/zh_CN/security.ts b/dolphinscheduler-ui/src/locales/zh_CN/security.ts index 463b18f33f..03a4ce7051 100644 --- a/dolphinscheduler-ui/src/locales/zh_CN/security.ts +++ b/dolphinscheduler-ui/src/locales/zh_CN/security.ts @@ -240,7 +240,7 @@ export default { requestType: '请求方式', headerParams: '请求头', bodyParams: '请求体', - contentField: '内容字段', + contentType: 'Content Type', timeout: '超时时间(秒)', Keyword: '关键词', userParams: '自定义参数', diff --git a/dolphinscheduler-ui/src/views/security/alarm-instance-manage/detail.tsx b/dolphinscheduler-ui/src/views/security/alarm-instance-manage/detail.tsx index da77305eff..4970a02b62 100644 --- a/dolphinscheduler-ui/src/views/security/alarm-instance-manage/detail.tsx +++ b/dolphinscheduler-ui/src/views/security/alarm-instance-manage/detail.tsx @@ -203,6 +203,7 @@ const DetailModal = defineComponent({ 'security.alarm_instance.select_plugin_tips' )} on-update:value={onChangePlugin} + filterable /> ) },