You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by te...@apache.org on 2020/09/24 02:10:30 UTC
[shardingsphere-elasticjob] branch master updated: update for
dingtalk module (#1490)
This is an automated email from the ASF dual-hosted git repository.
technoboy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere-elasticjob.git
The following commit(s) were added to refs/heads/master by this push:
new 466165b update for dingtalk module (#1490)
466165b is described below
commit 466165bb64a11c025c12bb29331126518e1eb9d2
Author: Yanjie Zhou <zh...@aliyun.com>
AuthorDate: Thu Sep 24 10:10:14 2020 +0800
update for dingtalk module (#1490)
---
docs/content/dev-manual/error-handler.cn.md | 1 +
docs/content/dev-manual/error-handler.en.md | 1 +
.../DingtalkConfiguration.java | 2 +-
.../DingtalkJobErrorHandler.java | 13 ++-
.../error/handler/env/DingtalkEnvironment.java | 127 ---------------------
...sphere.elasticjob.error.handler.JobErrorHandler | 2 +-
.../resources/conf/error-handler-dingtalk.yaml} | 17 +--
.../DingtalkJobErrorHandlerTest.java | 11 +-
.../fixture/DingtalkInternalController.java | 2 +-
.../resources/conf/error-handler-dingtalk.yaml} | 18 ++-
...talk.properties => error-handler-dingtalk.yaml} | 19 ++-
11 files changed, 40 insertions(+), 173 deletions(-)
diff --git a/docs/content/dev-manual/error-handler.cn.md b/docs/content/dev-manual/error-handler.cn.md
index 28ed9a4..538b945 100644
--- a/docs/content/dev-manual/error-handler.cn.md
+++ b/docs/content/dev-manual/error-handler.cn.md
@@ -13,5 +13,6 @@ weight = 3
| *已知实现类* | *详细说明* |
| --------------------- | ------------------------------ |
| LogJobErrorHandler | 记录作业异常日志,但不中断作业执行 |
+| DingtalkJobErrorHandler | 记录作业异常日志,但不中断作业执行,并且发送钉钉消息通知 |
| ThrowJobErrorHandler | 抛出系统异常并中断作业执行 |
| IgnoreJobErrorHandler | 忽略系统异常且不中断作业执行 |
diff --git a/docs/content/dev-manual/error-handler.en.md b/docs/content/dev-manual/error-handler.en.md
index 4731138..2275a31 100644
--- a/docs/content/dev-manual/error-handler.en.md
+++ b/docs/content/dev-manual/error-handler.en.md
@@ -13,5 +13,6 @@ Error handler strategy, used to handle error when exception occur during job exe
| *Implementation Class* | *Description* |
| ---------------------- | ----------------------------------------- |
| LogJobErrorHandler | Log error and do not interrupt job |
+| DingtalkJobErrorHandler | Log error and do not interrupt job and send dingtalk message notification |
| ThrowJobErrorHandler | Throw system exception and interrupt job |
| IgnoreJobErrorHandler | Ignore exception and do not interrupt job |
diff --git a/elasticjob-error-handler/elasticjob-error-handler-dingtalk/src/main/java/org/apache/shardingsphere/elasticjob/error/handler/config/DingtalkConfiguration.java b/elasticjob-error-handler/elasticjob-error-handler-dingtalk/src/main/java/org/apache/shardingsphere/elasticjob/error/handler/dingtalk/DingtalkConfiguration.java
similarity index 94%
rename from elasticjob-error-handler/elasticjob-error-handler-dingtalk/src/main/java/org/apache/shardingsphere/elasticjob/error/handler/config/DingtalkConfiguration.java
rename to elasticjob-error-handler/elasticjob-error-handler-dingtalk/src/main/java/org/apache/shardingsphere/elasticjob/error/handler/dingtalk/DingtalkConfiguration.java
index b65e7d7..e8b35ca 100644
--- a/elasticjob-error-handler/elasticjob-error-handler-dingtalk/src/main/java/org/apache/shardingsphere/elasticjob/error/handler/config/DingtalkConfiguration.java
+++ b/elasticjob-error-handler/elasticjob-error-handler-dingtalk/src/main/java/org/apache/shardingsphere/elasticjob/error/handler/dingtalk/DingtalkConfiguration.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.elasticjob.error.handler.config;
+package org.apache.shardingsphere.elasticjob.error.handler.dingtalk;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
diff --git a/elasticjob-error-handler/elasticjob-error-handler-dingtalk/src/main/java/org/apache/shardingsphere/elasticjob/error/handler/impl/DingtalkJobErrorHandler.java b/elasticjob-error-handler/elasticjob-error-handler-dingtalk/src/main/java/org/apache/shardingsphere/elasticjob/error/handler/dingtalk/DingtalkJobErrorHandler.java
similarity index 92%
rename from elasticjob-error-handler/elasticjob-error-handler-dingtalk/src/main/java/org/apache/shardingsphere/elasticjob/error/handler/impl/DingtalkJobErrorHandler.java
rename to elasticjob-error-handler/elasticjob-error-handler-dingtalk/src/main/java/org/apache/shardingsphere/elasticjob/error/handler/dingtalk/DingtalkJobErrorHandler.java
index a759fdb..3600454 100644
--- a/elasticjob-error-handler/elasticjob-error-handler-dingtalk/src/main/java/org/apache/shardingsphere/elasticjob/error/handler/impl/DingtalkJobErrorHandler.java
+++ b/elasticjob-error-handler/elasticjob-error-handler-dingtalk/src/main/java/org/apache/shardingsphere/elasticjob/error/handler/dingtalk/DingtalkJobErrorHandler.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.elasticjob.error.handler.impl;
+package org.apache.shardingsphere.elasticjob.error.handler.dingtalk;
import com.google.common.base.Strings;
import com.google.common.collect.ImmutableMap;
@@ -31,14 +31,14 @@ import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.apache.shardingsphere.elasticjob.error.handler.JobErrorHandler;
-import org.apache.shardingsphere.elasticjob.error.handler.config.DingtalkConfiguration;
-import org.apache.shardingsphere.elasticjob.error.handler.env.DingtalkEnvironment;
import org.apache.shardingsphere.elasticjob.infra.exception.JobConfigurationException;
import org.apache.shardingsphere.elasticjob.infra.json.GsonFactory;
+import org.apache.shardingsphere.elasticjob.infra.yaml.YamlEngine;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.io.IOException;
+import java.io.InputStream;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.io.UnsupportedEncodingException;
@@ -56,6 +56,10 @@ import java.util.Collections;
@Slf4j
public final class DingtalkJobErrorHandler implements JobErrorHandler {
+ private static final String CONFIG_PREFIX = "dingtalk";
+
+ private static final String ERROR_HANDLER_CONFIG = "conf/error-handler-dingtalk.yaml";
+
@Setter
private DingtalkConfiguration dingtalkConfiguration;
@@ -68,7 +72,8 @@ public final class DingtalkJobErrorHandler implements JobErrorHandler {
@Override
public void handleException(final String jobName, final Throwable cause) {
if (null == dingtalkConfiguration) {
- dingtalkConfiguration = DingtalkEnvironment.getInstance().getDingtalkConfiguration();
+ InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream(ERROR_HANDLER_CONFIG);
+ dingtalkConfiguration = YamlEngine.unmarshal(CONFIG_PREFIX, inputStream, DingtalkConfiguration.class);
}
HttpPost httpPost = new HttpPost(getUrl());
RequestConfig requestConfig = RequestConfig.custom()
diff --git a/elasticjob-error-handler/elasticjob-error-handler-dingtalk/src/main/java/org/apache/shardingsphere/elasticjob/error/handler/env/DingtalkEnvironment.java b/elasticjob-error-handler/elasticjob-error-handler-dingtalk/src/main/java/org/apache/shardingsphere/elasticjob/error/handler/env/DingtalkEnvironment.java
deleted file mode 100644
index 813f607..0000000
--- a/elasticjob-error-handler/elasticjob-error-handler-dingtalk/src/main/java/org/apache/shardingsphere/elasticjob/error/handler/env/DingtalkEnvironment.java
+++ /dev/null
@@ -1,127 +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.shardingsphere.elasticjob.error.handler.env;
-
-import com.google.common.base.Preconditions;
-import com.google.common.base.Strings;
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.shardingsphere.elasticjob.error.handler.config.DingtalkConfiguration;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Properties;
-
-/**
- * Bootstrap env.
- */
-@Slf4j
-public final class DingtalkEnvironment {
-
- private static final DingtalkEnvironment INSTANCE = new DingtalkEnvironment();
-
- private static final String PROPERTIES_PATH = "conf/elasticjob-dingtalk.properties";
-
- private static final String CONFIG_PREFIX = "elasticjob.dingtalk";
-
- private final Properties properties;
-
- private DingtalkEnvironment() {
- properties = getProperties();
- }
-
- /**
- * Get instance of Dingtalk env.
- *
- * @return instance of Dingtalk env.
- */
- public static DingtalkEnvironment getInstance() {
- return INSTANCE;
- }
-
- private Properties getProperties() {
- Properties result = new Properties();
- try (InputStream fileInputStream = this.getClass().getClassLoader().getResourceAsStream(PROPERTIES_PATH)) {
- if (fileInputStream != null) {
- result.load(fileInputStream);
- }
- } catch (final IOException ex) {
- log.warn("Can not load properties file from path: '{}'.", PROPERTIES_PATH);
- }
- setPropertiesByEnv(result);
- return result;
- }
-
- private void setPropertiesByEnv(final Properties prop) {
- for (EnvironmentArgument each : EnvironmentArgument.values()) {
- String key = each.getKey();
- String value = System.getProperties().getProperty(String.join(".", CONFIG_PREFIX, key));
- if (!Strings.isNullOrEmpty(value)) {
- log.info("Load property {} with value {} from ENV.", key, value);
- prop.setProperty(each.getKey(), value);
- }
- }
- }
-
- /**
- * Get dingtalk configuration.
- *
- * @return dingtalk configuration
- */
- public DingtalkConfiguration getDingtalkConfiguration() {
- String webhook = getValue(EnvironmentArgument.WEBHOOK);
- String keyword = getValue(EnvironmentArgument.KEYWORD);
- String secret = getValue(EnvironmentArgument.SECRET);
- String connectTimeout = getValue(EnvironmentArgument.CONNECT_TIMEOUT);
- String readTimeout = getValue(EnvironmentArgument.READ_TIMEOUT);
- return new DingtalkConfiguration(webhook, keyword, secret, Integer.parseInt(connectTimeout), Integer.parseInt(readTimeout));
- }
-
- private String getValue(final EnvironmentArgument environmentArgument) {
- String result = properties.getProperty(environmentArgument.getKey(), environmentArgument.getDefaultValue());
- if (environmentArgument.isRequired()) {
- Preconditions.checkState(!Strings.isNullOrEmpty(result), String.format("Property `%s` is required.", environmentArgument.getKey()));
- }
- return result;
- }
-
- /**
- * Env args.
- */
- @RequiredArgsConstructor
- @Getter
- public enum EnvironmentArgument {
-
- WEBHOOK("webhook", "", true),
-
- KEYWORD("keyword", "", false),
-
- SECRET("secret", "", false),
-
- CONNECT_TIMEOUT("connectTimeout", "3000", false),
-
- READ_TIMEOUT("readTimeout", "5000", false);
-
- private final String key;
-
- private final String defaultValue;
-
- private final boolean required;
- }
-}
diff --git a/elasticjob-error-handler/elasticjob-error-handler-dingtalk/src/main/resources/META-INF/services/org.apache.shardingsphere.elasticjob.error.handler.JobErrorHandler b/elasticjob-error-handler/elasticjob-error-handler-dingtalk/src/main/resources/META-INF/services/org.apache.shardingsphere.elasticjob.error.handler.JobErrorHandler
index dd51dae..cd9894e 100644
--- a/elasticjob-error-handler/elasticjob-error-handler-dingtalk/src/main/resources/META-INF/services/org.apache.shardingsphere.elasticjob.error.handler.JobErrorHandler
+++ b/elasticjob-error-handler/elasticjob-error-handler-dingtalk/src/main/resources/META-INF/services/org.apache.shardingsphere.elasticjob.error.handler.JobErrorHandler
@@ -15,4 +15,4 @@
# limitations under the License.
#
-org.apache.shardingsphere.elasticjob.error.handler.impl.DingtalkJobErrorHandler
+org.apache.shardingsphere.elasticjob.error.handler.dingtalk.DingtalkJobErrorHandler
diff --git a/elasticjob-error-handler/elasticjob-error-handler-dingtalk/src/test/resources/conf/elasticjob-dingtalk.properties b/elasticjob-error-handler/elasticjob-error-handler-dingtalk/src/main/resources/conf/error-handler-dingtalk.yaml
similarity index 54%
rename from elasticjob-error-handler/elasticjob-error-handler-dingtalk/src/test/resources/conf/elasticjob-dingtalk.properties
rename to elasticjob-error-handler/elasticjob-error-handler-dingtalk/src/main/resources/conf/error-handler-dingtalk.yaml
index 434d1d5..647afcf 100644
--- a/elasticjob-error-handler/elasticjob-error-handler-dingtalk/src/test/resources/conf/elasticjob-dingtalk.properties
+++ b/elasticjob-error-handler/elasticjob-error-handler-dingtalk/src/main/resources/conf/error-handler-dingtalk.yaml
@@ -15,14 +15,9 @@
# limitations under the License.
#
-# It can also be configured through startup parameters, E.g: -Delasticjob.dingtalk.webhook=param1 -Delasticjob.dingtalk.keyword=param2 -Delasticjob.dingtalk.secret=param3
-# Then webhook used to interface validation , required
-webhook=http://localhost:9876/send?access_token=42eead064e81ce81fc6af2c107fbe10a4339a3d40a7db8abf5b34d8261527a3f
-# Then keyword used to interface validation
-keyword=keyword
-# Then secret used to interface validation
-secret=SEC0b0a6b13b6823b95737dd83491c23adee5d8a7a649899a12217e038eddc84ff4
-# The connection time used to invoke the interface
-connectTimeout=5000
-# The timeout used to read the results
-readTimeout=6000
+dingtalk:
+ webhook:
+ keyword:
+ secret:
+ connectTimeout:
+ readTimeout:
diff --git a/elasticjob-error-handler/elasticjob-error-handler-dingtalk/src/test/java/org/apache/shardingsphere/elasticjob/error/handler/impl/DingtalkJobErrorHandlerTest.java b/elasticjob-error-handler/elasticjob-error-handler-dingtalk/src/test/java/org/apache/shardingsphere/elasticjob/error/handler/dingtalk/DingtalkJobErrorHandlerTest.java
similarity index 91%
rename from elasticjob-error-handler/elasticjob-error-handler-dingtalk/src/test/java/org/apache/shardingsphere/elasticjob/error/handler/impl/DingtalkJobErrorHandlerTest.java
rename to elasticjob-error-handler/elasticjob-error-handler-dingtalk/src/test/java/org/apache/shardingsphere/elasticjob/error/handler/dingtalk/DingtalkJobErrorHandlerTest.java
index fab0370..03fea26 100644
--- a/elasticjob-error-handler/elasticjob-error-handler-dingtalk/src/test/java/org/apache/shardingsphere/elasticjob/error/handler/impl/DingtalkJobErrorHandlerTest.java
+++ b/elasticjob-error-handler/elasticjob-error-handler-dingtalk/src/test/java/org/apache/shardingsphere/elasticjob/error/handler/dingtalk/DingtalkJobErrorHandlerTest.java
@@ -15,11 +15,10 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.elasticjob.error.handler.impl;
+package org.apache.shardingsphere.elasticjob.error.handler.dingtalk;
import lombok.SneakyThrows;
-import org.apache.shardingsphere.elasticjob.error.handler.config.DingtalkConfiguration;
-import org.apache.shardingsphere.elasticjob.error.handler.impl.fixture.DingtalkInternalController;
+import org.apache.shardingsphere.elasticjob.error.handler.dingtalk.fixture.DingtalkInternalController;
import org.apache.shardingsphere.elasticjob.restful.NettyRestfulService;
import org.apache.shardingsphere.elasticjob.restful.NettyRestfulServiceConfiguration;
import org.apache.shardingsphere.elasticjob.restful.RestfulService;
@@ -41,7 +40,7 @@ import static org.mockito.Mockito.verify;
@RunWith(MockitoJUnitRunner.class)
public final class DingtalkJobErrorHandlerTest {
- private static final int PORT = 9876;
+ private static final int PORT = 9875;
private static final String HOST = "localhost";
@@ -71,7 +70,7 @@ public final class DingtalkJobErrorHandlerTest {
@Test
public void assertHandleExceptionWithWrongToken() {
DingtalkJobErrorHandler actual = new DingtalkJobErrorHandler();
- actual.setDingtalkConfiguration(new DingtalkConfiguration("http://localhost:9876/send?access_token=wrongToken",
+ actual.setDingtalkConfiguration(new DingtalkConfiguration("http://localhost:9875/send?access_token=wrongToken",
null, null, 3000, 500));
setStaticFieldValue(actual);
Throwable cause = new RuntimeException("test");
@@ -82,7 +81,7 @@ public final class DingtalkJobErrorHandlerTest {
@Test
public void assertHandleExceptionWithWrongUrl() {
DingtalkJobErrorHandler actual = new DingtalkJobErrorHandler();
- actual.setDingtalkConfiguration(new DingtalkConfiguration("http://localhost:9876/404?access_token=wrongToken",
+ actual.setDingtalkConfiguration(new DingtalkConfiguration("http://localhost:9875/404?access_token=wrongToken",
null, null, 3000, 500));
setStaticFieldValue(actual);
Throwable cause = new RuntimeException("test");
diff --git a/elasticjob-error-handler/elasticjob-error-handler-dingtalk/src/test/java/org/apache/shardingsphere/elasticjob/error/handler/impl/fixture/DingtalkInternalController.java b/elasticjob-error-handler/elasticjob-error-handler-dingtalk/src/test/java/org/apache/shardingsphere/elasticjob/error/handler/dingtalk/fixture/DingtalkInternalController.java
similarity index 98%
rename from elasticjob-error-handler/elasticjob-error-handler-dingtalk/src/test/java/org/apache/shardingsphere/elasticjob/error/handler/impl/fixture/DingtalkInternalController.java
rename to elasticjob-error-handler/elasticjob-error-handler-dingtalk/src/test/java/org/apache/shardingsphere/elasticjob/error/handler/dingtalk/fixture/DingtalkInternalController.java
index b79ba3a..2c99106 100644
--- a/elasticjob-error-handler/elasticjob-error-handler-dingtalk/src/test/java/org/apache/shardingsphere/elasticjob/error/handler/impl/fixture/DingtalkInternalController.java
+++ b/elasticjob-error-handler/elasticjob-error-handler-dingtalk/src/test/java/org/apache/shardingsphere/elasticjob/error/handler/dingtalk/fixture/DingtalkInternalController.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.elasticjob.error.handler.impl.fixture;
+package org.apache.shardingsphere.elasticjob.error.handler.dingtalk.fixture;
import com.google.common.base.Preconditions;
import com.google.common.base.Strings;
diff --git a/elasticjob-error-handler/elasticjob-error-handler-dingtalk/src/main/resources/conf/elasticjob-dingtalk.properties b/elasticjob-error-handler/elasticjob-error-handler-dingtalk/src/test/resources/conf/error-handler-dingtalk.yaml
similarity index 63%
rename from elasticjob-error-handler/elasticjob-error-handler-dingtalk/src/main/resources/conf/elasticjob-dingtalk.properties
rename to elasticjob-error-handler/elasticjob-error-handler-dingtalk/src/test/resources/conf/error-handler-dingtalk.yaml
index ca0de98..cbed252 100644
--- a/elasticjob-error-handler/elasticjob-error-handler-dingtalk/src/main/resources/conf/elasticjob-dingtalk.properties
+++ b/elasticjob-error-handler/elasticjob-error-handler-dingtalk/src/test/resources/conf/error-handler-dingtalk.yaml
@@ -15,15 +15,11 @@
# limitations under the License.
#
-# It can also be configured through startup parameters, E.g: -Delasticjob.dingtalk.webhook=param1 -Delasticjob.dingtalk.keyword=param2 -Delasticjob.dingtalk.secret=param3
-# Then webhook used to interface validation , required
-webhook=
-# Then keyword used to interface validation
-keyword=
-# Then secret used to interface validation
-secret=
-# The connection time used to invoke the interface
-connectTimeout=
-# The timeout used to read the results
-readTimeout=
+dingtalk:
+ webhook: http://localhost:9875/send?access_token=42eead064e81ce81fc6af2c107fbe10a4339a3d40a7db8abf5b34d8261527a3f
+ keyword: keyword
+ secret: SEC0b0a6b13b6823b95737dd83491c23adee5d8a7a649899a12217e038eddc84ff4
+ connectTimeout: 5000
+ readTimeout: 3000
+
diff --git a/examples/elasticjob-example-lite-java/src/main/resources/conf/elasticjob-dingtalk.properties b/examples/elasticjob-example-lite-java/src/main/resources/conf/error-handler-dingtalk.yaml
similarity index 54%
rename from examples/elasticjob-example-lite-java/src/main/resources/conf/elasticjob-dingtalk.properties
rename to examples/elasticjob-example-lite-java/src/main/resources/conf/error-handler-dingtalk.yaml
index fe40fac..b077c75 100644
--- a/examples/elasticjob-example-lite-java/src/main/resources/conf/elasticjob-dingtalk.properties
+++ b/examples/elasticjob-example-lite-java/src/main/resources/conf/error-handler-dingtalk.yaml
@@ -15,14 +15,11 @@
# limitations under the License.
#
-# It can also be configured through startup parameters, E.g: -Delasticjob.dingtalk.webhook=param1 -Delasticjob.dingtalk.keyword=param2 -Delasticjob.dingtalk.secret=param3
-# Then webhook used to interface validation , required
-webhook=https://oapi.dingtalk.com/robot/send?access_token=42eead064e81ce81fc6af2c107fbe10a4339a3d40a7db8abf5b34d8261527a3f
-# Then keyword used to interface validation
-keyword=keyword
-# Then secret used to interface validation
-secret=SEC0b0a6b13b6823b95737dd83491c23adee5d8a7a649899a12217e038eddc84ff4
-# The connection time used to invoke the interface
-connectTimeout=5000
-# The timeout used to read the results
-readTimeout=6000
+dingtalk:
+ webhook: https://oapi.dingtalk.com/robot/send?access_token=42eead064e81ce81fc6af2c107fbe10a4339a3d40a7db8abf5b34d8261527a3f
+ keyword: keyword
+ secret: SEC0b0a6b13b6823b95737dd83491c23adee5d8a7a649899a12217e038eddc84ff4
+ connectTimeout: 3000
+ readTimeout: 5000
+
+