You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by ni...@apache.org on 2018/01/02 10:44:24 UTC
[incubator-servicecomb-java-chassis] 06/14: JAV-508 & SCB-11 add
metrics integration test in demo springmvc
This is an automated email from the ASF dual-hosted git repository.
ningjiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-java-chassis.git
commit 7915fe20dcf0a678aa366ceb65534ad7af76878d
Author: zhengyangyong <ya...@huawei.com>
AuthorDate: Wed Dec 27 09:33:09 2017 +0800
JAV-508 & SCB-11 add metrics integration test in demo springmvc
Signed-off-by: zhengyangyong <ya...@huawei.com>
---
demo/demo-springmvc/springmvc-client/pom.xml | 6 +++
.../demo/springmvc/client/SpringmvcClient.java | 47 ++++++++++++++++++++++
demo/demo-springmvc/springmvc-server/pom.xml | 6 +++
.../demo/springmvc/server/CodeFirstSpringmvc.java | 33 ++++++++++++++-
4 files changed, 91 insertions(+), 1 deletion(-)
diff --git a/demo/demo-springmvc/springmvc-client/pom.xml b/demo/demo-springmvc/springmvc-client/pom.xml
index 884878f..5a26d89 100644
--- a/demo/demo-springmvc/springmvc-client/pom.xml
+++ b/demo/demo-springmvc/springmvc-client/pom.xml
@@ -40,6 +40,12 @@
<groupId>io.servicecomb</groupId>
<artifactId>provider-pojo</artifactId>
</dependency>
+
+ <dependency>
+ <groupId>io.servicecomb</groupId>
+ <artifactId>metrics-common</artifactId>
+ </dependency>
+
</dependencies>
<properties>
diff --git a/demo/demo-springmvc/springmvc-client/src/main/java/io/servicecomb/demo/springmvc/client/SpringmvcClient.java b/demo/demo-springmvc/springmvc-client/src/main/java/io/servicecomb/demo/springmvc/client/SpringmvcClient.java
index ad2af80..dc19cdb 100644
--- a/demo/demo-springmvc/springmvc-client/src/main/java/io/servicecomb/demo/springmvc/client/SpringmvcClient.java
+++ b/demo/demo-springmvc/springmvc-client/src/main/java/io/servicecomb/demo/springmvc/client/SpringmvcClient.java
@@ -32,7 +32,9 @@ import io.servicecomb.demo.TestMgr;
import io.servicecomb.demo.controller.Controller;
import io.servicecomb.demo.controller.Person;
import io.servicecomb.foundation.common.utils.BeanUtils;
+import io.servicecomb.foundation.common.utils.JsonUtils;
import io.servicecomb.foundation.common.utils.Log4jUtils;
+import io.servicecomb.metrics.common.RegistryMetric;
import io.servicecomb.provider.springmvc.reference.CseRestTemplate;
import io.servicecomb.provider.springmvc.reference.RestTemplateBuilder;
import io.servicecomb.provider.springmvc.reference.UrlWithServiceNameClientHttpRequestFactory;
@@ -81,6 +83,51 @@ public class SpringmvcClient {
testController();
}
+
+ //0.5.0 version metrics integration test
+ try {
+ // this test class is intended for retry hanging issue JAV-127
+ String content = restTemplate.getForObject("cse://springmvc/codeFirstSpringmvc/metricsForTest", String.class);
+ Map<String, String> resultMap = JsonUtils.OBJ_MAPPER.readValue(content, HashMap.class);
+
+ TestMgr.check(String.valueOf(true), String.valueOf(resultMap.get("CPU and Memory").contains("heapUsed=")));
+
+ TestMgr.check(resultMap.get("totalRequestProvider OPERATIONAL_LEVEL"),
+ "{springmvc.codeFirst.saySomething=3, springmvc.codeFirst.testRawJsonAnnotation=3, " +
+ "springmvc.codeFirst.sayHi2=3, springmvc.codeFirst.responseEntity=6, springmvc.codeFirst.fileUpload=3, " +
+ "springmvc.codeFirst.responseEntityPATCH=3, springmvc.codeFirst.textPlain=3, " +
+ "springmvc.codeFirst.metricsForTest=1, springmvc.codeFirst.testform=6, " +
+ "springmvc.controller.saySomething=6, springmvc.codeFirst.fallbackReturnNull=6, " +
+ "springmvc.codeFirst.addString=3, springmvc.codeFirst.reduce=3, springmvc.codeFirst.sayHi=3, " +
+ "springmvc.codeFirst.cseResponse=6, springmvc.codeFirst.bytes=3, springmvc.controller.sayHei=3, " +
+ "springmvc.codeFirst.fallbackThrowException=9, springmvc.codeFirst.testModelWithIgnoreField=1, " +
+ "springmvc.codeFirst.testUserMap=3, springmvc.codeFirst.isTrue=3, springmvc.codeFirst.add=3, " +
+ "springmvc.codeFirst.fallbackFromCache=6, springmvc.controller.sayHi=17, springmvc.codeFirst.sayHello=6,"
+ +
+ " springmvc.controller.sayHello=6, springmvc.codeFirst.addDate=3}");
+
+ TestMgr.check(String.valueOf(resultMap.get("RequestQueueRelated").contains("springmvc.codeFirst.saySomething")),
+ String.valueOf(true));
+ TestMgr.check(String.valueOf(resultMap.get("RequestQueueRelated").contains("springmvc.controller.sayHi")),
+ String.valueOf(true));
+ } catch (Exception e) {
+ TestMgr.check("true", "false");
+ }
+
+ //0.5.0 later version metrics integration test
+ try {
+ Object obj = restTemplate.getForObject("cse://springmvc/metrics", Object.class);
+ String content = JsonUtils.writeValueAsString(obj);
+ RegistryMetric metric = JsonUtils.OBJ_MAPPER.readValue(content, RegistryMetric.class);
+
+ TestMgr.check(String.valueOf(metric.getInstanceMetric().getSystemMetric().getHeapUsed() != 0), "true");
+ TestMgr.check(String.valueOf(metric.getProducerMetrics().size() == 28), "true");
+ TestMgr.check(String.valueOf(
+ metric.getProducerMetrics().get("springmvc.codeFirst.saySomething").getProducerCall().getTotal() == 3),
+ "true");
+ } catch (Exception e) {
+ TestMgr.check("true", "false");
+ }
}
private static void testController(RestTemplate template, String microserviceName) {
diff --git a/demo/demo-springmvc/springmvc-server/pom.xml b/demo/demo-springmvc/springmvc-server/pom.xml
index 598492e..772e35f 100644
--- a/demo/demo-springmvc/springmvc-server/pom.xml
+++ b/demo/demo-springmvc/springmvc-server/pom.xml
@@ -36,6 +36,12 @@
<groupId>io.servicecomb</groupId>
<artifactId>provider-springmvc</artifactId>
</dependency>
+
+ <dependency>
+ <groupId>io.servicecomb</groupId>
+ <artifactId>metrics-core</artifactId>
+ </dependency>
+
</dependencies>
<properties>
diff --git a/demo/demo-springmvc/springmvc-server/src/main/java/io/servicecomb/demo/springmvc/server/CodeFirstSpringmvc.java b/demo/demo-springmvc/springmvc-server/src/main/java/io/servicecomb/demo/springmvc/server/CodeFirstSpringmvc.java
index ff17d29..bb6e0b0 100644
--- a/demo/demo-springmvc/springmvc-server/src/main/java/io/servicecomb/demo/springmvc/server/CodeFirstSpringmvc.java
+++ b/demo/demo-springmvc/springmvc-server/src/main/java/io/servicecomb/demo/springmvc/server/CodeFirstSpringmvc.java
@@ -20,6 +20,7 @@ package io.servicecomb.demo.springmvc.server;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -29,6 +30,7 @@ import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Response.Status;
import org.apache.commons.io.IOUtils;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
@@ -50,11 +52,16 @@ import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.netflix.servo.monitor.Monitor;
+
import io.servicecomb.common.rest.codec.RestObjectMapper;
import io.servicecomb.demo.compute.Person;
import io.servicecomb.demo.ignore.InputModelForTestIgnore;
import io.servicecomb.demo.ignore.OutputModelForTestIgnore;
import io.servicecomb.demo.server.User;
+import io.servicecomb.foundation.common.utils.JsonUtils;
+import io.servicecomb.foundation.metrics.MetricsServoRegistry;
import io.servicecomb.provider.rest.common.RestSchema;
import io.servicecomb.swagger.extend.annotations.RawJsonRequestBody;
import io.servicecomb.swagger.extend.annotations.ResponseHeaders;
@@ -74,6 +81,15 @@ import io.vertx.core.json.JsonObject;
@RestSchema(schemaId = "codeFirst")
@RequestMapping(path = "/codeFirstSpringmvc", produces = MediaType.APPLICATION_JSON_VALUE)
public class CodeFirstSpringmvc {
+
+ private MetricsServoRegistry registry;
+
+ @Autowired
+ public CodeFirstSpringmvc(MetricsServoRegistry registry) {
+ this.registry = registry;
+ }
+
+
private String _fileUpload(MultipartFile file1, Part file2) {
try (InputStream is1 = file1.getInputStream(); InputStream is2 = file2.getInputStream()) {
String content1 = IOUtils.toString(is1);
@@ -283,7 +299,7 @@ public class CodeFirstSpringmvc {
return new OutputModelForTestIgnore("output_id", input.getInputId(), input.getContent(), input.getInputObject(),
input.getInputJsonObject(), input.getInputIgnoreInterface(),
new Person("outputSomeone"), new JsonObject("{\"OutputJsonKey\" : \"OutputJsonValue\"}"), () -> {
- });
+ });
}
@SuppressWarnings("unchecked")
@@ -312,4 +328,19 @@ public class CodeFirstSpringmvc {
Assert.notNull(form1);
return form1 + form2;
}
+
+
+ @RequestMapping(path = "/metricsForTest", method = RequestMethod.GET)
+ public String metricsForTest() {
+ List<Monitor<?>> monitors = registry.getMetricsMonitors();
+ Map<String, String> values = new HashMap<>();
+ for (Monitor<?> monitor : monitors) {
+ values.put(monitor.getConfig().getName(), monitor.getValue().toString());
+ }
+ try {
+ return JsonUtils.writeValueAsString(values);
+ } catch (JsonProcessingException e) {
+ return "{}";
+ }
+ }
}
--
To stop receiving notification emails like this one, please contact
"commits@servicecomb.apache.org" <co...@servicecomb.apache.org>.