You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by wu...@apache.org on 2018/01/10 07:38:28 UTC
[incubator-servicecomb-java-chassis] 04/13: SCB-166 fix pr
This is an automated email from the ASF dual-hosted git repository.
wujimin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-java-chassis.git
commit b32d4fb155bb1a83aa45c14fe86f6bd19b3c1e00
Author: zhengyangyong <ya...@huawei.com>
AuthorDate: Sat Jan 6 11:06:35 2018 +0800
SCB-166 fix pr
Signed-off-by: zhengyangyong <ya...@huawei.com>
---
.../java/io/servicecomb/metrics/common/Health.java | 18 +++-------
metrics/metrics-core/pom.xml | 4 +++
.../health/DefaultMicroserviceHealthChecker.java | 5 ++-
.../core/publish/DefaultHealthCheckerManager.java | 39 ++++++++++++++++++++++
...ker.java => CustomHealthCheckerAnnotation.java} | 8 +++--
...mHealthChecker.java => MySqlHealthChecker.java} | 26 +++++++++++++--
.../metrics/extendhealthcheck/SimpleService.java | 2 +-
7 files changed, 81 insertions(+), 21 deletions(-)
diff --git a/samples/metrics-extend-healthcheck/src/main/java/io/servicecomb/samples/metrics/extendhealthcheck/CustomHealthChecker.java b/metrics/metrics-common/src/main/java/io/servicecomb/metrics/common/Health.java
similarity index 63%
copy from samples/metrics-extend-healthcheck/src/main/java/io/servicecomb/samples/metrics/extendhealthcheck/CustomHealthChecker.java
copy to metrics/metrics-common/src/main/java/io/servicecomb/metrics/common/Health.java
index 1960de8..eb8c59f 100644
--- a/samples/metrics-extend-healthcheck/src/main/java/io/servicecomb/samples/metrics/extendhealthcheck/CustomHealthChecker.java
+++ b/metrics/metrics-common/src/main/java/io/servicecomb/metrics/common/Health.java
@@ -15,20 +15,12 @@
* limitations under the License.
*/
-package io.servicecomb.samples.metrics.extendhealthcheck;
+package io.servicecomb.metrics.common;
-import io.servicecomb.metrics.common.HealthCheckResult;
-import io.servicecomb.metrics.common.HealthChecker;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Target;
-public class CustomHealthChecker implements HealthChecker {
- @Override
- public String getName() {
- return "custom";
- }
+@Target(value = {ElementType.TYPE})
+public @interface Health {
- @Override
- public HealthCheckResult check() {
- //add your health check code here
- return new HealthCheckResult(true, "demo health check", "no extra data");
- }
}
diff --git a/metrics/metrics-core/pom.xml b/metrics/metrics-core/pom.xml
index 2566bbe..17115e4 100644
--- a/metrics/metrics-core/pom.xml
+++ b/metrics/metrics-core/pom.xml
@@ -47,6 +47,10 @@
<artifactId>slf4j-log4j12</artifactId>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-core</artifactId>
+ </dependency>
</dependencies>
</project>
\ No newline at end of file
diff --git a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/health/DefaultMicroserviceHealthChecker.java b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/health/DefaultMicroserviceHealthChecker.java
index f4fe4c1..df2d81e 100644
--- a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/health/DefaultMicroserviceHealthChecker.java
+++ b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/health/DefaultMicroserviceHealthChecker.java
@@ -17,6 +17,8 @@
package io.servicecomb.metrics.core.health;
+import javax.ws.rs.core.Response.Status;
+
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -27,6 +29,7 @@ import io.servicecomb.metrics.common.HealthChecker;
import io.servicecomb.serviceregistry.RegistryUtils;
import io.servicecomb.serviceregistry.api.registry.Microservice;
import io.servicecomb.serviceregistry.api.registry.MicroserviceInstance;
+import io.servicecomb.swagger.invocation.exception.InvocationException;
public class DefaultMicroserviceHealthChecker implements HealthChecker {
@@ -56,7 +59,7 @@ public class DefaultMicroserviceHealthChecker implements HealthChecker {
} catch (Exception e) {
String error = "unable load microservice info from RegistryUtils";
logger.error(error, e);
- return error;
+ throw new InvocationException(Status.INTERNAL_SERVER_ERROR, error);
}
}
}
diff --git a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/DefaultHealthCheckerManager.java b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/DefaultHealthCheckerManager.java
index 0393ab9..9cb5cb3 100644
--- a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/DefaultHealthCheckerManager.java
+++ b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/DefaultHealthCheckerManager.java
@@ -19,13 +19,21 @@ package io.servicecomb.metrics.core.publish;
import static javax.ws.rs.core.Response.Status.BAD_REQUEST;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.config.BeanDefinition;
+import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider;
+import org.springframework.core.type.filter.AnnotationTypeFilter;
import org.springframework.stereotype.Component;
+import io.servicecomb.metrics.common.Health;
import io.servicecomb.metrics.common.HealthCheckResult;
import io.servicecomb.metrics.common.HealthChecker;
import io.servicecomb.metrics.core.health.DefaultMicroserviceHealthChecker;
@@ -33,12 +41,19 @@ import io.servicecomb.swagger.invocation.exception.InvocationException;
@Component
public class DefaultHealthCheckerManager implements HealthCheckerManager {
+
+ private static Logger logger = LoggerFactory.getLogger(DefaultHealthCheckerManager.class);
+
private final Map<String, HealthChecker> healthCheckers;
public DefaultHealthCheckerManager() {
this.healthCheckers = new ConcurrentHashMap<>();
HealthChecker defaultHealthChecker = new DefaultMicroserviceHealthChecker();
this.healthCheckers.put(defaultHealthChecker.getName(), defaultHealthChecker);
+
+ for (HealthChecker checker : getAllAnnotationHealthChecker()) {
+ this.healthCheckers.put(checker.getName(), checker);
+ }
}
@Override
@@ -59,4 +74,28 @@ public class DefaultHealthCheckerManager implements HealthCheckerManager {
}
throw new InvocationException(BAD_REQUEST, "HealthChecker name : " + name + " unregister");
}
+
+ private List<HealthChecker> getAllAnnotationHealthChecker() {
+ List<HealthChecker> checkers = new ArrayList<>();
+ ClassPathScanningCandidateComponentProvider scanner = new ClassPathScanningCandidateComponentProvider(false);
+ scanner.addIncludeFilter(new AnnotationTypeFilter(Health.class));
+ for (BeanDefinition definition : scanner.findCandidateComponents("./")) {
+ try {
+ Class<?> beanClass = Class.forName(definition.getBeanClassName());
+ if (HealthChecker.class.isAssignableFrom(beanClass)) {
+ try {
+ checkers.add((HealthChecker) beanClass.getConstructor(null).newInstance());
+ } catch (Exception e) {
+ logger.error("construct health check class failed", e);
+ }
+ } else {
+ logger.error(
+ "health annotation class:" + definition.getBeanClassName() + " not implement HealthChecker interface");
+ }
+ } catch (ClassNotFoundException e) {
+ logger.error("health check class not found", e);
+ }
+ }
+ return checkers;
+ }
}
diff --git a/samples/metrics-extend-healthcheck/src/main/java/io/servicecomb/samples/metrics/extendhealthcheck/CustomHealthChecker.java b/samples/metrics-extend-healthcheck/src/main/java/io/servicecomb/samples/metrics/extendhealthcheck/CustomHealthCheckerAnnotation.java
similarity index 81%
copy from samples/metrics-extend-healthcheck/src/main/java/io/servicecomb/samples/metrics/extendhealthcheck/CustomHealthChecker.java
copy to samples/metrics-extend-healthcheck/src/main/java/io/servicecomb/samples/metrics/extendhealthcheck/CustomHealthCheckerAnnotation.java
index 1960de8..6816abd 100644
--- a/samples/metrics-extend-healthcheck/src/main/java/io/servicecomb/samples/metrics/extendhealthcheck/CustomHealthChecker.java
+++ b/samples/metrics-extend-healthcheck/src/main/java/io/servicecomb/samples/metrics/extendhealthcheck/CustomHealthCheckerAnnotation.java
@@ -17,10 +17,13 @@
package io.servicecomb.samples.metrics.extendhealthcheck;
+import io.servicecomb.metrics.common.Health;
import io.servicecomb.metrics.common.HealthCheckResult;
import io.servicecomb.metrics.common.HealthChecker;
-public class CustomHealthChecker implements HealthChecker {
+//this health check will auto register because Health Annotation
+@Health
+public class CustomHealthCheckerAnnotation implements HealthChecker {
@Override
public String getName() {
return "custom";
@@ -28,7 +31,6 @@ public class CustomHealthChecker implements HealthChecker {
@Override
public HealthCheckResult check() {
- //add your health check code here
- return new HealthCheckResult(true, "demo health check", "no extra data");
+ return new HealthCheckResult(true, "custom", "no extra data");
}
}
diff --git a/samples/metrics-extend-healthcheck/src/main/java/io/servicecomb/samples/metrics/extendhealthcheck/CustomHealthChecker.java b/samples/metrics-extend-healthcheck/src/main/java/io/servicecomb/samples/metrics/extendhealthcheck/MySqlHealthChecker.java
similarity index 59%
rename from samples/metrics-extend-healthcheck/src/main/java/io/servicecomb/samples/metrics/extendhealthcheck/CustomHealthChecker.java
rename to samples/metrics-extend-healthcheck/src/main/java/io/servicecomb/samples/metrics/extendhealthcheck/MySqlHealthChecker.java
index 1960de8..620857d 100644
--- a/samples/metrics-extend-healthcheck/src/main/java/io/servicecomb/samples/metrics/extendhealthcheck/CustomHealthChecker.java
+++ b/samples/metrics-extend-healthcheck/src/main/java/io/servicecomb/samples/metrics/extendhealthcheck/MySqlHealthChecker.java
@@ -17,18 +17,38 @@
package io.servicecomb.samples.metrics.extendhealthcheck;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.SQLException;
+
import io.servicecomb.metrics.common.HealthCheckResult;
import io.servicecomb.metrics.common.HealthChecker;
-public class CustomHealthChecker implements HealthChecker {
+//this is a demo health checker for mysql
+public class MySqlHealthChecker implements HealthChecker {
@Override
public String getName() {
- return "custom";
+ return "mysql";
}
@Override
public HealthCheckResult check() {
//add your health check code here
- return new HealthCheckResult(true, "demo health check", "no extra data");
+ Connection connection = null;
+ try {
+ connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test_db?useSSL=false", "root", "pwd");
+ return new HealthCheckResult(true, "local mysql health check", "");
+ } catch (SQLException e) {
+ e.printStackTrace();
+ return new HealthCheckResult(false, "local mysql health check", e.toString());
+ } finally {
+ if (connection != null) {
+ try {
+ connection.close();
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ }
+ }
}
}
diff --git a/samples/metrics-extend-healthcheck/src/main/java/io/servicecomb/samples/metrics/extendhealthcheck/SimpleService.java b/samples/metrics-extend-healthcheck/src/main/java/io/servicecomb/samples/metrics/extendhealthcheck/SimpleService.java
index 5e24cb2..a25cdba 100644
--- a/samples/metrics-extend-healthcheck/src/main/java/io/servicecomb/samples/metrics/extendhealthcheck/SimpleService.java
+++ b/samples/metrics-extend-healthcheck/src/main/java/io/servicecomb/samples/metrics/extendhealthcheck/SimpleService.java
@@ -38,7 +38,7 @@ public class SimpleService {
this.manager = manager;
//register your custom health check
- this.manager.register(new CustomHealthChecker());
+ this.manager.register(new MySqlHealthChecker());
}
@GetMapping(path = "/f")
--
To stop receiving notification emails like this one, please contact
"commits@servicecomb.apache.org" <co...@servicecomb.apache.org>.