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>.