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/24 01:21:41 UTC

[incubator-servicecomb-java-chassis] 04/10: SCB-150 minor refactor and fix test case

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 3ed292d4f8f2b810e0a6c75c5c24dae8c9388d83
Author: zhengyangyong <ya...@huawei.com>
AuthorDate: Fri Jan 12 14:43:23 2018 +0800

    SCB-150 minor refactor and fix test case
    
    Signed-off-by: zhengyangyong <ya...@huawei.com>
---
 .../demo/springmvc/client/SpringmvcClient.java     |  3 +-
 .../demo/perf/PerfMetricsFilePublisher.java        | 14 +++-
 .../metrics/common}/MetricsDimension.java          |  2 +-
 .../servicecomb/metrics/common/CallMetric.java     | 10 ++-
 .../event/InvocationFinishedEventListener.java     |  2 +-
 .../core/event/InvocationStartedEventListener.java |  2 +-
 .../metrics/core/monitor/CallMonitor.java          |  2 +-
 .../core/monitor/ConsumerInvocationMonitor.java    |  2 +-
 .../core/monitor/ProducerInvocationMonitor.java    |  2 +-
 .../metrics/core/TestEventAndRunner.java           | 31 ++++----
 .../metrics/prometheus/MetricsCollector.java       | 88 +++++++++++++++++-----
 .../servicecomb/samples/mwf/TestWriteFile.java     | 55 ++++++++------
 12 files changed, 139 insertions(+), 74 deletions(-)

diff --git a/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/SpringmvcClient.java b/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/SpringmvcClient.java
index 3e93104..7ee9c14 100644
--- a/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/SpringmvcClient.java
+++ b/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/SpringmvcClient.java
@@ -125,7 +125,8 @@ public class SpringmvcClient {
           .check(true, metric.getInstanceMetric().getSystemMetric().getHeapUsed() != 0);
       TestMgr.check(true, metric.getProducerMetrics().size() > 0);
       TestMgr.check(true,
-          metric.getProducerMetrics().get("springmvc.codeFirst.saySomething").getProducerCall().getTotal() > 0);
+          metric.getProducerMetrics().get("springmvc.codeFirst.saySomething").getProducerCall()
+              .getTotalValue(MetricsDimension.DIMENSION_STATUS, MetricsDimension.DIMENSION_STATUS_ALL).getValue() > 0);
     } catch (Exception e) {
       TestMgr.check("true", "false");
     }
diff --git a/demo/perf/src/main/java/org/apache/servicecomb/demo/perf/PerfMetricsFilePublisher.java b/demo/perf/src/main/java/org/apache/servicecomb/demo/perf/PerfMetricsFilePublisher.java
index e2ac65a..8a490a0 100644
--- a/demo/perf/src/main/java/org/apache/servicecomb/demo/perf/PerfMetricsFilePublisher.java
+++ b/demo/perf/src/main/java/org/apache/servicecomb/demo/perf/PerfMetricsFilePublisher.java
@@ -54,8 +54,11 @@ public class PerfMetricsFilePublisher {
       String opName = entry.getKey();
       sb.append(String
           .format("  %-16d%-16d%-16.3f%s\n",
-              entry.getValue().getConsumerCall().getTotal(),
-              (long) entry.getValue().getConsumerCall().getTps(),
+              entry.getValue().getConsumerCall()
+                  .getTotalValue(MetricsDimension.DIMENSION_STATUS, MetricsDimension.DIMENSION_STATUS_ALL).getValue(),
+              entry.getValue().getConsumerCall()
+                  .getTpsValue(MetricsDimension.DIMENSION_STATUS, MetricsDimension.DIMENSION_STATUS_ALL).getValue()
+                  .longValue(),
               entry.getValue().getConsumerLatency().getAverage(),
               opName));
     }
@@ -66,8 +69,11 @@ public class PerfMetricsFilePublisher {
       String opName = entry.getKey();
       sb.append(
           String.format("  %-16d%-16d%-16.3f%-16.3f%-16.3f%s\n",
-              entry.getValue().getProducerCall().getTotal(),
-              (long) entry.getValue().getProducerCall().getTps(),
+              entry.getValue().getProducerCall()
+                  .getTotalValue(MetricsDimension.DIMENSION_STATUS, MetricsDimension.DIMENSION_STATUS_ALL).getValue(),
+              entry.getValue().getProducerCall()
+                  .getTpsValue(MetricsDimension.DIMENSION_STATUS, MetricsDimension.DIMENSION_STATUS_ALL).getValue()
+                  .longValue(),
               entry.getValue().getProducerLatency().getAverage(),
               entry.getValue().getLifeTimeInQueue().getAverage(),
               entry.getValue().getExecutionTime().getAverage(),
diff --git a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/MetricsDimension.java b/metrics/metrics-common/src/main/java/io/servicecomb/metrics/common/MetricsDimension.java
similarity index 97%
rename from metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/MetricsDimension.java
rename to metrics/metrics-common/src/main/java/io/servicecomb/metrics/common/MetricsDimension.java
index bf9170f..d8f661f 100644
--- a/metrics/metrics-core/src/main/java/io/servicecomb/metrics/core/MetricsDimension.java
+++ b/metrics/metrics-common/src/main/java/io/servicecomb/metrics/common/MetricsDimension.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package io.servicecomb.metrics.core;
+package io.servicecomb.metrics.common;
 
 import io.servicecomb.foundation.common.exceptions.ServiceCombException;
 
diff --git a/metrics/metrics-common/src/main/java/org/apache/servicecomb/metrics/common/CallMetric.java b/metrics/metrics-common/src/main/java/org/apache/servicecomb/metrics/common/CallMetric.java
index f3e82d5..d313acf 100644
--- a/metrics/metrics-common/src/main/java/org/apache/servicecomb/metrics/common/CallMetric.java
+++ b/metrics/metrics-common/src/main/java/org/apache/servicecomb/metrics/common/CallMetric.java
@@ -31,11 +31,15 @@ public class CallMetric {
 
   private final List<DoubleMetricValue> tpsValues;
 
-  public List<LongMetricValue> getTotalValues() {
+  public String getPrefix() {
+    return prefix;
+  }
+
+  public List<LongMetricValue> getTotalValue() {
     return totalValues;
   }
 
-  public LongMetricValue getTotalValues(String dimensionKey, String dimensionValue) {
+  public LongMetricValue getTotalValue(String dimensionKey, String dimensionValue) {
     for (LongMetricValue value : totalValues) {
       if (value.containDimension(dimensionKey, dimensionValue)) {
         return value;
@@ -71,7 +75,7 @@ public class CallMetric {
 
   public CallMetric merge(CallMetric metric) {
     return new CallMetric(this.prefix,
-        LongMetricValue.merge(metric.getTotalValues(), this.getTotalValues()),
+        LongMetricValue.merge(metric.getTotalValue(), this.getTotalValue()),
         DoubleMetricValue.merge(metric.getTpsValues(), this.getTpsValues()));
   }
 
diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/event/InvocationFinishedEventListener.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/event/InvocationFinishedEventListener.java
index 9e2d687..a802a49 100644
--- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/event/InvocationFinishedEventListener.java
+++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/event/InvocationFinishedEventListener.java
@@ -20,7 +20,7 @@ package io.servicecomb.metrics.core.event;
 import io.servicecomb.core.metrics.InvocationFinishedEvent;
 import io.servicecomb.foundation.common.event.Event;
 import io.servicecomb.foundation.common.event.EventListener;
-import io.servicecomb.metrics.core.MetricsDimension;
+import io.servicecomb.metrics.common.MetricsDimension;
 import io.servicecomb.metrics.core.monitor.ConsumerInvocationMonitor;
 import io.servicecomb.metrics.core.monitor.ProducerInvocationMonitor;
 import io.servicecomb.metrics.core.monitor.RegistryMonitor;
diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/event/InvocationStartedEventListener.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/event/InvocationStartedEventListener.java
index f7516bb..2ea0fee 100644
--- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/event/InvocationStartedEventListener.java
+++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/event/InvocationStartedEventListener.java
@@ -20,7 +20,7 @@ package io.servicecomb.metrics.core.event;
 import io.servicecomb.core.metrics.InvocationStartedEvent;
 import io.servicecomb.foundation.common.event.Event;
 import io.servicecomb.foundation.common.event.EventListener;
-import io.servicecomb.metrics.core.MetricsDimension;
+import io.servicecomb.metrics.common.MetricsDimension;
 import io.servicecomb.metrics.core.monitor.ConsumerInvocationMonitor;
 import io.servicecomb.metrics.core.monitor.ProducerInvocationMonitor;
 import io.servicecomb.metrics.core.monitor.RegistryMonitor;
diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/monitor/CallMonitor.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/monitor/CallMonitor.java
index bd2829f..986592d 100644
--- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/monitor/CallMonitor.java
+++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/monitor/CallMonitor.java
@@ -29,7 +29,7 @@ import com.netflix.servo.monitor.StepCounter;
 import io.servicecomb.metrics.common.CallMetric;
 import io.servicecomb.metrics.common.DoubleMetricValue;
 import io.servicecomb.metrics.common.LongMetricValue;
-import io.servicecomb.metrics.core.MetricsDimension;
+import io.servicecomb.metrics.common.MetricsDimension;
 import io.servicecomb.metrics.core.utils.MonitorUtils;
 
 public class CallMonitor {
diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/monitor/ConsumerInvocationMonitor.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/monitor/ConsumerInvocationMonitor.java
index 4f8f7df..076ecd1 100644
--- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/monitor/ConsumerInvocationMonitor.java
+++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/monitor/ConsumerInvocationMonitor.java
@@ -20,7 +20,7 @@ package io.servicecomb.metrics.core.monitor;
 
 import io.servicecomb.metrics.common.ConsumerInvocationMetric;
 import io.servicecomb.metrics.common.MetricsConst;
-import io.servicecomb.metrics.core.MetricsDimension;
+import io.servicecomb.metrics.common.MetricsDimension;
 
 public class ConsumerInvocationMonitor extends InvocationMonitor {
   private final TimerMonitor consumerLatency;
diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/monitor/ProducerInvocationMonitor.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/monitor/ProducerInvocationMonitor.java
index a5cb7c4..82d426f 100644
--- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/monitor/ProducerInvocationMonitor.java
+++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/monitor/ProducerInvocationMonitor.java
@@ -21,8 +21,8 @@ import com.netflix.servo.monitor.BasicCounter;
 import com.netflix.servo.monitor.MonitorConfig;
 
 import io.servicecomb.metrics.common.MetricsConst;
+import io.servicecomb.metrics.common.MetricsDimension;
 import io.servicecomb.metrics.common.ProducerInvocationMetric;
-import io.servicecomb.metrics.core.MetricsDimension;
 
 public class ProducerInvocationMonitor extends InvocationMonitor {
   private final BasicCounter waitInQueue;
diff --git a/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestEventAndRunner.java b/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestEventAndRunner.java
index fc797cb..c897bf1 100644
--- a/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestEventAndRunner.java
+++ b/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestEventAndRunner.java
@@ -37,6 +37,7 @@ 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.MetricsDimension;
 import io.servicecomb.metrics.common.RegistryMetric;
 import io.servicecomb.metrics.core.event.DefaultEventListenerManager;
 import io.servicecomb.metrics.core.monitor.DefaultSystemMonitor;
@@ -164,11 +165,11 @@ public class TestEventAndRunner {
         .getTpsValue(MetricsDimension.DIMENSION_STATUS, MetricsDimension.DIMENSION_STATUS_FAILED).getValue(), 0);
 
     Assert.assertEquals(4, model.getInstanceMetric().getProducerMetric().getProducerCall()
-        .getTotalValues(MetricsDimension.DIMENSION_STATUS, MetricsDimension.DIMENSION_STATUS_ALL).getValue(), 0);
+        .getTotalValue(MetricsDimension.DIMENSION_STATUS, MetricsDimension.DIMENSION_STATUS_ALL).getValue(), 0);
     Assert.assertEquals(1, model.getInstanceMetric().getProducerMetric().getProducerCall()
-        .getTotalValues(MetricsDimension.DIMENSION_STATUS, MetricsDimension.DIMENSION_STATUS_SUCCESS).getValue(), 0);
+        .getTotalValue(MetricsDimension.DIMENSION_STATUS, MetricsDimension.DIMENSION_STATUS_SUCCESS).getValue(), 0);
     Assert.assertEquals(1, model.getInstanceMetric().getProducerMetric().getProducerCall()
-        .getTotalValues(MetricsDimension.DIMENSION_STATUS, MetricsDimension.DIMENSION_STATUS_FAILED).getValue(), 0);
+        .getTotalValue(MetricsDimension.DIMENSION_STATUS, MetricsDimension.DIMENSION_STATUS_FAILED).getValue(), 0);
 
     Assert.assertEquals(1, model.getInstanceMetric().getConsumerMetric().getConsumerLatency().getCount());
     Assert.assertEquals(300, model.getInstanceMetric().getConsumerMetric().getConsumerLatency().getTotal(),
@@ -188,11 +189,11 @@ public class TestEventAndRunner {
         .getTpsValue(MetricsDimension.DIMENSION_STATUS, MetricsDimension.DIMENSION_STATUS_FAILED).getValue(), 0);
 
     Assert.assertEquals(1, model.getInstanceMetric().getConsumerMetric().getConsumerCall()
-        .getTotalValues(MetricsDimension.DIMENSION_STATUS, MetricsDimension.DIMENSION_STATUS_ALL).getValue(), 0);
+        .getTotalValue(MetricsDimension.DIMENSION_STATUS, MetricsDimension.DIMENSION_STATUS_ALL).getValue(), 0);
     Assert.assertEquals(1, model.getInstanceMetric().getConsumerMetric().getConsumerCall()
-        .getTotalValues(MetricsDimension.DIMENSION_STATUS, MetricsDimension.DIMENSION_STATUS_SUCCESS).getValue(), 0);
+        .getTotalValue(MetricsDimension.DIMENSION_STATUS, MetricsDimension.DIMENSION_STATUS_SUCCESS).getValue(), 0);
     Assert.assertEquals(0, model.getInstanceMetric().getConsumerMetric().getConsumerCall()
-        .getTotalValues(MetricsDimension.DIMENSION_STATUS, MetricsDimension.DIMENSION_STATUS_FAILED).getValue(), 0);
+        .getTotalValue(MetricsDimension.DIMENSION_STATUS, MetricsDimension.DIMENSION_STATUS_FAILED).getValue(), 0);
 
     //check ProducerMetrics
     Assert.assertEquals(0, model.getProducerMetrics().get("fun1").getWaitInQueue());
@@ -222,11 +223,11 @@ public class TestEventAndRunner {
         .getTpsValue(MetricsDimension.DIMENSION_STATUS, MetricsDimension.DIMENSION_STATUS_FAILED).getValue(), 0);
 
     Assert.assertEquals(2, model.getProducerMetrics().get("fun1").getProducerCall()
-        .getTotalValues(MetricsDimension.DIMENSION_STATUS, MetricsDimension.DIMENSION_STATUS_ALL).getValue(), 0);
+        .getTotalValue(MetricsDimension.DIMENSION_STATUS, MetricsDimension.DIMENSION_STATUS_ALL).getValue(), 0);
     Assert.assertEquals(1, model.getProducerMetrics().get("fun1").getProducerCall()
-        .getTotalValues(MetricsDimension.DIMENSION_STATUS, MetricsDimension.DIMENSION_STATUS_SUCCESS).getValue(), 0);
+        .getTotalValue(MetricsDimension.DIMENSION_STATUS, MetricsDimension.DIMENSION_STATUS_SUCCESS).getValue(), 0);
     Assert.assertEquals(1, model.getProducerMetrics().get("fun1").getProducerCall()
-        .getTotalValues(MetricsDimension.DIMENSION_STATUS, MetricsDimension.DIMENSION_STATUS_FAILED).getValue(), 0);
+        .getTotalValue(MetricsDimension.DIMENSION_STATUS, MetricsDimension.DIMENSION_STATUS_FAILED).getValue(), 0);
 
     //fun3
     Assert.assertEquals(0, model.getProducerMetrics().get("fun3").getWaitInQueue());
@@ -256,11 +257,11 @@ public class TestEventAndRunner {
         .getTpsValue(MetricsDimension.DIMENSION_STATUS, MetricsDimension.DIMENSION_STATUS_FAILED).getValue(), 0);
 
     Assert.assertEquals(1, model.getProducerMetrics().get("fun3").getProducerCall()
-        .getTotalValues(MetricsDimension.DIMENSION_STATUS, MetricsDimension.DIMENSION_STATUS_ALL).getValue(), 0);
+        .getTotalValue(MetricsDimension.DIMENSION_STATUS, MetricsDimension.DIMENSION_STATUS_ALL).getValue(), 0);
     Assert.assertEquals(0, model.getProducerMetrics().get("fun3").getProducerCall()
-        .getTotalValues(MetricsDimension.DIMENSION_STATUS, MetricsDimension.DIMENSION_STATUS_SUCCESS).getValue(), 0);
+        .getTotalValue(MetricsDimension.DIMENSION_STATUS, MetricsDimension.DIMENSION_STATUS_SUCCESS).getValue(), 0);
     Assert.assertEquals(0, model.getProducerMetrics().get("fun3").getProducerCall()
-        .getTotalValues(MetricsDimension.DIMENSION_STATUS, MetricsDimension.DIMENSION_STATUS_FAILED).getValue(), 0);
+        .getTotalValue(MetricsDimension.DIMENSION_STATUS, MetricsDimension.DIMENSION_STATUS_FAILED).getValue(), 0);
 
     //check ConsumerMetrics
     //no need
@@ -278,11 +279,11 @@ public class TestEventAndRunner {
         .getTpsValue(MetricsDimension.DIMENSION_STATUS, MetricsDimension.DIMENSION_STATUS_FAILED).getValue(), 0);
 
     Assert.assertEquals(1, model.getConsumerMetrics().get("fun2").getConsumerCall()
-        .getTotalValues(MetricsDimension.DIMENSION_STATUS, MetricsDimension.DIMENSION_STATUS_ALL).getValue(), 0);
+        .getTotalValue(MetricsDimension.DIMENSION_STATUS, MetricsDimension.DIMENSION_STATUS_ALL).getValue(), 0);
     Assert.assertEquals(1, model.getConsumerMetrics().get("fun2").getConsumerCall()
-        .getTotalValues(MetricsDimension.DIMENSION_STATUS, MetricsDimension.DIMENSION_STATUS_SUCCESS).getValue(), 0);
+        .getTotalValue(MetricsDimension.DIMENSION_STATUS, MetricsDimension.DIMENSION_STATUS_SUCCESS).getValue(), 0);
     Assert.assertEquals(0, model.getConsumerMetrics().get("fun2").getConsumerCall()
-        .getTotalValues(MetricsDimension.DIMENSION_STATUS, MetricsDimension.DIMENSION_STATUS_FAILED).getValue(), 0);
+        .getTotalValue(MetricsDimension.DIMENSION_STATUS, MetricsDimension.DIMENSION_STATUS_FAILED).getValue(), 0);
 
     Map<String, Number> metrics = model.toMap();
     Assert.assertEquals(120, metrics.size());
diff --git a/metrics/metrics-integration/metrics-prometheus/src/main/java/org/apache/servicecomb/metrics/prometheus/MetricsCollector.java b/metrics/metrics-integration/metrics-prometheus/src/main/java/org/apache/servicecomb/metrics/prometheus/MetricsCollector.java
index a17310b..bad097b 100644
--- a/metrics/metrics-integration/metrics-prometheus/src/main/java/org/apache/servicecomb/metrics/prometheus/MetricsCollector.java
+++ b/metrics/metrics-integration/metrics-prometheus/src/main/java/org/apache/servicecomb/metrics/prometheus/MetricsCollector.java
@@ -15,23 +15,25 @@
  * limitations under the License.
  */
 
-package org.apache.servicecomb.metrics.prometheus;
+package io.servicecomb.metrics.prometheus;
 
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
-import java.util.Map.Entry;
 import java.util.stream.Collectors;
 
-import org.apache.servicecomb.metrics.common.ConsumerInvocationMetric;
-import org.apache.servicecomb.metrics.common.ProducerInvocationMetric;
-import org.apache.servicecomb.metrics.common.RegistryMetric;
-import org.apache.servicecomb.metrics.core.publish.DataSource;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import io.prometheus.client.Collector;
 import io.prometheus.client.Collector.MetricFamilySamples.Sample;
+import io.servicecomb.metrics.common.CallMetric;
+import io.servicecomb.metrics.common.ConsumerInvocationMetric;
+import io.servicecomb.metrics.common.DoubleMetricValue;
+import io.servicecomb.metrics.common.LongMetricValue;
+import io.servicecomb.metrics.common.ProducerInvocationMetric;
+import io.servicecomb.metrics.common.RegistryMetric;
+import io.servicecomb.metrics.core.publish.DataSource;
 
 @Component
 public class MetricsCollector extends Collector implements Collector.Describable {
@@ -56,24 +58,70 @@ public class MetricsCollector extends Collector implements Collector.Describable
   private List<MetricFamilySamples> load() {
     RegistryMetric registryMetric = dataSource.getRegistryMetric();
     List<MetricFamilySamples> familySamples = new ArrayList<>();
-    familySamples.add(getFamilySamples("Instance Level", registryMetric.getInstanceMetric().toMap()));
-    for (Entry<String, ConsumerInvocationMetric> consumerMetric : registryMetric.getConsumerMetrics().entrySet()) {
-      familySamples
-          .add(getFamilySamples(consumerMetric.getKey() + " Consumer Side", consumerMetric.getValue().toMap()));
+
+    List<Sample> samples = new ArrayList<>();
+    samples.addAll(convertMetricValues(registryMetric.getInstanceMetric().getSystemMetric().toMap()));
+    samples.addAll(convertConsumerMetric(registryMetric.getInstanceMetric().getConsumerMetric()));
+    samples.addAll(convertCallMetric(registryMetric.getInstanceMetric().getConsumerMetric().getConsumerCall()));
+    samples.addAll(convertProducerMetric(registryMetric.getInstanceMetric().getProducerMetric()));
+    samples.addAll(convertCallMetric(registryMetric.getInstanceMetric().getProducerMetric().getProducerCall()));
+    familySamples.add(new MetricFamilySamples("Instance Level", Type.UNTYPED, "Instance Level Metrics", samples));
+
+    if (registryMetric.getConsumerMetrics().size() != 0) {
+      samples = new ArrayList<>();
+      for (ConsumerInvocationMetric metric : registryMetric.getConsumerMetrics().values()) {
+        samples.addAll(convertConsumerMetric(metric));
+        samples.addAll(convertCallMetric(metric.getConsumerCall()));
+      }
+      familySamples.add(new MetricFamilySamples("Consumer Side", Type.UNTYPED, "Consumer Side Metrics", samples));
     }
-    for (Entry<String, ProducerInvocationMetric> producerMetric : registryMetric.getProducerMetrics().entrySet()) {
-      familySamples
-          .add(getFamilySamples(producerMetric.getKey() + " Producer Side", producerMetric.getValue().toMap()));
+
+    if (registryMetric.getProducerMetrics().size() != 0) {
+      samples = new ArrayList<>();
+      for (ProducerInvocationMetric metric : registryMetric.getProducerMetrics().values()) {
+        samples.addAll(convertProducerMetric(metric));
+        samples.addAll(convertCallMetric(metric.getProducerCall()));
+      }
+      familySamples.add(new MetricFamilySamples("Producer Side", Type.UNTYPED, "Producer Side Metrics", samples));
     }
+
     return familySamples;
   }
 
-  private MetricFamilySamples getFamilySamples(String name, Map<String, Number> metrics) {
-    List<Sample> samples = metrics.entrySet()
-        .stream()
-        .map((entry) -> new Sample(entry.getKey().replace(".", "_"),
-            new ArrayList<>(), new ArrayList<>(), entry.getValue().doubleValue()))
-        .collect(Collectors.toList());
-    return new MetricFamilySamples(name, Type.UNTYPED, name + " Metrics", samples);
+  private List<Sample> convertConsumerMetric(ConsumerInvocationMetric metric) {
+    return convertMetricValues(metric.getConsumerLatency().toMap());
+  }
+
+  private List<Sample> convertProducerMetric(ProducerInvocationMetric metric) {
+    List<Sample> samples = new ArrayList<>();
+    samples.addAll(convertMetricValues(metric.getExecutionTime().toMap()));
+    samples.addAll(convertMetricValues(metric.getLifeTimeInQueue().toMap()));
+    samples.addAll(convertMetricValues(metric.getProducerLatency().toMap()));
+    samples.add(new Sample(metric.getPrefix() + ".waitInQueue.count", new ArrayList<>(), new ArrayList<>(),
+        (double) metric.getWaitInQueue()));
+    return samples;
+  }
+
+  private List<Sample> convertMetricValues(Map<String, Number> metrics) {
+    return metrics.entrySet().stream().map((entry) ->
+        new Sample(entry.getKey().replace(".", "_"),
+            new ArrayList<>(), new ArrayList<>(), entry.getValue().doubleValue())).collect(Collectors.toList());
+  }
+
+  private List<Sample> convertCallMetric(CallMetric metric) {
+    List<Sample> samples = new ArrayList<>();
+    String totalName = (metric.getPrefix() + ".total").replace(".", "_");
+    for (LongMetricValue value : metric.getTotalValue()) {
+      samples.add(new Sample(totalName,
+          new ArrayList<>(value.getDimensions().keySet()), new ArrayList<>(value.getDimensions().values()),
+          (double) value.getValue()));
+    }
+    String tpsName = (metric.getPrefix() + ".tps").replace(".", "_");
+    for (DoubleMetricValue value : metric.getTpsValues()) {
+      samples.add(new Sample(tpsName,
+          new ArrayList<>(value.getDimensions().keySet()), new ArrayList<>(value.getDimensions().values()),
+          value.getValue()));
+    }
+    return samples;
   }
 }
diff --git a/samples/metrics-write-file-sample/metrics-write-file/src/test/java/org/apache/servicecomb/samples/mwf/TestWriteFile.java b/samples/metrics-write-file-sample/metrics-write-file/src/test/java/org/apache/servicecomb/samples/mwf/TestWriteFile.java
index 6cf6ab2..d73d30d 100644
--- a/samples/metrics-write-file-sample/metrics-write-file/src/test/java/org/apache/servicecomb/samples/mwf/TestWriteFile.java
+++ b/samples/metrics-write-file-sample/metrics-write-file/src/test/java/org/apache/servicecomb/samples/mwf/TestWriteFile.java
@@ -15,32 +15,35 @@
  * limitations under the License.
  */
 
-package org.apache.servicecomb.samples.mwf;
+package io.servicecomb.samples.mwf;
 
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
-import org.apache.servicecomb.metrics.common.CallMetric;
-import org.apache.servicecomb.metrics.common.ConsumerInvocationMetric;
-import org.apache.servicecomb.metrics.common.RegistryMetric;
-import org.apache.servicecomb.metrics.common.SystemMetric;
-import org.apache.servicecomb.metrics.common.TimerMetric;
-import org.apache.servicecomb.metrics.core.publish.DataSource;
-import org.apache.servicecomb.serviceregistry.Features;
-import org.apache.servicecomb.serviceregistry.RegistryUtils;
-import org.apache.servicecomb.serviceregistry.ServiceRegistry;
-import org.apache.servicecomb.serviceregistry.api.registry.Microservice;
-import org.apache.servicecomb.serviceregistry.api.registry.MicroserviceInstance;
-import org.apache.servicecomb.serviceregistry.cache.InstanceCacheManager;
-import org.apache.servicecomb.serviceregistry.client.ServiceRegistryClient;
-import org.apache.servicecomb.serviceregistry.client.http.MicroserviceInstances;
-import org.apache.servicecomb.serviceregistry.consumer.AppManager;
 import org.junit.Assert;
 import org.junit.Test;
 import org.mockito.Mockito;
 
+import io.servicecomb.metrics.common.CallMetric;
+import io.servicecomb.metrics.common.ConsumerInvocationMetric;
+import io.servicecomb.metrics.common.DoubleMetricValue;
+import io.servicecomb.metrics.common.LongMetricValue;
+import io.servicecomb.metrics.common.RegistryMetric;
+import io.servicecomb.metrics.common.SystemMetric;
+import io.servicecomb.metrics.common.TimerMetric;
+import io.servicecomb.metrics.core.publish.DataSource;
+import io.servicecomb.serviceregistry.Features;
+import io.servicecomb.serviceregistry.RegistryUtils;
+import io.servicecomb.serviceregistry.ServiceRegistry;
+import io.servicecomb.serviceregistry.api.registry.Microservice;
+import io.servicecomb.serviceregistry.api.registry.MicroserviceInstance;
+import io.servicecomb.serviceregistry.cache.InstanceCacheManager;
+import io.servicecomb.serviceregistry.client.ServiceRegistryClient;
+import io.servicecomb.serviceregistry.client.http.MicroserviceInstances;
+import io.servicecomb.serviceregistry.consumer.AppManager;
 import mockit.Expectations;
 
 public class TestWriteFile {
@@ -134,20 +137,22 @@ public class TestWriteFile {
 
     StringBuilder builder = new StringBuilder();
 
-    MetricsFileWriter writer =
-        (loggerName, filePrefix, content) -> builder.append(loggerName).append(filePrefix).append(content);
+    MetricsFileWriter writer = (loggerName, filePrefix, content) ->
+        builder.append(loggerName).append(filePrefix).append(content);
 
     SystemMetric systemMetric = new SystemMetric(50, 10, 1, 2, 3,
         4, 5, 6, 7, 8);
 
     Map<String, ConsumerInvocationMetric> consumerInvocationMetricMap = new HashMap<>();
-    consumerInvocationMetricMap.put("A",
-        new ConsumerInvocationMetric("A", "A",
-            new TimerMetric("A1", 1, 2, 3, 4), new CallMetric("A2", 100, 999.44444)));
-
-    consumerInvocationMetricMap.put("B",
-        new ConsumerInvocationMetric("B", "B",
-            new TimerMetric("B1", 1, 2, 3, 4), new CallMetric("B2", 100, 888.66666)));
+    consumerInvocationMetricMap.put("A", new ConsumerInvocationMetric("A", "A",
+        new TimerMetric("A1", 1, 2, 3, 4),
+        new CallMetric("A2", Arrays.asList(new LongMetricValue("A2", 100L, new HashMap<>())),
+            Arrays.asList(new DoubleMetricValue("A2", 999.44444, new HashMap<>())))));
+
+    consumerInvocationMetricMap.put("B", new ConsumerInvocationMetric("B", "B",
+        new TimerMetric("B1", 1, 2, 3, 4),
+        new CallMetric("B2", Arrays.asList(new LongMetricValue("B2", 100L, new HashMap<>())),
+            Arrays.asList(new DoubleMetricValue("B2", 888.66666, new HashMap<>())))));
 
     RegistryMetric metric = new RegistryMetric(systemMetric, consumerInvocationMetricMap, new HashMap<>());
 

-- 
To stop receiving notification emails like this one, please contact
ningjiang@apache.org.