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:18 UTC

[incubator-servicecomb-java-chassis] branch master updated (f6da714 -> 0c52b49)

This is an automated email from the ASF dual-hosted git repository.

ningjiang pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-java-chassis.git.


    from f6da714  SCB-126 fix pr comment
     new 9328aa5  JAV-508 & SCB-11 Metrics Auto Publish
     new c100420  JAV-508 & SCB-11 change to asf license and add test case
     new fe8f031  JAV-508 & SCB-11 for trigger ci
     new 251c57e  JAV-508 & SCB-11 minor refactor
     new ccdde77  JAV-508 & SCB-11 move metric dto from metrics-core to metrics-common and add metrics publish via rest schema
     new 7915fe2  JAV-508 & SCB-11 add metrics integration test in demo springmvc
     new d3f4210  JAV-508 & SCB-11 move publish interface from core to common
     new fe060b2  JAV-508 & SCB-11 add module metrics in root pom
     new e4d0f22  JAV-508 & SCB-11 fix integration test failed
     new 7dc7ca7  SJAV-508 & SCB-11 fix pr comment
     new 5524ec9  JAV-508 & SCB-11 add getAppliedWindowTime fun and comment in publish interface
     new 689a2ac  JAV-508 & SCB-11 fix pr comment (change publish interface use windowTime instead of Index)
     new d79b69a  JAV-508 & SCB-11 fix pr comment
     new 0c52b49  JAV-508 & SCB-11 add ApiResponse for code 400

The 14 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 demo/demo-springmvc/springmvc-client/pom.xml       |  6 ++
 .../demo/springmvc/client/SpringmvcClient.java     | 50 ++++++++++++++++
 .../META-INF/spring/springmvc.client.bean.xml      |  3 +
 demo/demo-springmvc/springmvc-server/pom.xml       |  6 ++
 .../demo/springmvc/server/CodeFirstSpringmvc.java  | 33 ++++++++++-
 java-chassis-dependencies/pom.xml                  | 10 ++++
 .../metrics-common}/pom.xml                        | 12 +++-
 .../io/servicecomb/metrics/common}/CallMetric.java |  7 ++-
 .../metrics/common}/ConsumerInvocationMetric.java  | 10 +++-
 .../metrics/common}/InstanceMetric.java            | 10 ++--
 .../metrics/common}/InvocationMetric.java          |  2 +-
 .../servicecomb/metrics/common}/MetricsConst.java  |  2 +-
 .../metrics/common/MetricsPublisher.java}          | 33 +++++------
 .../metrics/common}/ProducerInvocationMetric.java  | 13 ++++-
 .../metrics/common}/RegistryMetric.java            | 20 ++++---
 .../servicecomb/metrics/common}/SystemMetric.java  | 13 +++--
 .../servicecomb/metrics/common}/TimerMetric.java   |  8 ++-
 metrics/metrics-core/pom.xml                       | 11 ++--
 .../metrics/core/monitor/CallMonitor.java          |  2 +-
 .../core/monitor/ConsumerInvocationMonitor.java    |  5 +-
 .../metrics/core/monitor/DefaultSystemMonitor.java |  2 +-
 .../core/monitor/ProducerInvocationMonitor.java    |  4 +-
 .../metrics/core/monitor/RegistryMonitor.java      |  6 +-
 .../metrics/core/monitor/SystemMonitor.java        |  2 +-
 .../metrics/core/monitor/TimerMonitor.java         |  2 +-
 .../metrics/core/publish/DataSource.java           | 26 ++++-----
 .../metrics/core/publish/DefaultDataSource.java    | 48 ++++++++++++++--
 .../core/publish/DefaultMetricsPublisher.java      | 66 ++++++++++++++++++++++
 .../metrics/core/TestEventAndRunner.java           | 14 +++--
 .../io/servicecomb/metrics/core/TestPublisher.java | 58 +++++++++++++++++++
 .../metrics-performance-test/pom.xml               | 21 +++----
 .../metrics/sample/perf/PerfService.java           | 10 ----
 metrics/metrics-sample/pom.xml                     | 21 +++----
 metrics/pom.xml                                    | 22 ++++----
 pom.xml                                            |  1 +
 35 files changed, 430 insertions(+), 129 deletions(-)
 copy {tracing/tracing-common => metrics/metrics-common}/pom.xml (82%)
 rename metrics/{metrics-core/src/main/java/io/servicecomb/metrics/core/metric => metrics-common/src/main/java/io/servicecomb/metrics/common}/CallMetric.java (87%)
 rename metrics/{metrics-core/src/main/java/io/servicecomb/metrics/core/metric => metrics-common/src/main/java/io/servicecomb/metrics/common}/ConsumerInvocationMetric.java (83%)
 rename metrics/{metrics-core/src/main/java/io/servicecomb/metrics/core/metric => metrics-common/src/main/java/io/servicecomb/metrics/common}/InstanceMetric.java (80%)
 rename metrics/{metrics-core/src/main/java/io/servicecomb/metrics/core/metric => metrics-common/src/main/java/io/servicecomb/metrics/common}/InvocationMetric.java (96%)
 rename metrics/{metrics-core/src/main/java/io/servicecomb/metrics/core => metrics-common/src/main/java/io/servicecomb/metrics/common}/MetricsConst.java (96%)
 copy metrics/{metrics-core/src/main/java/io/servicecomb/metrics/core/publish/DataSource.java => metrics-common/src/main/java/io/servicecomb/metrics/common/MetricsPublisher.java} (65%)
 rename metrics/{metrics-core/src/main/java/io/servicecomb/metrics/core/metric => metrics-common/src/main/java/io/servicecomb/metrics/common}/ProducerInvocationMetric.java (82%)
 rename metrics/{metrics-core/src/main/java/io/servicecomb/metrics/core/metric => metrics-common/src/main/java/io/servicecomb/metrics/common}/RegistryMetric.java (82%)
 rename metrics/{metrics-core/src/main/java/io/servicecomb/metrics/core/metric => metrics-common/src/main/java/io/servicecomb/metrics/common}/SystemMetric.java (82%)
 rename metrics/{metrics-core/src/main/java/io/servicecomb/metrics/core/metric => metrics-common/src/main/java/io/servicecomb/metrics/common}/TimerMetric.java (88%)
 create mode 100644 metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/DefaultMetricsPublisher.java
 create mode 100644 metrics/metrics-core/src/test/java/io/servicecomb/metrics/core/TestPublisher.java

-- 
To stop receiving notification emails like this one, please contact
['"commits@servicecomb.apache.org" <co...@servicecomb.apache.org>'].

[incubator-servicecomb-java-chassis] 10/14: SJAV-508 & SCB-11 fix pr comment

Posted by ni...@apache.org.
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 7dc7ca7dbb4c26a53004ba23cb2d8c3c7a8b4663
Author: zhengyangyong <ya...@huawei.com>
AuthorDate: Thu Dec 28 11:54:49 2017 +0800

    SJAV-508 & SCB-11 fix pr comment
    
    Signed-off-by: zhengyangyong <ya...@huawei.com>
---
 .../io/servicecomb/demo/springmvc/client/SpringmvcClient.java    | 9 ++++++---
 .../src/main/resources/META-INF/spring/springmvc.client.bean.xml | 3 +++
 .../io/servicecomb/demo/springmvc/server/CodeFirstSpringmvc.java | 4 ++--
 3 files changed, 11 insertions(+), 5 deletions(-)

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 dc19cdb..5364f37 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
@@ -34,6 +34,7 @@ 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.MetricsPublisher;
 import io.servicecomb.metrics.common.RegistryMetric;
 import io.servicecomb.provider.springmvc.reference.CseRestTemplate;
 import io.servicecomb.provider.springmvc.reference.RestTemplateBuilder;
@@ -46,6 +47,8 @@ public class SpringmvcClient {
 
   private static Controller controller;
 
+  private static MetricsPublisher metricsPublisher;
+
   public static void main(String[] args) throws Exception {
     templateUrlWithServiceName.setRequestFactory(new UrlWithServiceNameClientHttpRequestFactory());
     Log4jUtils.init();
@@ -59,6 +62,8 @@ public class SpringmvcClient {
   public static void run() throws Exception {
     restTemplate = RestTemplateBuilder.create();
     controller = BeanUtils.getBean("controller");
+    metricsPublisher = BeanUtils.getBean("metricsPublisher");
+
 
     String prefix = "cse://springmvc";
 
@@ -116,9 +121,7 @@ public class SpringmvcClient {
 
     //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);
+      RegistryMetric metric = metricsPublisher.metrics();
 
       TestMgr.check(String.valueOf(metric.getInstanceMetric().getSystemMetric().getHeapUsed() != 0), "true");
       TestMgr.check(String.valueOf(metric.getProducerMetrics().size() == 28), "true");
diff --git a/demo/demo-springmvc/springmvc-client/src/main/resources/META-INF/spring/springmvc.client.bean.xml b/demo/demo-springmvc/springmvc-client/src/main/resources/META-INF/spring/springmvc.client.bean.xml
index b46e0b4..365b71a 100644
--- a/demo/demo-springmvc/springmvc-client/src/main/resources/META-INF/spring/springmvc.client.bean.xml
+++ b/demo/demo-springmvc/springmvc-client/src/main/resources/META-INF/spring/springmvc.client.bean.xml
@@ -28,4 +28,7 @@
 	<cse:rpc-reference id="controller" microservice-name="springmvc"
 		schema-id="controller" interface="io.servicecomb.demo.controller.Controller"></cse:rpc-reference>
 
+	<cse:rpc-reference id="metricsPublisher" microservice-name="springmvc"
+		schema-id="metricsEndpoint" interface="io.servicecomb.metrics.common.MetricsPublisher"></cse:rpc-reference>
+
 </beans>
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 bb6e0b0..96d6d8e 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
@@ -329,7 +329,7 @@ public class CodeFirstSpringmvc {
     return form1 + form2;
   }
 
-
+  //Only for 0.5.0 Integration Test
   @RequestMapping(path = "/metricsForTest", method = RequestMethod.GET)
   public String metricsForTest() {
     List<Monitor<?>> monitors = registry.getMetricsMonitors();
@@ -340,7 +340,7 @@ public class CodeFirstSpringmvc {
     try {
       return JsonUtils.writeValueAsString(values);
     } catch (JsonProcessingException e) {
-      return "{}";
+      throw new InvocationException(500, "500", "JsonProcessingException", e);
     }
   }
 }

-- 
To stop receiving notification emails like this one, please contact
"commits@servicecomb.apache.org" <co...@servicecomb.apache.org>.

[incubator-servicecomb-java-chassis] 04/14: JAV-508 & SCB-11 minor refactor

Posted by ni...@apache.org.
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 251c57e9ddeef926d19431853ae27fef60cb8743
Author: zhengyangyong <ya...@huawei.com>
AuthorDate: Tue Dec 26 11:37:25 2017 +0800

    JAV-508 & SCB-11 minor refactor
    
    Signed-off-by: zhengyangyong <ya...@huawei.com>
---
 metrics/metrics-core/pom.xml                       |  8 ++
 ...Publisher.java => DefaultMetricsPublisher.java} | 36 ++++-----
 .../metrics/core/publish/MetricsBootListener.java  | 86 ----------------------
 .../metrics/core/publish/MetricsPublisher.java     |  6 +-
 ...ecomb_internal_metrics_contract_definition.yaml | 42 -----------
 .../io/servicecomb/metrics/core/TestPublisher.java | 30 +++++---
 6 files changed, 50 insertions(+), 158 deletions(-)

diff --git a/metrics/metrics-core/pom.xml b/metrics/metrics-core/pom.xml
index 798477c..9a61c21 100644
--- a/metrics/metrics-core/pom.xml
+++ b/metrics/metrics-core/pom.xml
@@ -31,6 +31,14 @@
   <dependencies>
     <dependency>
       <groupId>io.servicecomb</groupId>
+      <artifactId>provider-rest-common</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework</groupId>
+      <artifactId>spring-web</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>io.servicecomb</groupId>
       <artifactId>java-chassis-core</artifactId>
     </dependency>
     <dependency>
diff --git a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/JsonMetricsPublisher.java b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/DefaultMetricsPublisher.java
similarity index 51%
rename from metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/JsonMetricsPublisher.java
rename to metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/DefaultMetricsPublisher.java
index 535c6de..ebc8f89 100644
--- a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/JsonMetricsPublisher.java
+++ b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/DefaultMetricsPublisher.java
@@ -17,32 +17,32 @@
 
 package io.servicecomb.metrics.core.publish;
 
-import org.springframework.stereotype.Component;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
 
-import com.fasterxml.jackson.core.JsonProcessingException;
+import io.servicecomb.metrics.core.metric.RegistryMetric;
+import io.servicecomb.provider.rest.common.RestSchema;
 
-import io.servicecomb.foundation.common.exceptions.ServiceCombException;
-import io.servicecomb.foundation.common.utils.JsonUtils;
-
-@Component
-public class JsonMetricsPublisher implements MetricsPublisher {
+@RestSchema(schemaId = "metricsEndpoint")
+@RequestMapping(path = "/metrics")
+public class DefaultMetricsPublisher implements MetricsPublisher {
 
   private final DataSource dataSource;
 
-  public JsonMetricsPublisher(DataSource dataSource) {
+  public DefaultMetricsPublisher(DataSource dataSource) {
     this.dataSource = dataSource;
   }
 
+  @RequestMapping(path = "/", method = RequestMethod.GET)
+  @Override
+  public RegistryMetric metrics() {
+    return dataSource.getRegistryMetric();
+  }
+
+  @RequestMapping(path = "/{windowTimeIndex}", method = RequestMethod.GET)
   @Override
-  public String metrics(int pollerIndex) {
-    if (pollerIndex >= 0 && pollerIndex < dataSource.getAppliedPollingIntervals().size()) {
-      try {
-        return JsonUtils.writeValueAsString(dataSource.getRegistryMetric(pollerIndex));
-      } catch (JsonProcessingException e) {
-        throw new ServiceCombException("serialize metrics failed", e);
-      }
-    } else {
-      return "{}";
-    }
+  public RegistryMetric metricsWithWindowTimeIndex(@PathVariable(name = "windowTimeIndex") int windowTimeIndex) {
+    return dataSource.getRegistryMetric(windowTimeIndex);
   }
 }
diff --git a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/MetricsBootListener.java b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/MetricsBootListener.java
deleted file mode 100644
index 9d9571f..0000000
--- a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/MetricsBootListener.java
+++ /dev/null
@@ -1,86 +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 io.servicecomb.metrics.core.publish;
-
-import java.io.IOException;
-
-import org.apache.commons.io.IOUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.core.io.Resource;
-import org.springframework.stereotype.Component;
-
-import com.netflix.config.DynamicPropertyFactory;
-
-import io.servicecomb.core.BootListener;
-import io.servicecomb.core.definition.SchemaMeta;
-import io.servicecomb.core.definition.loader.SchemaLoader;
-import io.servicecomb.core.definition.schema.ProducerSchemaFactory;
-import io.servicecomb.foundation.common.config.PaaSResourceUtils;
-import io.servicecomb.foundation.common.exceptions.ServiceCombException;
-import io.servicecomb.serviceregistry.RegistryUtils;
-import io.servicecomb.serviceregistry.api.registry.Microservice;
-
-@Component
-public class MetricsBootListener implements BootListener {
-
-  private static final String PUBLISH_CLASS_NAME = "servicecomb.metrics.publish.class";
-
-  private static final String METRICS_CONTRACT_DEFINITION_FILE = "servicecomb_internal_metrics_contract_definition.yaml";
-
-  private final ProducerSchemaFactory schemaFactory;
-
-  private final SchemaLoader schemaLoader;
-
-  private final MetricsPublisher metricsPublisher;
-
-  @Autowired
-  public MetricsBootListener(ProducerSchemaFactory schemaFactory, SchemaLoader schemaLoader,
-      MetricsPublisher metricsPublisher) {
-    this.schemaFactory = schemaFactory;
-    this.schemaLoader = schemaLoader;
-    this.metricsPublisher = metricsPublisher;
-  }
-
-  @Override
-  public void onBootEvent(BootEvent event) {
-    //inject metrics provider before ProducerProviderManager init
-    if (EventType.BEFORE_PRODUCER_PROVIDER.equals(event.getEventType())) {
-
-      String publisherClassName = DynamicPropertyFactory.getInstance()
-          .getStringProperty(PUBLISH_CLASS_NAME, JsonMetricsPublisher.class.getName()).get();
-
-      Resource[] resources = PaaSResourceUtils.getResources(METRICS_CONTRACT_DEFINITION_FILE);
-      if (resources.length != 0) {
-        Microservice microservice = RegistryUtils.getMicroservice();
-        try {
-          String swaggerContent = IOUtils.toString(resources[0].getURL());
-          SchemaMeta meta = schemaLoader
-              .registerSchema(microservice.getServiceName(), "metricsEndpoint", swaggerContent);
-          schemaFactory
-              .getOrCreateProducerSchema(microservice.getServiceName(), meta.getSchemaId(),
-                  Class.forName(publisherClassName),
-                  metricsPublisher);
-        } catch (ClassNotFoundException e) {
-          throw new ServiceCombException("unable found publish class", e);
-        } catch (IOException e) {
-          throw new ServiceCombException("unable load metrics contract definition file", e);
-        }
-      }
-    }
-  }
-}
diff --git a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/MetricsPublisher.java b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/MetricsPublisher.java
index 29cf1d8..9f3873f 100644
--- a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/MetricsPublisher.java
+++ b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/MetricsPublisher.java
@@ -17,6 +17,10 @@
 
 package io.servicecomb.metrics.core.publish;
 
+import io.servicecomb.metrics.core.metric.RegistryMetric;
+
 public interface MetricsPublisher {
-  String metrics(int pollerIndex);
+  RegistryMetric metrics();
+
+  RegistryMetric metricsWithWindowTimeIndex(int windowTimeIndex);
 }
diff --git a/metrics/metrics-core/src/main/resources/servicecomb_internal_metrics_contract_definition.yaml b/metrics/metrics-core/src/main/resources/servicecomb_internal_metrics_contract_definition.yaml
deleted file mode 100644
index 0e4000c..0000000
--- a/metrics/metrics-core/src/main/resources/servicecomb_internal_metrics_contract_definition.yaml
+++ /dev/null
@@ -1,42 +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.
-## ---------------------------------------------------------------------------
-
-swagger: "2.0"
-info:
-  version: "1.0.0"
-  title: "MetricsPublisher"
-  x-java-interface: "io.servicecomb.metrics.core.publish.MetricsPublisher"
-basePath: "/metrics"
-consumes:
-- "application/json"
-produces:
-- "application/json"
-paths:
-  /{pollerIndex}:
-    get:
-      operationId: "metrics"
-      parameters:
-      - name: "pollerIndex"
-        in: "path"
-        required: true
-        type: "integer"
-        format: "int32"
-      responses:
-        200:
-          description: "response of 200"
-          schema:
-            type: "string"
\ No newline at end of file
diff --git a/metrics/metrics-core/src/test/java/io/servicecomb/metrics/core/TestPublisher.java b/metrics/metrics-core/src/test/java/io/servicecomb/metrics/core/TestPublisher.java
index 9700d3b..7096937 100644
--- a/metrics/metrics-core/src/test/java/io/servicecomb/metrics/core/TestPublisher.java
+++ b/metrics/metrics-core/src/test/java/io/servicecomb/metrics/core/TestPublisher.java
@@ -17,26 +17,34 @@
 
 package io.servicecomb.metrics.core;
 
+import java.io.IOException;
+import java.util.Map;
+
 import org.junit.Assert;
 import org.junit.Test;
 
+import io.servicecomb.metrics.core.metric.RegistryMetric;
+import io.servicecomb.metrics.core.monitor.DefaultSystemMonitor;
 import io.servicecomb.metrics.core.monitor.RegistryMonitor;
+import io.servicecomb.metrics.core.monitor.SystemMonitor;
 import io.servicecomb.metrics.core.publish.DefaultDataSource;
-import io.servicecomb.metrics.core.publish.JsonMetricsPublisher;
+import io.servicecomb.metrics.core.publish.DefaultMetricsPublisher;
 
 public class TestPublisher {
 
   @Test
-  public void test() {
-    RegistryMonitor registryMonitor = new RegistryMonitor();
+  public void test() throws IOException {
+    SystemMonitor systemMonitor = new DefaultSystemMonitor();
+    RegistryMonitor registryMonitor = new RegistryMonitor(systemMonitor);
     DefaultDataSource dataSource = new DefaultDataSource(registryMonitor);
-    JsonMetricsPublisher publisher = new JsonMetricsPublisher(dataSource);
-    String content = publisher.metrics(0);
-    Assert
-        .assertEquals(content,
-            "{\"instanceMetric\":{\"waitInQueue\":0,\"lifeTimeInQueue\":{\"total\":0,\"count\":0,\"average\":0.0,"+
-                "\"min\":0,\"max\":0},\"executionTime\":{\"total\":0,\"count\":0,\"average\":0.0,\"min\":0,\"max\":0},"+
-                "\"consumerLatency\":{\"total\":0,\"count\":0,\"average\":0.0,\"min\":0,\"max\":0},\"producerLatency"+
-                "\":{\"total\":0,\"count\":0,\"average\":0.0,\"min\":0,\"max\":0}},\"invocationMetrics\":{}}");
+    DefaultMetricsPublisher publisher = new DefaultMetricsPublisher(dataSource);
+
+    RegistryMetric registryMetric = publisher.metrics();
+    Map<String, Number> metricsMap = registryMetric.toMap();
+    Assert.assertEquals(metricsMap.size(), 30);
+
+    registryMetric = publisher.metricsWithWindowTimeIndex(0);
+    metricsMap = registryMetric.toMap();
+    Assert.assertEquals(metricsMap.size(), 30);
   }
 }

-- 
To stop receiving notification emails like this one, please contact
"commits@servicecomb.apache.org" <co...@servicecomb.apache.org>.

[incubator-servicecomb-java-chassis] 03/14: JAV-508 & SCB-11 for trigger ci

Posted by ni...@apache.org.
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 fe8f031b26ead0e0fc910df6c01a2868a5c856df
Author: zhengyangyong <ya...@huawei.com>
AuthorDate: Fri Dec 22 11:46:15 2017 +0800

    JAV-508 & SCB-11 for trigger ci
    
    Signed-off-by: zhengyangyong <ya...@huawei.com>
---
 .../src/test/java/io/servicecomb/metrics/core/TestEventAndRunner.java   | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/metrics/metrics-core/src/test/java/io/servicecomb/metrics/core/TestEventAndRunner.java b/metrics/metrics-core/src/test/java/io/servicecomb/metrics/core/TestEventAndRunner.java
index 63d2275..368b572 100644
--- a/metrics/metrics-core/src/test/java/io/servicecomb/metrics/core/TestEventAndRunner.java
+++ b/metrics/metrics-core/src/test/java/io/servicecomb/metrics/core/TestEventAndRunner.java
@@ -261,4 +261,4 @@ public class TestEventAndRunner {
     Assert.assertEquals(model.getInstanceMetric().getSystemMetric().getNonHeapMax(), 700, 0);
     Assert.assertEquals(model.getInstanceMetric().getSystemMetric().getNonHeapUsed(), 800, 0);
   }
-}
+}
\ No newline at end of file

-- 
To stop receiving notification emails like this one, please contact
"commits@servicecomb.apache.org" <co...@servicecomb.apache.org>.

[incubator-servicecomb-java-chassis] 08/14: JAV-508 & SCB-11 add module metrics in root pom

Posted by ni...@apache.org.
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 fe060b248a8303755fcf3eb5e7152daacf0f09ff
Author: zhengyangyong <ya...@huawei.com>
AuthorDate: Wed Dec 27 10:27:22 2017 +0800

    JAV-508 & SCB-11 add module metrics in root pom
    
    Signed-off-by: zhengyangyong <ya...@huawei.com>
---
 pom.xml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/pom.xml b/pom.xml
index 491e12c..d91a410 100644
--- a/pom.xml
+++ b/pom.xml
@@ -69,6 +69,7 @@
     <module>spring-boot-starter</module>
     <module>tracing</module>
     <module>edge</module>
+    <module>metrics</module>
   </modules>
 
   <distributionManagement>

-- 
To stop receiving notification emails like this one, please contact
"commits@servicecomb.apache.org" <co...@servicecomb.apache.org>.

[incubator-servicecomb-java-chassis] 13/14: JAV-508 & SCB-11 fix pr comment

Posted by ni...@apache.org.
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 d79b69aa98a5d33adb2ac76cd6301a0b57239c34
Author: zhengyangyong <ya...@huawei.com>
AuthorDate: Tue Jan 2 15:57:30 2018 +0800

    JAV-508 & SCB-11 fix pr comment
    
    Signed-off-by: zhengyangyong <ya...@huawei.com>
---
 .../servicecomb/metrics/core/publish/DefaultDataSource.java  | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/DefaultDataSource.java b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/DefaultDataSource.java
index 22fb846..81c439b 100644
--- a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/DefaultDataSource.java
+++ b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/DefaultDataSource.java
@@ -83,13 +83,13 @@ public class DefaultDataSource implements DataSource {
 
   @Override
   public RegistryMetric getRegistryMetric(long windowTime) {
-    if (appliedWindowTimes.containsKey(windowTime)) {
-      return registryMonitor.toRegistryMetric(appliedWindowTimes.get(windowTime));
-    } else {
-      throw new InvocationException(BAD_REQUEST,
-          "windowTime : " + windowTime + " unset in servicecomb.metrics.window_time,current available are : " +
-              Strings.join(",", getAppliedWindowTime().iterator()));
+    Integer index = appliedWindowTimes.get(windowTime);
+    if (index != null) {
+      return registryMonitor.toRegistryMetric(index);
     }
+    throw new InvocationException(BAD_REQUEST,
+        "windowTime : " + windowTime + " unset in servicecomb.metrics.window_time,current available are : " +
+            Strings.join(",", getAppliedWindowTime().iterator()));
   }
 
   @Override

-- 
To stop receiving notification emails like this one, please contact
"commits@servicecomb.apache.org" <co...@servicecomb.apache.org>.

[incubator-servicecomb-java-chassis] 01/14: JAV-508 & SCB-11 Metrics Auto Publish

Posted by ni...@apache.org.
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 9328aa5fb31d9c67737503913b988c50786657c6
Author: zhengyangyong <ya...@huawei.com>
AuthorDate: Wed Dec 20 14:29:46 2017 +0800

    JAV-508 & SCB-11 Metrics Auto Publish
    
    Signed-off-by: zhengyangyong <ya...@huawei.com>
---
 .../metrics/core/publish/JsonMetricsPublisher.java | 47 ++++++++++++
 .../metrics/core/publish/MetricsBootListener.java  | 85 ++++++++++++++++++++++
 .../metrics/core/publish/MetricsPublisher.java     | 21 ++++++
 ...ecomb_internal_metrics_contract_definition.yaml | 25 +++++++
 .../metrics/sample/perf/PerfService.java           | 10 ---
 5 files changed, 178 insertions(+), 10 deletions(-)

diff --git a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/JsonMetricsPublisher.java b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/JsonMetricsPublisher.java
new file mode 100644
index 0000000..a4caf70
--- /dev/null
+++ b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/JsonMetricsPublisher.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2017 Huawei Technologies Co., Ltd
+ *
+ * Licensed 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 io.servicecomb.metrics.core.publish;
+
+import org.springframework.stereotype.Component;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+
+import io.servicecomb.foundation.common.exceptions.ServiceCombException;
+import io.servicecomb.foundation.common.utils.JsonUtils;
+
+@Component
+public class JsonMetricsPublisher implements MetricsPublisher {
+
+  private final DataSource dataSource;
+
+  public JsonMetricsPublisher(DataSource dataSource) {
+    this.dataSource = dataSource;
+  }
+
+  @Override
+  public String metrics(int pollerIndex) {
+    if (pollerIndex >= 0 && pollerIndex < dataSource.getAppliedPollingIntervals().size()) {
+      try {
+        return JsonUtils.writeValueAsString(dataSource.getRegistryMetric(pollerIndex));
+      } catch (JsonProcessingException e) {
+        throw new ServiceCombException("serialize metrics failed", e);
+      }
+    } else {
+      return "{}";
+    }
+  }
+}
diff --git a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/MetricsBootListener.java b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/MetricsBootListener.java
new file mode 100644
index 0000000..a307788
--- /dev/null
+++ b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/MetricsBootListener.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright 2017 Huawei Technologies Co., Ltd
+ *
+ * Licensed 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 io.servicecomb.metrics.core.publish;
+
+import java.io.IOException;
+
+import org.apache.commons.io.IOUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.io.Resource;
+import org.springframework.stereotype.Component;
+
+import com.netflix.config.DynamicPropertyFactory;
+
+import io.servicecomb.core.BootListener;
+import io.servicecomb.core.definition.SchemaMeta;
+import io.servicecomb.core.definition.loader.SchemaLoader;
+import io.servicecomb.core.definition.schema.ProducerSchemaFactory;
+import io.servicecomb.foundation.common.config.PaaSResourceUtils;
+import io.servicecomb.foundation.common.exceptions.ServiceCombException;
+import io.servicecomb.serviceregistry.RegistryUtils;
+import io.servicecomb.serviceregistry.api.registry.Microservice;
+
+@Component
+public class MetricsBootListener implements BootListener {
+
+  private static final String PUBLISH_CLASS_NAME = "servicecomb.metrics.publish.class";
+
+  private static final String METRICS_CONTRACT_DEFINITION_FILE = "servicecomb_internal_metrics_contract_definition.yaml";
+
+  private final ProducerSchemaFactory schemaFactory;
+
+  private final SchemaLoader schemaLoader;
+
+  private final MetricsPublisher metricsPublisher;
+
+  @Autowired
+  public MetricsBootListener(ProducerSchemaFactory schemaFactory, SchemaLoader schemaLoader,
+      MetricsPublisher metricsPublisher) {
+    this.schemaFactory = schemaFactory;
+    this.schemaLoader = schemaLoader;
+    this.metricsPublisher = metricsPublisher;
+  }
+
+  @Override
+  public void onBootEvent(BootEvent event) {
+    //inject metrics provider before ProducerProviderManager init
+    if (EventType.BEFORE_PRODUCER_PROVIDER.equals(event.getEventType())) {
+
+      String publisherClassName = DynamicPropertyFactory.getInstance()
+          .getStringProperty(PUBLISH_CLASS_NAME, JsonMetricsPublisher.class.getName()).get();
+
+      Resource[] resources = PaaSResourceUtils.getResources(METRICS_CONTRACT_DEFINITION_FILE);
+      if (resources.length != 0) {
+        Microservice microservice = RegistryUtils.getMicroservice();
+        try {
+          String swaggerContent = IOUtils.toString(resources[0].getURL());
+          SchemaMeta meta = schemaLoader
+              .registerSchema(microservice.getServiceName(), "metricsEndpoint", swaggerContent);
+          schemaFactory
+              .getOrCreateProducerSchema(microservice.getServiceName(), meta.getSchemaId(),
+                  Class.forName(publisherClassName),
+                  metricsPublisher);
+        } catch (ClassNotFoundException e) {
+          throw new ServiceCombException("unable found publish class", e);
+        } catch (IOException e) {
+          throw new ServiceCombException("unable load metrics contract definition file", e);
+        }
+      }
+    }
+  }
+}
diff --git a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/MetricsPublisher.java b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/MetricsPublisher.java
new file mode 100644
index 0000000..c9abf17
--- /dev/null
+++ b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/MetricsPublisher.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright 2017 Huawei Technologies Co., Ltd
+ *
+ * Licensed 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 io.servicecomb.metrics.core.publish;
+
+public interface MetricsPublisher {
+  String metrics(int pollerIndex);
+}
diff --git a/metrics/metrics-core/src/main/resources/servicecomb_internal_metrics_contract_definition.yaml b/metrics/metrics-core/src/main/resources/servicecomb_internal_metrics_contract_definition.yaml
new file mode 100644
index 0000000..a97e75c
--- /dev/null
+++ b/metrics/metrics-core/src/main/resources/servicecomb_internal_metrics_contract_definition.yaml
@@ -0,0 +1,25 @@
+swagger: "2.0"
+info:
+  version: "1.0.0"
+  title: "MetricsPublisher"
+  x-java-interface: "io.servicecomb.metrics.core.publish.MetricsPublisher"
+basePath: "/metrics"
+consumes:
+- "application/json"
+produces:
+- "application/json"
+paths:
+  /{pollerIndex}:
+    get:
+      operationId: "metrics"
+      parameters:
+      - name: "pollerIndex"
+        in: "path"
+        required: true
+        type: "integer"
+        format: "int32"
+      responses:
+        200:
+          description: "response of 200"
+          schema:
+            type: "string"
\ No newline at end of file
diff --git a/metrics/metrics-sample/metrics-performance-test/src/main/java/io/servicecomb/metrics/sample/perf/PerfService.java b/metrics/metrics-sample/metrics-performance-test/src/main/java/io/servicecomb/metrics/sample/perf/PerfService.java
index 829ea47..e6651a8 100644
--- a/metrics/metrics-sample/metrics-performance-test/src/main/java/io/servicecomb/metrics/sample/perf/PerfService.java
+++ b/metrics/metrics-sample/metrics-performance-test/src/main/java/io/servicecomb/metrics/sample/perf/PerfService.java
@@ -23,10 +23,6 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 
-import com.fasterxml.jackson.core.JsonProcessingException;
-
-import io.servicecomb.foundation.common.utils.JsonUtils;
-import io.servicecomb.metrics.core.metric.RegistryMetric;
 import io.servicecomb.metrics.core.publish.DataSource;
 import io.servicecomb.provider.rest.common.RestSchema;
 
@@ -90,10 +86,4 @@ public class PerfService {
   public String fun9() {
     return UUID.randomUUID().toString();
   }
-
-  @GetMapping(path = "/metrics")
-  public String metrics() throws JsonProcessingException {
-    RegistryMetric metric = this.dataSource.getRegistryMetric(0);
-    return JsonUtils.writeValueAsString(metric);
-  }
 }

-- 
To stop receiving notification emails like this one, please contact
"commits@servicecomb.apache.org" <co...@servicecomb.apache.org>.

[incubator-servicecomb-java-chassis] 12/14: JAV-508 & SCB-11 fix pr comment (change publish interface use windowTime instead of Index)

Posted by ni...@apache.org.
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 689a2ac7d80b8cf6e8c9010fd7249f0c938af430
Author: zhengyangyong <ya...@huawei.com>
AuthorDate: Tue Jan 2 12:46:05 2018 +0800

    JAV-508 & SCB-11 fix pr comment (change publish interface use windowTime instead of Index)
    
    Signed-off-by: zhengyangyong <ya...@huawei.com>
---
 .../metrics/common/MetricsPublisher.java           | 20 +++++-----
 metrics/metrics-core/pom.xml                       | 10 +----
 .../metrics/core/publish/DataSource.java           | 20 +++++-----
 .../metrics/core/publish/DefaultDataSource.java    | 46 ++++++++++++++++++++--
 .../core/publish/DefaultMetricsPublisher.java      | 10 +++--
 .../metrics/core/TestEventAndRunner.java           |  8 ++--
 .../io/servicecomb/metrics/core/TestPublisher.java | 13 +++---
 7 files changed, 81 insertions(+), 46 deletions(-)

diff --git a/metrics/metrics-common/src/main/java/io/servicecomb/metrics/common/MetricsPublisher.java b/metrics/metrics-common/src/main/java/io/servicecomb/metrics/common/MetricsPublisher.java
index 43b965f..5e66a10 100644
--- a/metrics/metrics-common/src/main/java/io/servicecomb/metrics/common/MetricsPublisher.java
+++ b/metrics/metrics-common/src/main/java/io/servicecomb/metrics/common/MetricsPublisher.java
@@ -34,26 +34,26 @@ public interface MetricsPublisher {
    */
   List<Long> getAppliedWindowTime();
 
-  //same as getRegistryMetric(0)
+  //same as getRegistryMetric({first setting windowTime})
   RegistryMetric metrics();
 
   /**
-   * windowTimeIndex usage example:
+   * windowTime usage example:
    * if there is two window time set in "servicecomb.metrics.window_time" like 1000,2000
-   * then windowTimeIndex = 0 will return result of the setting 1000(1 second)
-   * windowTimeIndex = 1 will return result of the setting 2000(2 second)
+   * then windowTime = 1000 will return result of the setting 1000(1 second)
+   * windowTime = 2000 will return result of the setting 2000(2 second)
    *
    * there are three monitor of max,min,total
    * 0----------1----------2----------3----------  <-time line (second)
    *   100,200    300,400                          <-value record
    *
-   *                 ↑ getRegistryMetric(0) will return max=200 min=100 total=300
-   *                   getRegistryMetric(1) will return max=0 min=0 total=0
-   *                             ↑ getRegistryMetric(0) will return max=300 min=400 total=700
-   *                               getRegistryMetric(1) will return max=400 min=100 total=1000
+   *                 ↑ getRegistryMetric(1000) will return max=200 min=100 total=300
+   *                   getRegistryMetric(2000) will return max=0 min=0 total=0
+   *                             ↑ getRegistryMetric(1000) will return max=300 min=400 total=700
+   *                               getRegistryMetric(2000) will return max=400 min=100 total=1000
    *
-   * @param windowTimeIndex index of getAppliedWindowTime() item
+   * @param windowTime getAppliedWindowTime() item
    * @return RegistryMetric
    */
-  RegistryMetric metricsWithWindowTimeIndex(int windowTimeIndex);
+  RegistryMetric metricsWithWindowTimeIndex(long windowTime);
 }
diff --git a/metrics/metrics-core/pom.xml b/metrics/metrics-core/pom.xml
index 8f8fdeb..2566bbe 100644
--- a/metrics/metrics-core/pom.xml
+++ b/metrics/metrics-core/pom.xml
@@ -39,15 +39,7 @@
     </dependency>
     <dependency>
       <groupId>io.servicecomb</groupId>
-      <artifactId>provider-rest-common</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.springframework</groupId>
-      <artifactId>spring-web</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>io.servicecomb</groupId>
-      <artifactId>java-chassis-core</artifactId>
+      <artifactId>provider-springmvc</artifactId>
     </dependency>
 
     <dependency>
diff --git a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/DataSource.java b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/DataSource.java
index bd19a30..80d4570 100644
--- a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/DataSource.java
+++ b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/DataSource.java
@@ -37,26 +37,26 @@ public interface DataSource {
    */
   List<Long> getAppliedWindowTime();
 
-  //same as getRegistryMetric(0)
+  //same as getRegistryMetric({first setting windowTime})
   RegistryMetric getRegistryMetric();
 
   /**
-   * windowTimeIndex usage example:
+   * windowTime usage example:
    * if there is two window time set in "servicecomb.metrics.window_time" like 1000,2000
-   * then windowTimeIndex = 0 will return result of the setting 1000(1 second)
-   * windowTimeIndex = 1 will return result of the setting 2000(2 second)
+   * then windowTime = 1000 will return result of the setting 1000(1 second)
+   * windowTime = 2000 will return result of the setting 2000(2 second)
    *
    * there are three monitor of max,min,total
    * 0----------1----------2----------3----------  <-time line (second)
    *   100,200    300,400                          <-value record
    *
-   *                 ↑ getRegistryMetric(0) will return max=200 min=100 total=300
-   *                   getRegistryMetric(1) will return max=0 min=0 total=0
-   *                             ↑ getRegistryMetric(0) will return max=300 min=400 total=700
-   *                               getRegistryMetric(1) will return max=400 min=100 total=1000
+   *                 ↑ getRegistryMetric(1000) will return max=200 min=100 total=300
+   *                   getRegistryMetric(2000) will return max=0 min=0 total=0
+   *                             ↑ getRegistryMetric(1000) will return max=300 min=400 total=700
+   *                               getRegistryMetric(2000) will return max=400 min=100 total=1000
    *
-   * @param windowTimeIndex index of getAppliedWindowTime() item
+   * @param windowTime getAppliedWindowTime() item
    * @return RegistryMetric
    */
-  RegistryMetric getRegistryMetric(int windowTimeIndex);
+  RegistryMetric getRegistryMetric(long windowTime);
 }
diff --git a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/DefaultDataSource.java b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/DefaultDataSource.java
index d1ce74b..22fb846 100644
--- a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/DefaultDataSource.java
+++ b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/DefaultDataSource.java
@@ -17,16 +17,25 @@
 
 package io.servicecomb.metrics.core.publish;
 
+import static javax.ws.rs.core.Response.Status.BAD_REQUEST;
+
+import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import com.netflix.config.DynamicPropertyFactory;
 import com.netflix.servo.monitor.Pollers;
+import com.netflix.servo.util.Strings;
 
+import io.servicecomb.foundation.common.exceptions.ServiceCombException;
 import io.servicecomb.metrics.common.RegistryMetric;
 import io.servicecomb.metrics.core.monitor.RegistryMonitor;
+import io.servicecomb.swagger.invocation.exception.InvocationException;
 
 @Component
 public class DefaultDataSource implements DataSource {
@@ -34,6 +43,8 @@ public class DefaultDataSource implements DataSource {
 
   private final RegistryMonitor registryMonitor;
 
+  private final Map<Long, Integer> appliedWindowTimes = new HashMap<>();
+
   @Autowired
   public DefaultDataSource(RegistryMonitor registryMonitor) {
     this(registryMonitor, DynamicPropertyFactory.getInstance().getStringProperty(METRICS_POLLING_TIME, "5000").get());
@@ -41,17 +52,44 @@ public class DefaultDataSource implements DataSource {
 
   public DefaultDataSource(RegistryMonitor registryMonitor, String pollingSettings) {
     this.registryMonitor = registryMonitor;
-    System.getProperties().setProperty("servo.pollers", pollingSettings);
+
+    String[] singlePollingSettings = pollingSettings.split(",");
+    Set<Long> parsePollingSettings = new HashSet<>();
+    for (String singlePollingSetting : singlePollingSettings) {
+      try {
+        long settingValue = Long.parseLong(singlePollingSetting);
+        if (settingValue > 0) {
+          parsePollingSettings.add(settingValue);
+        } else {
+          throw new ServiceCombException(
+              "bad format servicecomb.metrics.window_time : " + String.valueOf(settingValue));
+        }
+      } catch (NumberFormatException e) {
+        throw new ServiceCombException("bad format servicecomb.metrics.window_time", e);
+      }
+    }
+    String finalPollingSettings = Strings.join(",", parsePollingSettings.iterator());
+    System.getProperties().setProperty("servo.pollers", finalPollingSettings);
+    List<Long> appliedWindowTimes = getAppliedWindowTime();
+    for (int i = 0; i < appliedWindowTimes.size(); i++) {
+      this.appliedWindowTimes.put(appliedWindowTimes.get(i), i);
+    }
   }
 
   @Override
   public RegistryMetric getRegistryMetric() {
-    return getRegistryMetric(0);
+    return getRegistryMetric(getAppliedWindowTime().get(0));
   }
 
   @Override
-  public RegistryMetric getRegistryMetric(int windowTimeIndex) {
-    return registryMonitor.toRegistryMetric(windowTimeIndex);
+  public RegistryMetric getRegistryMetric(long windowTime) {
+    if (appliedWindowTimes.containsKey(windowTime)) {
+      return registryMonitor.toRegistryMetric(appliedWindowTimes.get(windowTime));
+    } else {
+      throw new InvocationException(BAD_REQUEST,
+          "windowTime : " + windowTime + " unset in servicecomb.metrics.window_time,current available are : " +
+              Strings.join(",", getAppliedWindowTime().iterator()));
+    }
   }
 
   @Override
diff --git a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/DefaultMetricsPublisher.java b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/DefaultMetricsPublisher.java
index 54ed0a6..9c3909b 100644
--- a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/DefaultMetricsPublisher.java
+++ b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/DefaultMetricsPublisher.java
@@ -19,6 +19,7 @@ package io.servicecomb.metrics.core.publish;
 
 import java.util.List;
 
+import org.springframework.web.bind.annotation.CrossOrigin;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
@@ -38,20 +39,23 @@ public class DefaultMetricsPublisher implements MetricsPublisher {
   }
 
   @RequestMapping(path = "/appliedWindowTime", method = RequestMethod.GET)
+  @CrossOrigin
   @Override
   public List<Long> getAppliedWindowTime() {
     return dataSource.getAppliedWindowTime();
   }
 
   @RequestMapping(path = "/", method = RequestMethod.GET)
+  @CrossOrigin
   @Override
   public RegistryMetric metrics() {
     return dataSource.getRegistryMetric();
   }
 
-  @RequestMapping(path = "/{windowTimeIndex}", method = RequestMethod.GET)
+  @RequestMapping(path = "/{windowTime}", method = RequestMethod.GET)
+  @CrossOrigin
   @Override
-  public RegistryMetric metricsWithWindowTimeIndex(@PathVariable(name = "windowTimeIndex") int windowTimeIndex) {
-    return dataSource.getRegistryMetric(windowTimeIndex);
+  public RegistryMetric metricsWithWindowTimeIndex(@PathVariable(name = "windowTime") long windowTime) {
+    return dataSource.getRegistryMetric(windowTime);
   }
 }
diff --git a/metrics/metrics-core/src/test/java/io/servicecomb/metrics/core/TestEventAndRunner.java b/metrics/metrics-core/src/test/java/io/servicecomb/metrics/core/TestEventAndRunner.java
index 28f6280..7c6ced3 100644
--- a/metrics/metrics-core/src/test/java/io/servicecomb/metrics/core/TestEventAndRunner.java
+++ b/metrics/metrics-core/src/test/java/io/servicecomb/metrics/core/TestEventAndRunner.java
@@ -17,12 +17,14 @@
 
 package io.servicecomb.metrics.core;
 
+import static org.hamcrest.Matchers.containsInAnyOrder;
 import static org.mockito.Mockito.when;
 
 import java.lang.management.MemoryMXBean;
 import java.lang.management.MemoryUsage;
 import java.lang.management.OperatingSystemMXBean;
 import java.lang.management.ThreadMXBean;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.TimeUnit;
@@ -70,9 +72,7 @@ public class TestEventAndRunner {
 
     List<Long> intervals = dataSource.getAppliedWindowTime();
     Assert.assertEquals(intervals.size(), 3);
-    Assert.assertEquals(intervals.get(0).intValue(), 1000);
-    Assert.assertEquals(intervals.get(1).intValue(), 2000);
-    Assert.assertEquals(intervals.get(2).intValue(), 3000);
+    Assert.assertThat(intervals, containsInAnyOrder(Arrays.asList(1000L, 2000L, 3000L).toArray()));
 
     new DefaultEventListenerManager(monitor);
 
@@ -114,7 +114,7 @@ public class TestEventAndRunner {
     //sim lease one window time
     Thread.sleep(1000);
 
-    RegistryMetric model = dataSource.getRegistryMetric();
+    RegistryMetric model = dataSource.getRegistryMetric(1000);
 
     //check InstanceMetric
     Assert.assertEquals(model.getInstanceMetric().getProducerMetric().getWaitInQueue(), 1);
diff --git a/metrics/metrics-core/src/test/java/io/servicecomb/metrics/core/TestPublisher.java b/metrics/metrics-core/src/test/java/io/servicecomb/metrics/core/TestPublisher.java
index 6aad12d..4c60167 100644
--- a/metrics/metrics-core/src/test/java/io/servicecomb/metrics/core/TestPublisher.java
+++ b/metrics/metrics-core/src/test/java/io/servicecomb/metrics/core/TestPublisher.java
@@ -17,7 +17,10 @@
 
 package io.servicecomb.metrics.core;
 
+import static org.hamcrest.Matchers.containsInAnyOrder;
+
 import java.io.IOException;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
 
@@ -37,21 +40,19 @@ public class TestPublisher {
   public void test() throws IOException {
     SystemMonitor systemMonitor = new DefaultSystemMonitor();
     RegistryMonitor registryMonitor = new RegistryMonitor(systemMonitor);
-    DefaultDataSource dataSource = new DefaultDataSource(registryMonitor,"1000,2000,3000");
+    DefaultDataSource dataSource = new DefaultDataSource(registryMonitor, "1000,2000,3000,3000,2000,1000");
     DefaultMetricsPublisher publisher = new DefaultMetricsPublisher(dataSource);
 
     RegistryMetric registryMetric = publisher.metrics();
     Map<String, Number> metricsMap = registryMetric.toMap();
     Assert.assertEquals(metricsMap.size(), 30);
 
-    registryMetric = publisher.metricsWithWindowTimeIndex(0);
+    registryMetric = publisher.metricsWithWindowTimeIndex(1000);
     metricsMap = registryMetric.toMap();
     Assert.assertEquals(metricsMap.size(), 30);
 
     List<Long> appliedWindowTime = publisher.getAppliedWindowTime();
-    Assert.assertEquals(appliedWindowTime.size(),3);
-    Assert.assertEquals(appliedWindowTime.get(0).longValue(),1000);
-    Assert.assertEquals(appliedWindowTime.get(1).longValue(),2000);
-    Assert.assertEquals(appliedWindowTime.get(2).longValue(),3000);
+    Assert.assertEquals(appliedWindowTime.size(), 3);
+    Assert.assertThat(appliedWindowTime, containsInAnyOrder(Arrays.asList(1000L, 2000L, 3000L).toArray()));
   }
 }

-- 
To stop receiving notification emails like this one, please contact
"commits@servicecomb.apache.org" <co...@servicecomb.apache.org>.

[incubator-servicecomb-java-chassis] 11/14: JAV-508 & SCB-11 add getAppliedWindowTime fun and comment in publish interface

Posted by ni...@apache.org.
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 5524ec9d7ee6e76ae2895bfc573405e830877c6e
Author: zhengyangyong <ya...@huawei.com>
AuthorDate: Fri Dec 29 15:35:23 2017 +0800

    JAV-508 & SCB-11 add getAppliedWindowTime fun and comment in publish interface
    
    Signed-off-by: zhengyangyong <ya...@huawei.com>
---
 .../metrics/common/MetricsPublisher.java           | 35 ++++++++++++++++++++++
 .../metrics/core/publish/DataSource.java           |  2 +-
 .../core/publish/DefaultMetricsPublisher.java      |  8 +++++
 .../metrics/core/TestEventAndRunner.java           |  6 ++--
 .../io/servicecomb/metrics/core/TestPublisher.java |  9 +++++-
 5 files changed, 56 insertions(+), 4 deletions(-)

diff --git a/metrics/metrics-common/src/main/java/io/servicecomb/metrics/common/MetricsPublisher.java b/metrics/metrics-common/src/main/java/io/servicecomb/metrics/common/MetricsPublisher.java
index 6925a70..43b965f 100644
--- a/metrics/metrics-common/src/main/java/io/servicecomb/metrics/common/MetricsPublisher.java
+++ b/metrics/metrics-common/src/main/java/io/servicecomb/metrics/common/MetricsPublisher.java
@@ -17,8 +17,43 @@
 
 package io.servicecomb.metrics.common;
 
+import java.util.List;
+
 public interface MetricsPublisher {
+  /**  What's the WindowTime ?
+   We all know there are two major type of metric :
+   1.Time-unrelated,you can get the latest value any time immediately:
+   Counter -> increase or decrease
+   Guage -> set a certain one value
+   2.Time-related,only after a centain time pass you can compute the right value,"a centain time" called WindowTime
+   Max & Min -> the max value or min value in a centain time
+   Average -> average value, the simplest algorithm is f = sum / count
+   Rate -> like TPS,algorithm is f = sum / second
+
+   Will be return "servicecomb.metrics.window_time" setting in microservice.yaml
+   */
+  List<Long> getAppliedWindowTime();
+
+  //same as getRegistryMetric(0)
   RegistryMetric metrics();
 
+  /**
+   * windowTimeIndex usage example:
+   * if there is two window time set in "servicecomb.metrics.window_time" like 1000,2000
+   * then windowTimeIndex = 0 will return result of the setting 1000(1 second)
+   * windowTimeIndex = 1 will return result of the setting 2000(2 second)
+   *
+   * there are three monitor of max,min,total
+   * 0----------1----------2----------3----------  <-time line (second)
+   *   100,200    300,400                          <-value record
+   *
+   *                 ↑ getRegistryMetric(0) will return max=200 min=100 total=300
+   *                   getRegistryMetric(1) will return max=0 min=0 total=0
+   *                             ↑ getRegistryMetric(0) will return max=300 min=400 total=700
+   *                               getRegistryMetric(1) will return max=400 min=100 total=1000
+   *
+   * @param windowTimeIndex index of getAppliedWindowTime() item
+   * @return RegistryMetric
+   */
   RegistryMetric metricsWithWindowTimeIndex(int windowTimeIndex);
 }
diff --git a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/DataSource.java b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/DataSource.java
index 4eb89a6..bd19a30 100644
--- a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/DataSource.java
+++ b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/DataSource.java
@@ -37,7 +37,7 @@ public interface DataSource {
    */
   List<Long> getAppliedWindowTime();
 
-  //return getRegistryMetric(0)
+  //same as getRegistryMetric(0)
   RegistryMetric getRegistryMetric();
 
   /**
diff --git a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/DefaultMetricsPublisher.java b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/DefaultMetricsPublisher.java
index dad369f..54ed0a6 100644
--- a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/DefaultMetricsPublisher.java
+++ b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/DefaultMetricsPublisher.java
@@ -17,6 +17,8 @@
 
 package io.servicecomb.metrics.core.publish;
 
+import java.util.List;
+
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
@@ -35,6 +37,12 @@ public class DefaultMetricsPublisher implements MetricsPublisher {
     this.dataSource = dataSource;
   }
 
+  @RequestMapping(path = "/appliedWindowTime", method = RequestMethod.GET)
+  @Override
+  public List<Long> getAppliedWindowTime() {
+    return dataSource.getAppliedWindowTime();
+  }
+
   @RequestMapping(path = "/", method = RequestMethod.GET)
   @Override
   public RegistryMetric metrics() {
diff --git a/metrics/metrics-core/src/test/java/io/servicecomb/metrics/core/TestEventAndRunner.java b/metrics/metrics-core/src/test/java/io/servicecomb/metrics/core/TestEventAndRunner.java
index 69e66f6..28f6280 100644
--- a/metrics/metrics-core/src/test/java/io/servicecomb/metrics/core/TestEventAndRunner.java
+++ b/metrics/metrics-core/src/test/java/io/servicecomb/metrics/core/TestEventAndRunner.java
@@ -66,11 +66,13 @@ public class TestEventAndRunner {
 
     DefaultSystemMonitor systemMonitor = new DefaultSystemMonitor(systemMXBean, threadMXBean, memoryMXBean);
     RegistryMonitor monitor = new RegistryMonitor(systemMonitor);
-    DefaultDataSource dataSource = new DefaultDataSource(monitor, "1000");
+    DefaultDataSource dataSource = new DefaultDataSource(monitor, "1000,2000,3000");
 
     List<Long> intervals = dataSource.getAppliedWindowTime();
-    Assert.assertEquals(intervals.size(), 1);
+    Assert.assertEquals(intervals.size(), 3);
     Assert.assertEquals(intervals.get(0).intValue(), 1000);
+    Assert.assertEquals(intervals.get(1).intValue(), 2000);
+    Assert.assertEquals(intervals.get(2).intValue(), 3000);
 
     new DefaultEventListenerManager(monitor);
 
diff --git a/metrics/metrics-core/src/test/java/io/servicecomb/metrics/core/TestPublisher.java b/metrics/metrics-core/src/test/java/io/servicecomb/metrics/core/TestPublisher.java
index 537c69c..6aad12d 100644
--- a/metrics/metrics-core/src/test/java/io/servicecomb/metrics/core/TestPublisher.java
+++ b/metrics/metrics-core/src/test/java/io/servicecomb/metrics/core/TestPublisher.java
@@ -18,6 +18,7 @@
 package io.servicecomb.metrics.core;
 
 import java.io.IOException;
+import java.util.List;
 import java.util.Map;
 
 import org.junit.Assert;
@@ -36,7 +37,7 @@ public class TestPublisher {
   public void test() throws IOException {
     SystemMonitor systemMonitor = new DefaultSystemMonitor();
     RegistryMonitor registryMonitor = new RegistryMonitor(systemMonitor);
-    DefaultDataSource dataSource = new DefaultDataSource(registryMonitor);
+    DefaultDataSource dataSource = new DefaultDataSource(registryMonitor,"1000,2000,3000");
     DefaultMetricsPublisher publisher = new DefaultMetricsPublisher(dataSource);
 
     RegistryMetric registryMetric = publisher.metrics();
@@ -46,5 +47,11 @@ public class TestPublisher {
     registryMetric = publisher.metricsWithWindowTimeIndex(0);
     metricsMap = registryMetric.toMap();
     Assert.assertEquals(metricsMap.size(), 30);
+
+    List<Long> appliedWindowTime = publisher.getAppliedWindowTime();
+    Assert.assertEquals(appliedWindowTime.size(),3);
+    Assert.assertEquals(appliedWindowTime.get(0).longValue(),1000);
+    Assert.assertEquals(appliedWindowTime.get(1).longValue(),2000);
+    Assert.assertEquals(appliedWindowTime.get(2).longValue(),3000);
   }
 }

-- 
To stop receiving notification emails like this one, please contact
"commits@servicecomb.apache.org" <co...@servicecomb.apache.org>.

[incubator-servicecomb-java-chassis] 14/14: JAV-508 & SCB-11 add ApiResponse for code 400

Posted by ni...@apache.org.
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 0c52b49a5888146a5c3d6bbcc3d1addcd7f6e4a6
Author: zhengyangyong <ya...@huawei.com>
AuthorDate: Tue Jan 2 16:27:10 2018 +0800

    JAV-508 & SCB-11 add ApiResponse for code 400
    
    Signed-off-by: zhengyangyong <ya...@huawei.com>
---
 .../io/servicecomb/metrics/core/publish/DefaultMetricsPublisher.java | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/DefaultMetricsPublisher.java b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/DefaultMetricsPublisher.java
index 9c3909b..e031161 100644
--- a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/DefaultMetricsPublisher.java
+++ b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/DefaultMetricsPublisher.java
@@ -27,6 +27,8 @@ import org.springframework.web.bind.annotation.RequestMethod;
 import io.servicecomb.metrics.common.MetricsPublisher;
 import io.servicecomb.metrics.common.RegistryMetric;
 import io.servicecomb.provider.rest.common.RestSchema;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.annotations.ApiResponses;
 
 @RestSchema(schemaId = "metricsEndpoint")
 @RequestMapping(path = "/metrics")
@@ -52,6 +54,9 @@ public class DefaultMetricsPublisher implements MetricsPublisher {
     return dataSource.getRegistryMetric();
   }
 
+  @ApiResponses({
+      @ApiResponse(code = 400, response = String.class, message = "illegal request content"),
+  })
   @RequestMapping(path = "/{windowTime}", method = RequestMethod.GET)
   @CrossOrigin
   @Override

-- 
To stop receiving notification emails like this one, please contact
"commits@servicecomb.apache.org" <co...@servicecomb.apache.org>.

[incubator-servicecomb-java-chassis] 06/14: JAV-508 & SCB-11 add metrics integration test in demo springmvc

Posted by ni...@apache.org.
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>.

[incubator-servicecomb-java-chassis] 05/14: JAV-508 & SCB-11 move metric dto from metrics-core to metrics-common and add metrics publish via rest schema

Posted by ni...@apache.org.
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 ccdde770347b246b89efe6776345a86137426025
Author: zhengyangyong <ya...@huawei.com>
AuthorDate: Tue Dec 26 15:54:47 2017 +0800

    JAV-508 & SCB-11 move metric dto from metrics-core to metrics-common and add metrics publish via rest schema
    
    Signed-off-by: zhengyangyong <ya...@huawei.com>
---
 java-chassis-dependencies/pom.xml                     | 10 ++++++++++
 metrics/{ => metrics-common}/pom.xml                  | 19 ++++++++++---------
 .../io/servicecomb/metrics/common}/CallMetric.java    |  7 +++++--
 .../metrics/common}/ConsumerInvocationMetric.java     | 10 +++++++---
 .../servicecomb/metrics/common}/InstanceMetric.java   | 10 ++++++----
 .../servicecomb/metrics/common}/InvocationMetric.java |  2 +-
 .../io/servicecomb/metrics/common}/MetricsConst.java  |  2 +-
 .../metrics/common}/ProducerInvocationMetric.java     | 13 ++++++++++---
 .../servicecomb/metrics/common}/RegistryMetric.java   | 18 ++++++++----------
 .../io/servicecomb/metrics/common}/SystemMetric.java  | 13 +++++++++----
 .../io/servicecomb/metrics/common}/TimerMetric.java   |  8 ++++++--
 metrics/metrics-core/pom.xml                          | 17 +++++++++--------
 .../servicecomb/metrics/core/monitor/CallMonitor.java |  2 +-
 .../core/monitor/ConsumerInvocationMonitor.java       |  5 +++--
 .../metrics/core/monitor/DefaultSystemMonitor.java    |  2 +-
 .../core/monitor/ProducerInvocationMonitor.java       |  4 ++--
 .../metrics/core/monitor/RegistryMonitor.java         |  6 +++---
 .../metrics/core/monitor/SystemMonitor.java           |  2 +-
 .../metrics/core/monitor/TimerMonitor.java            |  2 +-
 .../servicecomb/metrics/core/publish/DataSource.java  |  6 +++---
 .../metrics/core/publish/DefaultDataSource.java       |  2 +-
 .../metrics/core/publish/DefaultMetricsPublisher.java |  2 +-
 .../metrics/core/publish/MetricsPublisher.java        |  2 +-
 .../servicecomb/metrics/core/TestEventAndRunner.java  |  2 +-
 .../io/servicecomb/metrics/core/TestPublisher.java    |  2 +-
 metrics/pom.xml                                       |  1 +
 26 files changed, 103 insertions(+), 66 deletions(-)

diff --git a/java-chassis-dependencies/pom.xml b/java-chassis-dependencies/pom.xml
index 78ea724..70f1c02 100644
--- a/java-chassis-dependencies/pom.xml
+++ b/java-chassis-dependencies/pom.xml
@@ -926,6 +926,16 @@
         <artifactId>edge-core</artifactId>
         <version>0.6.0-SNAPSHOT</version>
       </dependency>
+      <dependency>
+        <groupId>io.servicecomb</groupId>
+        <artifactId>metrics-core</artifactId>
+        <version>0.6.0-SNAPSHOT</version>
+      </dependency>
+      <dependency>
+        <groupId>io.servicecomb</groupId>
+        <artifactId>metrics-common</artifactId>
+        <version>0.6.0-SNAPSHOT</version>
+      </dependency>
     </dependencies>
   </dependencyManagement>
 
diff --git a/metrics/pom.xml b/metrics/metrics-common/pom.xml
similarity index 82%
copy from metrics/pom.xml
copy to metrics/metrics-common/pom.xml
index 80203af..76d3651 100644
--- a/metrics/pom.xml
+++ b/metrics/metrics-common/pom.xml
@@ -19,19 +19,20 @@
 <project xmlns="http://maven.apache.org/POM/4.0.0"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <packaging>pom</packaging>
   <parent>
+    <artifactId>metrics</artifactId>
     <groupId>io.servicecomb</groupId>
-    <artifactId>java-chassis-parent</artifactId>
     <version>0.6.0-SNAPSHOT</version>
-    <relativePath>../parent</relativePath>
   </parent>
+  <modelVersion>4.0.0</modelVersion>
+
+  <artifactId>metrics-common</artifactId>
 
-  <artifactId>metrics</artifactId>
+  <dependencies>
+    <dependency>
+      <groupId>com.fasterxml.jackson.core</groupId>
+      <artifactId>jackson-databind</artifactId>
+    </dependency>
+  </dependencies>
 
-  <modules>
-    <module>metrics-core</module>
-    <module>metrics-sample</module>
-  </modules>
 </project>
\ No newline at end of file
diff --git a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/metric/CallMetric.java b/metrics/metrics-common/src/main/java/io/servicecomb/metrics/common/CallMetric.java
similarity index 87%
rename from metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/metric/CallMetric.java
rename to metrics/metrics-common/src/main/java/io/servicecomb/metrics/common/CallMetric.java
index 9c3b0a7..6de66b5 100644
--- a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/metric/CallMetric.java
+++ b/metrics/metrics-common/src/main/java/io/servicecomb/metrics/common/CallMetric.java
@@ -15,11 +15,13 @@
  * limitations under the License.
  */
 
-package io.servicecomb.metrics.core.metric;
+package io.servicecomb.metrics.common;
 
 import java.util.HashMap;
 import java.util.Map;
 
+import com.fasterxml.jackson.annotation.JsonProperty;
+
 public class CallMetric {
   private final String prefix;
 
@@ -39,7 +41,8 @@ public class CallMetric {
     this(prefix, 0, 0);
   }
 
-  public CallMetric(String prefix, long total, double tps) {
+  public CallMetric(@JsonProperty("prefix") String prefix, @JsonProperty("total") long total,
+      @JsonProperty("tps") double tps) {
     this.prefix = prefix;
     this.total = total;
     this.tps = tps;
diff --git a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/metric/ConsumerInvocationMetric.java b/metrics/metrics-common/src/main/java/io/servicecomb/metrics/common/ConsumerInvocationMetric.java
similarity index 83%
rename from metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/metric/ConsumerInvocationMetric.java
rename to metrics/metrics-common/src/main/java/io/servicecomb/metrics/common/ConsumerInvocationMetric.java
index 0c0ddfe..d4aee4a 100644
--- a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/metric/ConsumerInvocationMetric.java
+++ b/metrics/metrics-common/src/main/java/io/servicecomb/metrics/common/ConsumerInvocationMetric.java
@@ -15,11 +15,13 @@
  * limitations under the License.
  */
 
-package io.servicecomb.metrics.core.metric;
+package io.servicecomb.metrics.common;
 
 import java.util.HashMap;
 import java.util.Map;
 
+import com.fasterxml.jackson.annotation.JsonProperty;
+
 public class ConsumerInvocationMetric extends InvocationMetric {
   private final TimerMetric consumerLatency;
 
@@ -33,8 +35,10 @@ public class ConsumerInvocationMetric extends InvocationMetric {
     return consumerCall;
   }
 
-  public ConsumerInvocationMetric(String operationName, String prefix,
-      TimerMetric consumerLatency, CallMetric consumerCall) {
+  public ConsumerInvocationMetric(@JsonProperty("operationName") String operationName,
+      @JsonProperty("prefix") String prefix,
+      @JsonProperty("consumerLatency") TimerMetric consumerLatency,
+      @JsonProperty("consumerCall") CallMetric consumerCall) {
     super(operationName, prefix);
     this.consumerLatency = consumerLatency;
     this.consumerCall = consumerCall;
diff --git a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/metric/InstanceMetric.java b/metrics/metrics-common/src/main/java/io/servicecomb/metrics/common/InstanceMetric.java
similarity index 80%
rename from metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/metric/InstanceMetric.java
rename to metrics/metrics-common/src/main/java/io/servicecomb/metrics/common/InstanceMetric.java
index 614fa48..b8dd03e 100644
--- a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/metric/InstanceMetric.java
+++ b/metrics/metrics-common/src/main/java/io/servicecomb/metrics/common/InstanceMetric.java
@@ -15,7 +15,9 @@
  * limitations under the License.
  */
 
-package io.servicecomb.metrics.core.metric;
+package io.servicecomb.metrics.common;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
 
 public class InstanceMetric {
   private final SystemMetric systemMetric;
@@ -36,9 +38,9 @@ public class InstanceMetric {
     return producerMetric;
   }
 
-  public InstanceMetric(SystemMetric systemMetric,
-      ConsumerInvocationMetric consumerMetric,
-      ProducerInvocationMetric producerMetric) {
+  public InstanceMetric(@JsonProperty("systemMetric") SystemMetric systemMetric,
+      @JsonProperty("consumerMetric") ConsumerInvocationMetric consumerMetric,
+      @JsonProperty("producerMetric") ProducerInvocationMetric producerMetric) {
     this.systemMetric = systemMetric;
     this.consumerMetric = consumerMetric;
     this.producerMetric = producerMetric;
diff --git a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/metric/InvocationMetric.java b/metrics/metrics-common/src/main/java/io/servicecomb/metrics/common/InvocationMetric.java
similarity index 96%
rename from metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/metric/InvocationMetric.java
rename to metrics/metrics-common/src/main/java/io/servicecomb/metrics/common/InvocationMetric.java
index c452a4e..8ecd1b9 100644
--- a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/metric/InvocationMetric.java
+++ b/metrics/metrics-common/src/main/java/io/servicecomb/metrics/common/InvocationMetric.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.metrics.core.metric;
+package io.servicecomb.metrics.common;
 
 public class InvocationMetric {
   private final String operationName;
diff --git a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/MetricsConst.java b/metrics/metrics-common/src/main/java/io/servicecomb/metrics/common/MetricsConst.java
similarity index 96%
rename from metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/MetricsConst.java
rename to metrics/metrics-common/src/main/java/io/servicecomb/metrics/common/MetricsConst.java
index 5554796..b0d58f8 100644
--- a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/MetricsConst.java
+++ b/metrics/metrics-common/src/main/java/io/servicecomb/metrics/common/MetricsConst.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.metrics.core;
+package io.servicecomb.metrics.common;
 
 public class MetricsConst {
   public static final String CONSUMER_PREFIX_TEMPLATE = "servicecomb.%s.consumer";
diff --git a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/metric/ProducerInvocationMetric.java b/metrics/metrics-common/src/main/java/io/servicecomb/metrics/common/ProducerInvocationMetric.java
similarity index 82%
rename from metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/metric/ProducerInvocationMetric.java
rename to metrics/metrics-common/src/main/java/io/servicecomb/metrics/common/ProducerInvocationMetric.java
index 0692e90..aced1c7 100644
--- a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/metric/ProducerInvocationMetric.java
+++ b/metrics/metrics-common/src/main/java/io/servicecomb/metrics/common/ProducerInvocationMetric.java
@@ -15,11 +15,13 @@
  * limitations under the License.
  */
 
-package io.servicecomb.metrics.core.metric;
+package io.servicecomb.metrics.common;
 
 import java.util.HashMap;
 import java.util.Map;
 
+import com.fasterxml.jackson.annotation.JsonProperty;
+
 public class ProducerInvocationMetric extends InvocationMetric {
   private final long waitInQueue;
 
@@ -51,8 +53,13 @@ public class ProducerInvocationMetric extends InvocationMetric {
     return producerCall;
   }
 
-  public ProducerInvocationMetric(String operationName, String prefix, long waitInQueue,
-      TimerMetric lifeTimeInQueue, TimerMetric executionTime, TimerMetric producerLatency, CallMetric producerCall) {
+  public ProducerInvocationMetric(@JsonProperty("operationName") String operationName,
+      @JsonProperty("prefix") String prefix,
+      @JsonProperty("waitInQueue") long waitInQueue,
+      @JsonProperty("lifeTimeInQueue") TimerMetric lifeTimeInQueue,
+      @JsonProperty("executionTime") TimerMetric executionTime,
+      @JsonProperty("producerLatency") TimerMetric producerLatency,
+      @JsonProperty("producerCall") CallMetric producerCall) {
     super(operationName, prefix);
     this.waitInQueue = waitInQueue;
     this.lifeTimeInQueue = lifeTimeInQueue;
diff --git a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/metric/RegistryMetric.java b/metrics/metrics-common/src/main/java/io/servicecomb/metrics/common/RegistryMetric.java
similarity index 85%
rename from metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/metric/RegistryMetric.java
rename to metrics/metrics-common/src/main/java/io/servicecomb/metrics/common/RegistryMetric.java
index 7bafee7..2612e72 100644
--- a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/metric/RegistryMetric.java
+++ b/metrics/metrics-common/src/main/java/io/servicecomb/metrics/common/RegistryMetric.java
@@ -15,20 +15,19 @@
  * limitations under the License.
  */
 
-package io.servicecomb.metrics.core.metric;
+package io.servicecomb.metrics.common;
 
 import java.util.HashMap;
 import java.util.Map;
 
-import io.servicecomb.metrics.core.MetricsConst;
+import com.fasterxml.jackson.annotation.JsonProperty;
 
 public class RegistryMetric {
+  private InstanceMetric instanceMetric;
 
-  private final InstanceMetric instanceMetric;
+  private Map<String, ConsumerInvocationMetric> consumerMetrics;
 
-  private final Map<String, ConsumerInvocationMetric> consumerMetrics;
-
-  private final Map<String, ProducerInvocationMetric> producerMetrics;
+  private Map<String, ProducerInvocationMetric> producerMetrics;
 
   public InstanceMetric getInstanceMetric() {
     return instanceMetric;
@@ -42,10 +41,9 @@ public class RegistryMetric {
     return producerMetrics;
   }
 
-  public RegistryMetric(SystemMetric systemMetric,
-      Map<String, ConsumerInvocationMetric> consumerMetrics,
-      Map<String, ProducerInvocationMetric> producerMetrics) {
-
+  public RegistryMetric(@JsonProperty("systemMetric") SystemMetric systemMetric,
+      @JsonProperty("consumerMetrics") Map<String, ConsumerInvocationMetric> consumerMetrics,
+      @JsonProperty("producerMetrics") Map<String, ProducerInvocationMetric> producerMetrics) {
     this.consumerMetrics = consumerMetrics;
     this.producerMetrics = producerMetrics;
 
diff --git a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/metric/SystemMetric.java b/metrics/metrics-common/src/main/java/io/servicecomb/metrics/common/SystemMetric.java
similarity index 82%
rename from metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/metric/SystemMetric.java
rename to metrics/metrics-common/src/main/java/io/servicecomb/metrics/common/SystemMetric.java
index 68fff72..d75f311 100644
--- a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/metric/SystemMetric.java
+++ b/metrics/metrics-common/src/main/java/io/servicecomb/metrics/common/SystemMetric.java
@@ -15,11 +15,13 @@
  * limitations under the License.
  */
 
-package io.servicecomb.metrics.core.metric;
+package io.servicecomb.metrics.common;
 
 import java.util.HashMap;
 import java.util.Map;
 
+import com.fasterxml.jackson.annotation.JsonProperty;
+
 public class SystemMetric {
   private final double cpuLoad;
 
@@ -81,9 +83,12 @@ public class SystemMetric {
     return nonHeapUsed;
   }
 
-  public SystemMetric(double cpuLoad, int cpuRunningThreads,
-      long heapInit, long heapMax, long heapCommit, long heapUsed,
-      long nonHeapInit, long nonHeapMax, long nonHeapCommit, long nonHeapUsed) {
+  public SystemMetric(@JsonProperty("cpuLoad") double cpuLoad,
+      @JsonProperty("cpuRunningThreads") int cpuRunningThreads,
+      @JsonProperty("heapInit") long heapInit, @JsonProperty("heapMax") long heapMax,
+      @JsonProperty("heapCommit") long heapCommit, @JsonProperty("heapUsed") long heapUsed,
+      @JsonProperty("nonHeapInit") long nonHeapInit, @JsonProperty("nonHeapMax") long nonHeapMax,
+      @JsonProperty("nonHeapCommit") long nonHeapCommit, @JsonProperty("nonHeapUsed") long nonHeapUsed) {
     this.cpuLoad = cpuLoad;
     this.cpuRunningThreads = cpuRunningThreads;
     this.heapInit = heapInit;
diff --git a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/metric/TimerMetric.java b/metrics/metrics-common/src/main/java/io/servicecomb/metrics/common/TimerMetric.java
similarity index 88%
rename from metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/metric/TimerMetric.java
rename to metrics/metrics-common/src/main/java/io/servicecomb/metrics/common/TimerMetric.java
index 0c38480..fc7a2c4 100644
--- a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/metric/TimerMetric.java
+++ b/metrics/metrics-common/src/main/java/io/servicecomb/metrics/common/TimerMetric.java
@@ -15,11 +15,13 @@
  * limitations under the License.
  */
 
-package io.servicecomb.metrics.core.metric;
+package io.servicecomb.metrics.common;
 
 import java.util.HashMap;
 import java.util.Map;
 
+import com.fasterxml.jackson.annotation.JsonProperty;
+
 public class TimerMetric {
   private final String prefix;
 
@@ -57,7 +59,9 @@ public class TimerMetric {
     this(prefix, 0, 0, 0, 0);
   }
 
-  public TimerMetric(String prefix, long total, long count, long min, long max) {
+  public TimerMetric(@JsonProperty("prefix") String prefix,
+      @JsonProperty("total") long total, @JsonProperty("count") long count,
+      @JsonProperty("min") long min, @JsonProperty("max") long max) {
     this.prefix = prefix;
     this.total = total;
     this.count = count;
diff --git a/metrics/metrics-core/pom.xml b/metrics/metrics-core/pom.xml
index 9a61c21..8f8fdeb 100644
--- a/metrics/metrics-core/pom.xml
+++ b/metrics/metrics-core/pom.xml
@@ -30,6 +30,14 @@
 
   <dependencies>
     <dependency>
+      <groupId>com.netflix.servo</groupId>
+      <artifactId>servo-core</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>io.servicecomb</groupId>
+      <artifactId>metrics-common</artifactId>
+    </dependency>
+    <dependency>
       <groupId>io.servicecomb</groupId>
       <artifactId>provider-rest-common</artifactId>
     </dependency>
@@ -41,14 +49,7 @@
       <groupId>io.servicecomb</groupId>
       <artifactId>java-chassis-core</artifactId>
     </dependency>
-    <dependency>
-      <groupId>io.servicecomb</groupId>
-      <artifactId>foundation-metrics</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.netflix.servo</groupId>
-      <artifactId>servo-core</artifactId>
-    </dependency>
+
     <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-log4j12</artifactId>
diff --git a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/monitor/CallMonitor.java b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/monitor/CallMonitor.java
index 76778ca..ab2e72d 100644
--- a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/monitor/CallMonitor.java
+++ b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/monitor/CallMonitor.java
@@ -21,7 +21,7 @@ import com.netflix.servo.monitor.BasicCounter;
 import com.netflix.servo.monitor.MonitorConfig;
 import com.netflix.servo.monitor.StepCounter;
 
-import io.servicecomb.metrics.core.metric.CallMetric;
+import io.servicecomb.metrics.common.CallMetric;
 
 public class CallMonitor {
   private final String prefix;
diff --git a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/monitor/ConsumerInvocationMonitor.java b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/monitor/ConsumerInvocationMonitor.java
index a297ec4..bd49e51 100644
--- a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/monitor/ConsumerInvocationMonitor.java
+++ b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/monitor/ConsumerInvocationMonitor.java
@@ -17,8 +17,9 @@
 
 package io.servicecomb.metrics.core.monitor;
 
-import io.servicecomb.metrics.core.MetricsConst;
-import io.servicecomb.metrics.core.metric.ConsumerInvocationMetric;
+
+import io.servicecomb.metrics.common.ConsumerInvocationMetric;
+import io.servicecomb.metrics.common.MetricsConst;
 
 public class ConsumerInvocationMonitor extends InvocationMonitor {
   private final TimerMonitor consumerLatency;
diff --git a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/monitor/DefaultSystemMonitor.java b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/monitor/DefaultSystemMonitor.java
index d027a2c..21b42ad 100644
--- a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/monitor/DefaultSystemMonitor.java
+++ b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/monitor/DefaultSystemMonitor.java
@@ -24,7 +24,7 @@ import java.lang.management.ThreadMXBean;
 
 import org.springframework.stereotype.Component;
 
-import io.servicecomb.metrics.core.metric.SystemMetric;
+import io.servicecomb.metrics.common.SystemMetric;
 
 @Component
 public class DefaultSystemMonitor implements SystemMonitor {
diff --git a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/monitor/ProducerInvocationMonitor.java b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/monitor/ProducerInvocationMonitor.java
index b1f945f..6d63ae1 100644
--- a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/monitor/ProducerInvocationMonitor.java
+++ b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/monitor/ProducerInvocationMonitor.java
@@ -20,8 +20,8 @@ package io.servicecomb.metrics.core.monitor;
 import com.netflix.servo.monitor.BasicCounter;
 import com.netflix.servo.monitor.MonitorConfig;
 
-import io.servicecomb.metrics.core.MetricsConst;
-import io.servicecomb.metrics.core.metric.ProducerInvocationMetric;
+import io.servicecomb.metrics.common.MetricsConst;
+import io.servicecomb.metrics.common.ProducerInvocationMetric;
 
 public class ProducerInvocationMonitor extends InvocationMonitor {
   private final BasicCounter waitInQueue;
diff --git a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/monitor/RegistryMonitor.java b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/monitor/RegistryMonitor.java
index 0772463..387c050 100644
--- a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/monitor/RegistryMonitor.java
+++ b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/monitor/RegistryMonitor.java
@@ -24,9 +24,9 @@ import java.util.concurrent.ConcurrentHashMap;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
-import io.servicecomb.metrics.core.metric.ConsumerInvocationMetric;
-import io.servicecomb.metrics.core.metric.ProducerInvocationMetric;
-import io.servicecomb.metrics.core.metric.RegistryMetric;
+import io.servicecomb.metrics.common.ConsumerInvocationMetric;
+import io.servicecomb.metrics.common.ProducerInvocationMetric;
+import io.servicecomb.metrics.common.RegistryMetric;
 
 @Component
 public class RegistryMonitor {
diff --git a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/monitor/SystemMonitor.java b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/monitor/SystemMonitor.java
index 1780e3f..602d039 100644
--- a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/monitor/SystemMonitor.java
+++ b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/monitor/SystemMonitor.java
@@ -17,7 +17,7 @@
 
 package io.servicecomb.metrics.core.monitor;
 
-import io.servicecomb.metrics.core.metric.SystemMetric;
+import io.servicecomb.metrics.common.SystemMetric;
 
 public interface SystemMonitor {
   double getCpuLoad();
diff --git a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/monitor/TimerMonitor.java b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/monitor/TimerMonitor.java
index 1a15571..28fac96 100644
--- a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/monitor/TimerMonitor.java
+++ b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/monitor/TimerMonitor.java
@@ -24,7 +24,7 @@ import com.netflix.servo.monitor.MinGauge;
 import com.netflix.servo.monitor.MonitorConfig;
 import com.netflix.servo.monitor.StepCounter;
 
-import io.servicecomb.metrics.core.metric.TimerMetric;
+import io.servicecomb.metrics.common.TimerMetric;
 
 public class TimerMonitor {
   private final String prefix;
diff --git a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/DataSource.java b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/DataSource.java
index 53ad61e..4eb89a6 100644
--- a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/DataSource.java
+++ b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/DataSource.java
@@ -19,12 +19,12 @@ package io.servicecomb.metrics.core.publish;
 
 import java.util.List;
 
-import io.servicecomb.metrics.core.metric.RegistryMetric;
+import io.servicecomb.metrics.common.RegistryMetric;
 
 public interface DataSource {
 
   /**  What's the WindowTime ?
-  We all know there are two major type of metric :
+   We all know there are two major type of metric :
    1.Time-unrelated,you can get the latest value any time immediately:
    Counter -> increase or decrease
    Guage -> set a certain one value
@@ -34,7 +34,7 @@ public interface DataSource {
    Rate -> like TPS,algorithm is f = sum / second
 
    Will be return "servicecomb.metrics.window_time" setting in microservice.yaml
-  */
+   */
   List<Long> getAppliedWindowTime();
 
   //return getRegistryMetric(0)
diff --git a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/DefaultDataSource.java b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/DefaultDataSource.java
index 9549884..d1ce74b 100644
--- a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/DefaultDataSource.java
+++ b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/DefaultDataSource.java
@@ -25,7 +25,7 @@ import org.springframework.stereotype.Component;
 import com.netflix.config.DynamicPropertyFactory;
 import com.netflix.servo.monitor.Pollers;
 
-import io.servicecomb.metrics.core.metric.RegistryMetric;
+import io.servicecomb.metrics.common.RegistryMetric;
 import io.servicecomb.metrics.core.monitor.RegistryMonitor;
 
 @Component
diff --git a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/DefaultMetricsPublisher.java b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/DefaultMetricsPublisher.java
index ebc8f89..9efe24e 100644
--- a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/DefaultMetricsPublisher.java
+++ b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/DefaultMetricsPublisher.java
@@ -21,7 +21,7 @@ import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 
-import io.servicecomb.metrics.core.metric.RegistryMetric;
+import io.servicecomb.metrics.common.RegistryMetric;
 import io.servicecomb.provider.rest.common.RestSchema;
 
 @RestSchema(schemaId = "metricsEndpoint")
diff --git a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/MetricsPublisher.java b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/MetricsPublisher.java
index 9f3873f..e87e288 100644
--- a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/MetricsPublisher.java
+++ b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/MetricsPublisher.java
@@ -17,7 +17,7 @@
 
 package io.servicecomb.metrics.core.publish;
 
-import io.servicecomb.metrics.core.metric.RegistryMetric;
+import io.servicecomb.metrics.common.RegistryMetric;
 
 public interface MetricsPublisher {
   RegistryMetric metrics();
diff --git a/metrics/metrics-core/src/test/java/io/servicecomb/metrics/core/TestEventAndRunner.java b/metrics/metrics-core/src/test/java/io/servicecomb/metrics/core/TestEventAndRunner.java
index 368b572..69e66f6 100644
--- a/metrics/metrics-core/src/test/java/io/servicecomb/metrics/core/TestEventAndRunner.java
+++ b/metrics/metrics-core/src/test/java/io/servicecomb/metrics/core/TestEventAndRunner.java
@@ -35,8 +35,8 @@ import io.servicecomb.core.metrics.InvocationFinishedEvent;
 import io.servicecomb.core.metrics.InvocationStartProcessingEvent;
 import io.servicecomb.core.metrics.InvocationStartedEvent;
 import io.servicecomb.foundation.common.utils.EventUtils;
+import io.servicecomb.metrics.common.RegistryMetric;
 import io.servicecomb.metrics.core.event.DefaultEventListenerManager;
-import io.servicecomb.metrics.core.metric.RegistryMetric;
 import io.servicecomb.metrics.core.monitor.DefaultSystemMonitor;
 import io.servicecomb.metrics.core.monitor.RegistryMonitor;
 import io.servicecomb.metrics.core.publish.DefaultDataSource;
diff --git a/metrics/metrics-core/src/test/java/io/servicecomb/metrics/core/TestPublisher.java b/metrics/metrics-core/src/test/java/io/servicecomb/metrics/core/TestPublisher.java
index 7096937..537c69c 100644
--- a/metrics/metrics-core/src/test/java/io/servicecomb/metrics/core/TestPublisher.java
+++ b/metrics/metrics-core/src/test/java/io/servicecomb/metrics/core/TestPublisher.java
@@ -23,7 +23,7 @@ import java.util.Map;
 import org.junit.Assert;
 import org.junit.Test;
 
-import io.servicecomb.metrics.core.metric.RegistryMetric;
+import io.servicecomb.metrics.common.RegistryMetric;
 import io.servicecomb.metrics.core.monitor.DefaultSystemMonitor;
 import io.servicecomb.metrics.core.monitor.RegistryMonitor;
 import io.servicecomb.metrics.core.monitor.SystemMonitor;
diff --git a/metrics/pom.xml b/metrics/pom.xml
index 80203af..f3cc665 100644
--- a/metrics/pom.xml
+++ b/metrics/pom.xml
@@ -33,5 +33,6 @@
   <modules>
     <module>metrics-core</module>
     <module>metrics-sample</module>
+    <module>metrics-common</module>
   </modules>
 </project>
\ No newline at end of file

-- 
To stop receiving notification emails like this one, please contact
"commits@servicecomb.apache.org" <co...@servicecomb.apache.org>.

[incubator-servicecomb-java-chassis] 02/14: JAV-508 & SCB-11 change to asf license and add test case

Posted by ni...@apache.org.
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 c100420eeae135f2a10b2fb225556fd9a4bebbc5
Author: zhengyangyong <ya...@huawei.com>
AuthorDate: Thu Dec 21 09:45:01 2017 +0800

    JAV-508 & SCB-11 change to asf license and add test case
    
    Signed-off-by: zhengyangyong <ya...@huawei.com>
---
 .../metrics/core/publish/JsonMetricsPublisher.java | 13 +++----
 .../metrics/core/publish/MetricsBootListener.java  | 13 +++----
 .../metrics/core/publish/MetricsPublisher.java     | 13 +++----
 ...ecomb_internal_metrics_contract_definition.yaml | 17 +++++++++
 .../io/servicecomb/metrics/core/TestPublisher.java | 42 ++++++++++++++++++++++
 .../metrics-performance-test/pom.xml               | 21 +++++------
 metrics/metrics-sample/pom.xml                     | 21 +++++------
 metrics/pom.xml                                    | 21 +++++------
 8 files changed, 113 insertions(+), 48 deletions(-)

diff --git a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/JsonMetricsPublisher.java b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/JsonMetricsPublisher.java
index a4caf70..535c6de 100644
--- a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/JsonMetricsPublisher.java
+++ b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/JsonMetricsPublisher.java
@@ -1,11 +1,12 @@
 /*
- * Copyright 2017 Huawei Technologies Co., Ltd
+ * 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
  *
- * Licensed 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
+ *     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,
diff --git a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/MetricsBootListener.java b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/MetricsBootListener.java
index a307788..9d9571f 100644
--- a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/MetricsBootListener.java
+++ b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/MetricsBootListener.java
@@ -1,11 +1,12 @@
 /*
- * Copyright 2017 Huawei Technologies Co., Ltd
+ * 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
  *
- * Licensed 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
+ *     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,
diff --git a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/MetricsPublisher.java b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/MetricsPublisher.java
index c9abf17..29cf1d8 100644
--- a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/MetricsPublisher.java
+++ b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/MetricsPublisher.java
@@ -1,11 +1,12 @@
 /*
- * Copyright 2017 Huawei Technologies Co., Ltd
+ * 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
  *
- * Licensed 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
+ *     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,
diff --git a/metrics/metrics-core/src/main/resources/servicecomb_internal_metrics_contract_definition.yaml b/metrics/metrics-core/src/main/resources/servicecomb_internal_metrics_contract_definition.yaml
index a97e75c..0e4000c 100644
--- a/metrics/metrics-core/src/main/resources/servicecomb_internal_metrics_contract_definition.yaml
+++ b/metrics/metrics-core/src/main/resources/servicecomb_internal_metrics_contract_definition.yaml
@@ -1,3 +1,20 @@
+## ---------------------------------------------------------------------------
+## 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.
+## ---------------------------------------------------------------------------
+
 swagger: "2.0"
 info:
   version: "1.0.0"
diff --git a/metrics/metrics-core/src/test/java/io/servicecomb/metrics/core/TestPublisher.java b/metrics/metrics-core/src/test/java/io/servicecomb/metrics/core/TestPublisher.java
new file mode 100644
index 0000000..9700d3b
--- /dev/null
+++ b/metrics/metrics-core/src/test/java/io/servicecomb/metrics/core/TestPublisher.java
@@ -0,0 +1,42 @@
+/*
+ * 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 io.servicecomb.metrics.core;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import io.servicecomb.metrics.core.monitor.RegistryMonitor;
+import io.servicecomb.metrics.core.publish.DefaultDataSource;
+import io.servicecomb.metrics.core.publish.JsonMetricsPublisher;
+
+public class TestPublisher {
+
+  @Test
+  public void test() {
+    RegistryMonitor registryMonitor = new RegistryMonitor();
+    DefaultDataSource dataSource = new DefaultDataSource(registryMonitor);
+    JsonMetricsPublisher publisher = new JsonMetricsPublisher(dataSource);
+    String content = publisher.metrics(0);
+    Assert
+        .assertEquals(content,
+            "{\"instanceMetric\":{\"waitInQueue\":0,\"lifeTimeInQueue\":{\"total\":0,\"count\":0,\"average\":0.0,"+
+                "\"min\":0,\"max\":0},\"executionTime\":{\"total\":0,\"count\":0,\"average\":0.0,\"min\":0,\"max\":0},"+
+                "\"consumerLatency\":{\"total\":0,\"count\":0,\"average\":0.0,\"min\":0,\"max\":0},\"producerLatency"+
+                "\":{\"total\":0,\"count\":0,\"average\":0.0,\"min\":0,\"max\":0}},\"invocationMetrics\":{}}");
+  }
+}
diff --git a/metrics/metrics-sample/metrics-performance-test/pom.xml b/metrics/metrics-sample/metrics-performance-test/pom.xml
index 7b29e7f..7a51ea6 100644
--- a/metrics/metrics-sample/metrics-performance-test/pom.xml
+++ b/metrics/metrics-sample/metrics-performance-test/pom.xml
@@ -1,18 +1,19 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-  ~  Copyright 2017 Huawei Technologies Co., Ltd
-  ~
-  ~  Licensed 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
+  ~ 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.
+  ~ 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.
   -->
 
 <project xmlns="http://maven.apache.org/POM/4.0.0"
diff --git a/metrics/metrics-sample/pom.xml b/metrics/metrics-sample/pom.xml
index 45c4749..b78f37a 100644
--- a/metrics/metrics-sample/pom.xml
+++ b/metrics/metrics-sample/pom.xml
@@ -1,18 +1,19 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-  ~  Copyright 2017 Huawei Technologies Co., Ltd
-  ~
-  ~  Licensed 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
+  ~ 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.
+  ~ 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.
   -->
 
 <project xmlns="http://maven.apache.org/POM/4.0.0"
diff --git a/metrics/pom.xml b/metrics/pom.xml
index 8ff8394..80203af 100644
--- a/metrics/pom.xml
+++ b/metrics/pom.xml
@@ -1,18 +1,19 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-  ~  Copyright 2017 Huawei Technologies Co., Ltd
-  ~
-  ~  Licensed 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
+  ~ 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.
+  ~ 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.
   -->
 
 <project xmlns="http://maven.apache.org/POM/4.0.0"

-- 
To stop receiving notification emails like this one, please contact
"commits@servicecomb.apache.org" <co...@servicecomb.apache.org>.

[incubator-servicecomb-java-chassis] 09/14: JAV-508 & SCB-11 fix integration test failed

Posted by ni...@apache.org.
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 e4d0f220703c45dbdd8742e6644ae9fc95663dcd
Author: zhengyangyong <ya...@huawei.com>
AuthorDate: Wed Dec 27 11:32:37 2017 +0800

    JAV-508 & SCB-11 fix integration test failed
    
    Signed-off-by: zhengyangyong <ya...@huawei.com>
---
 .../java/io/servicecomb/metrics/common/RegistryMetric.java     | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/metrics/metrics-common/src/main/java/io/servicecomb/metrics/common/RegistryMetric.java b/metrics/metrics-common/src/main/java/io/servicecomb/metrics/common/RegistryMetric.java
index 2612e72..1dad927 100644
--- a/metrics/metrics-common/src/main/java/io/servicecomb/metrics/common/RegistryMetric.java
+++ b/metrics/metrics-common/src/main/java/io/servicecomb/metrics/common/RegistryMetric.java
@@ -41,11 +41,19 @@ public class RegistryMetric {
     return producerMetrics;
   }
 
-  public RegistryMetric(@JsonProperty("systemMetric") SystemMetric systemMetric,
+  public RegistryMetric(@JsonProperty("instanceMetric") InstanceMetric instanceMetric,
       @JsonProperty("consumerMetrics") Map<String, ConsumerInvocationMetric> consumerMetrics,
       @JsonProperty("producerMetrics") Map<String, ProducerInvocationMetric> producerMetrics) {
     this.consumerMetrics = consumerMetrics;
     this.producerMetrics = producerMetrics;
+    this.instanceMetric = instanceMetric;
+  }
+
+  public RegistryMetric(SystemMetric systemMetric,
+      Map<String, ConsumerInvocationMetric> consumerMetrics,
+      Map<String, ProducerInvocationMetric> producerMetrics) {
+    this.consumerMetrics = consumerMetrics;
+    this.producerMetrics = producerMetrics;
 
     ConsumerInvocationMetric instanceConsumerInvocationMetric = new ConsumerInvocationMetric("instance",
         MetricsConst.INSTANCE_CONSUMER_PREFIX,

-- 
To stop receiving notification emails like this one, please contact
"commits@servicecomb.apache.org" <co...@servicecomb.apache.org>.

[incubator-servicecomb-java-chassis] 07/14: JAV-508 & SCB-11 move publish interface from core to common

Posted by ni...@apache.org.
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 d3f421096d3cf64b776dea2dd4c8076bc1aaa655
Author: zhengyangyong <ya...@huawei.com>
AuthorDate: Wed Dec 27 09:52:24 2017 +0800

    JAV-508 & SCB-11 move publish interface from core to common
    
    Signed-off-by: zhengyangyong <ya...@huawei.com>
---
 .../main/java/io/servicecomb/metrics/common}/MetricsPublisher.java    | 4 +---
 .../io/servicecomb/metrics/core/publish/DefaultMetricsPublisher.java  | 1 +
 2 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/MetricsPublisher.java b/metrics/metrics-common/src/main/java/io/servicecomb/metrics/common/MetricsPublisher.java
similarity index 90%
rename from metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/MetricsPublisher.java
rename to metrics/metrics-common/src/main/java/io/servicecomb/metrics/common/MetricsPublisher.java
index e87e288..6925a70 100644
--- a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/MetricsPublisher.java
+++ b/metrics/metrics-common/src/main/java/io/servicecomb/metrics/common/MetricsPublisher.java
@@ -15,9 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.metrics.core.publish;
-
-import io.servicecomb.metrics.common.RegistryMetric;
+package io.servicecomb.metrics.common;
 
 public interface MetricsPublisher {
   RegistryMetric metrics();
diff --git a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/DefaultMetricsPublisher.java b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/DefaultMetricsPublisher.java
index 9efe24e..dad369f 100644
--- a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/DefaultMetricsPublisher.java
+++ b/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/publish/DefaultMetricsPublisher.java
@@ -21,6 +21,7 @@ import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 
+import io.servicecomb.metrics.common.MetricsPublisher;
 import io.servicecomb.metrics.common.RegistryMetric;
 import io.servicecomb.provider.rest.common.RestSchema;
 

-- 
To stop receiving notification emails like this one, please contact
"commits@servicecomb.apache.org" <co...@servicecomb.apache.org>.