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/31 08:54:48 UTC

[incubator-servicecomb-java-chassis] 01/03: SCB-147 Delete 0.5.0 metrics in foundation-metrics

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 530082824036be9893fab58cc6522d39bc246c0c
Author: zhengyangyong <ya...@huawei.com>
AuthorDate: Sat Jan 27 09:20:41 2018 +0800

    SCB-147 Delete 0.5.0 metrics in foundation-metrics
    
    Signed-off-by: zhengyangyong <ya...@huawei.com>
---
 .../common/rest/AbstractRestInvocation.java        |  61 +--
 .../common/rest/TestAbstractRestInvocation.java    |  29 +-
 .../org/apache/servicecomb/core/Invocation.java    |  11 -
 .../demo/springmvc/client/SpringmvcClient.java     |  29 --
 .../demo/springmvc/server/CodeFirstSpringmvc.java  |  38 +-
 .../foundation/metrics/MetricsServoRegistry.java   | 576 ---------------------
 .../foundation/metrics/TpsAndLatencyData.java      |  51 --
 .../metrics/output/MetricsFileOutput.java          |  70 ---
 .../output/servo/FileOutputMetricObserver.java     |  56 --
 .../output/servo/MetricsContentConvertor.java      |  28 -
 .../output/servo/MetricsContentFormatter.java      |  24 -
 .../output/servo/MetricsObserverInitializer.java   |  85 ---
 .../output/servo/RollingMetricsFileOutput.java     |  43 --
 .../servo/SimpleMetricsContentConvertor.java       |  70 ---
 .../servo/SimpleMetricsContentFormatter.java       |  97 ----
 .../metrics/performance/MetricsDataMonitor.java    | 240 ---------
 .../performance/MetricsDataMonitorUtil.java        |  57 --
 .../metrics/performance/QueueMetrics.java          |  98 ----
 .../metrics/performance/QueueMetricsData.java      | 215 --------
 ...ileOutputMetricObserverAndContentConvertor.java | 131 -----
 .../metrics/TestMetricsServoRegistry.java          | 220 --------
 .../metrics/TestSimpleMetricsContentFormatter.java |  41 --
 .../performance/TestMetricsDataMonitor.java        | 132 -----
 .../performance/TestMetricsDataMonitorUtil.java    |  61 ---
 .../servicecomb/bizkeeper/BizkeeperHandler.java    |  12 +-
 .../transport/highway/HighwayServerInvoke.java     |  62 +--
 26 files changed, 25 insertions(+), 2512 deletions(-)

diff --git a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/AbstractRestInvocation.java b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/AbstractRestInvocation.java
index c8ce3ca..5e87436 100644
--- a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/AbstractRestInvocation.java
+++ b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/AbstractRestInvocation.java
@@ -41,9 +41,6 @@ import org.apache.servicecomb.core.definition.OperationMeta;
 import org.apache.servicecomb.core.metrics.InvocationStartedEvent;
 import org.apache.servicecomb.foundation.common.utils.EventUtils;
 import org.apache.servicecomb.foundation.common.utils.JsonUtils;
-import org.apache.servicecomb.foundation.metrics.MetricsServoRegistry;
-import org.apache.servicecomb.foundation.metrics.performance.QueueMetrics;
-import org.apache.servicecomb.foundation.metrics.performance.QueueMetricsData;
 import org.apache.servicecomb.foundation.vertx.http.HttpServletRequestEx;
 import org.apache.servicecomb.foundation.vertx.http.HttpServletResponseEx;
 import org.apache.servicecomb.foundation.vertx.stream.BufferOutputStream;
@@ -121,8 +118,6 @@ public abstract class AbstractRestInvocation {
         InvocationType.PRODUCER, System.nanoTime());
     EventUtils.triggerEvent(startedEvent);
 
-    QueueMetrics metricsData = initMetrics(operationMeta);
-
     operationMeta.getExecutor().execute(() -> {
       synchronized (this.requestEx) {
         try {
@@ -135,7 +130,7 @@ public abstract class AbstractRestInvocation {
             return;
           }
 
-          runOnExecutor(metricsData, startedEvent);
+          runOnExecutor(startedEvent);
         } catch (Throwable e) {
           LOGGER.error("rest server onRequest error", e);
           sendFailResponse(e);
@@ -144,13 +139,10 @@ public abstract class AbstractRestInvocation {
     });
   }
 
-  protected void runOnExecutor(QueueMetrics metricsData, InvocationStartedEvent startedEvent) {
+  protected void runOnExecutor(InvocationStartedEvent startedEvent) {
     Object[] args = RestCodec.restToArgs(requestEx, restOperationMeta);
     createInvocation(args);
 
-    this.invocation.setMetricsData(metricsData);
-    updateMetrics();
-
     //立刻设置开始时间,否则Finished时无法计算TotalTime
     invocation.setStartTime(startedEvent.getStartedTime());
     invocation.triggerStartProcessingEvent();
@@ -198,7 +190,6 @@ public abstract class AbstractRestInvocation {
       sendResponseQuietly(resp);
 
       invocation.triggerFinishedEvent(resp.getStatusCode(), resp.isSuccessed());
-      endMetrics();
     });
   }
 
@@ -253,52 +244,4 @@ public abstract class AbstractRestInvocation {
       responseEx.flushBuffer();
     }
   }
-
-  /**
-   * Init the metrics. Note down the queue count and start time.
-   * @param operationMeta Operation data
-   * @return QueueMetrics
-   */
-  private QueueMetrics initMetrics(OperationMeta operationMeta) {
-    QueueMetrics metricsData = new QueueMetrics();
-    metricsData.setQueueStartTime(System.currentTimeMillis());
-    metricsData.setOperQualifiedName(operationMeta.getMicroserviceQualifiedName());
-    QueueMetricsData reqQueue = MetricsServoRegistry.getOrCreateLocalMetrics()
-        .getOrCreateQueueMetrics(operationMeta.getMicroserviceQualifiedName());
-    reqQueue.incrementCountInQueue();
-    return metricsData;
-  }
-
-  /**
-   * Update the queue metrics.
-   */
-  private void updateMetrics() {
-    QueueMetrics metricsData = (QueueMetrics) this.invocation.getMetricsData();
-    if (null != metricsData) {
-      metricsData.setQueueEndTime(System.currentTimeMillis());
-      QueueMetricsData reqQueue = MetricsServoRegistry.getOrCreateLocalMetrics()
-          .getOrCreateQueueMetrics(restOperationMeta.getOperationMeta().getMicroserviceQualifiedName());
-      reqQueue.incrementTotalCount();
-      Long timeInQueue = metricsData.getQueueEndTime() - metricsData.getQueueStartTime();
-      reqQueue.setTotalTime(reqQueue.getTotalTime() + timeInQueue);
-      reqQueue.setMinLifeTimeInQueue(timeInQueue);
-      reqQueue.setMaxLifeTimeInQueue(timeInQueue);
-      reqQueue.decrementCountInQueue();
-    }
-  }
-
-  /**
-   * Prepare the end time of queue metrics.
-   */
-  private void endMetrics() {
-    QueueMetrics metricsData = (QueueMetrics) this.invocation.getMetricsData();
-    if (null != metricsData) {
-      metricsData.setEndOperTime(System.currentTimeMillis());
-      QueueMetricsData reqQueue = MetricsServoRegistry.getOrCreateLocalMetrics()
-          .getOrCreateQueueMetrics(restOperationMeta.getOperationMeta().getMicroserviceQualifiedName());
-      reqQueue.incrementTotalServExecutionCount();
-      reqQueue.setTotalServExecutionTime(
-          reqQueue.getTotalServExecutionTime() + (metricsData.getEndOperTime() - metricsData.getQueueEndTime()));
-    }
-  }
 }
diff --git a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/TestAbstractRestInvocation.java b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/TestAbstractRestInvocation.java
index 58d6c2e..16d81fb 100644
--- a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/TestAbstractRestInvocation.java
+++ b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/TestAbstractRestInvocation.java
@@ -44,7 +44,6 @@ import org.apache.servicecomb.core.executor.ReactiveExecutor;
 import org.apache.servicecomb.core.metrics.InvocationStartedEvent;
 import org.apache.servicecomb.core.provider.consumer.ReferenceConfig;
 import org.apache.servicecomb.foundation.common.utils.JsonUtils;
-import org.apache.servicecomb.foundation.metrics.performance.QueueMetrics;
 import org.apache.servicecomb.foundation.vertx.http.AbstractHttpServletRequest;
 import org.apache.servicecomb.foundation.vertx.http.HttpServletRequestEx;
 import org.apache.servicecomb.foundation.vertx.http.HttpServletResponseEx;
@@ -240,7 +239,7 @@ public class TestAbstractRestInvocation {
     Holder<Response> result = new Holder<>();
     restInvocation = new AbstractRestInvocationForTest() {
       @Override
-      protected void doInvoke() throws Throwable {
+      protected void doInvoke() {
         result.value = Response.ok("not run to here");
       }
 
@@ -269,7 +268,7 @@ public class TestAbstractRestInvocation {
     Holder<Boolean> result = new Holder<>();
     restInvocation = new AbstractRestInvocationForTest() {
       @Override
-      protected void doInvoke() throws Throwable {
+      protected void doInvoke() {
         result.value = true;
       }
     };
@@ -299,7 +298,7 @@ public class TestAbstractRestInvocation {
       }
 
       @Override
-      protected void doInvoke() throws Throwable {
+      protected void doInvoke() {
 
       }
     };
@@ -322,7 +321,7 @@ public class TestAbstractRestInvocation {
 
     restInvocation = new AbstractRestInvocationForTest() {
       @Override
-      protected void doInvoke() throws Throwable {
+      protected void doInvoke() {
       }
 
       @Override
@@ -349,7 +348,7 @@ public class TestAbstractRestInvocation {
     Holder<Response> result = new Holder<>();
     restInvocation = new AbstractRestInvocationForTest() {
       @Override
-      protected void doInvoke() throws Throwable {
+      protected void doInvoke() {
       }
 
       @Override
@@ -371,11 +370,11 @@ public class TestAbstractRestInvocation {
     Holder<Response> result = new Holder<>();
     restInvocation = new AbstractRestInvocationForTest() {
       @Override
-      protected void doInvoke() throws Throwable {
+      protected void doInvoke() {
       }
 
       @Override
-      protected void sendResponse(Response response) throws Exception {
+      protected void sendResponse(Response response) {
         result.value = response;
       }
     };
@@ -390,11 +389,11 @@ public class TestAbstractRestInvocation {
   public void sendResponseQuietlyException(@Mocked Response response) {
     restInvocation = new AbstractRestInvocationForTest() {
       @Override
-      protected void doInvoke() throws Throwable {
+      protected void doInvoke() {
       }
 
       @Override
-      protected void sendResponse(Response response) throws Exception {
+      protected void sendResponse(Response response) {
         throw new Error("");
       }
     };
@@ -634,7 +633,7 @@ public class TestAbstractRestInvocation {
     Error error = new Error("run on executor");
     restInvocation = new AbstractRestInvocationForTest() {
       @Override
-      protected void runOnExecutor(QueueMetrics metricsData, InvocationStartedEvent startedEvent) {
+      protected void runOnExecutor(InvocationStartedEvent startedEvent) {
         throw error;
       }
 
@@ -671,7 +670,7 @@ public class TestAbstractRestInvocation {
 
     restInvocation = new AbstractRestInvocationForTest() {
       @Override
-      protected void runOnExecutor(QueueMetrics metricsData, InvocationStartedEvent startedEvent) {
+      protected void runOnExecutor(InvocationStartedEvent startedEvent) {
         throw new Error("run on executor");
       }
 
@@ -707,7 +706,7 @@ public class TestAbstractRestInvocation {
     Holder<Boolean> result = new Holder<>();
     restInvocation = new AbstractRestInvocationForTest() {
       @Override
-      protected void runOnExecutor(QueueMetrics metricsData, InvocationStartedEvent startedEvent) {
+      protected void runOnExecutor(InvocationStartedEvent startedEvent) {
         result.value = true;
       }
     };
@@ -738,7 +737,7 @@ public class TestAbstractRestInvocation {
     restInvocation.requestEx = requestEx;
     restInvocation.restOperationMeta = restOperation;
 
-    restInvocation.runOnExecutor(null, new InvocationStartedEvent("", InvocationType.PRODUCER, System.nanoTime()));
+    restInvocation.runOnExecutor(new InvocationStartedEvent("", InvocationType.PRODUCER, System.nanoTime()));
     Assert.assertTrue(result.value);
     Assert.assertSame(invocation, restInvocation.invocation);
   }
@@ -749,7 +748,7 @@ public class TestAbstractRestInvocation {
     Response response = Response.ok("ok");
     Handler handler = new Handler() {
       @Override
-      public void handle(Invocation invocation, AsyncResponse asyncResp) throws Exception {
+      public void handle(Invocation invocation, AsyncResponse asyncResp) {
         asyncResp.complete(response);
       }
     };
diff --git a/core/src/main/java/org/apache/servicecomb/core/Invocation.java b/core/src/main/java/org/apache/servicecomb/core/Invocation.java
index 81f25f8..96a84b9 100644
--- a/core/src/main/java/org/apache/servicecomb/core/Invocation.java
+++ b/core/src/main/java/org/apache/servicecomb/core/Invocation.java
@@ -53,17 +53,6 @@ public class Invocation extends SwaggerInvocation {
 
   private int handlerIndex;
 
-  //start,end of queue and operation time after queue for operation level metrics.
-  private Object metricsData;
-
-  public Object getMetricsData() {
-    return metricsData;
-  }
-
-  public void setMetricsData(Object metricsData) {
-    this.metricsData = metricsData;
-  }
-
 
   // 应答的处理器
   // 同步模式:避免应答在网络线程中处理解码等等业务级逻辑
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 08eec9b..71f885f 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
@@ -89,35 +89,6 @@ 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);
-      @SuppressWarnings("unchecked")
-      Map<String, String> resultMap = JsonUtils.OBJ_MAPPER.readValue(content, HashMap.class);
-
-      TestMgr.check(true, resultMap.get("CPU and Memory").contains("heapUsed="));
-
-      String[] requestProviders = resultMap.get("totalRequestProvider OPERATIONAL_LEVEL")
-          .replace("{", "")
-          .replace("}", "")
-          .split(",");
-      Map<String, Integer> requests = new HashMap<>();
-      for (String requestProvider : requestProviders) {
-        String[] requestKeyAndValues = requestProvider.split("=");
-        requests.put(requestKeyAndValues[0], Integer.parseInt(requestKeyAndValues[1]));
-      }
-
-      for (Entry<String, Integer> request : requests.entrySet()) {
-        TestMgr.check(true, request.getValue() > 0);
-      }
-
-      TestMgr.check(true, resultMap.get("RequestQueueRelated").contains("springmvc.codeFirst.saySomething"));
-      TestMgr.check(true, resultMap.get("RequestQueueRelated").contains("springmvc.controller.sayHi"));
-    } catch (Exception e) {
-      TestMgr.check("true", "false");
-    }
-
     //0.5.0 later version metrics integration test
     try {
       RegistryMetric metric = metricsPublisher.metrics();
diff --git a/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/CodeFirstSpringmvc.java b/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/CodeFirstSpringmvc.java
index 1251f61..103e37e 100644
--- a/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/CodeFirstSpringmvc.java
+++ b/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/CodeFirstSpringmvc.java
@@ -20,7 +20,6 @@ package org.apache.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;
 
@@ -39,8 +38,6 @@ import org.apache.servicecomb.demo.compute.Person;
 import org.apache.servicecomb.demo.ignore.InputModelForTestIgnore;
 import org.apache.servicecomb.demo.ignore.OutputModelForTestIgnore;
 import org.apache.servicecomb.demo.server.User;
-import org.apache.servicecomb.foundation.common.utils.JsonUtils;
-import org.apache.servicecomb.foundation.metrics.MetricsServoRegistry;
 import org.apache.servicecomb.provider.rest.common.RestSchema;
 import org.apache.servicecomb.swagger.extend.annotations.RawJsonRequestBody;
 import org.apache.servicecomb.swagger.extend.annotations.ResponseHeaders;
@@ -49,7 +46,6 @@ import org.apache.servicecomb.swagger.invocation.context.ContextUtils;
 import org.apache.servicecomb.swagger.invocation.context.InvocationContext;
 import org.apache.servicecomb.swagger.invocation.exception.InvocationException;
 import org.apache.servicecomb.swagger.invocation.response.Headers;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.MediaType;
@@ -72,9 +68,6 @@ import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.client.RestTemplate;
 import org.springframework.web.multipart.MultipartFile;
 
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.netflix.servo.monitor.Monitor;
-
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
@@ -87,20 +80,12 @@ import io.vertx.core.json.JsonObject;
 @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);
       String content2 = IOUtils.toString(is2);
       return String.format("%s:%s:%s\n"
-          + "%s:%s:%s",
+              + "%s:%s:%s",
           file1.getOriginalFilename(),
           file1.getContentType(),
           content1,
@@ -135,7 +120,7 @@ public class CodeFirstSpringmvc {
     InvocationContext c2 = ContextUtils.getInvocationContext();
     headers.add("h2", "h2v " + c2.getContext().get(Const.SRC_MICROSERVICE).toString());
 
-    return new ResponseEntity<Date>(date, headers, HttpStatus.ACCEPTED);
+    return new ResponseEntity<>(date, headers, HttpStatus.ACCEPTED);
   }
 
   @ResponseHeaders({@ResponseHeader(name = "h1", response = String.class),
@@ -148,7 +133,7 @@ public class CodeFirstSpringmvc {
     InvocationContext c2 = ContextUtils.getInvocationContext();
     headers.add("h2", "h2v " + c2.getContext().get(Const.SRC_MICROSERVICE).toString());
 
-    return new ResponseEntity<Date>(date, headers, HttpStatus.ACCEPTED);
+    return new ResponseEntity<>(date, headers, HttpStatus.ACCEPTED);
   }
 
   @ApiResponse(code = 200, response = User.class, message = "")
@@ -313,7 +298,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")
@@ -343,21 +328,6 @@ 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();
-    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) {
-      throw new InvocationException(500, "500", "JsonProcessingException", e);
-    }
-  }
-
   //Only for Prometheus integration test
   @RequestMapping(path = "/prometheusForTest", method = RequestMethod.GET)
   public String prometheusForTest() {
diff --git a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/MetricsServoRegistry.java b/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/MetricsServoRegistry.java
deleted file mode 100644
index 49b40c5..0000000
--- a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/MetricsServoRegistry.java
+++ /dev/null
@@ -1,576 +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 org.apache.servicecomb.foundation.metrics;
-
-import java.lang.management.ManagementFactory;
-import java.lang.management.MemoryMXBean;
-import java.lang.management.MemoryUsage;
-import java.lang.management.OperatingSystemMXBean;
-import java.lang.management.ThreadMXBean;
-import java.math.BigDecimal;
-import java.math.RoundingMode;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Vector;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.stream.Collectors;
-
-import org.apache.servicecomb.foundation.metrics.performance.MetricsDataMonitor;
-import org.apache.servicecomb.foundation.metrics.performance.QueueMetricsData;
-import org.springframework.beans.factory.InitializingBean;
-
-import com.netflix.config.DynamicPropertyFactory;
-import com.netflix.hystrix.HystrixCommandMetrics;
-import com.netflix.hystrix.HystrixEventType;
-import com.netflix.servo.DefaultMonitorRegistry;
-import com.netflix.servo.annotations.DataSourceType;
-import com.netflix.servo.monitor.AbstractMonitor;
-import com.netflix.servo.monitor.BasicCompositeMonitor;
-import com.netflix.servo.monitor.Gauge;
-import com.netflix.servo.monitor.Informational;
-import com.netflix.servo.monitor.Monitor;
-import com.netflix.servo.monitor.MonitorConfig;
-
-import rx.functions.Func0;
-
-/**
- * Implementation of metrics preparation and servo registry.
- */
-public class MetricsServoRegistry implements InitializingBean {
-
-  public static final String METRICS_ROUND_PLACES = "servicecomb.metrics.round_places";
-
-  protected static ThreadLocal<MetricsDataMonitor> LOCAL_METRICS_MAP = new ThreadLocal<>();
-
-  private MetricsDataMonitor localMetrics = new MetricsDataMonitor();
-
-  protected static Vector<MetricsDataMonitor> metricsList = new Vector<>();
-
-  private final int doubleRoundPlaces;
-
-  private final String doubleStringFormatter;
-
-  public MetricsServoRegistry() {
-    doubleRoundPlaces = DynamicPropertyFactory.getInstance().getIntProperty(METRICS_ROUND_PLACES, 1).get();
-    doubleStringFormatter = "%." + String.valueOf(doubleRoundPlaces) + "f";
-  }
-
-  /*
-   * Added getter for unit test of local metrics.
-   *
-   * @return Local metric reference
-   */
-  public MetricsDataMonitor getLocalMetrics() {
-    return localMetrics;
-  }
-
-
-  /**
-   * Get or create local metrics.
-   * @return MetricsDataMonitor
-   */
-  public static MetricsDataMonitor getOrCreateLocalMetrics() {
-    MetricsDataMonitor metricsDataMonitor = LOCAL_METRICS_MAP.get();
-    if (metricsDataMonitor == null) {
-      metricsDataMonitor = new MetricsDataMonitor();
-      LOCAL_METRICS_MAP.set(metricsDataMonitor);
-      metricsList.add(metricsDataMonitor);
-    }
-    return metricsDataMonitor;
-  }
-
-  /**
-   * Get the initial metrics and register with servo.
-   */
-  public void initMetricsPublishing() {
-    /* list of monitors */
-    List<Monitor<?>> monitors = getMetricsMonitors();
-    MonitorConfig commandMetricsConfig = MonitorConfig.builder("metrics").build();
-    BasicCompositeMonitor commandMetricsMonitor = new BasicCompositeMonitor(commandMetricsConfig, monitors);
-    DefaultMonitorRegistry.getInstance().register(commandMetricsMonitor);
-  }
-
-  @Override
-  public void afterPropertiesSet() throws Exception {
-    initMetricsPublishing();
-  }
-
-  /**
-   * Get instance level total requests by comparing the last saved data.
-   */
-  protected final Func0<Number> getTotalReqProvider = new Func0<Number>() {
-    @Override
-    public Number call() {
-      Long totalReqProvider = 0L;
-      for (MetricsDataMonitor metricsDataMonitor : metricsList) {
-        totalReqProvider += metricsDataMonitor.getTotalReqProvider();
-      }
-      Long metricValue = totalReqProvider - localMetrics.getTotalReqProvider();
-      localMetrics.setTotalReqProvider(totalReqProvider);
-      return metricValue;
-    }
-  };
-
-  /**
-   * Get instance level total failed requests by comparing the last saved data.
-   */
-  protected final Func0<Number> getTotalFailedReqProvider = new Func0<Number>() {
-    @Override
-    public Number call() {
-      Long totalFailedReqProvider = 0L;
-      for (MetricsDataMonitor metricsDataMonitor : metricsList) {
-        totalFailedReqProvider += metricsDataMonitor.getTotalFailReqProvider();
-      }
-      Long metricValue = totalFailedReqProvider - localMetrics.getTotalFailReqProvider();
-      localMetrics.setTotalFailReqProvider(totalFailedReqProvider);
-      return metricValue;
-    }
-  };
-
-  /**
-   * Get instance level total failed requests by comparing the last saved data.
-   */
-  protected final Func0<Number> getTotalReqConsumer = new Func0<Number>() {
-    @Override
-    public Number call() {
-      Long totalReqConsumer = 0L;
-      for (MetricsDataMonitor metricsDataMonitor : metricsList) {
-        totalReqConsumer += metricsDataMonitor.getTotalReqConsumer();
-      }
-      Long metricValue = totalReqConsumer - localMetrics.getTotalReqConsumer();
-      localMetrics.setTotalReqConsumer(totalReqConsumer);
-      return metricValue;
-    }
-  };
-
-  /**
-   * Get instance level total failed requests by comparing the last saved data.
-   */
-  protected final Func0<Number> getFailedTotalReqConsumer = new Func0<Number>() {
-    @Override
-    public Number call() {
-      Long totalFailedReqConsumer = 0L;
-      for (MetricsDataMonitor metricsDataMonitor : metricsList) {
-        totalFailedReqConsumer += metricsDataMonitor.getTotalFailReqConsumer();
-      }
-      Long metricValue = totalFailedReqConsumer - localMetrics.getTotalFailReqConsumer();
-      localMetrics.setTotalFailReqConsumer(totalFailedReqConsumer);
-      return metricValue;
-    }
-  };
-
-  /**
-   * Get operational level total request and total failed requests by comparing the
-   * last saved data.
-   */
-  protected final Func0<String> getTotalReqProdOperLevel = new Func0<String>() {
-    @Override
-    public String call() {
-      Map<String, Long> totalMap = new HashMap<>();
-      Map<String, Long> oldMap = localMetrics.operMetricsTotalReq;
-      Map<String, Long> metricMap = new HashMap<>();
-      for (MetricsDataMonitor metricsDataMonitor : metricsList) {
-        Collection<String> keySet = metricsDataMonitor.operMetricsTotalReq.keySet();
-        for (String key : keySet) {
-          totalMap.merge(key, metricsDataMonitor.getOperMetTotalReq(key), (a, b) -> b + a);
-        }
-      }
-      Collection<String> keySet = totalMap.keySet();
-      for (String key : keySet) {
-        if (oldMap.containsKey(key)) {
-          metricMap.put(key, totalMap.get(key) - oldMap.get(key));
-        } else {
-          metricMap.put(key, totalMap.get(key));
-        }
-      }
-      localMetrics.operMetricsTotalReq.putAll(totalMap);
-      return metricMap.toString();
-    }
-  };
-
-  /**
-   * Get operational level total request and total failed requets by comparing the
-   * last saved data.
-   */
-  protected final Func0<String> getTotalReqFailProdOperLevel = new Func0<String>() {
-    @Override
-    public String call() {
-      Map<String, Long> totalMap = new HashMap<>();
-      Map<String, Long> oldMap = localMetrics.operMetricsTotalFailReq;
-      Map<String, Long> metricMap = new HashMap<>();
-      for (MetricsDataMonitor metricsDataMonitor : metricsList) {
-        Collection<String> keySet = metricsDataMonitor.operMetricsTotalFailReq.keySet();
-        for (String key : keySet) {
-          totalMap.merge(key, metricsDataMonitor.getOperMetTotalFailReq(key), (a, b) -> b + a);
-        }
-      }
-      Collection<String> keySet = totalMap.keySet();
-      for (String key : keySet) {
-        if (oldMap.containsKey(key)) {
-          metricMap.put(key, totalMap.get(key) - oldMap.get(key));
-        } else {
-          metricMap.put(key, totalMap.get(key));
-        }
-      }
-      localMetrics.operMetricsTotalFailReq.putAll(totalMap);
-      return metricMap.toString();
-    }
-  };
-
-  /**
-   * Get operational level/instance level queue related metrics by comparing the
-   * last saved data.
-   */
-  protected final Func0<String> getQueueMetrics = new Func0<String>() {
-    @Override
-    public String call() {
-      Map<String, QueueMetricsData> totalMap = new HashMap<>();
-
-      for (MetricsDataMonitor metricsDataMonitor : metricsList) {
-        Collection<String> keySet = metricsDataMonitor.getQueueMetrics().keySet();
-        for (String key : keySet) {
-          QueueMetricsData value = totalMap.get(key);
-          if (null == value) {
-            totalMap.put(key, metricsDataMonitor.getQueueMetrics().get(key));
-          } else {
-            QueueMetricsData newValue = metricsDataMonitor.getQueueMetrics().get(key);
-            QueueMetricsData totalValue = new QueueMetricsData();
-            totalValue.setCountInQueue(newValue.getCountInQueue() + value.getCountInQueue());
-            totalValue.setTotalTime(newValue.getTotalTime() + value.getTotalTime());
-            totalValue.setTotalCount(newValue.getTotalCount() + value.getTotalCount());
-            totalValue
-                .setTotalServExecutionTime(newValue.getTotalServExecutionTime() + value.getTotalServExecutionTime());
-            totalValue
-                .setTotalServExecutionCount(newValue.getTotalServExecutionCount() + value.getTotalServExecutionCount());
-            if ((value.getMinLifeTimeInQueue() <= 0)
-                || (newValue.getMinLifeTimeInQueue() < value.getMinLifeTimeInQueue())) {
-              totalValue.setMinLifeTimeInQueue(newValue.getMinLifeTimeInQueue());
-            }
-            newValue.resetMinLifeTimeInQueue();
-            if ((value.getMaxLifeTimeInQueue() <= 0)
-                || (newValue.getMaxLifeTimeInQueue() > value.getMaxLifeTimeInQueue())) {
-              totalValue.setMaxLifeTimeInQueue(newValue.getMaxLifeTimeInQueue());
-            }
-            newValue.resetMaxLifeTimeInQueue();
-            totalMap.put(key, totalValue);
-          }
-        }
-      }
-
-      Map<String, QueueMetricsData> oldMap = localMetrics.getQueueMetrics();
-      Map<String, QueueMetricsData> metricMap = new HashMap<>();
-      Map<String, String> result = new HashMap<>();
-      Map<String, String> resultInstancePublishMap = new HashMap<>();
-
-      QueueMetricsData totalValueInstance = new QueueMetricsData();
-
-      Collection<String> keySet = totalMap.keySet();
-      Map<String, String> resultMap;
-
-      for (String key : keySet) {
-        resultMap = new HashMap<>();
-        if (oldMap.containsKey(key)) {
-          QueueMetricsData newValue = new QueueMetricsData();
-          QueueMetricsData totalValue = totalMap.get(key);
-          QueueMetricsData oldValue = oldMap.get(key);
-          newValue.setCountInQueue(totalValue.getCountInQueue());
-          newValue.setTotalTime(totalValue.getTotalTime() - oldValue.getTotalTime());
-          newValue.setTotalCount(totalValue.getTotalCount() - oldValue.getTotalCount());
-          newValue
-              .setTotalServExecutionTime(totalValue.getTotalServExecutionTime() - oldValue.getTotalServExecutionTime());
-          newValue.setTotalServExecutionCount(
-              totalValue.getTotalServExecutionCount() - oldValue.getTotalServExecutionCount());
-          newValue.setMinLifeTimeInQueue(totalValue.getMinLifeTimeInQueue());
-          newValue.setMaxLifeTimeInQueue(totalValue.getMaxLifeTimeInQueue());
-          metricMap.put(key, newValue);
-        } else {
-          metricMap.put(key, totalMap.get(key));
-        }
-
-        resultMap.put("countInQueue", metricMap.get(key).getCountInQueue().toString());
-
-        long count = metricMap.get(key).getTotalCount();
-        double avgTimeInQueue = 0;
-        if (count > 0) {
-          avgTimeInQueue = (double) metricMap.get(key).getTotalTime() / (double) count;
-        }
-        resultMap.put("AverageTimeInQueue", String.valueOf(avgTimeInQueue));
-        long countService = metricMap.get(key).getTotalServExecutionCount();
-        double avgServiceTimeInQueue = 0;
-        if (countService > 0) {
-          avgServiceTimeInQueue = (double) metricMap.get(key).getTotalServExecutionTime() / (double) countService;
-        }
-        resultMap.put("AverageServiceExecutionTime", String.valueOf(avgServiceTimeInQueue));
-        resultMap.put("MinLifeTimeInQueue", metricMap.get(key).getMinLifeTimeInQueue().toString());
-        resultMap.put("MaxLifeTimeInQueue", metricMap.get(key).getMaxLifeTimeInQueue().toString());
-
-        result.put(key, resultMap.toString());
-
-        //get the all values for instance level.
-        totalValueInstance.setCountInQueue(metricMap.get(key).getCountInQueue());
-        totalValueInstance.setTotalTime(totalValueInstance.getTotalTime() + metricMap.get(key).getTotalTime());
-        totalValueInstance.setTotalCount(totalValueInstance.getTotalCount() + metricMap.get(key).getTotalCount());
-        totalValueInstance
-            .setTotalServExecutionTime(
-                totalValueInstance.getTotalServExecutionTime() + metricMap.get(key).getTotalServExecutionTime());
-        totalValueInstance
-            .setTotalServExecutionCount(
-                totalValueInstance.getTotalServExecutionCount() + metricMap.get(key).getTotalServExecutionCount());
-
-        if (totalValueInstance.getMinLifeTimeInQueue() <= 0
-            || metricMap.get(key).getMinLifeTimeInQueue() < totalValueInstance.getMinLifeTimeInQueue()) {
-          totalValueInstance.setMinLifeTimeInQueue(metricMap.get(key).getMinLifeTimeInQueue());
-        }
-        if (totalValueInstance.getMaxLifeTimeInQueue() <= 0
-            || totalMap.get(key).getMaxLifeTimeInQueue() > totalValueInstance.getMaxLifeTimeInQueue()) {
-          totalValueInstance.setMaxLifeTimeInQueue(metricMap.get(key).getMaxLifeTimeInQueue());
-        }
-
-        localMetrics.setQueueMetrics(new ConcurrentHashMap<>(totalMap));
-      }
-
-      //prepare the result map for instance level.
-      resultInstancePublishMap.put("countInQueue", totalValueInstance.getCountInQueue().toString());
-      long countInst = totalValueInstance.getTotalCount();
-      double avgTimeInQueueIns = 0;
-      if (countInst > 0) {
-        avgTimeInQueueIns = (double) totalValueInstance.getTotalTime() / (double) countInst;
-      }
-      resultInstancePublishMap.put("averageTimeInQueue",
-          String.format(
-              doubleStringFormatter,
-              round(avgTimeInQueueIns, doubleRoundPlaces)));
-      long countServiceInst = totalValueInstance.getTotalServExecutionCount();
-      double avgServiceTimeInQueueInst = 0;
-      if (countServiceInst > 0) {
-        avgServiceTimeInQueueInst = (double) totalValueInstance.getTotalServExecutionTime() / (double) countServiceInst;
-      }
-      resultInstancePublishMap.put("averageServiceExecutionTime",
-          String.format(
-              doubleStringFormatter,
-              round(avgServiceTimeInQueueInst, doubleRoundPlaces)));
-      resultInstancePublishMap.put("minLifeTimeInQueue", totalValueInstance.getMinLifeTimeInQueue().toString());
-      resultInstancePublishMap.put("maxLifeTimeInQueue", totalValueInstance.getMaxLifeTimeInQueue().toString());
-      result.put("InstanceLevel", resultInstancePublishMap.toString());
-
-      return result.toString();
-    }
-  };
-
-  /**
-   * Get CPU and memory information metrics.
-   */
-  protected final Func0<String> getCpuAndMemory = new Func0<String>() {
-    @Override
-    public String call() {
-      Map<String, String> memoryMap = new HashMap<>();
-      OperatingSystemMXBean osMxBean = ManagementFactory.getOperatingSystemMXBean();
-      double cpu = osMxBean.getSystemLoadAverage();
-      memoryMap.put("cpuLoad", String.format(doubleStringFormatter, round(cpu, doubleRoundPlaces)));
-
-      ThreadMXBean threadmxBean = ManagementFactory.getThreadMXBean();
-      int threadCount = threadmxBean.getThreadCount();
-      memoryMap.put("cpuRunningThreads", String.valueOf(threadCount));
-
-      MemoryMXBean memBean = ManagementFactory.getMemoryMXBean();
-      MemoryUsage memHeapUsage = memBean.getHeapMemoryUsage();
-      MemoryUsage nonHeapUsage = memBean.getNonHeapMemoryUsage();
-      memoryMap.put("heapInit", String.valueOf(memHeapUsage.getInit()));
-      memoryMap.put("heapMax", String.valueOf(memHeapUsage.getMax()));
-      memoryMap.put("heapCommit", String.valueOf(memHeapUsage.getCommitted()));
-      memoryMap.put("heapUsed", String.valueOf(memHeapUsage.getUsed()));
-      memoryMap.put("nonHeapInit", String.valueOf(nonHeapUsage.getInit()));
-      memoryMap.put("nonHeapMax", String.valueOf(nonHeapUsage.getMax()));
-      memoryMap.put("nonHeapCommit", String.valueOf(nonHeapUsage.getCommitted()));
-      memoryMap.put("nonHeapUsed", String.valueOf(nonHeapUsage.getUsed()));
-      return memoryMap.toString();
-    }
-  };
-
-  /**
-   * Get TPS and latency for operational and instance level from hystrix.
-   */
-  protected final Func0<String> getTpsAndLatency = new Func0<String>() {
-    @Override
-    public String call() {
-      List<TpsAndLatencyData> tpsAndLatencyData = HystrixCommandMetrics.getInstances()
-          .stream()
-          .map(instance -> new TpsAndLatencyData(instance.getRollingCount(HystrixEventType.SUCCESS),
-              instance.getRollingCount(HystrixEventType.FAILURE), instance.getExecutionTimeMean(),
-              instance.getProperties().metricsRollingStatisticalWindowInMilliseconds().get()))
-          .collect(Collectors.toList());
-      return calculateTpsAndLatency(tpsAndLatencyData);
-    }
-  };
-
-  protected String calculateTpsAndLatency(List<TpsAndLatencyData> tpsAndLatencyData) {
-    Map<String, String> tpsAndLatencyMap = new HashMap<>();
-    double insTotalTps = 0;
-    double insTotalLatency = 0;
-    long cumulativeTotalCount = 0;
-    for (TpsAndLatencyData data : tpsAndLatencyData) {
-      long totalCallCount = data.getSuccessCount() + data.getFailureCount();
-      cumulativeTotalCount += totalCallCount;
-      double windowTime =
-          (double) data.getWindowInMilliseconds() / (double) 1000;
-      double qpsVal = (double) (totalCallCount) / windowTime;
-      insTotalTps += qpsVal;
-      insTotalLatency += data.getOperationLatency() * totalCallCount;
-    }
-
-    double instanceLatency = insTotalLatency / (double) cumulativeTotalCount;
-    tpsAndLatencyMap.put("tps", String.format(doubleStringFormatter, round(insTotalTps, doubleRoundPlaces)));
-    tpsAndLatencyMap
-        .put("latency", String.format(doubleStringFormatter, round(instanceLatency, doubleRoundPlaces)));
-    return tpsAndLatencyMap.toString();
-  }
-
-  /**
-   * Implementation of request metrics with using servo gauge metric type.
-   */
-  protected abstract class GaugeMetric extends AbstractMonitor<Number> implements Gauge<Number> {
-
-    public GaugeMetric(MonitorConfig config) {
-      super(config.withAdditionalTag(DataSourceType.GAUGE));
-    }
-
-    @Override
-    public Number getValue(int n) {
-      return getValue();
-    }
-
-    @Override
-    public abstract Number getValue();
-  }
-
-  /**
-   * Implementation of queue average metrics with using servo information metric
-   * type.
-   */
-  protected abstract class InformationalMetric extends AbstractMonitor<String> implements Informational {
-    public InformationalMetric(MonitorConfig config) {
-      super(config.withAdditionalTag(DataSourceType.INFORMATIONAL));
-    }
-
-    @Override
-    public String getValue(int n) {
-      return getValue();
-    }
-
-    @Override
-    public abstract String getValue();
-  }
-
-  /**
-   * Get the total requests and failed requests for instance level.
-   *
-   * @param metricsName Name of the metrics
-   * @param metricToEvaluate observable method to be called for preparation of metrics.
-   * @return Guage metrics
-   */
-  protected Monitor<Number> getRequestValuesGaugeMonitor(final String metricsName,
-      final Func0<Number> metricToEvaluate) {
-    return new GaugeMetric(MonitorConfig.builder(metricsName).build()) {
-
-      @Override
-      public Number getValue() {
-        return metricToEvaluate.call();
-      }
-    };
-  }
-
-  /**
-   * Get the total requests and failed requests for each producer.
-   *
-   * @param metricsName  Name of the metrics
-   * @param metricToEvaluate observable method to be called for preparation of metrics.
-   * @return Guage metrics
-   */
-  protected Monitor<String> getInfoMetricsOperationLevel(final String metricsName,
-      final Func0<String> metricToEvaluate) {
-    return new InformationalMetric(MonitorConfig.builder(metricsName).build()) {
-      @Override
-      public String getValue() {
-        return metricToEvaluate.call();
-      }
-    };
-  }
-
-  /**
-   * Get the total requests and failed requests for each producer.
-   *
-   * @param name Name of the metrics
-   * @param metricToEvaluate observable method to be called for preparation of metrics.
-   * @return Guage metrics
-   */
-  protected Monitor<String> getInfoMetricsOperationalAndInstance(final String name,
-      final Func0<String> metricToEvaluate) {
-    return new InformationalMetric(MonitorConfig.builder(name).build()) {
-      @Override
-      public String getValue() {
-        return metricToEvaluate.call();
-      }
-    };
-  }
-
-  /**
-   * Prepare the initial metrics.
-   *
-   * @return List of monitors
-   */
-  public List<Monitor<?>> getMetricsMonitors() {
-
-    List<Monitor<?>> monitors = new ArrayList<>();
-    monitors.add(getRequestValuesGaugeMonitor("totalRequestsPerProvider INSTANCE_LEVEL",
-        getTotalReqProvider));
-
-    monitors.add(getRequestValuesGaugeMonitor("totalFailedRequestsPerProvider INSTANCE_LEVEL",
-        getTotalFailedReqProvider));
-
-    monitors.add(getRequestValuesGaugeMonitor("totalRequestsPerConsumer INSTANCE_LEVEL",
-        getTotalReqConsumer));
-
-    monitors.add(getRequestValuesGaugeMonitor("totalFailRequestsPerConsumer INSTANCE_LEVEL",
-        getFailedTotalReqConsumer));
-
-    monitors.add(getInfoMetricsOperationLevel("totalRequestProvider OPERATIONAL_LEVEL",
-        getTotalReqProdOperLevel));
-
-    monitors.add(getInfoMetricsOperationLevel("totalFailedRequestProvider OPERATIONAL_LEVEL",
-        getTotalReqFailProdOperLevel));
-
-    monitors.add(getInfoMetricsOperationalAndInstance("RequestQueueRelated", getQueueMetrics));
-
-    monitors.add(getInfoMetricsOperationalAndInstance("TPS and Latency", getTpsAndLatency));
-
-    monitors.add(getInfoMetricsOperationalAndInstance("CPU and Memory", getCpuAndMemory));
-
-    return monitors;
-  }
-
-  private double round(double value, int places) {
-    if (!Double.isNaN(value)) {
-      BigDecimal decimal = new BigDecimal(value);
-      return decimal.setScale(places, RoundingMode.HALF_UP).doubleValue();
-    }
-    return 0;
-  }
-}
diff --git a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/TpsAndLatencyData.java b/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/TpsAndLatencyData.java
deleted file mode 100644
index 84c2a80..0000000
--- a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/TpsAndLatencyData.java
+++ /dev/null
@@ -1,51 +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 org.apache.servicecomb.foundation.metrics;
-
-public class TpsAndLatencyData {
-  private final long successCount;
-
-  private final long failureCount;
-
-  private final int operationLatency;
-
-  private final long windowInMilliseconds;
-
-  public long getSuccessCount() {
-    return successCount;
-  }
-
-  public long getFailureCount() {
-    return failureCount;
-  }
-
-  public int getOperationLatency() {
-    return operationLatency;
-  }
-
-  public long getWindowInMilliseconds() {
-    return windowInMilliseconds;
-  }
-
-  public TpsAndLatencyData(long successCount, long failureCount, int operationLatency, long windowInMilliseconds) {
-    this.successCount = successCount;
-    this.failureCount = failureCount;
-    this.operationLatency = operationLatency;
-    this.windowInMilliseconds = windowInMilliseconds;
-  }
-}
diff --git a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/output/MetricsFileOutput.java b/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/output/MetricsFileOutput.java
deleted file mode 100644
index 68c35bd..0000000
--- a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/output/MetricsFileOutput.java
+++ /dev/null
@@ -1,70 +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 org.apache.servicecomb.foundation.metrics.output;
-
-import java.util.Map;
-
-import com.netflix.config.DynamicPropertyFactory;
-
-public abstract class MetricsFileOutput {
-  public static final String METRICS_FILE_ROOT_PATH = "servicecomb.metrics.file.root_path";
-
-  public static final String METRICS_FILE_NAME_PREFIX = "servicecomb.metrics.file.name_prefix";
-
-  public static final String METRICS_FILE_MAX_ROLLING_SIZE = "servicecomb.metrics.file.max_rolling_size";
-
-  public static final String METRICS_FILE_MAX_ROLLING_COUNT = "servicecomb.metrics.file.max_rolling_count";
-
-
-  private final String rollingRootFilePath;
-
-  private final String maxRollingFileSize;
-
-  private final int maxRollingFileCount;
-
-  private final String namePrefix;
-
-  public String getRollingRootFilePath() {
-    return rollingRootFilePath;
-  }
-
-  public String getMaxRollingFileSize() {
-    return maxRollingFileSize;
-  }
-
-  public int getMaxRollingFileCount() {
-    return maxRollingFileCount;
-  }
-
-  public String getNamePrefix() {
-    return namePrefix;
-  }
-
-  public MetricsFileOutput() {
-    rollingRootFilePath = DynamicPropertyFactory.getInstance()
-        .getStringProperty(METRICS_FILE_ROOT_PATH, "target")
-        .get();
-    namePrefix = DynamicPropertyFactory.getInstance().getStringProperty(METRICS_FILE_NAME_PREFIX, "metrics").get();
-    maxRollingFileSize = DynamicPropertyFactory.getInstance()
-        .getStringProperty(METRICS_FILE_MAX_ROLLING_SIZE, "10MB")
-        .get();
-    maxRollingFileCount = DynamicPropertyFactory.getInstance().getIntProperty(METRICS_FILE_MAX_ROLLING_COUNT, 10).get();
-  }
-
-  public abstract void output(Map<String, String> metrics);
-}
diff --git a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/output/servo/FileOutputMetricObserver.java b/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/output/servo/FileOutputMetricObserver.java
deleted file mode 100644
index bad984e..0000000
--- a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/output/servo/FileOutputMetricObserver.java
+++ /dev/null
@@ -1,56 +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 org.apache.servicecomb.foundation.metrics.output.servo;
-
-import java.util.List;
-import java.util.Map;
-
-import org.apache.servicecomb.foundation.metrics.output.MetricsFileOutput;
-
-import com.netflix.servo.Metric;
-import com.netflix.servo.publish.BaseMetricObserver;
-import com.netflix.servo.util.Preconditions;
-
-public class FileOutputMetricObserver extends BaseMetricObserver {
-  private final MetricsFileOutput metricsOutput;
-
-  private final MetricsContentConvertor convertor;
-
-  private final MetricsContentFormatter formatter;
-
-  public FileOutputMetricObserver(MetricsFileOutput metricsOutput,
-      MetricsContentConvertor convertor, MetricsContentFormatter formatter) {
-    super("fileOutputObserver");
-    this.metricsOutput = metricsOutput;
-    this.convertor = convertor;
-    this.formatter = formatter;
-  }
-
-  @Override
-  public void updateImpl(List<Metric> metrics) {
-    Preconditions.checkNotNull(metrics, "metrics");
-    //first convert metrics to Map<String,String>
-    Map<String, String> convertedMetrics = convertor.convert(metrics);
-    //second format output content style
-    Map<String, String> formattedMetrics = formatter.format(convertedMetrics);
-    //finally output to file
-    metricsOutput.output(formattedMetrics);
-  }
-}
-
-
diff --git a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/output/servo/MetricsContentConvertor.java b/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/output/servo/MetricsContentConvertor.java
deleted file mode 100644
index 0975271..0000000
--- a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/output/servo/MetricsContentConvertor.java
+++ /dev/null
@@ -1,28 +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 org.apache.servicecomb.foundation.metrics.output.servo;
-
-import java.util.List;
-import java.util.Map;
-
-import com.netflix.servo.Metric;
-
-//convert metrics to output content
-public interface MetricsContentConvertor {
-  Map<String, String> convert(List<Metric> metrics);
-}
diff --git a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/output/servo/MetricsContentFormatter.java b/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/output/servo/MetricsContentFormatter.java
deleted file mode 100644
index bfb307f..0000000
--- a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/output/servo/MetricsContentFormatter.java
+++ /dev/null
@@ -1,24 +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 org.apache.servicecomb.foundation.metrics.output.servo;
-
-import java.util.Map;
-
-public interface MetricsContentFormatter {
-  Map<String, String> format(Map<String, String> input);
-}
diff --git a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/output/servo/MetricsObserverInitializer.java b/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/output/servo/MetricsObserverInitializer.java
deleted file mode 100644
index 7162943..0000000
--- a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/output/servo/MetricsObserverInitializer.java
+++ /dev/null
@@ -1,85 +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 org.apache.servicecomb.foundation.metrics.output.servo;
-
-import java.util.concurrent.TimeUnit;
-
-import org.apache.servicecomb.foundation.metrics.output.MetricsFileOutput;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import com.netflix.config.DynamicPropertyFactory;
-import com.netflix.servo.publish.BasicMetricFilter;
-import com.netflix.servo.publish.CounterToRateMetricTransform;
-import com.netflix.servo.publish.MetricObserver;
-import com.netflix.servo.publish.MonitorRegistryMetricPoller;
-import com.netflix.servo.publish.PollRunnable;
-import com.netflix.servo.publish.PollScheduler;
-
-//manage and init ServoObservers
-@Component
-public class MetricsObserverInitializer {
-
-  public static final String METRICS_POLL_TIME = "servicecomb.metrics.polltime";
-
-  public static final String METRICS_FILE_ENABLED = "servicecomb.metrics.file.enabled";
-
-  private final int metricPoll;
-
-  private final MetricsFileOutput fileOutput;
-
-  private final MetricsContentConvertor convertor;
-
-  private final MetricsContentFormatter formatter;
-
-  @Autowired
-  public MetricsObserverInitializer(MetricsFileOutput fileOutput, MetricsContentConvertor convertor,
-      MetricsContentFormatter formatter) {
-    this(fileOutput, convertor, formatter, true);
-  }
-
-  public MetricsObserverInitializer(MetricsFileOutput fileOutput, MetricsContentConvertor convertor,
-      MetricsContentFormatter formatter, boolean autoInit) {
-    metricPoll = DynamicPropertyFactory.getInstance().getIntProperty(METRICS_POLL_TIME, 30).get();
-    this.fileOutput = fileOutput;
-    this.convertor = convertor;
-    this.formatter = formatter;
-    if (autoInit) {
-      this.init();
-    }
-  }
-
-  public void init() {
-    PollScheduler scheduler = PollScheduler.getInstance();
-    if (!scheduler.isStarted()) {
-      scheduler.start();
-    }
-
-    if (isRollingFileEnabled()) {
-      MetricObserver fileObserver = new FileOutputMetricObserver(fileOutput, convertor, formatter);
-      MetricObserver fileTransform = new CounterToRateMetricTransform(fileObserver, metricPoll, TimeUnit.SECONDS);
-      PollRunnable fileTask = new PollRunnable(new MonitorRegistryMetricPoller(), BasicMetricFilter.MATCH_ALL,
-          fileTransform);
-      scheduler.addPoller(fileTask, metricPoll, TimeUnit.SECONDS);
-    }
-  }
-
-  public boolean isRollingFileEnabled() {
-    return DynamicPropertyFactory.getInstance().getBooleanProperty(METRICS_FILE_ENABLED, false).get();
-  }
-}
diff --git a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/output/servo/RollingMetricsFileOutput.java b/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/output/servo/RollingMetricsFileOutput.java
deleted file mode 100644
index e930701..0000000
--- a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/output/servo/RollingMetricsFileOutput.java
+++ /dev/null
@@ -1,43 +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 org.apache.servicecomb.foundation.metrics.output.servo;
-
-import java.util.Map;
-
-import org.apache.servicecomb.foundation.common.concurrent.ConcurrentHashMapEx;
-import org.apache.servicecomb.foundation.metrics.output.MetricsFileOutput;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.stereotype.Component;
-
-@Component
-public class RollingMetricsFileOutput extends MetricsFileOutput {
-
-  private final Map<String, Logger> allLoggers = new ConcurrentHashMapEx<>();
-
-  public RollingMetricsFileOutput() {
-  }
-
-  @Override
-  public void output(Map<String, String> metrics) {
-    for (String metricName : metrics.keySet()) {
-      Logger logger = allLoggers.computeIfAbsent(metricName, l -> LoggerFactory.getLogger(metricName));
-      logger.trace(metrics.get(metricName));
-    }
-  }
-}
diff --git a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/output/servo/SimpleMetricsContentConvertor.java b/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/output/servo/SimpleMetricsContentConvertor.java
deleted file mode 100644
index 550d19c..0000000
--- a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/output/servo/SimpleMetricsContentConvertor.java
+++ /dev/null
@@ -1,70 +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 org.apache.servicecomb.foundation.metrics.output.servo;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.springframework.stereotype.Component;
-
-import com.netflix.servo.Metric;
-
-@Component
-public class SimpleMetricsContentConvertor implements MetricsContentConvertor {
-  @Override
-  public Map<String, String> convert(List<Metric> metrics) {
-    Map<String, String> pickedMetrics = new HashMap<>();
-    for (Metric metric : metrics) {
-      if (isTotalRequestInstanceLevelMetric(metric.getConfig().getName())) {
-        pickedMetrics.put(metric.getConfig().getName().replace(" INSTANCE_LEVEL", ""), metric.getValue().toString());
-      } else if ("RequestQueueRelated".equals(metric.getConfig().getName())) {
-        String instanceContent = metric.getValue()
-            .toString()
-            .substring(metric.getValue().toString().indexOf("InstanceLevel={") + "InstanceLevel={".length());
-        instanceContent = instanceContent.substring(0, instanceContent.indexOf('}'));
-        String[] keyAndValueStrings = instanceContent.split(",");
-        for (String keyAndValueString : keyAndValueStrings) {
-          String[] keyAndValue = keyAndValueString.split("=");
-          pickedMetrics.put(keyAndValue[0].trim(), keyAndValue[1].trim());
-        }
-      } else if (isSystemOrTPSAndLatencyMetric(metric.getConfig().getName())) {
-        String instanceContent = metric.getValue().toString().substring(1, metric.getValue().toString().length() - 1);
-        String[] keyAndValueStrings = instanceContent.split(",");
-        for (String keyAndValueString : keyAndValueStrings) {
-          String[] keyAndValue = keyAndValueString.split("=");
-          pickedMetrics.put(keyAndValue[0].trim(), keyAndValue[1].trim());
-        }
-      }
-    }
-
-    return pickedMetrics;
-  }
-
-  private boolean isTotalRequestInstanceLevelMetric(String metricName) {
-    return "totalRequestsPerProvider INSTANCE_LEVEL".equals(metricName) ||
-        "totalFailedRequestsPerProvider INSTANCE_LEVEL".equals(metricName) ||
-        "totalRequestsPerConsumer INSTANCE_LEVEL".equals(metricName) ||
-        "totalFailRequestsPerConsumer INSTANCE_LEVEL".equals(metricName);
-  }
-
-  private boolean isSystemOrTPSAndLatencyMetric(String metricName) {
-    return "CPU and Memory".equals(metricName) ||
-        "TPS and Latency".equals(metricName);
-  }
-}
diff --git a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/output/servo/SimpleMetricsContentFormatter.java b/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/output/servo/SimpleMetricsContentFormatter.java
deleted file mode 100644
index ab58702..0000000
--- a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/output/servo/SimpleMetricsContentFormatter.java
+++ /dev/null
@@ -1,97 +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 org.apache.servicecomb.foundation.metrics.output.servo;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.stream.Collectors;
-
-import org.apache.servicecomb.foundation.common.net.NetUtils;
-import org.apache.servicecomb.foundation.common.utils.JsonUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.stereotype.Component;
-import org.springframework.util.StringUtils;
-
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.netflix.config.DynamicPropertyFactory;
-
-@Component
-public class SimpleMetricsContentFormatter implements MetricsContentFormatter {
-
-  public static final String METRICS_FILE_NAME_PREFIX = "servicecomb.metrics.file.name_prefix";
-
-  private static final Logger logger = LoggerFactory.getLogger(SimpleMetricsContentFormatter.class);
-
-  private final String applicationName;
-
-  private String hostName;
-
-  public SimpleMetricsContentFormatter() {
-    hostName = NetUtils.getHostName();
-    if (StringUtils.isEmpty(hostName)) {
-      hostName = NetUtils.getHostAddress();
-    }
-
-    applicationName = DynamicPropertyFactory.getInstance().getStringProperty(METRICS_FILE_NAME_PREFIX, "metrics").get();
-  }
-
-  @Override
-  public Map<String, String> format(Map<String, String> input) {
-    return input.entrySet()
-        .stream()
-        .collect(Collectors.toMap(Entry::getKey, entry -> {
-          try {
-            return JsonUtils
-                .writeValueAsString(new OutputJsonObject(applicationName, hostName, entry.getKey(), entry.getValue()));
-          } catch (JsonProcessingException e) {
-            logger.error("error convert metrics data to json convert", e);
-            return "";
-          }
-        }));
-  }
-
-  class OutputJsonObject {
-    private String plugin_id;
-
-    private Map<String, Object> metric;
-
-    public String getPlugin_id() {
-      return plugin_id;
-    }
-
-    public Map<String, Object> getMetric() {
-      return metric;
-    }
-
-    public OutputJsonObject() {
-    }
-
-    public OutputJsonObject(String plugin_id, String hostName, String metricName, String metricValue) {
-      this();
-      this.plugin_id = plugin_id;
-      this.metric = new HashMap<>();
-      this.metric.put("node", hostName);
-      this.metric.put("scope_name", "");
-      this.metric.put("timestamp", System.currentTimeMillis());
-      this.metric.put("inface_name", "");
-      this.metric.put(metricName, metricValue);
-    }
-  }
-}
diff --git a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/performance/MetricsDataMonitor.java b/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/performance/MetricsDataMonitor.java
deleted file mode 100644
index 8deb581..0000000
--- a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/performance/MetricsDataMonitor.java
+++ /dev/null
@@ -1,240 +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 org.apache.servicecomb.foundation.metrics.performance;
-
-import java.util.Map;
-
-import org.apache.servicecomb.foundation.common.concurrent.ConcurrentHashMapEx;
-
-/**
- * Implements the collection of metrics such as total request, total fail
- * request and average times for requests.
- */
-public class MetricsDataMonitor {
-
-  // inc
-  // invocation start
-  // succ + fail
-  public Long totalReqProvider = 0L;
-
-  // inc
-  // after invocation finished
-  public Long totalFailReqProvider = 0L;
-
-  // inc
-  // after invocation start
-  public Long totalReqConsumer = 0L;
-
-  // inc
-  // after invocation finished
-  public Long totalFailReqConsumer = 0L;
-
-  // key is operQualifiedName
-  // inc
-  // after invocation finished
-  public Map<String, Long> operMetricsTotalReq = new ConcurrentHashMapEx<>();
-
-  // key is operQualifiedName
-  // inc
-  // after invocation finished
-  public Map<String, Long> operMetricsTotalFailReq = new ConcurrentHashMapEx<>();
-
-  // key is operQualifiedName
-  public Map<String, QueueMetricsData> queueMetrics = new ConcurrentHashMapEx<>();
-
-  /**
-   * default constructor.
-   */
-  public MetricsDataMonitor() {
-
-  }
-
-  /**
-   * Returns the map of average values for both instance and operational level.
-   * 
-   * @param pathId Operation path id
-   * @return QueueMetrics object based on key
-   */
-  public QueueMetricsData getOrCreateQueueMetrics(String pathId) {
-    return queueMetrics.computeIfAbsent(pathId, p -> new QueueMetricsData());
-  }
-
-  /**
-   * Returns the map of average values for both instance and operational level.
-   * 
-   * @return queue metrics map
-   */
-  public Map<String, QueueMetricsData> getQueueMetrics() {
-    return queueMetrics;
-  }
-
-  /**
-   * Returns the map of average values for both instance and operational level.
-   * 
-   * @param newMap the new map which passed to queue metrics
-   */
-  public void setQueueMetrics(Map<String, QueueMetricsData> newMap) {
-    queueMetrics = newMap;
-  }
-
-  /**
-   * Sets the map of average values for both instance and operational levels.
-   * 
-   * @param pathId Operation path id
-   * @param reqQueue RequestQueue
-   */
-  public void setQueueMetrics(String pathId, QueueMetricsData reqQueue) {
-    this.queueMetrics.put(pathId, reqQueue);
-  }
-
-  /**
-   * Returns the total requests per provider.
-   * 
-   * @return long total requests for provider
-   */
-  public long getTotalReqProvider() {
-    return totalReqProvider;
-  }
-
-  /**
-   * Increments the total requests per provider.
-   */
-  public void incrementTotalReqProvider() {
-    this.totalReqProvider++;
-  }
-
-  /**
-   * Sets the total requests per provider.
-   * @param totalReqProvider the total requests per provider
-   */
-  public void setTotalReqProvider(Long totalReqProvider) {
-    this.totalReqProvider = totalReqProvider;
-  }
-
-  /**
-   * Returns the total fail requests per provider.
-   * 
-   * @return long total failed requests for provider
-   */
-  public long getTotalFailReqProvider() {
-    return totalFailReqProvider;
-  }
-
-  /**
-   * Sets the total fail requests per provider.
-   */
-  public void incrementTotalFailReqProvider() {
-    this.totalFailReqProvider++;
-  }
-
-  /**
-   * Sets the total failed requests per provider.
-   * @param totalFailedReqProvider the total failed requests per provider
-   */
-  public void setTotalFailReqProvider(Long totalFailedReqProvider) {
-    this.totalFailReqProvider = totalFailedReqProvider;
-  }
-
-  /**
-   * Returns the total requests per consumer.
-   * 
-   * @return long total requests for consumer
-   */
-  public long getTotalReqConsumer() {
-    return totalReqConsumer;
-  }
-
-  /**
-   * Sets the total requests per consumer.
-   */
-  public void incrementTotalReqConsumer() {
-    this.totalReqConsumer++;
-  }
-
-  /**
-   * Sets the total failed requests per consumer.
-   * @param totalReqConsumer the total requests per consumer
-   */
-  public void setTotalReqConsumer(Long totalReqConsumer) {
-    this.totalReqConsumer = totalReqConsumer;
-  }
-
-  /**
-   * Returns the total fail requests per consumer.
-   * 
-   * @return long total failed request for consumer
-   */
-  public long getTotalFailReqConsumer() {
-    return totalFailReqConsumer;
-  }
-
-  /**
-   * Sets the total fail requests per consumer.
-   */
-  public void incrementTotalFailReqConsumer() {
-    this.totalFailReqConsumer++;
-  }
-
-  /**
-   * Sets the total failed requests per consumer.
-   * @param totalFailedReqConsumer the total failed requests per consumer
-   */
-  public void setTotalFailReqConsumer(Long totalFailedReqConsumer) {
-    this.totalFailReqConsumer = totalFailedReqConsumer;
-  }
-
-  /**
-   * Returns total requests per provider for operational level.
-   * 
-   * @param key Operation path id
-   * @return long total requests per provider
-   */
-  public Long getOperMetTotalReq(String key) {
-    return operMetricsTotalReq.get(key);
-  }
-
-  /**
-   * Sets total requests per provider for operational level.
-   * 
-   * @param key pathId
-   * @param val total requests per provider
-   */
-  public void setOperMetTotalReq(String key, Long val) {
-    this.operMetricsTotalReq.put(key, val);
-  }
-
-  /**
-   * Returns total fail requests per provider for operational level.
-   * 
-   * @param key Operation path id
-   * @return long total fail requests per provider
-   */
-  public Long getOperMetTotalFailReq(String key) {
-    return operMetricsTotalFailReq.get(key);
-  }
-
-  /**
-   * Sets total fail requests per provider for operational level.
-   * 
-   * @param key Operation path id
-   * @param val total fail requests per provider
-   */
-  public void setOperMetTotalFailReq(String key, Long val) {
-    this.operMetricsTotalFailReq.put(key, val);
-  }
-}
diff --git a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/performance/MetricsDataMonitorUtil.java b/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/performance/MetricsDataMonitorUtil.java
deleted file mode 100644
index a7a18bd..0000000
--- a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/performance/MetricsDataMonitorUtil.java
+++ /dev/null
@@ -1,57 +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 org.apache.servicecomb.foundation.metrics.performance;
-
-import org.apache.servicecomb.foundation.metrics.MetricsServoRegistry;
-
-/**
- * Implementation of metric util functions such as preparing average queue times
- * and total requests/fail for producer and instance level.
- */
-public final class MetricsDataMonitorUtil {
-
-  /*
-   * Sets the total requests per provider and consumer.
-   */
-  public void setAllReqProviderAndConsumer(String operationPath, String invocationType) {
-    MetricsDataMonitor metricsRef = MetricsServoRegistry.getOrCreateLocalMetrics();
-    if ("CONSUMER".equals(invocationType)) {
-      metricsRef.incrementTotalReqConsumer();
-    } else {
-      metricsRef.incrementTotalReqProvider();
-      // note down metrics for operational level.
-      metricsRef.setOperMetTotalReq(operationPath,
-          metricsRef.getOperMetTotalReq(operationPath) == null ? 1L : metricsRef.getOperMetTotalReq(operationPath) + 1);
-    }
-  }
-
-  /*
-   * Sets the total failed requests per provider and consumer.
-   */
-  public void setAllFailReqProviderAndConsumer(String operationPath, String invocationType) {
-    MetricsDataMonitor metricsRef = MetricsServoRegistry.getOrCreateLocalMetrics();
-    if ("CONSUMER".equals(invocationType)) {
-      metricsRef.incrementTotalFailReqConsumer();
-    } else {
-      metricsRef.incrementTotalFailReqProvider();
-      // note down metrics for operational level.
-      metricsRef.setOperMetTotalReq(operationPath,
-          metricsRef.getOperMetTotalReq(operationPath) == null ? 1L : metricsRef.getOperMetTotalReq(operationPath) + 1);
-    }
-  }
-}
diff --git a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/performance/QueueMetrics.java b/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/performance/QueueMetrics.java
deleted file mode 100644
index e1c9501..0000000
--- a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/performance/QueueMetrics.java
+++ /dev/null
@@ -1,98 +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 org.apache.servicecomb.foundation.metrics.performance;
-
-import java.util.concurrent.atomic.AtomicLong;
-
-/**
- * Used to store invocation specific metrics for queue.
- */
-public class QueueMetrics {
-
-  private AtomicLong queueStartTime = new AtomicLong();
-
-  private AtomicLong endOperTime = new AtomicLong();
-
-  private AtomicLong queueEndTime = new AtomicLong();
-
-  private String operQualifiedName;
-
-  /**
-   * Returns the time when it enters the queue.
-   * @return long
-   */
-  public long getQueueStartTime() {
-    return queueStartTime.get();
-  }
-
-  /**
-   * Sets the time when it enters the queue.
-   * @param startTime Entering time in queue
-   */
-  public void setQueueStartTime(long startTime) {
-    this.queueStartTime.set(startTime);
-  }
-
-  /**
-   * Returns the time when the operation ends.
-   * @return long
-   */
-  public long getEndOperTime() {
-    return endOperTime.get();
-  }
-
-  /**
-   * Sets the time when the operation ends.
-   * @param stopOperTime Start time of operation
-   */
-  public void setEndOperTime(long stopOperTime) {
-    this.endOperTime.set(stopOperTime);
-  }
-
-  /**
-   * Returns the time when it leaves the queue.
-   * @return long
-   */
-  public long getQueueEndTime() {
-    return queueEndTime.get();
-  }
-
-  /**
-   * Sets the time when it leaves the queue.
-   * @param endTime Leaving time from queue
-   */
-  public void setQueueEndTime(long endTime) {
-    this.queueEndTime.set(endTime);
-  }
-
-  /**
-   * Get the microservice qualified name.
-   * @return microservice qualified name
-   */
-  public String getOperQualifiedName() {
-    return operQualifiedName;
-  }
-
-  /**
-   * Set the microservice qualified name.
-   * @param operQualifiedName microservice qualified name
-   */
-  public void setOperQualifiedName(String operQualifiedName) {
-    this.operQualifiedName = operQualifiedName;
-  }
-}
diff --git a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/performance/QueueMetricsData.java b/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/performance/QueueMetricsData.java
deleted file mode 100644
index 20c4ad6..0000000
--- a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/performance/QueueMetricsData.java
+++ /dev/null
@@ -1,215 +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 org.apache.servicecomb.foundation.metrics.performance;
-
-/**
- * Used for holding the request queue related timings like start time, operation time and end time.
- */
-public class QueueMetricsData {
-
-  // after invocation polled from queue
-  private Long totalTime = 0L;
-
-  // succ and fail
-  // after invocation polled from queue
-  private Long totalCount = 0L;
-
-  // after invocation finished
-  private Long totalServExecutionTime = 0L;
-
-  // after invocation finished
-  private Long totalServExecutionCount = 0L;
-
-  // inc and dec
-  // addToQueue inc
-  // pollFromQueue inc
-  // pollFromQueue - addToQueue = countInQueue
-  // after invocation polled from queue
-  private Long countInQueue = 0L;
-
-  // after invocation polled from queue
-  private Long minLifeTimeInQueue = 0L;
-
-  // after invocation polled from queue
-  private Long maxLifeTimeInQueue = 0L;
-
-  /**
-   * Sets total count in queue.
-   */
-  public void incrementCountInQueue() {
-    this.countInQueue++;
-  }
-
-  /**
-   * Deletes total count in queue.
-   */
-  public void decrementCountInQueue() {
-    this.countInQueue--;
-  }
-
-  /**
-   * default constructor.
-   */
-  public QueueMetricsData() {
-
-  }
-
-  /**
-   * Returns the count for calculating average count value in queue.
-   * @return Long
-   */
-  public Long getTotalTime() {
-    return totalTime;
-  }
-
-  /**
-   * Sets the total time for calculating average time in queue.
-   * @param totalTime total time value
-   */
-  public void setTotalTime(long totalTime) {
-    this.totalTime = totalTime;
-  }
-
-  /**
-   * Returns the total count for calculating average count value in queue.
-   * @return Long
-   */
-  public Long getTotalCount() {
-    return totalCount;
-  }
-
-  /**
-   * Sets the total count for calculating average count value in queue.
-   */
-  public void incrementTotalCount() {
-    this.totalCount++;
-  }
-
-  /**
-   * Sets the total count for calculating average count value in queue.
-   * @param totalCount total count
-   */
-  public void setTotalCount(long totalCount) {
-    this.totalCount = totalCount;
-  }
-
-  /**
-   * Returns the count for calculating average value of working time after queue.
-   * @return Long
-   */
-  public Long getTotalServExecutionTime() {
-    return totalServExecutionTime;
-  }
-
-  /**
-   * Sets the count for calculating average value of working time after queue.
-   * @param totalCountAfterQueue count value
-   */
-  public void setTotalServExecutionTime(long totalCountAfterQueue) {
-    this.totalServExecutionTime = totalCountAfterQueue;
-  }
-
-  /**
-   * Returns the total count for calculating average value of working time after queue.
-   * @return Long
-   */
-  public Long getTotalServExecutionCount() {
-    return totalServExecutionCount;
-  }
-
-  /**
-   * Sets the total count for calculating average value of working time after queue. 
-   */
-  public void incrementTotalServExecutionCount() {
-    this.totalServExecutionCount++;
-  }
-
-  /**
-   * Sets the total count for calculating average value of working time after queue.
-   * @param totalServExecutionCount total service execution time count
-   */
-  public void setTotalServExecutionCount(long totalServExecutionCount) {
-    this.totalServExecutionCount = totalServExecutionCount;
-  }
-
-  /** 
-   * Returns total count in queue.
-   * @return Long
-   */
-  public Long getCountInQueue() {
-    return countInQueue;
-  }
-
-  /**  
-   * Returns total count in queue.
-   * @param countInQueue queue count
-   */
-  public void setCountInQueue(long countInQueue) {
-    this.countInQueue = countInQueue;
-  }
-
-  /** 
-   * Returns the minimum lifetime in queue.
-   * @return Long
-   */
-  public Long getMinLifeTimeInQueue() {
-    return minLifeTimeInQueue;
-  }
-
-  /** 
-   * Sets the minimum lifetime in queue.
-   * @param minLifeTimeInQueue minimum lifetime
-   */
-  public void setMinLifeTimeInQueue(long minLifeTimeInQueue) {
-    if ((this.minLifeTimeInQueue <= 0) || (minLifeTimeInQueue < this.minLifeTimeInQueue)) {
-      this.minLifeTimeInQueue = minLifeTimeInQueue;
-    }
-  }
-
-  /** 
-   * Returns maximum lifetime in queue.
-   * @return Long
-   */
-  public Long getMaxLifeTimeInQueue() {
-    return maxLifeTimeInQueue;
-  }
-
-  /** 
-   * Sets maximum lifetime in queue.
-   * @param maxLifeTimeInQueue maximum lifetime
-   */
-  public void setMaxLifeTimeInQueue(long maxLifeTimeInQueue) {
-    if ((this.maxLifeTimeInQueue <= 0) || (maxLifeTimeInQueue > this.maxLifeTimeInQueue)) {
-      this.maxLifeTimeInQueue = maxLifeTimeInQueue;
-    }
-  }
-
-  /** 
-   * Resets minimum lifetime in queue.
-   */
-  public void resetMinLifeTimeInQueue() {
-    this.minLifeTimeInQueue = 0L;
-  }
-
-  /** 
-   * Resets maximum lifetime in queue.
-   */
-  public void resetMaxLifeTimeInQueue() {
-    this.maxLifeTimeInQueue = 0L;
-  }
-}
diff --git a/foundations/foundation-metrics/src/test/java/org/apache/servicecomb/foundation/metrics/TestFileOutputMetricObserverAndContentConvertor.java b/foundations/foundation-metrics/src/test/java/org/apache/servicecomb/foundation/metrics/TestFileOutputMetricObserverAndContentConvertor.java
deleted file mode 100644
index e11ad3f..0000000
--- a/foundations/foundation-metrics/src/test/java/org/apache/servicecomb/foundation/metrics/TestFileOutputMetricObserverAndContentConvertor.java
+++ /dev/null
@@ -1,131 +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 org.apache.servicecomb.foundation.metrics;
-
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.servicecomb.foundation.metrics.output.MetricsFileOutput;
-import org.apache.servicecomb.foundation.metrics.output.servo.FileOutputMetricObserver;
-import org.apache.servicecomb.foundation.metrics.output.servo.MetricsContentFormatter;
-import org.apache.servicecomb.foundation.metrics.output.servo.SimpleMetricsContentConvertor;
-import org.junit.Assert;
-import org.junit.Test;
-import org.mockito.ArgumentCaptor;
-
-import com.netflix.servo.Metric;
-import com.netflix.servo.monitor.MonitorConfig;
-
-public class TestFileOutputMetricObserverAndContentConvertor {
-  @SuppressWarnings("unchecked")
-  @Test
-  public void testMetricObserverUpdateImpl() {
-
-    MetricsFileOutput output = mock(MetricsFileOutput.class);
-    SimpleMetricsContentConvertor convertor = new SimpleMetricsContentConvertor();
-    MetricsContentFormatter formatter = new MetricsContentFormatter() {
-      @Override
-      public Map<String, String> format(Map<String, String> input) {
-        return input;
-      }
-    };
-
-    List<Metric> metrics = new ArrayList<>();
-    metrics.add(
-        new Metric(MonitorConfig.builder("totalRequestsPerProvider INSTANCE_LEVEL").build(), System.currentTimeMillis(),
-            "1"));
-    metrics.add(new Metric(MonitorConfig.builder("totalFailedRequestsPerProvider INSTANCE_LEVEL").build(),
-        System.currentTimeMillis(), "2"));
-    metrics.add(
-        new Metric(MonitorConfig.builder("totalRequestsPerConsumer INSTANCE_LEVEL").build(), System.currentTimeMillis(),
-            "3"));
-    metrics.add(new Metric(MonitorConfig.builder("totalFailRequestsPerConsumer INSTANCE_LEVEL").build(),
-        System.currentTimeMillis(), "4"));
-    metrics.add(
-        new Metric(MonitorConfig.builder("totalRequestProvider OPERATIONAL_LEVEL").build(), System.currentTimeMillis(),
-            "totalRequestProvider"));
-    metrics.add(new Metric(MonitorConfig.builder("totalFailedRequestProvider OPERATIONAL_LEVEL").build(),
-        System.currentTimeMillis(), "totalFailedRequestProvider"));
-    metrics.add(new Metric(MonitorConfig.builder("RequestQueueRelated").build(), System.currentTimeMillis(),
-        "{InstanceLevel={averageServiceExecutionTime=1.0, countInQueue=2, minLifeTimeInQueue=3, averageTimeInQueue=4.0, maxLifeTimeInQueue=5}}"));
-    metrics.add(new Metric(MonitorConfig.builder("TPS and Latency").build(), System.currentTimeMillis(),
-        "{latency=100, tps=200}"));
-    metrics.add(new Metric(MonitorConfig.builder("CPU and Memory").build(), System.currentTimeMillis(),
-        "{heapUsed=146120664, nonHeapUsed=55146864, cpuRunningThreads=36, heapMax=3786407936, heapCommit=472907776, nonHeapInit=2555904, nonHeapMax=-1, cpuLoad=-1.0, heapInit=266338304, nonHeapCommit=56623104}"));
-
-    FileOutputMetricObserver observer = new FileOutputMetricObserver(output, convertor, formatter);
-    observer.updateImpl(metrics);
-
-    @SuppressWarnings("rawtypes")
-    ArgumentCaptor<Map> outputMetrics = ArgumentCaptor.forClass(Map.class);
-    verify(output).output(outputMetrics.capture());
-
-    HashMap<String, String> result = (HashMap<String, String>) outputMetrics.getValue();
-
-    Assert.assertTrue(result.containsKey("totalRequestsPerProvider"));
-    Assert.assertTrue(result.get("totalRequestsPerProvider").equals("1"));
-    Assert.assertTrue(result.containsKey("totalFailedRequestsPerProvider"));
-    Assert.assertTrue(result.get("totalFailedRequestsPerProvider").equals("2"));
-    Assert.assertTrue(result.containsKey("totalRequestsPerConsumer"));
-    Assert.assertTrue(result.get("totalRequestsPerConsumer").equals("3"));
-    Assert.assertTrue(result.containsKey("totalFailRequestsPerConsumer"));
-    Assert.assertTrue(result.get("totalFailRequestsPerConsumer").equals("4"));
-
-    Assert.assertTrue(result.containsKey("averageServiceExecutionTime"));
-    Assert.assertTrue(result.get("averageServiceExecutionTime").equals("1.0"));
-    Assert.assertTrue(result.containsKey("countInQueue"));
-    Assert.assertTrue(result.get("countInQueue").equals("2"));
-    Assert.assertTrue(result.containsKey("minLifeTimeInQueue"));
-    Assert.assertTrue(result.get("minLifeTimeInQueue").equals("3"));
-    Assert.assertTrue(result.containsKey("averageTimeInQueue"));
-    Assert.assertTrue(result.get("averageTimeInQueue").equals("4.0"));
-    Assert.assertTrue(result.containsKey("maxLifeTimeInQueue"));
-    Assert.assertTrue(result.get("maxLifeTimeInQueue").equals("5"));
-
-    Assert.assertTrue(result.containsKey("latency"));
-    Assert.assertTrue(result.get("latency").equals("100"));
-    Assert.assertTrue(result.containsKey("tps"));
-    Assert.assertTrue(result.get("tps").equals("200"));
-
-    Assert.assertTrue(result.containsKey("heapUsed"));
-    Assert.assertTrue(result.get("heapUsed").equals("146120664"));
-    Assert.assertTrue(result.containsKey("nonHeapUsed"));
-    Assert.assertTrue(result.get("nonHeapUsed").equals("55146864"));
-    Assert.assertTrue(result.containsKey("cpuRunningThreads"));
-    Assert.assertTrue(result.get("cpuRunningThreads").equals("36"));
-    Assert.assertTrue(result.containsKey("heapMax"));
-    Assert.assertTrue(result.get("heapMax").equals("3786407936"));
-    Assert.assertTrue(result.containsKey("heapCommit"));
-    Assert.assertTrue(result.get("heapCommit").equals("472907776"));
-    Assert.assertTrue(result.containsKey("nonHeapInit"));
-    Assert.assertTrue(result.get("nonHeapInit").equals("2555904"));
-    Assert.assertTrue(result.containsKey("nonHeapMax"));
-    Assert.assertTrue(result.get("nonHeapMax").equals("-1"));
-    Assert.assertTrue(result.containsKey("cpuLoad"));
-    Assert.assertTrue(result.get("cpuLoad").equals("-1.0"));
-    Assert.assertTrue(result.containsKey("heapInit"));
-    Assert.assertTrue(result.get("heapInit").equals("266338304"));
-    Assert.assertTrue(result.containsKey("nonHeapCommit"));
-    Assert.assertTrue(result.get("nonHeapCommit").equals("56623104"));
-  }
-}
diff --git a/foundations/foundation-metrics/src/test/java/org/apache/servicecomb/foundation/metrics/TestMetricsServoRegistry.java b/foundations/foundation-metrics/src/test/java/org/apache/servicecomb/foundation/metrics/TestMetricsServoRegistry.java
deleted file mode 100644
index c595ba2..0000000
--- a/foundations/foundation-metrics/src/test/java/org/apache/servicecomb/foundation/metrics/TestMetricsServoRegistry.java
+++ /dev/null
@@ -1,220 +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 org.apache.servicecomb.foundation.metrics;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.commons.configuration.BaseConfiguration;
-import org.apache.servicecomb.foundation.metrics.output.MetricsFileOutput;
-import org.apache.servicecomb.foundation.metrics.output.servo.MetricsContentConvertor;
-import org.apache.servicecomb.foundation.metrics.output.servo.MetricsContentFormatter;
-import org.apache.servicecomb.foundation.metrics.output.servo.MetricsObserverInitializer;
-import org.apache.servicecomb.foundation.metrics.output.servo.RollingMetricsFileOutput;
-import org.apache.servicecomb.foundation.metrics.output.servo.SimpleMetricsContentConvertor;
-import org.apache.servicecomb.foundation.metrics.output.servo.SimpleMetricsContentFormatter;
-import org.apache.servicecomb.foundation.metrics.performance.MetricsDataMonitor;
-import org.apache.servicecomb.foundation.metrics.performance.QueueMetricsData;
-import org.junit.After;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-
-import com.netflix.config.DynamicPropertyFactory;
-import com.netflix.servo.publish.PollScheduler;
-
-public class TestMetricsServoRegistry {
-  MetricsDataMonitor metricsDataMonitor = null;
-
-  MetricsDataMonitor localData = null;
-
-  MetricsServoRegistry metricsRegistry = null;
-
-  MetricsFileOutput fileOutput = null;
-
-  MetricsContentConvertor convertor = null;
-
-  MetricsContentFormatter formatter = null;
-
-  MetricsObserverInitializer observerManager = null;
-
-  @BeforeClass
-  public static void staticBeforeClean() {
-    BaseConfiguration configuration = new BaseConfiguration();
-    configuration.setProperty(MetricsObserverInitializer.METRICS_FILE_ENABLED, true);
-    configuration.setProperty(MetricsObserverInitializer.METRICS_POLL_TIME, 1);
-    DynamicPropertyFactory.initWithConfigurationSource(configuration);
-    MetricsServoRegistry.metricsList.clear();
-    MetricsServoRegistry.LOCAL_METRICS_MAP = new ThreadLocal<>();
-  }
-
-  @Before
-  public void setUp() throws Exception {
-    metricsRegistry = new MetricsServoRegistry();
-    convertor = new SimpleMetricsContentConvertor();
-    formatter = new SimpleMetricsContentFormatter();
-    fileOutput = new RollingMetricsFileOutput();
-    observerManager = new MetricsObserverInitializer(fileOutput, convertor, formatter, false);
-    localData = metricsRegistry.getLocalMetrics();
-    metricsDataMonitor = MetricsServoRegistry.getOrCreateLocalMetrics();
-  }
-
-  @After
-  public void tearDown() throws Exception {
-    PollScheduler.getInstance().stop();
-    metricsRegistry = null;
-    convertor = null;
-    formatter = null;
-    observerManager = null;
-    fileOutput = null;
-    localData = null;
-    metricsDataMonitor = null;
-  }
-
-  @Test
-  public void testAllRegistryMetrics() throws Exception {
-
-    metricsDataMonitor.incrementTotalReqProvider();
-    metricsDataMonitor.incrementTotalFailReqProvider();
-    metricsDataMonitor.incrementTotalReqConsumer();
-    metricsDataMonitor.incrementTotalFailReqConsumer();
-    metricsDataMonitor.setOperMetTotalReq("sayHi", 20L);
-    metricsDataMonitor.setOperMetTotalFailReq("sayHi", 20L);
-    localData = metricsRegistry.getLocalMetrics();
-    localData.setOperMetTotalReq("sayHi", 10L);
-    localData.setOperMetTotalFailReq("sayHi", 10L);
-
-    metricsRegistry.afterPropertiesSet();
-    observerManager.init();
-    Thread.sleep(1000);
-    // get the metrics from local data and compare
-    localData = metricsRegistry.getLocalMetrics();
-    Assert.assertEquals(1, localData.getTotalReqProvider());
-    Assert.assertEquals(1, localData.getTotalFailReqProvider());
-    Assert.assertEquals(1, localData.getTotalReqConsumer());
-    Assert.assertEquals(1, localData.getTotalFailReqConsumer());
-    Assert.assertEquals(20L, localData.getOperMetTotalReq("sayHi").longValue());
-    Assert.assertEquals(20L, localData.getOperMetTotalFailReq("sayHi").longValue());
-
-    MetricsDataMonitor localData1 = metricsRegistry.getLocalMetrics();
-    Assert.assertEquals(20L, localData1.getOperMetTotalReq("sayHi").longValue());
-    Assert.assertEquals(20L, localData1.getOperMetTotalFailReq("sayHi").longValue());
-  }
-
-  @Test
-  public void testOperationalProviderMetrics() throws Exception {
-    MetricsDataMonitor metricsDataMonitor = MetricsServoRegistry.getOrCreateLocalMetrics();
-    metricsDataMonitor.setOperMetTotalReq("sayHi", 20L);
-    metricsDataMonitor.setOperMetTotalFailReq("sayHi", 20L);
-    localData = metricsRegistry.getLocalMetrics();
-
-    metricsRegistry.afterPropertiesSet();
-    observerManager.init();
-    Thread.sleep(1000);
-    // get the metrics from local data and compare
-    localData = metricsRegistry.getLocalMetrics();
-    Assert.assertEquals(1, localData.getTotalReqProvider());
-    Assert.assertEquals(1, localData.getTotalFailReqProvider());
-    Assert.assertEquals(1, localData.getTotalReqConsumer());
-    Assert.assertEquals(1, localData.getTotalFailReqConsumer());
-    Assert.assertEquals(20L, localData.getOperMetTotalReq("sayHi").longValue());
-    Assert.assertEquals(20L, localData.getOperMetTotalFailReq("sayHi").longValue());
-
-    MetricsDataMonitor localData1 = metricsRegistry.getLocalMetrics();
-    Assert.assertEquals(20L, localData1.getOperMetTotalReq("sayHi").longValue());
-    Assert.assertEquals(20L, localData1.getOperMetTotalFailReq("sayHi").longValue());
-  }
-
-  @Test
-  public void testQueueMetrics() throws Exception {
-    QueueMetricsData reqQueue1 = new QueueMetricsData();
-    reqQueue1.setCountInQueue(1);
-    reqQueue1.setMaxLifeTimeInQueue(2);
-    reqQueue1.setMinLifeTimeInQueue(1);
-    reqQueue1.setTotalCount(10);
-    reqQueue1.setTotalTime(100);
-    reqQueue1.setTotalServExecutionCount(5);
-    reqQueue1.setTotalServExecutionTime(50);
-    metricsDataMonitor.setQueueMetrics("/sayBye", reqQueue1);
-
-    metricsRegistry.afterPropertiesSet();
-    observerManager.init();
-    Thread.sleep(1000);
-    // get the metrics from local data and compare
-    Map<String, QueueMetricsData> localMap = localData.getQueueMetrics();
-    QueueMetricsData reqQueue2 = localMap.get("/sayBye");
-
-    Assert.assertEquals(1L, reqQueue2.getCountInQueue().longValue());
-    Assert.assertEquals(1L, reqQueue2.getMinLifeTimeInQueue().longValue());
-    Assert.assertEquals(2L, reqQueue2.getMaxLifeTimeInQueue().longValue());
-    Assert.assertEquals(10L, reqQueue2.getTotalCount().longValue());
-    Assert.assertEquals(100L, reqQueue2.getTotalTime().longValue());
-    Assert.assertEquals(5, reqQueue2.getTotalServExecutionCount().longValue());
-    Assert.assertEquals(50, reqQueue2.getTotalServExecutionTime().longValue());
-  }
-
-  @Test
-  public void testQueueMetrics1() throws Exception {
-    QueueMetricsData reqQueue1 = new QueueMetricsData();
-    reqQueue1.setCountInQueue(10);
-    reqQueue1.setMaxLifeTimeInQueue(2);
-    reqQueue1.setMinLifeTimeInQueue(2);
-    reqQueue1.setTotalCount(1);
-    reqQueue1.setTotalTime(10);
-    reqQueue1.setTotalServExecutionCount(1);
-    reqQueue1.setTotalServExecutionTime(1);
-    localData.setQueueMetrics("/sayBye", reqQueue1);
-
-    QueueMetricsData reqQueue2 = new QueueMetricsData();
-    reqQueue2.setCountInQueue(10);
-    reqQueue2.setMaxLifeTimeInQueue(2);
-    reqQueue2.setMinLifeTimeInQueue(2);
-    reqQueue2.setTotalCount(10);
-    reqQueue2.setTotalTime(100);
-    reqQueue2.setTotalServExecutionCount(5);
-    reqQueue2.setTotalServExecutionTime(50);
-    metricsDataMonitor.setQueueMetrics("/sayBye", reqQueue2);
-
-    metricsRegistry.afterPropertiesSet();
-    observerManager.init();
-    Thread.sleep(1000);
-    // get the metrics from local data and compare
-    Map<String, QueueMetricsData> localMap = localData.getQueueMetrics();
-    QueueMetricsData reqQueue3 = localMap.get("/sayBye");
-
-    Assert.assertEquals(10L, reqQueue3.getCountInQueue().longValue());
-    Assert.assertEquals(2L, reqQueue3.getMinLifeTimeInQueue().longValue());
-    Assert.assertEquals(2L, reqQueue3.getMaxLifeTimeInQueue().longValue());
-    Assert.assertEquals(10L, reqQueue3.getTotalCount().longValue());
-    Assert.assertEquals(100L, reqQueue3.getTotalTime().longValue());
-    Assert.assertEquals(5L, reqQueue3.getTotalServExecutionCount().longValue());
-    Assert.assertEquals(50L, reqQueue3.getTotalServExecutionTime().longValue());
-  }
-
-  @Test
-  public void testCalculateTps() {
-    observerManager.init();
-    List<TpsAndLatencyData> tpsAndLatencyData = new ArrayList<>();
-    tpsAndLatencyData.add(new TpsAndLatencyData(1, 1, 100, 100));
-    tpsAndLatencyData.add(new TpsAndLatencyData(2, 2, 200, 200));
-    String results = metricsRegistry.calculateTpsAndLatency(tpsAndLatencyData);
-    Assert.assertTrue("{tps=40.0, latency=166.7}".equals(results));
-  }
-}
diff --git a/foundations/foundation-metrics/src/test/java/org/apache/servicecomb/foundation/metrics/TestSimpleMetricsContentFormatter.java b/foundations/foundation-metrics/src/test/java/org/apache/servicecomb/foundation/metrics/TestSimpleMetricsContentFormatter.java
deleted file mode 100644
index 9edbc24..0000000
--- a/foundations/foundation-metrics/src/test/java/org/apache/servicecomb/foundation/metrics/TestSimpleMetricsContentFormatter.java
+++ /dev/null
@@ -1,41 +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 org.apache.servicecomb.foundation.metrics;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.servicecomb.foundation.metrics.output.servo.SimpleMetricsContentFormatter;
-import org.junit.Assert;
-import org.junit.Test;
-
-public class TestSimpleMetricsContentFormatter {
-
-  @Test
-  public void testFormatter() {
-    SimpleMetricsContentFormatter formatter = new SimpleMetricsContentFormatter();
-
-    Map<String, String> input = new HashMap<>();
-    input.put("key", "value");
-
-    Map<String, String> output = formatter.format(input);
-
-    Assert.assertTrue(output.containsKey("key"));
-    Assert.assertTrue(output.get("key").contains("\"key\":\"value\""));
-  }
-}
diff --git a/foundations/foundation-metrics/src/test/java/org/apache/servicecomb/foundation/metrics/performance/TestMetricsDataMonitor.java b/foundations/foundation-metrics/src/test/java/org/apache/servicecomb/foundation/metrics/performance/TestMetricsDataMonitor.java
deleted file mode 100644
index de4fc5d..0000000
--- a/foundations/foundation-metrics/src/test/java/org/apache/servicecomb/foundation/metrics/performance/TestMetricsDataMonitor.java
+++ /dev/null
@@ -1,132 +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 org.apache.servicecomb.foundation.metrics.performance;
-
-import org.junit.After;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-
-public class TestMetricsDataMonitor {
-  MetricsDataMonitor metricsDataMonitor = null;
-
-  @Before
-  public void setUp() throws Exception {
-    metricsDataMonitor = new MetricsDataMonitor();
-  }
-
-  @After
-  public void tearDown() throws Exception {
-    metricsDataMonitor = null;
-  }
-
-  @Test
-  public void testReqMapValues() {
-    QueueMetricsData reqQueue = new QueueMetricsData();
-    reqQueue.setCountInQueue(1L);
-    reqQueue.setMaxLifeTimeInQueue(5L);
-    reqQueue.setMinLifeTimeInQueue(1L);
-    reqQueue.toString();
-
-    metricsDataMonitor.setQueueMetrics("/sayHi", reqQueue);
-    QueueMetricsData reqQueueTest = metricsDataMonitor.getOrCreateQueueMetrics("/sayHi");
-    QueueMetricsData reqQueueTestAbsent = metricsDataMonitor.getOrCreateQueueMetrics("");
-    Assert.assertEquals(1, reqQueueTest.getCountInQueue().longValue());
-    Assert.assertEquals(5, reqQueueTest.getMaxLifeTimeInQueue().longValue());
-    Assert.assertEquals(1, reqQueueTest.getMinLifeTimeInQueue().longValue());
-    Assert.assertEquals(0, reqQueueTestAbsent.getCountInQueue().longValue());
-  }
-
-  @Test
-  public void testOperationMetricsMap() {
-    QueueMetrics reqQueue = new QueueMetrics();
-    QueueMetricsData queueMetrics = new QueueMetricsData();
-    queueMetrics.incrementCountInQueue();
-    reqQueue.setQueueStartTime(200);
-    reqQueue.setEndOperTime(250);
-    reqQueue.setQueueEndTime(300);
-    reqQueue.setOperQualifiedName("name");
-    queueMetrics.setTotalTime(100L);
-    queueMetrics.setTotalServExecutionTime(200L);
-    queueMetrics.setTotalCount(100L);
-    queueMetrics.setTotalServExecutionCount(200L);
-
-    // increment the count to 5.
-    queueMetrics.incrementTotalCount();
-    queueMetrics.incrementTotalCount();
-    queueMetrics.incrementTotalCount();
-    queueMetrics.incrementTotalCount();
-    queueMetrics.incrementTotalCount();
-    queueMetrics.incrementTotalServExecutionCount();
-    queueMetrics.incrementTotalServExecutionCount();
-    queueMetrics.incrementTotalServExecutionCount();
-    queueMetrics.incrementTotalServExecutionCount();
-    queueMetrics.incrementTotalServExecutionCount();
-
-    queueMetrics.setMinLifeTimeInQueue(1);
-    queueMetrics.resetMinLifeTimeInQueue();
-    Assert.assertEquals(0, queueMetrics.getMinLifeTimeInQueue().longValue());
-
-    queueMetrics.setMaxLifeTimeInQueue(1);
-    queueMetrics.resetMaxLifeTimeInQueue();
-    Assert.assertEquals(0, queueMetrics.getMaxLifeTimeInQueue().longValue());
-
-    metricsDataMonitor.setQueueMetrics("/sayHi", queueMetrics);
-
-    //Assert.assertEquals(1, reqQueueTest.getConuntInQueue());
-    Assert.assertEquals(300, reqQueue.getQueueEndTime());
-    Assert.assertEquals(250, reqQueue.getEndOperTime());
-    Assert.assertEquals(200, reqQueue.getQueueStartTime());
-    Assert.assertEquals("name", reqQueue.getOperQualifiedName());
-    Assert.assertEquals(100L, queueMetrics.getTotalTime().longValue());
-    Assert.assertEquals(105L, queueMetrics.getTotalCount().longValue());
-    Assert.assertEquals(200, queueMetrics.getTotalServExecutionTime().longValue());
-    Assert.assertEquals(205L, queueMetrics.getTotalServExecutionCount().longValue());
-    queueMetrics.decrementCountInQueue();
-    Assert.assertEquals(0, queueMetrics.getCountInQueue().longValue());
-  }
-
-  @Test
-  public void testHystrixAvgTimes() {
-
-    // total request for provider
-    metricsDataMonitor.incrementTotalReqProvider();
-    metricsDataMonitor.incrementTotalFailReqProvider();
-    Assert.assertEquals(1, metricsDataMonitor.getTotalReqProvider());
-    Assert.assertEquals(1, metricsDataMonitor.getTotalFailReqProvider());
-    metricsDataMonitor.incrementTotalReqProvider();
-    metricsDataMonitor.incrementTotalFailReqProvider();
-    Assert.assertEquals(2, metricsDataMonitor.getTotalReqProvider());
-    Assert.assertEquals(2, metricsDataMonitor.getTotalFailReqProvider());
-
-    // total request for consumer
-    metricsDataMonitor.incrementTotalReqConsumer();
-    metricsDataMonitor.incrementTotalFailReqConsumer();
-    Assert.assertEquals(1, metricsDataMonitor.getTotalReqConsumer());
-    Assert.assertEquals(1, metricsDataMonitor.getTotalFailReqConsumer());
-    metricsDataMonitor.incrementTotalReqConsumer();
-    metricsDataMonitor.incrementTotalFailReqConsumer();
-    Assert.assertEquals(2, metricsDataMonitor.getTotalReqConsumer());
-    Assert.assertEquals(2, metricsDataMonitor.getTotalFailReqConsumer());
-
-    metricsDataMonitor.setOperMetTotalReq("/sayHi", 10L);
-    metricsDataMonitor.setOperMetTotalFailReq("/sayHi", 20L);
-    Assert.assertEquals(10L, metricsDataMonitor.getOperMetTotalReq("/sayHi").longValue());
-    Assert.assertEquals(20L, metricsDataMonitor.getOperMetTotalFailReq("/sayHi").longValue());
-  }
-}
diff --git a/foundations/foundation-metrics/src/test/java/org/apache/servicecomb/foundation/metrics/performance/TestMetricsDataMonitorUtil.java b/foundations/foundation-metrics/src/test/java/org/apache/servicecomb/foundation/metrics/performance/TestMetricsDataMonitorUtil.java
deleted file mode 100644
index 327bfd5..0000000
--- a/foundations/foundation-metrics/src/test/java/org/apache/servicecomb/foundation/metrics/performance/TestMetricsDataMonitorUtil.java
+++ /dev/null
@@ -1,61 +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 org.apache.servicecomb.foundation.metrics.performance;
-
-import org.apache.servicecomb.foundation.metrics.MetricsServoRegistry;
-import org.junit.After;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-
-public class TestMetricsDataMonitorUtil {
-  MetricsDataMonitor metricsDataMonitor = null;
-
-  MetricsDataMonitorUtil metricsDataMonitorUtil = null;
-
-  @Before
-  public void setUp() throws Exception {
-    metricsDataMonitor = MetricsServoRegistry.getOrCreateLocalMetrics();
-    metricsDataMonitorUtil = new MetricsDataMonitorUtil();
-  }
-
-  @After
-  public void tearDown() throws Exception {
-    metricsDataMonitor = null;
-  }
-
-  @Test
-  public void testAllReqConsumer() {
-    metricsDataMonitorUtil.setAllReqProviderAndConsumer("/sayHi", "CONSUMER");
-    Assert.assertNotEquals(0L, metricsDataMonitor.getTotalReqConsumer());
-    metricsDataMonitorUtil.setAllFailReqProviderAndConsumer("/sayHi", "CONSUMER");
-    Assert.assertNotEquals(0L, metricsDataMonitor.getTotalFailReqConsumer());
-  }
-
-  @Test
-  public void testAllReqProvider() {
-    metricsDataMonitorUtil.setAllReqProviderAndConsumer("/sayBye", "PRODUCER");
-    Assert.assertNotEquals(0L, metricsDataMonitor.getTotalReqProvider());
-    metricsDataMonitorUtil.setAllReqProviderAndConsumer("/sayBye", "PRODUCER");
-    Assert.assertNotEquals(0L, metricsDataMonitor.getTotalReqProvider());
-    metricsDataMonitorUtil.setAllFailReqProviderAndConsumer("/sayBye", "PRODUCER");
-    Assert.assertNotEquals(0L, metricsDataMonitor.getTotalFailReqProvider());
-    metricsDataMonitorUtil.setAllFailReqProviderAndConsumer("/sayBye", "PRODUCER");
-    Assert.assertNotEquals(0L, metricsDataMonitor.getTotalFailReqProvider());
-  }
-}
diff --git a/handlers/handler-bizkeeper/src/main/java/org/apache/servicecomb/bizkeeper/BizkeeperHandler.java b/handlers/handler-bizkeeper/src/main/java/org/apache/servicecomb/bizkeeper/BizkeeperHandler.java
index 961f7f9..bf6f911 100644
--- a/handlers/handler-bizkeeper/src/main/java/org/apache/servicecomb/bizkeeper/BizkeeperHandler.java
+++ b/handlers/handler-bizkeeper/src/main/java/org/apache/servicecomb/bizkeeper/BizkeeperHandler.java
@@ -19,7 +19,6 @@ package org.apache.servicecomb.bizkeeper;
 
 import org.apache.servicecomb.core.Handler;
 import org.apache.servicecomb.core.Invocation;
-import org.apache.servicecomb.foundation.metrics.performance.MetricsDataMonitorUtil;
 import org.apache.servicecomb.swagger.invocation.AsyncResponse;
 import org.apache.servicecomb.swagger.invocation.Response;
 import org.slf4j.Logger;
@@ -71,22 +70,13 @@ public abstract class BizkeeperHandler implements Handler {
   protected abstract BizkeeperCommand createBizkeeperCommand(Invocation invocation);
 
   @Override
-  public void handle(Invocation invocation, AsyncResponse asyncResp) throws Exception {
+  public void handle(Invocation invocation, AsyncResponse asyncResp) {
     HystrixObservable<Response> command = delegate.createBizkeeperCommand(invocation);
 
-    new MetricsDataMonitorUtil()
-        .setAllReqProviderAndConsumer(invocation.getOperationMeta().getMicroserviceQualifiedName(),
-            String.valueOf(invocation.getInvocationType()));
-
     Observable<Response> observable = command.toObservable();
     observable.subscribe(asyncResp::complete, error -> {
       LOG.warn("catch error in bizkeeper:" + error.getMessage());
       asyncResp.fail(invocation.getInvocationType(), error);
-
-      new MetricsDataMonitorUtil()
-          .setAllFailReqProviderAndConsumer(invocation.getOperationMeta().getMicroserviceQualifiedName(),
-              String.valueOf(invocation.getInvocationType()));
-
     }, () -> {
 
     });
diff --git a/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/HighwayServerInvoke.java b/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/HighwayServerInvoke.java
index 020c926..843c0fe 100644
--- a/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/HighwayServerInvoke.java
+++ b/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/HighwayServerInvoke.java
@@ -31,9 +31,6 @@ import org.apache.servicecomb.core.definition.OperationMeta;
 import org.apache.servicecomb.core.definition.SchemaMeta;
 import org.apache.servicecomb.core.metrics.InvocationStartedEvent;
 import org.apache.servicecomb.foundation.common.utils.EventUtils;
-import org.apache.servicecomb.foundation.metrics.MetricsServoRegistry;
-import org.apache.servicecomb.foundation.metrics.performance.QueueMetrics;
-import org.apache.servicecomb.foundation.metrics.performance.QueueMetricsData;
 import org.apache.servicecomb.foundation.vertx.tcp.TcpConnection;
 import org.apache.servicecomb.swagger.invocation.InvocationType;
 import org.apache.servicecomb.swagger.invocation.Response;
@@ -110,9 +107,9 @@ public class HighwayServerInvoke {
     this.bodyBuffer = bodyBuffer;
   }
 
-  private void runInExecutor(QueueMetrics metricsData, InvocationStartedEvent startedEvent) {
+  private void runInExecutor(InvocationStartedEvent startedEvent) {
     try {
-      doRunInExecutor(metricsData, startedEvent);
+      doRunInExecutor(startedEvent);
     } catch (Throwable e) {
       String msg = String.format("handle request error, %s, msgId=%d",
           operationMeta.getMicroserviceQualifiedName(),
@@ -123,17 +120,15 @@ public class HighwayServerInvoke {
     }
   }
 
-  private void doRunInExecutor(QueueMetrics metricsData, InvocationStartedEvent startedEvent) throws Exception {
+  private void doRunInExecutor(InvocationStartedEvent startedEvent) throws Exception {
     Invocation invocation = HighwayCodec.decodeRequest(header, operationProtobuf, bodyBuffer, protobufFeature);
     invocation.getHandlerContext().put(Const.REMOTE_ADDRESS, this.connection.getNetSocket().remoteAddress());
-    updateMetrics(invocation);
     //立刻设置开始时间,否则Finished时无法计算TotalTime
     invocation.setStartTime(startedEvent.getStartedTime());
     invocation.triggerStartProcessingEvent();
 
     invocation.next(response -> {
       sendResponse(invocation.getContext(), response);
-      endMetrics(invocation);
       invocation.triggerFinishedEvent(response.getStatusCode(), response.isSuccessed());
     });
   }
@@ -170,55 +165,6 @@ public class HighwayServerInvoke {
     InvocationStartedEvent startedEvent = new InvocationStartedEvent(operationMeta.getMicroserviceQualifiedName(),
         InvocationType.PRODUCER, System.nanoTime());
     EventUtils.triggerEvent(startedEvent);
-    QueueMetrics metricsData = initMetrics(operationMeta);
-    operationMeta.getExecutor().execute(() -> runInExecutor(metricsData, startedEvent));
-  }
-
-  /**
-   * Init the metrics. Note down the queue count and start time.
-   * @param operationMeta Operation data
-   * @return QueueMetrics
-   */
-  private QueueMetrics initMetrics(OperationMeta operationMeta) {
-    QueueMetrics metricsData = new QueueMetrics();
-    metricsData.setQueueStartTime(System.currentTimeMillis());
-    metricsData.setOperQualifiedName(operationMeta.getMicroserviceQualifiedName());
-    QueueMetricsData reqQueue = MetricsServoRegistry.getOrCreateLocalMetrics()
-        .getOrCreateQueueMetrics(operationMeta.getMicroserviceQualifiedName());
-    reqQueue.incrementCountInQueue();
-    return metricsData;
-  }
-
-  /**
-   * Update the queue metrics.
-   */
-  private void updateMetrics(Invocation invocation) {
-    QueueMetrics metricsData = (QueueMetrics) invocation.getMetricsData();
-    if (null != metricsData) {
-      metricsData.setQueueEndTime(System.currentTimeMillis());
-      QueueMetricsData reqQueue = MetricsServoRegistry.getOrCreateLocalMetrics()
-          .getOrCreateQueueMetrics(operationMeta.getMicroserviceQualifiedName());
-      reqQueue.incrementTotalCount();
-      Long timeInQueue = metricsData.getQueueEndTime() - metricsData.getQueueStartTime();
-      reqQueue.setTotalTime(reqQueue.getTotalTime() + timeInQueue);
-      reqQueue.setMinLifeTimeInQueue(timeInQueue);
-      reqQueue.setMaxLifeTimeInQueue(timeInQueue);
-      reqQueue.decrementCountInQueue();
-    }
-  }
-
-  /**
-   * Prepare the end time of queue metrics.
-   */
-  private void endMetrics(Invocation invocation) {
-    QueueMetrics metricsData = (QueueMetrics) invocation.getMetricsData();
-    if (null != metricsData) {
-      metricsData.setEndOperTime(System.currentTimeMillis());
-      QueueMetricsData reqQueue = MetricsServoRegistry.getOrCreateLocalMetrics()
-          .getOrCreateQueueMetrics(operationMeta.getMicroserviceQualifiedName());
-      reqQueue.incrementTotalServExecutionCount();
-      reqQueue.setTotalServExecutionTime(
-          reqQueue.getTotalServExecutionTime() + (metricsData.getEndOperTime() - metricsData.getQueueEndTime()));
-    }
+    operationMeta.getExecutor().execute(() -> runInExecutor(startedEvent));
   }
 }

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