This is an automated email from the ASF dual-hosted git repository. liubao pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/servicecomb-java-chassis.git
commit 746f42cf6d1211532fd848fdb30f8f9e8e99ba85 Author: wujimin <[email protected]> AuthorDate: Thu Nov 22 09:12:35 2018 +0800 [SCB-1034][WIP] invocation meters switch to new mechanism --- .../metrics/core/InvocationMetersInitializer.java | 9 +- .../meter/invocation/AbstractInvocationMeter.java | 88 +++++-- .../meter/invocation/AbstractInvocationMeters.java | 10 +- .../meter/invocation/ConsumerInvocationMeter.java | 82 +++--- .../meter/invocation/ConsumerInvocationMeters.java | 7 +- .../core/meter/invocation/EdgeInvocationMeter.java | 52 ++-- .../meter/invocation/EdgeInvocationMeters.java | 7 +- .../meter/invocation/MeterInvocationConst.java | 49 ++-- .../meter/invocation/ProducerInvocationMeter.java | 58 ++--- .../meter/invocation/ProducerInvocationMeters.java | 7 +- .../core/TestInvocationMetersInitializer.java | 187 ++++++++------ .../publish/TestInvocationPublishModelFactory.java | 281 +++++++++++++++++++-- 12 files changed, 557 insertions(+), 280 deletions(-) diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/InvocationMetersInitializer.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/InvocationMetersInitializer.java index 72a05ef..d265434 100644 --- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/InvocationMetersInitializer.java +++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/InvocationMetersInitializer.java @@ -19,9 +19,9 @@ package org.apache.servicecomb.metrics.core; import org.apache.servicecomb.core.Invocation; import org.apache.servicecomb.core.event.InvocationFinishEvent; import org.apache.servicecomb.core.event.InvocationStartEvent; -import org.apache.servicecomb.foundation.common.utils.SPIServiceUtils; import org.apache.servicecomb.foundation.metrics.MetricsBootstrapConfig; import org.apache.servicecomb.foundation.metrics.MetricsInitializer; +import org.apache.servicecomb.foundation.metrics.registry.GlobalRegistry; import org.apache.servicecomb.metrics.core.meter.ConsumerMeters; import org.apache.servicecomb.metrics.core.meter.EdgeMeters; import org.apache.servicecomb.metrics.core.meter.ProducerMeters; @@ -30,7 +30,6 @@ import org.apache.servicecomb.metrics.core.meter.invocation.AbstractInvocationMe import com.google.common.eventbus.AllowConcurrentEvents; import com.google.common.eventbus.EventBus; import com.google.common.eventbus.Subscribe; -import com.netflix.spectator.api.CompositeRegistry; import com.netflix.spectator.api.Registry; public class InvocationMetersInitializer implements MetricsInitializer { @@ -41,10 +40,8 @@ public class InvocationMetersInitializer implements MetricsInitializer { private EdgeMeters edgeMeters; @Override - public void init(CompositeRegistry globalRegistry, EventBus eventBus, MetricsBootstrapConfig config) { - DefaultRegistryInitializer defaultRegistryInitializer = - SPIServiceUtils.getTargetService(MetricsInitializer.class, DefaultRegistryInitializer.class); - Registry registry = defaultRegistryInitializer.getRegistry(); + public void init(GlobalRegistry globalRegistry, EventBus eventBus, MetricsBootstrapConfig config) { + Registry registry = globalRegistry.getDefaultRegistry(); consumerMeters = new ConsumerMeters(registry); producerMeters = new ProducerMeters(registry); diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/AbstractInvocationMeter.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/AbstractInvocationMeter.java index dd0851e..3023602 100644 --- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/AbstractInvocationMeter.java +++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/AbstractInvocationMeter.java @@ -16,52 +16,84 @@ */ package org.apache.servicecomb.metrics.core.meter.invocation; -import java.util.concurrent.TimeUnit; +import java.util.ArrayList; +import java.util.List; -import org.apache.servicecomb.core.Invocation; import org.apache.servicecomb.core.event.InvocationFinishEvent; -import org.apache.servicecomb.swagger.invocation.Response; +import org.apache.servicecomb.core.invocation.InvocationStageTrace; +import org.apache.servicecomb.foundation.metrics.meter.AbstractPeriodMeter; +import org.apache.servicecomb.foundation.metrics.meter.SimpleTimer; import com.netflix.spectator.api.Id; +import com.netflix.spectator.api.Measurement; import com.netflix.spectator.api.Registry; -import com.netflix.spectator.api.Timer; -public abstract class AbstractInvocationMeter { +public abstract class AbstractInvocationMeter extends AbstractPeriodMeter { + private final Registry registry; + //total time - private Timer totalTimer; + private SimpleTimer totalTimer; // prepare time - private Timer prepareTimer; + private SimpleTimer prepareTimer; // handler request - private Timer handlersRequestTimer; + private SimpleTimer handlersRequestTimer; // handler response - private Timer handlersResponseTimer; + private SimpleTimer handlersResponseTimer; + + private long lastUpdated; + + public AbstractInvocationMeter(Registry registry, Id id) { + this.registry = registry; + this.id = id; + + totalTimer = creatStageTimer(MeterInvocationConst.STAGE_TOTAL); + prepareTimer = creatStageTimer(MeterInvocationConst.STAGE_PREPARE); + handlersRequestTimer = creatStageTimer(MeterInvocationConst.STAGE_HANDLERS_REQUEST); + handlersResponseTimer = creatStageTimer(MeterInvocationConst.STAGE_HANDLERS_RESPONSE); + } + + protected SimpleTimer creatStageTimer(String stageValue) { + return createTimer(id.withTag(MeterInvocationConst.TAG_STAGE, stageValue)); + } - public AbstractInvocationMeter(Registry registry, Id id, Invocation invocation, Response response) { + protected SimpleTimer createTimer(String tagKey, String tagValue) { + return createTimer(id.withTag(tagKey, tagValue)); + } - totalTimer = registry.timer(id.withTag(MeterInvocationConst.TAG_STAGE, MeterInvocationConst.STAGE_TOTAL)); - prepareTimer = registry.timer(id.withTag(MeterInvocationConst.TAG_STAGE, MeterInvocationConst.STAGE_PREPARE)); - handlersRequestTimer = - registry.timer(id.withTag(MeterInvocationConst.TAG_STAGE, MeterInvocationConst.STAGE_HANDLERS_REQUEST)); - handlersResponseTimer = - registry.timer(id.withTag(MeterInvocationConst.TAG_STAGE, MeterInvocationConst.STAGE_HANDLERS_RESPONSE)); + protected SimpleTimer createTimer(Id timerId) { + return new SimpleTimer(timerId); } public void onInvocationFinish(InvocationFinishEvent event) { + lastUpdated = registry.clock().wallTime(); + + InvocationStageTrace stageTrace = event.getInvocation().getInvocationStageTrace(); + totalTimer.record((long) stageTrace.calcTotalTime()); + handlersRequestTimer.record((long) stageTrace.calcHandlersRequestTime()); + handlersResponseTimer.record((long) stageTrace.calcHandlersResponseTime()); + prepareTimer.record((long) stageTrace.calcInvocationPrepareTime()); + } + + @Override + public void calcMeasurements(long msNow, long secondInterval) { + List<Measurement> measurements = new ArrayList<>(3); + calcMeasurements(measurements, msNow, secondInterval); + allMeasurements = measurements; + } + + @Override + public void calcMeasurements(List<Measurement> measurements, long msNow, long secondInterval) { + totalTimer.calcMeasurements(measurements, msNow, secondInterval); + handlersRequestTimer.calcMeasurements(measurements, msNow, secondInterval); + handlersResponseTimer.calcMeasurements(measurements, msNow, secondInterval); + prepareTimer.calcMeasurements(measurements, msNow, secondInterval); + } - totalTimer.record((long) event.getInvocation().getInvocationStageTrace().calcTotalTime(), - TimeUnit.NANOSECONDS); - - handlersRequestTimer - .record((long) event.getInvocation().getInvocationStageTrace().calcHandlersRequestTime(), - TimeUnit.NANOSECONDS); - handlersResponseTimer - .record((long) event.getInvocation().getInvocationStageTrace().calcHandlersResponseTime(), - TimeUnit.NANOSECONDS); - prepareTimer - .record((long) event.getInvocation().getInvocationStageTrace().calcInvocationPrepareTime(), - TimeUnit.NANOSECONDS); + @Override + public boolean hasExpired() { + return super.hasExpired(); } } diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/AbstractInvocationMeters.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/AbstractInvocationMeters.java index 179cd5a..e911480 100644 --- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/AbstractInvocationMeters.java +++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/AbstractInvocationMeters.java @@ -26,6 +26,7 @@ import org.apache.servicecomb.swagger.invocation.Response; import com.netflix.spectator.api.Id; import com.netflix.spectator.api.Registry; +import com.netflix.spectator.api.SpectatorUtils; public abstract class AbstractInvocationMeters { protected Registry registry; @@ -70,14 +71,13 @@ public abstract class AbstractInvocationMeters { MeterInvocationConst.TAG_STATUS, String.valueOf(response.getStatusCode())); - return createMeter(id, invocation, response); + AbstractInvocationMeter meter = createMeter(id); + SpectatorUtils.registerMeter(registry, meter); + return meter; }); } - - - protected abstract AbstractInvocationMeter createMeter(Id id, Invocation invocation, - Response response); + protected abstract AbstractInvocationMeter createMeter(Id id); public void onInvocationStart(InvocationStartEvent event) { } diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/ConsumerInvocationMeter.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/ConsumerInvocationMeter.java index e8e0d38..a82624f 100644 --- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/ConsumerInvocationMeter.java +++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/ConsumerInvocationMeter.java @@ -16,70 +16,66 @@ */ package org.apache.servicecomb.metrics.core.meter.invocation; -import java.util.concurrent.TimeUnit; +import java.util.List; -import org.apache.servicecomb.core.Invocation; import org.apache.servicecomb.core.event.InvocationFinishEvent; import org.apache.servicecomb.core.invocation.InvocationStageTrace; -import org.apache.servicecomb.swagger.invocation.Response; +import org.apache.servicecomb.foundation.metrics.meter.SimpleTimer; import com.netflix.spectator.api.Id; +import com.netflix.spectator.api.Measurement; import com.netflix.spectator.api.Registry; -import com.netflix.spectator.api.Timer; public class ConsumerInvocationMeter extends AbstractInvocationMeter { + private SimpleTimer clientFiltersRequestTimer; - private Timer clientFiltersRequestTimer; + private SimpleTimer consumerSendRequestTimer; - private Timer consumerSendRequestTimer; + private SimpleTimer consumerGetConnectionTimer; - private Timer consumerGetConnectionTimer; + private SimpleTimer consumerWriteToBufTimer; - private Timer consumerWriteToBufTimer; + private SimpleTimer consumerWaitResponseTimer; - private Timer consumerWaitResponseTimer; + private SimpleTimer consumerWakeConsumerTimer; - private Timer consumerWakeConsumerTimer; + private SimpleTimer clientFiltersResponseTimer; - private Timer clientFiltersResponseTimer; - - - public ConsumerInvocationMeter(Registry registry, Id id, Invocation invocation, Response response) { - super(registry, id, invocation, response); - clientFiltersRequestTimer = - registry.timer(id.withTag(MeterInvocationConst.TAG_STAGE, MeterInvocationConst.STAGE_CLIENT_FILTERS_REQUEST)); - consumerSendRequestTimer = - registry.timer(id.withTag(MeterInvocationConst.TAG_STAGE, MeterInvocationConst.STAGE_CONSUMER_SEND_REQUEST)); - consumerGetConnectionTimer = - registry.timer(id.withTag(MeterInvocationConst.TAG_STAGE, MeterInvocationConst.STAGE_CONSUMER_GET_CONNECTION)); - consumerWriteToBufTimer = - registry.timer(id.withTag(MeterInvocationConst.TAG_STAGE, MeterInvocationConst.STAGE_CONSUMER_WRITE_TO_BUF)); - consumerWakeConsumerTimer = - registry.timer(id.withTag(MeterInvocationConst.TAG_STAGE, MeterInvocationConst.STAGE_CONSUMER_WAKE_CONSUMER)); - clientFiltersResponseTimer = - registry.timer(id.withTag(MeterInvocationConst.TAG_STAGE, MeterInvocationConst.STAGE_CLIENT_FILTERS_RESPONSE)); - consumerWaitResponseTimer = - registry.timer(id.withTag(MeterInvocationConst.TAG_STAGE, MeterInvocationConst.STAGE_CONSUMER_WAIT_RESPONSE)); + public ConsumerInvocationMeter(Registry registry, Id id) { + super(registry, id); + clientFiltersRequestTimer = creatStageTimer(MeterInvocationConst.STAGE_CLIENT_FILTERS_REQUEST); + consumerSendRequestTimer = creatStageTimer(MeterInvocationConst.STAGE_CONSUMER_SEND_REQUEST); + consumerGetConnectionTimer = creatStageTimer(MeterInvocationConst.STAGE_CONSUMER_GET_CONNECTION); + consumerWriteToBufTimer = creatStageTimer(MeterInvocationConst.STAGE_CONSUMER_WRITE_TO_BUF); + consumerWakeConsumerTimer = creatStageTimer(MeterInvocationConst.STAGE_CONSUMER_WAKE_CONSUMER); + clientFiltersResponseTimer = creatStageTimer(MeterInvocationConst.STAGE_CLIENT_FILTERS_RESPONSE); + consumerWaitResponseTimer = creatStageTimer(MeterInvocationConst.STAGE_CONSUMER_WAIT_RESPONSE); } @Override public void onInvocationFinish(InvocationFinishEvent event) { super.onInvocationFinish(event); + InvocationStageTrace invocationStageTrace = event.getInvocation().getInvocationStageTrace(); + clientFiltersRequestTimer.record((long) invocationStageTrace.calcClientFiltersRequestTime()); + consumerSendRequestTimer.record((long) invocationStageTrace.calcSendRequestTime()); + consumerGetConnectionTimer.record((long) invocationStageTrace.calcGetConnectionTime()); + consumerWriteToBufTimer.record((long) invocationStageTrace.calcWriteToBufferTime()); + consumerWaitResponseTimer.record((long) invocationStageTrace.calcReceiveResponseTime()); + consumerWakeConsumerTimer.record((long) invocationStageTrace.calcWakeConsumer()); + clientFiltersResponseTimer.record((long) invocationStageTrace.calcClientFiltersResponseTime()); + } + + @Override + public void calcMeasurements(List<Measurement> measurements, long msNow, long secondInterval) { + super.calcMeasurements(measurements, msNow, secondInterval); - clientFiltersRequestTimer.record((long) invocationStageTrace.calcClientFiltersRequestTime(), - TimeUnit.NANOSECONDS); - consumerSendRequestTimer.record((long) invocationStageTrace.calcSendRequestTime(), - TimeUnit.NANOSECONDS); - consumerGetConnectionTimer.record((long) invocationStageTrace.calcGetConnectionTime(), - TimeUnit.NANOSECONDS); - consumerWriteToBufTimer.record((long) invocationStageTrace.calcWriteToBufferTime(), - TimeUnit.NANOSECONDS); - consumerWaitResponseTimer.record((long) invocationStageTrace.calcReceiveResponseTime(), - TimeUnit.NANOSECONDS); - consumerWakeConsumerTimer.record((long) invocationStageTrace.calcWakeConsumer(), - TimeUnit.NANOSECONDS); - clientFiltersResponseTimer.record((long) invocationStageTrace.calcClientFiltersResponseTime(), - TimeUnit.NANOSECONDS); + clientFiltersRequestTimer.calcMeasurements(measurements, msNow, secondInterval); + consumerSendRequestTimer.calcMeasurements(measurements, msNow, secondInterval); + consumerGetConnectionTimer.calcMeasurements(measurements, msNow, secondInterval); + consumerWriteToBufTimer.calcMeasurements(measurements, msNow, secondInterval); + consumerWaitResponseTimer.calcMeasurements(measurements, msNow, secondInterval); + consumerWakeConsumerTimer.calcMeasurements(measurements, msNow, secondInterval); + clientFiltersResponseTimer.calcMeasurements(measurements, msNow, secondInterval); } } diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/ConsumerInvocationMeters.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/ConsumerInvocationMeters.java index dd24ecb..5543c9f 100644 --- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/ConsumerInvocationMeters.java +++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/ConsumerInvocationMeters.java @@ -16,9 +16,6 @@ */ package org.apache.servicecomb.metrics.core.meter.invocation; -import org.apache.servicecomb.core.Invocation; -import org.apache.servicecomb.swagger.invocation.Response; - import com.netflix.spectator.api.Id; import com.netflix.spectator.api.Registry; @@ -28,7 +25,7 @@ public class ConsumerInvocationMeters extends AbstractInvocationMeters { } @Override - protected AbstractInvocationMeter createMeter(Id id, Invocation invocation, Response response) { - return new ConsumerInvocationMeter(registry, id, invocation, response); + protected AbstractInvocationMeter createMeter(Id id) { + return new ConsumerInvocationMeter(registry, id); } } diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/EdgeInvocationMeter.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/EdgeInvocationMeter.java index ac97167..ca41a2f 100644 --- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/EdgeInvocationMeter.java +++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/EdgeInvocationMeter.java @@ -17,38 +17,31 @@ package org.apache.servicecomb.metrics.core.meter.invocation; -import java.util.concurrent.TimeUnit; +import java.util.List; -import org.apache.servicecomb.core.Invocation; import org.apache.servicecomb.core.event.InvocationFinishEvent; import org.apache.servicecomb.core.invocation.InvocationStageTrace; -import org.apache.servicecomb.swagger.invocation.Response; +import org.apache.servicecomb.foundation.metrics.meter.SimpleTimer; import com.netflix.spectator.api.Id; +import com.netflix.spectator.api.Measurement; import com.netflix.spectator.api.Registry; -import com.netflix.spectator.api.Timer; public class EdgeInvocationMeter extends ConsumerInvocationMeter { + private SimpleTimer executorQueueTimer; - private Timer executorQueueTimer; + private SimpleTimer serverFiltersRequestTimer; - private Timer serverFiltersRequestTimer; + private SimpleTimer serverFiltersResponseTimer; - private Timer serverFiltersResponseTimer; + private SimpleTimer sendResponseTimer; - private Timer sendResponseTimer; - - public EdgeInvocationMeter(Registry registry, Id id, Invocation invocation, Response response) { - super(registry, id, invocation, response); - executorQueueTimer = - registry.timer(id.withTag(MeterInvocationConst.TAG_STAGE, MeterInvocationConst.STAGE_EXECUTOR_QUEUE)); - - serverFiltersRequestTimer = - registry.timer(id.withTag(MeterInvocationConst.TAG_STAGE, MeterInvocationConst.STAGE_SERVER_FILTERS_REQUEST)); - serverFiltersResponseTimer = - registry.timer(id.withTag(MeterInvocationConst.TAG_STAGE, MeterInvocationConst.STAGE_SERVER_FILTERS_RESPONSE)); - sendResponseTimer = - registry.timer(id.withTag(MeterInvocationConst.TAG_STAGE, MeterInvocationConst.STAGE_PRODUCER_SEND_RESPONSE)); + public EdgeInvocationMeter(Registry registry, Id id) { + super(registry, id); + executorQueueTimer = creatStageTimer(MeterInvocationConst.STAGE_EXECUTOR_QUEUE); + serverFiltersRequestTimer = creatStageTimer(MeterInvocationConst.STAGE_SERVER_FILTERS_REQUEST); + serverFiltersResponseTimer = creatStageTimer(MeterInvocationConst.STAGE_SERVER_FILTERS_RESPONSE); + sendResponseTimer = creatStageTimer(MeterInvocationConst.STAGE_PRODUCER_SEND_RESPONSE); } @Override @@ -56,12 +49,19 @@ public class EdgeInvocationMeter extends ConsumerInvocationMeter { super.onInvocationFinish(event); InvocationStageTrace invocationStageTrace = event.getInvocation().getInvocationStageTrace(); - executorQueueTimer.record((long) invocationStageTrace.calcThreadPoolQueueTime(), - TimeUnit.NANOSECONDS); + executorQueueTimer.record((long) invocationStageTrace.calcThreadPoolQueueTime()); + serverFiltersRequestTimer.record((long) invocationStageTrace.calcServerFiltersRequestTime()); + serverFiltersResponseTimer.record((long) invocationStageTrace.calcServerFiltersResponseTime()); + sendResponseTimer.record((long) invocationStageTrace.calcSendResponseTime()); + } + + @Override + public void calcMeasurements(List<Measurement> measurements, long msNow, long secondInterval) { + super.calcMeasurements(measurements, msNow, secondInterval); - serverFiltersRequestTimer.record((long) invocationStageTrace.calcServerFiltersRequestTime(), TimeUnit.NANOSECONDS); - serverFiltersResponseTimer - .record((long) invocationStageTrace.calcServerFiltersResponseTime(), TimeUnit.NANOSECONDS); - sendResponseTimer.record((long) invocationStageTrace.calcSendResponseTime(), TimeUnit.NANOSECONDS); + executorQueueTimer.calcMeasurements(measurements, msNow, secondInterval); + serverFiltersRequestTimer.calcMeasurements(measurements, msNow, secondInterval); + serverFiltersResponseTimer.calcMeasurements(measurements, msNow, secondInterval); + sendResponseTimer.calcMeasurements(measurements, msNow, secondInterval); } } diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/EdgeInvocationMeters.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/EdgeInvocationMeters.java index 70c5c20..b7db74c 100644 --- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/EdgeInvocationMeters.java +++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/EdgeInvocationMeters.java @@ -17,9 +17,6 @@ package org.apache.servicecomb.metrics.core.meter.invocation; -import org.apache.servicecomb.core.Invocation; -import org.apache.servicecomb.swagger.invocation.Response; - import com.netflix.spectator.api.Id; import com.netflix.spectator.api.Registry; @@ -29,7 +26,7 @@ public class EdgeInvocationMeters extends ConsumerInvocationMeters { } @Override - protected AbstractInvocationMeter createMeter(Id id, Invocation invocation, Response response) { - return new EdgeInvocationMeter(registry, id, invocation, response); + protected AbstractInvocationMeter createMeter(Id id) { + return new EdgeInvocationMeter(registry, id); } } diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/MeterInvocationConst.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/MeterInvocationConst.java index b4e12d2..e09da9b 100644 --- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/MeterInvocationConst.java +++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/MeterInvocationConst.java @@ -19,56 +19,55 @@ package org.apache.servicecomb.metrics.core.meter.invocation; import com.netflix.spectator.api.Statistic; public interface MeterInvocationConst { - final String INVOCATION_NAME = "servicecomb.invocation"; + String INVOCATION_NAME = "servicecomb.invocation"; // consumer or producer - final String TAG_ROLE = "role"; + String TAG_ROLE = "role"; - final String TAG_OPERATION = "operation"; + String TAG_OPERATION = "operation"; - final String TAG_TRANSPORT = "transport"; + String TAG_TRANSPORT = "transport"; - final String TAG_STAGE = "stage"; + String TAG_STAGE = "stage"; - final String TAG_STATUS = "status"; + String TAG_STATUS = "status"; - final String TAG_STATISTIC = Statistic.count.key(); + String TAG_STATISTIC = Statistic.count.key(); - final String STAGE_TOTAL = "total"; + String STAGE_TOTAL = "total"; - final String STAGE_PREPARE = "prepare"; + String STAGE_PREPARE = "prepare"; - final String STAGE_EXECUTOR_QUEUE = "queue"; + String STAGE_EXECUTOR_QUEUE = "queue"; - final String STAGE_EXECUTION = "execution"; + String STAGE_EXECUTION = "execution"; - final String EDGE_INVOCATION_NAME = "EDGE"; + String EDGE_INVOCATION_NAME = "EDGE"; - final String STAGE_HANDLERS_REQUEST = "handlers_request"; + String STAGE_HANDLERS_REQUEST = "handlers_request"; - final String STAGE_HANDLERS_RESPONSE = "handlers_response"; + String STAGE_HANDLERS_RESPONSE = "handlers_response"; // producer only - final String STAGE_SERVER_FILTERS_REQUEST = "server_filters_request"; + String STAGE_SERVER_FILTERS_REQUEST = "server_filters_request"; - final String STAGE_SERVER_FILTERS_RESPONSE = "server_filters_response"; + String STAGE_SERVER_FILTERS_RESPONSE = "server_filters_response"; - final String STAGE_PRODUCER_SEND_RESPONSE = "producer_send_response"; + String STAGE_PRODUCER_SEND_RESPONSE = "producer_send_response"; //consumer only - final String STAGE_CLIENT_FILTERS_REQUEST = "client_filters_request"; + String STAGE_CLIENT_FILTERS_REQUEST = "client_filters_request"; - final String STAGE_CONSUMER_SEND_REQUEST = "consumer_send_request"; + String STAGE_CONSUMER_SEND_REQUEST = "consumer_send_request"; - final String STAGE_CONSUMER_GET_CONNECTION = "consumer_get_connection"; + String STAGE_CONSUMER_GET_CONNECTION = "consumer_get_connection"; - final String STAGE_CONSUMER_WRITE_TO_BUF = "consumer_write_to_buf"; + String STAGE_CONSUMER_WRITE_TO_BUF = "consumer_write_to_buf"; - final String STAGE_CONSUMER_WAIT_RESPONSE = "consumer_wait_response"; + String STAGE_CONSUMER_WAIT_RESPONSE = "consumer_wait_response"; - final String STAGE_CONSUMER_WAKE_CONSUMER = "consumer_wake_consumer"; - - final String STAGE_CLIENT_FILTERS_RESPONSE = "client_filters_response"; + String STAGE_CONSUMER_WAKE_CONSUMER = "consumer_wake_consumer"; + String STAGE_CLIENT_FILTERS_RESPONSE = "client_filters_response"; } diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/ProducerInvocationMeter.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/ProducerInvocationMeter.java index cb525d7..79b89e5 100644 --- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/ProducerInvocationMeter.java +++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/ProducerInvocationMeter.java @@ -16,42 +16,35 @@ */ package org.apache.servicecomb.metrics.core.meter.invocation; -import java.util.concurrent.TimeUnit; +import java.util.List; -import org.apache.servicecomb.core.Invocation; import org.apache.servicecomb.core.event.InvocationFinishEvent; import org.apache.servicecomb.core.invocation.InvocationStageTrace; -import org.apache.servicecomb.swagger.invocation.Response; +import org.apache.servicecomb.foundation.metrics.meter.SimpleTimer; import com.netflix.spectator.api.Id; +import com.netflix.spectator.api.Measurement; import com.netflix.spectator.api.Registry; -import com.netflix.spectator.api.Timer; public class ProducerInvocationMeter extends AbstractInvocationMeter { - private Timer executorQueueTimer; + private SimpleTimer executorQueueTimer; - private Timer executionTimer; + private SimpleTimer executionTimer; - private Timer serverFiltersRequestTimer; + private SimpleTimer serverFiltersRequestTimer; - private Timer serverFiltersResponseTimer; + private SimpleTimer serverFiltersResponseTimer; - private Timer sendResponseTimer; + private SimpleTimer sendResponseTimer; + public ProducerInvocationMeter(Registry registry, Id id) { + super(registry, id); - public ProducerInvocationMeter(Registry registry, Id id, Invocation invocation, Response response) { - super(registry, id, invocation, response); - - executorQueueTimer = - registry.timer(id.withTag(MeterInvocationConst.TAG_STAGE, MeterInvocationConst.STAGE_EXECUTOR_QUEUE)); - executionTimer = - registry.timer(id.withTag(MeterInvocationConst.TAG_STAGE, MeterInvocationConst.STAGE_EXECUTION)); - serverFiltersRequestTimer = - registry.timer(id.withTag(MeterInvocationConst.TAG_STAGE, MeterInvocationConst.STAGE_SERVER_FILTERS_REQUEST)); - serverFiltersResponseTimer = - registry.timer(id.withTag(MeterInvocationConst.TAG_STAGE, MeterInvocationConst.STAGE_SERVER_FILTERS_RESPONSE)); - sendResponseTimer = - registry.timer(id.withTag(MeterInvocationConst.TAG_STAGE, MeterInvocationConst.STAGE_PRODUCER_SEND_RESPONSE)); + executorQueueTimer = creatStageTimer(MeterInvocationConst.STAGE_EXECUTOR_QUEUE); + executionTimer = creatStageTimer(MeterInvocationConst.STAGE_EXECUTION); + serverFiltersRequestTimer = creatStageTimer(MeterInvocationConst.STAGE_SERVER_FILTERS_REQUEST); + serverFiltersResponseTimer = creatStageTimer(MeterInvocationConst.STAGE_SERVER_FILTERS_RESPONSE); + sendResponseTimer = creatStageTimer(MeterInvocationConst.STAGE_PRODUCER_SEND_RESPONSE); } @Override @@ -59,14 +52,21 @@ public class ProducerInvocationMeter extends AbstractInvocationMeter { super.onInvocationFinish(event); InvocationStageTrace invocationStageTrace = event.getInvocation().getInvocationStageTrace(); + executorQueueTimer.record((long) invocationStageTrace.calcThreadPoolQueueTime()); + executionTimer.record((long) invocationStageTrace.calcBusinessTime()); + serverFiltersRequestTimer.record((long) invocationStageTrace.calcServerFiltersRequestTime()); + serverFiltersResponseTimer.record((long) invocationStageTrace.calcServerFiltersResponseTime()); + sendResponseTimer.record((long) invocationStageTrace.calcSendResponseTime()); + } - executorQueueTimer.record((long) invocationStageTrace.calcThreadPoolQueueTime(), - TimeUnit.NANOSECONDS); - executionTimer.record((long) invocationStageTrace.calcBusinessTime(), TimeUnit.NANOSECONDS); + @Override + public void calcMeasurements(List<Measurement> measurements, long msNow, long secondInterval) { + super.calcMeasurements(measurements, msNow, secondInterval); - serverFiltersRequestTimer.record((long) invocationStageTrace.calcServerFiltersRequestTime(), TimeUnit.NANOSECONDS); - serverFiltersResponseTimer - .record((long) invocationStageTrace.calcServerFiltersResponseTime(), TimeUnit.NANOSECONDS); - sendResponseTimer.record((long) invocationStageTrace.calcSendResponseTime(), TimeUnit.NANOSECONDS); + executorQueueTimer.calcMeasurements(measurements, msNow, secondInterval); + executionTimer.calcMeasurements(measurements, msNow, secondInterval); + serverFiltersRequestTimer.calcMeasurements(measurements, msNow, secondInterval); + serverFiltersResponseTimer.calcMeasurements(measurements, msNow, secondInterval); + sendResponseTimer.calcMeasurements(measurements, msNow, secondInterval); } } diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/ProducerInvocationMeters.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/ProducerInvocationMeters.java index 56031d0..f8e8814 100644 --- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/ProducerInvocationMeters.java +++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/ProducerInvocationMeters.java @@ -16,9 +16,6 @@ */ package org.apache.servicecomb.metrics.core.meter.invocation; -import org.apache.servicecomb.core.Invocation; -import org.apache.servicecomb.swagger.invocation.Response; - import com.netflix.spectator.api.Id; import com.netflix.spectator.api.Registry; @@ -28,7 +25,7 @@ public class ProducerInvocationMeters extends AbstractInvocationMeters { } @Override - protected AbstractInvocationMeter createMeter(Id id, Invocation invocation, Response response) { - return new ProducerInvocationMeter(registry, id, invocation, response); + protected AbstractInvocationMeter createMeter(Id id) { + return new ProducerInvocationMeter(registry, id); } } diff --git a/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestInvocationMetersInitializer.java b/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestInvocationMetersInitializer.java index 4bc556e..6bb57ad 100644 --- a/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestInvocationMetersInitializer.java +++ b/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestInvocationMetersInitializer.java @@ -21,10 +21,9 @@ import static org.junit.Assert.assertEquals; import org.apache.servicecomb.core.Const; import org.apache.servicecomb.core.Invocation; import org.apache.servicecomb.core.event.InvocationFinishEvent; -import org.apache.servicecomb.foundation.common.utils.SPIServiceUtils; -import org.apache.servicecomb.foundation.metrics.MetricsInitializer; import org.apache.servicecomb.foundation.metrics.publish.spectator.MeasurementGroupConfig; import org.apache.servicecomb.foundation.metrics.publish.spectator.MeasurementTree; +import org.apache.servicecomb.foundation.metrics.registry.GlobalRegistry; import org.apache.servicecomb.metrics.core.meter.invocation.MeterInvocationConst; import org.apache.servicecomb.swagger.invocation.InvocationType; import org.apache.servicecomb.swagger.invocation.Response; @@ -42,7 +41,9 @@ import mockit.Mocked; public class TestInvocationMetersInitializer { EventBus eventBus = new EventBus(); - Registry registry = new DefaultRegistry(new ManualClock()); + GlobalRegistry globalRegistry = new GlobalRegistry(new ManualClock()); + + Registry registry = new DefaultRegistry(globalRegistry.getClock()); InvocationMetersInitializer invocationMetersInitializer = new InvocationMetersInitializer(); @@ -52,20 +53,10 @@ public class TestInvocationMetersInitializer { @Mocked Response response; - @Mocked - DefaultRegistryInitializer defaultRegistryInitializer; - @Before public void setup() { - new Expectations(SPIServiceUtils.class) { - { - SPIServiceUtils.getTargetService(MetricsInitializer.class, DefaultRegistryInitializer.class); - result = defaultRegistryInitializer; - defaultRegistryInitializer.getRegistry(); - result = registry; - } - }; - invocationMetersInitializer.init(null, eventBus, null); + globalRegistry.add(registry); + invocationMetersInitializer.init(globalRegistry, eventBus, null); } @Test @@ -111,32 +102,44 @@ public class TestInvocationMetersInitializer { eventBus.post(event); eventBus.post(event); + globalRegistry.poll(1); + MeasurementTree tree = new MeasurementTree(); tree.from(registry.iterator(), new MeasurementGroupConfig(MeterInvocationConst.INVOCATION_NAME)); - assertEquals( - "[Measurement(servicecomb.invocation:operation=m.s.o:role=CONSUMER:stage=consumer_wait_response:statistic=count:status=0:transport=rest,0,2.0), " - + "Measurement(servicecomb.invocation:operation=m.s.o:role=CONSUMER:stage=consumer_wait_response:statistic=totalTime:status=0:transport=rest,0,18.0), " - + "Measurement(servicecomb.invocation:operation=m.s.o:role=CONSUMER:stage=consumer_write_to_buf:statistic=count:status=0:transport=rest,0,2.0), " - + "Measurement(servicecomb.invocation:operation=m.s.o:role=CONSUMER:stage=consumer_write_to_buf:statistic=totalTime:status=0:transport=rest,0,10.0), " - + "Measurement(servicecomb.invocation:operation=m.s.o:role=CONSUMER:stage=client_filters_request:statistic=count:status=0:transport=rest,0,2.0), " - + "Measurement(servicecomb.invocation:operation=m.s.o:role=CONSUMER:stage=client_filters_request:statistic=totalTime:status=0:transport=rest,0,18.0), " - + "Measurement(servicecomb.invocation:operation=m.s.o:role=CONSUMER:stage=total:statistic=count:status=0:transport=rest,0,2.0), " - + "Measurement(servicecomb.invocation:operation=m.s.o:role=CONSUMER:stage=total:statistic=totalTime:status=0:transport=rest,0,18.0), " - + "Measurement(servicecomb.invocation:operation=m.s.o:role=CONSUMER:stage=client_filters_response:statistic=count:status=0:transport=rest,0,2.0), " - + "Measurement(servicecomb.invocation:operation=m.s.o:role=CONSUMER:stage=client_filters_response:statistic=totalTime:status=0:transport=rest,0,18.0), " - + "Measurement(servicecomb.invocation:operation=m.s.o:role=CONSUMER:stage=consumer_send_request:statistic=count:status=0:transport=rest,0,2.0), " - + "Measurement(servicecomb.invocation:operation=m.s.o:role=CONSUMER:stage=consumer_send_request:statistic=totalTime:status=0:transport=rest,0,18.0), " + assertEquals("" + + "[Measurement(servicecomb.invocation:operation=m.s.o:role=CONSUMER:stage=total:statistic=count:status=0:transport=rest,0,2.0), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=CONSUMER:stage=total:statistic=totalTime:status=0:transport=rest,0,1.8000000000000002E-8), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=CONSUMER:stage=total:statistic=max:status=0:transport=rest,0,9.000000000000001E-9), " + "Measurement(servicecomb.invocation:operation=m.s.o:role=CONSUMER:stage=handlers_request:statistic=count:status=0:transport=rest,0,2.0), " - + "Measurement(servicecomb.invocation:operation=m.s.o:role=CONSUMER:stage=handlers_request:statistic=totalTime:status=0:transport=rest,0,18.0), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=CONSUMER:stage=handlers_request:statistic=totalTime:status=0:transport=rest,0,1.8000000000000002E-8), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=CONSUMER:stage=handlers_request:statistic=max:status=0:transport=rest,0,9.000000000000001E-9), " + "Measurement(servicecomb.invocation:operation=m.s.o:role=CONSUMER:stage=handlers_response:statistic=count:status=0:transport=rest,0,2.0), " - + "Measurement(servicecomb.invocation:operation=m.s.o:role=CONSUMER:stage=handlers_response:statistic=totalTime:status=0:transport=rest,0,18.0), " - + "Measurement(servicecomb.invocation:operation=m.s.o:role=CONSUMER:stage=consumer_wake_consumer:statistic=count:status=0:transport=rest,0,2.0), " - + "Measurement(servicecomb.invocation:operation=m.s.o:role=CONSUMER:stage=consumer_wake_consumer:statistic=totalTime:status=0:transport=rest,0,18.0), " - + "Measurement(servicecomb.invocation:operation=m.s.o:role=CONSUMER:stage=consumer_get_connection:statistic=count:status=0:transport=rest,0,2.0), " - + "Measurement(servicecomb.invocation:operation=m.s.o:role=CONSUMER:stage=consumer_get_connection:statistic=totalTime:status=0:transport=rest,0,8.0), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=CONSUMER:stage=handlers_response:statistic=totalTime:status=0:transport=rest,0,1.8000000000000002E-8), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=CONSUMER:stage=handlers_response:statistic=max:status=0:transport=rest,0,9.000000000000001E-9), " + "Measurement(servicecomb.invocation:operation=m.s.o:role=CONSUMER:stage=prepare:statistic=count:status=0:transport=rest,0,2.0), " - + "Measurement(servicecomb.invocation:operation=m.s.o:role=CONSUMER:stage=prepare:statistic=totalTime:status=0:transport=rest,0,18.0)]" - , + + "Measurement(servicecomb.invocation:operation=m.s.o:role=CONSUMER:stage=prepare:statistic=totalTime:status=0:transport=rest,0,1.8000000000000002E-8), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=CONSUMER:stage=prepare:statistic=max:status=0:transport=rest,0,9.000000000000001E-9), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=CONSUMER:stage=client_filters_request:statistic=count:status=0:transport=rest,0,2.0), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=CONSUMER:stage=client_filters_request:statistic=totalTime:status=0:transport=rest,0,1.8000000000000002E-8), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=CONSUMER:stage=client_filters_request:statistic=max:status=0:transport=rest,0,9.000000000000001E-9), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=CONSUMER:stage=consumer_send_request:statistic=count:status=0:transport=rest,0,2.0), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=CONSUMER:stage=consumer_send_request:statistic=totalTime:status=0:transport=rest,0,1.8000000000000002E-8), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=CONSUMER:stage=consumer_send_request:statistic=max:status=0:transport=rest,0,9.000000000000001E-9), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=CONSUMER:stage=consumer_get_connection:statistic=count:status=0:transport=rest,0,2.0), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=CONSUMER:stage=consumer_get_connection:statistic=totalTime:status=0:transport=rest,0,8.0E-9), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=CONSUMER:stage=consumer_get_connection:statistic=max:status=0:transport=rest,0,4.0E-9), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=CONSUMER:stage=consumer_write_to_buf:statistic=count:status=0:transport=rest,0,2.0), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=CONSUMER:stage=consumer_write_to_buf:statistic=totalTime:status=0:transport=rest,0,1.0E-8), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=CONSUMER:stage=consumer_write_to_buf:statistic=max:status=0:transport=rest,0,5.0E-9), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=CONSUMER:stage=consumer_wait_response:statistic=count:status=0:transport=rest,0,2.0), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=CONSUMER:stage=consumer_wait_response:statistic=totalTime:status=0:transport=rest,0,1.8000000000000002E-8), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=CONSUMER:stage=consumer_wait_response:statistic=max:status=0:transport=rest,0,9.000000000000001E-9), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=CONSUMER:stage=consumer_wake_consumer:statistic=count:status=0:transport=rest,0,2.0), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=CONSUMER:stage=consumer_wake_consumer:statistic=totalTime:status=0:transport=rest,0,1.8000000000000002E-8), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=CONSUMER:stage=consumer_wake_consumer:statistic=max:status=0:transport=rest,0,9.000000000000001E-9), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=CONSUMER:stage=client_filters_response:statistic=count:status=0:transport=rest,0,2.0), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=CONSUMER:stage=client_filters_response:statistic=totalTime:status=0:transport=rest,0,1.8000000000000002E-8), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=CONSUMER:stage=client_filters_response:statistic=max:status=0:transport=rest,0,9.000000000000001E-9)]", tree.findChild(MeterInvocationConst.INVOCATION_NAME).getMeasurements().toString()); } @@ -190,40 +193,56 @@ public class TestInvocationMetersInitializer { eventBus.post(event); eventBus.post(event); + globalRegistry.poll(1); + MeasurementTree tree = new MeasurementTree(); tree.from(registry.iterator(), new MeasurementGroupConfig(MeterInvocationConst.INVOCATION_NAME)); - assertEquals( - "[Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=consumer_send_request:statistic=count:status=0:transport=rest,0,2.0), " - + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=consumer_send_request:statistic=totalTime:status=0:transport=rest,0,18.0), " - + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=server_filters_response:statistic=count:status=0:transport=rest,0,2.0), " - + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=server_filters_response:statistic=totalTime:status=0:transport=rest,0,18.0), " - + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=total:statistic=count:status=0:transport=rest,0,2.0), " - + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=total:statistic=totalTime:status=0:transport=rest,0,18.0), " + assertEquals("" + + "[Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=total:statistic=count:status=0:transport=rest,0,2.0), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=total:statistic=totalTime:status=0:transport=rest,0,1.8000000000000002E-8), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=total:statistic=max:status=0:transport=rest,0,9.000000000000001E-9), " + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=handlers_request:statistic=count:status=0:transport=rest,0,2.0), " - + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=handlers_request:statistic=totalTime:status=0:transport=rest,0,18.0), " - + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=consumer_wake_consumer:statistic=count:status=0:transport=rest,0,2.0), " - + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=consumer_wake_consumer:statistic=totalTime:status=0:transport=rest,0,18.0), " - + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=client_filters_response:statistic=count:status=0:transport=rest,0,2.0), " - + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=client_filters_response:statistic=totalTime:status=0:transport=rest,0,18.0), " - + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=producer_send_response:statistic=count:status=0:transport=rest,0,2.0), " - + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=producer_send_response:statistic=totalTime:status=0:transport=rest,0,18.0), " - + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=consumer_write_to_buf:statistic=count:status=0:transport=rest,0,2.0), " - + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=consumer_write_to_buf:statistic=totalTime:status=0:transport=rest,0,10.0), " - + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=server_filters_request:statistic=count:status=0:transport=rest,0,2.0), " - + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=server_filters_request:statistic=totalTime:status=0:transport=rest,0,18.0), " - + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=queue:statistic=count:status=0:transport=rest,0,2.0), " - + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=queue:statistic=totalTime:status=0:transport=rest,0,18.0), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=handlers_request:statistic=totalTime:status=0:transport=rest,0,1.8000000000000002E-8), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=handlers_request:statistic=max:status=0:transport=rest,0,9.000000000000001E-9), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=handlers_response:statistic=count:status=0:transport=rest,0,2.0), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=handlers_response:statistic=totalTime:status=0:transport=rest,0,1.8000000000000002E-8), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=handlers_response:statistic=max:status=0:transport=rest,0,9.000000000000001E-9), " + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=prepare:statistic=count:status=0:transport=rest,0,2.0), " - + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=prepare:statistic=totalTime:status=0:transport=rest,0,18.0), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=prepare:statistic=totalTime:status=0:transport=rest,0,1.8000000000000002E-8), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=prepare:statistic=max:status=0:transport=rest,0,9.000000000000001E-9), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=client_filters_request:statistic=count:status=0:transport=rest,0,2.0), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=client_filters_request:statistic=totalTime:status=0:transport=rest,0,1.8000000000000002E-8), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=client_filters_request:statistic=max:status=0:transport=rest,0,9.000000000000001E-9), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=consumer_send_request:statistic=count:status=0:transport=rest,0,2.0), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=consumer_send_request:statistic=totalTime:status=0:transport=rest,0,1.8000000000000002E-8), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=consumer_send_request:statistic=max:status=0:transport=rest,0,9.000000000000001E-9), " + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=consumer_get_connection:statistic=count:status=0:transport=rest,0,2.0), " - + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=consumer_get_connection:statistic=totalTime:status=0:transport=rest,0,8.0), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=consumer_get_connection:statistic=totalTime:status=0:transport=rest,0,8.0E-9), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=consumer_get_connection:statistic=max:status=0:transport=rest,0,4.0E-9), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=consumer_write_to_buf:statistic=count:status=0:transport=rest,0,2.0), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=consumer_write_to_buf:statistic=totalTime:status=0:transport=rest,0,1.0E-8), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=consumer_write_to_buf:statistic=max:status=0:transport=rest,0,5.0E-9), " + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=consumer_wait_response:statistic=count:status=0:transport=rest,0,2.0), " - + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=consumer_wait_response:statistic=totalTime:status=0:transport=rest,0,18.0), " - + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=handlers_response:statistic=count:status=0:transport=rest,0,2.0), " - + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=handlers_response:statistic=totalTime:status=0:transport=rest,0,18.0), " - + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=client_filters_request:statistic=count:status=0:transport=rest,0,2.0), " - + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=client_filters_request:statistic=totalTime:status=0:transport=rest,0,18.0)]" - , + + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=consumer_wait_response:statistic=totalTime:status=0:transport=rest,0,1.8000000000000002E-8), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=consumer_wait_response:statistic=max:status=0:transport=rest,0,9.000000000000001E-9), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=consumer_wake_consumer:statistic=count:status=0:transport=rest,0,2.0), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=consumer_wake_consumer:statistic=totalTime:status=0:transport=rest,0,1.8000000000000002E-8), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=consumer_wake_consumer:statistic=max:status=0:transport=rest,0,9.000000000000001E-9), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=client_filters_response:statistic=count:status=0:transport=rest,0,2.0), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=client_filters_response:statistic=totalTime:status=0:transport=rest,0,1.8000000000000002E-8), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=client_filters_response:statistic=max:status=0:transport=rest,0,9.000000000000001E-9), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=queue:statistic=count:status=0:transport=rest,0,2.0), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=queue:statistic=totalTime:status=0:transport=rest,0,1.8000000000000002E-8), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=queue:statistic=max:status=0:transport=rest,0,9.000000000000001E-9), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=server_filters_request:statistic=count:status=0:transport=rest,0,2.0), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=server_filters_request:statistic=totalTime:status=0:transport=rest,0,1.8000000000000002E-8), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=server_filters_request:statistic=max:status=0:transport=rest,0,9.000000000000001E-9), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=server_filters_response:statistic=count:status=0:transport=rest,0,2.0), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=server_filters_response:statistic=totalTime:status=0:transport=rest,0,1.8000000000000002E-8), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=server_filters_response:statistic=max:status=0:transport=rest,0,9.000000000000001E-9), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=producer_send_response:statistic=count:status=0:transport=rest,0,2.0), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=producer_send_response:statistic=totalTime:status=0:transport=rest,0,1.8000000000000002E-8), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=EDGE:stage=producer_send_response:statistic=max:status=0:transport=rest,0,9.000000000000001E-9)]", tree.findChild(MeterInvocationConst.INVOCATION_NAME).getMeasurements().toString()); } @@ -265,28 +284,38 @@ public class TestInvocationMetersInitializer { eventBus.post(event); eventBus.post(event); + globalRegistry.poll(1); + MeasurementTree tree = new MeasurementTree(); tree.from(registry.iterator(), new MeasurementGroupConfig(MeterInvocationConst.INVOCATION_NAME)); - assertEquals( - "[Measurement(servicecomb.invocation:operation=m.s.o:role=PRODUCER:stage=execution:statistic=count:status=0:transport=rest,0,2.0), " - + "Measurement(servicecomb.invocation:operation=m.s.o:role=PRODUCER:stage=execution:statistic=totalTime:status=0:transport=rest,0,18.0), " - + "Measurement(servicecomb.invocation:operation=m.s.o:role=PRODUCER:stage=prepare:statistic=count:status=0:transport=rest,0,2.0), " - + "Measurement(servicecomb.invocation:operation=m.s.o:role=PRODUCER:stage=prepare:statistic=totalTime:status=0:transport=rest,0,18.0), " - + "Measurement(servicecomb.invocation:operation=m.s.o:role=PRODUCER:stage=total:statistic=count:status=0:transport=rest,0,2.0), " - + "Measurement(servicecomb.invocation:operation=m.s.o:role=PRODUCER:stage=total:statistic=totalTime:status=0:transport=rest,0,18.0), " + assertEquals("" + + "[Measurement(servicecomb.invocation:operation=m.s.o:role=PRODUCER:stage=total:statistic=count:status=0:transport=rest,0,2.0), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=PRODUCER:stage=total:statistic=totalTime:status=0:transport=rest,0,1.8000000000000002E-8), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=PRODUCER:stage=total:statistic=max:status=0:transport=rest,0,9.000000000000001E-9), " + "Measurement(servicecomb.invocation:operation=m.s.o:role=PRODUCER:stage=handlers_request:statistic=count:status=0:transport=rest,0,2.0), " - + "Measurement(servicecomb.invocation:operation=m.s.o:role=PRODUCER:stage=handlers_request:statistic=totalTime:status=0:transport=rest,0,18.0), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=PRODUCER:stage=handlers_request:statistic=totalTime:status=0:transport=rest,0,1.8000000000000002E-8), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=PRODUCER:stage=handlers_request:statistic=max:status=0:transport=rest,0,9.000000000000001E-9), " + "Measurement(servicecomb.invocation:operation=m.s.o:role=PRODUCER:stage=handlers_response:statistic=count:status=0:transport=rest,0,2.0), " - + "Measurement(servicecomb.invocation:operation=m.s.o:role=PRODUCER:stage=handlers_response:statistic=totalTime:status=0:transport=rest,0,18.0), " - + "Measurement(servicecomb.invocation:operation=m.s.o:role=PRODUCER:stage=producer_send_response:statistic=count:status=0:transport=rest,0,2.0), " - + "Measurement(servicecomb.invocation:operation=m.s.o:role=PRODUCER:stage=producer_send_response:statistic=totalTime:status=0:transport=rest,0,18.0), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=PRODUCER:stage=handlers_response:statistic=totalTime:status=0:transport=rest,0,1.8000000000000002E-8), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=PRODUCER:stage=handlers_response:statistic=max:status=0:transport=rest,0,9.000000000000001E-9), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=PRODUCER:stage=prepare:statistic=count:status=0:transport=rest,0,2.0), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=PRODUCER:stage=prepare:statistic=totalTime:status=0:transport=rest,0,1.8000000000000002E-8), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=PRODUCER:stage=prepare:statistic=max:status=0:transport=rest,0,9.000000000000001E-9), " + "Measurement(servicecomb.invocation:operation=m.s.o:role=PRODUCER:stage=queue:statistic=count:status=0:transport=rest,0,2.0), " - + "Measurement(servicecomb.invocation:operation=m.s.o:role=PRODUCER:stage=queue:statistic=totalTime:status=0:transport=rest,0,18.0), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=PRODUCER:stage=queue:statistic=totalTime:status=0:transport=rest,0,1.8000000000000002E-8), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=PRODUCER:stage=queue:statistic=max:status=0:transport=rest,0,9.000000000000001E-9), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=PRODUCER:stage=execution:statistic=count:status=0:transport=rest,0,2.0), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=PRODUCER:stage=execution:statistic=totalTime:status=0:transport=rest,0,1.8000000000000002E-8), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=PRODUCER:stage=execution:statistic=max:status=0:transport=rest,0,9.000000000000001E-9), " + "Measurement(servicecomb.invocation:operation=m.s.o:role=PRODUCER:stage=server_filters_request:statistic=count:status=0:transport=rest,0,2.0), " - + "Measurement(servicecomb.invocation:operation=m.s.o:role=PRODUCER:stage=server_filters_request:statistic=totalTime:status=0:transport=rest,0,18.0), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=PRODUCER:stage=server_filters_request:statistic=totalTime:status=0:transport=rest,0,1.8000000000000002E-8), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=PRODUCER:stage=server_filters_request:statistic=max:status=0:transport=rest,0,9.000000000000001E-9), " + "Measurement(servicecomb.invocation:operation=m.s.o:role=PRODUCER:stage=server_filters_response:statistic=count:status=0:transport=rest,0,2.0), " - + "Measurement(servicecomb.invocation:operation=m.s.o:role=PRODUCER:stage=server_filters_response:statistic=totalTime:status=0:transport=rest,0,18.0)]" - , + + "Measurement(servicecomb.invocation:operation=m.s.o:role=PRODUCER:stage=server_filters_response:statistic=totalTime:status=0:transport=rest,0,1.8000000000000002E-8), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=PRODUCER:stage=server_filters_response:statistic=max:status=0:transport=rest,0,9.000000000000001E-9), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=PRODUCER:stage=producer_send_response:statistic=count:status=0:transport=rest,0,2.0), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=PRODUCER:stage=producer_send_response:statistic=totalTime:status=0:transport=rest,0,1.8000000000000002E-8), " + + "Measurement(servicecomb.invocation:operation=m.s.o:role=PRODUCER:stage=producer_send_response:statistic=max:status=0:transport=rest,0,9.000000000000001E-9)]", tree.findChild(MeterInvocationConst.INVOCATION_NAME).getMeasurements().toString()); } } diff --git a/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/publish/TestInvocationPublishModelFactory.java b/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/publish/TestInvocationPublishModelFactory.java index e284533..fadabdc 100644 --- a/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/publish/TestInvocationPublishModelFactory.java +++ b/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/publish/TestInvocationPublishModelFactory.java @@ -20,10 +20,7 @@ import org.apache.servicecomb.core.Const; import org.apache.servicecomb.core.Invocation; import org.apache.servicecomb.core.event.InvocationFinishEvent; import org.apache.servicecomb.core.invocation.InvocationStageTrace; -import org.apache.servicecomb.foundation.common.utils.JsonUtils; -import org.apache.servicecomb.foundation.common.utils.SPIServiceUtils; -import org.apache.servicecomb.foundation.metrics.MetricsInitializer; -import org.apache.servicecomb.metrics.core.DefaultRegistryInitializer; +import org.apache.servicecomb.foundation.metrics.registry.GlobalRegistry; import org.apache.servicecomb.metrics.core.InvocationMetersInitializer; import org.apache.servicecomb.metrics.core.publish.model.DefaultPublishModel; import org.apache.servicecomb.swagger.invocation.InvocationType; @@ -31,13 +28,13 @@ import org.apache.servicecomb.swagger.invocation.Response; import org.junit.Assert; import org.junit.Test; -import com.fasterxml.jackson.core.JsonProcessingException; import com.google.common.collect.Lists; import com.google.common.eventbus.EventBus; import com.netflix.spectator.api.DefaultRegistry; import com.netflix.spectator.api.ManualClock; import com.netflix.spectator.api.Registry; +import io.vertx.core.json.Json; import mockit.Deencapsulation; import mockit.Expectations; import mockit.Mock; @@ -47,10 +44,9 @@ import mockit.Mocked; public class TestInvocationPublishModelFactory { EventBus eventBus = new EventBus(); - Registry registry = new DefaultRegistry(new ManualClock()); + GlobalRegistry globalRegistry = new GlobalRegistry(); - @Mocked - DefaultRegistryInitializer defaultRegistryInitializer; + Registry registry = new DefaultRegistry(new ManualClock()); InvocationMetersInitializer invocationMetersInitializer = new InvocationMetersInitializer(); @@ -65,27 +61,264 @@ public class TestInvocationPublishModelFactory { InvocationType invocationType; @Test - public void createDefaultPublishModel() throws JsonProcessingException { - new Expectations(SPIServiceUtils.class) { - { - SPIServiceUtils.getTargetService(MetricsInitializer.class, DefaultRegistryInitializer.class); - result = defaultRegistryInitializer; - defaultRegistryInitializer.getRegistry(); - result = registry; - } - }; - invocationMetersInitializer.init(null, eventBus, null); + public void createDefaultPublishModel() { + globalRegistry.add(registry); + invocationMetersInitializer.init(globalRegistry, eventBus, null); prepareInvocation(); + globalRegistry.poll(1); PublishModelFactory factory = new PublishModelFactory(Lists.newArrayList(registry.iterator())); DefaultPublishModel model = factory.createDefaultPublishModel(); - Assert.assertEquals( - "{\"operationPerfGroups\":{\"groups\":{\"rest\":{\"200\":{\"transport\":\"rest\",\"status\":\"200\",\"operationPerfs\":[{\"operation\":\"m.s.o\",\"stages\":{\"client_filters_request\":{\"tps\":1,\"msTotalTime\":1000.0,\"msMaxLatency\":0.0},\"prepare\":{\"tps\":1,\"msTotalTime\":1000.0,\"msMaxLatency\":0.0},\"consumer_send_request\":{\"tps\":1,\"msTotalTime\":2000.0,\"msMaxLatency\":0.0},\"total\":{\"tps\":1,\"msTotalTime\":14000.0,\"msMaxLatency\":0.0},\"handlers_request\":{\"tps [...] - JsonUtils.writeValueAsString(model.getConsumer())); - Assert.assertEquals( - "{\"operationPerfGroups\":{\"groups\":{\"rest\":{\"200\":{\"transport\":\"rest\",\"status\":\"200\",\"operationPerfs\":[{\"operation\":\"m.s.o\",\"stages\":{\"server_filters_request\":{\"tps\":1,\"msTotalTime\":0.0,\"msMaxLatency\":0.0},\"prepare\":{\"tps\":1,\"msTotalTime\":5000.0,\"msMaxLatency\":0.0},\"execution\":{\"tps\":1,\"msTotalTime\":3000.0,\"msMaxLatency\":0.0},\"producer_send_response\":{\"tps\":1,\"msTotalTime\":2000.0,\"msMaxLatency\":0.0},\"total\":{\"tps\":1,\"msT [...] - JsonUtils.writeValueAsString(model.getProducer())); + String expect = "{\n" + + " \"operationPerfGroups\" : {\n" + + " \"groups\" : {\n" + + " \"rest\" : {\n" + + " \"200\" : {\n" + + " \"transport\" : \"rest\",\n" + + " \"status\" : \"200\",\n" + + " \"operationPerfs\" : [ {\n" + + " \"operation\" : \"m.s.o\",\n" + + " \"stages\" : {\n" + + " \"client_filters_request\" : {\n" + + " \"tps\" : 1,\n" + + " \"msTotalTime\" : 1.0000000000000002E-6,\n" + + " \"msMaxLatency\" : 1.0000000000000002E-6\n" + + " },\n" + + " \"prepare\" : {\n" + + " \"tps\" : 1,\n" + + " \"msTotalTime\" : 1.0000000000000002E-6,\n" + + " \"msMaxLatency\" : 1.0000000000000002E-6\n" + + " },\n" + + " \"consumer_send_request\" : {\n" + + " \"tps\" : 1,\n" + + " \"msTotalTime\" : 2.0000000000000003E-6,\n" + + " \"msMaxLatency\" : 2.0000000000000003E-6\n" + + " },\n" + + " \"total\" : {\n" + + " \"tps\" : 1,\n" + + " \"msTotalTime\" : 1.4000000000000001E-5,\n" + + " \"msMaxLatency\" : 1.4000000000000001E-5\n" + + " },\n" + + " \"handlers_request\" : {\n" + + " \"tps\" : 1,\n" + + " \"msTotalTime\" : 1.0000000000000002E-6,\n" + + " \"msMaxLatency\" : 1.0000000000000002E-6\n" + + " },\n" + + " \"client_filters_response\" : {\n" + + " \"tps\" : 1,\n" + + " \"msTotalTime\" : 1.0000000000000002E-6,\n" + + " \"msMaxLatency\" : 1.0000000000000002E-6\n" + + " },\n" + + " \"consumer_wait_response\" : {\n" + + " \"tps\" : 1,\n" + + " \"msTotalTime\" : 1.0000000000000002E-6,\n" + + " \"msMaxLatency\" : 1.0000000000000002E-6\n" + + " },\n" + + " \"handlers_response\" : {\n" + + " \"tps\" : 1,\n" + + " \"msTotalTime\" : 3.0000000000000005E-6,\n" + + " \"msMaxLatency\" : 3.0000000000000005E-6\n" + + " },\n" + + " \"consumer_get_connection\" : {\n" + + " \"tps\" : 1,\n" + + " \"msTotalTime\" : 1.0000000000000002E-6,\n" + + " \"msMaxLatency\" : 1.0000000000000002E-6\n" + + " },\n" + + " \"consumer_wake_consumer\" : {\n" + + " \"tps\" : 1,\n" + + " \"msTotalTime\" : 1.0000000000000002E-6,\n" + + " \"msMaxLatency\" : 1.0000000000000002E-6\n" + + " },\n" + + " \"consumer_write_to_buf\" : {\n" + + " \"tps\" : 1,\n" + + " \"msTotalTime\" : 1.0000000000000002E-6,\n" + + " \"msMaxLatency\" : 1.0000000000000002E-6\n" + + " }\n" + + " }\n" + + " } ],\n" + + " \"summary\" : {\n" + + " \"operation\" : \"\",\n" + + " \"stages\" : {\n" + + " \"prepare\" : {\n" + + " \"tps\" : 1,\n" + + " \"msTotalTime\" : 1.0000000000000002E-6,\n" + + " \"msMaxLatency\" : 1.0000000000000002E-6\n" + + " },\n" + + " \"client_filters_request\" : {\n" + + " \"tps\" : 1,\n" + + " \"msTotalTime\" : 1.0000000000000002E-6,\n" + + " \"msMaxLatency\" : 1.0000000000000002E-6\n" + + " },\n" + + " \"total\" : {\n" + + " \"tps\" : 1,\n" + + " \"msTotalTime\" : 1.4000000000000001E-5,\n" + + " \"msMaxLatency\" : 1.4000000000000001E-5\n" + + " },\n" + + " \"consumer_send_request\" : {\n" + + " \"tps\" : 1,\n" + + " \"msTotalTime\" : 2.0000000000000003E-6,\n" + + " \"msMaxLatency\" : 2.0000000000000003E-6\n" + + " },\n" + + " \"handlers_request\" : {\n" + + " \"tps\" : 1,\n" + + " \"msTotalTime\" : 1.0000000000000002E-6,\n" + + " \"msMaxLatency\" : 1.0000000000000002E-6\n" + + " },\n" + + " \"handlers_response\" : {\n" + + " \"tps\" : 1,\n" + + " \"msTotalTime\" : 3.0000000000000005E-6,\n" + + " \"msMaxLatency\" : 3.0000000000000005E-6\n" + + " },\n" + + " \"consumer_wait_response\" : {\n" + + " \"tps\" : 1,\n" + + " \"msTotalTime\" : 1.0000000000000002E-6,\n" + + " \"msMaxLatency\" : 1.0000000000000002E-6\n" + + " },\n" + + " \"client_filters_response\" : {\n" + + " \"tps\" : 1,\n" + + " \"msTotalTime\" : 1.0000000000000002E-6,\n" + + " \"msMaxLatency\" : 1.0000000000000002E-6\n" + + " },\n" + + " \"consumer_get_connection\" : {\n" + + " \"tps\" : 1,\n" + + " \"msTotalTime\" : 1.0000000000000002E-6,\n" + + " \"msMaxLatency\" : 1.0000000000000002E-6\n" + + " },\n" + + " \"consumer_write_to_buf\" : {\n" + + " \"tps\" : 1,\n" + + " \"msTotalTime\" : 1.0000000000000002E-6,\n" + + " \"msMaxLatency\" : 1.0000000000000002E-6\n" + + " },\n" + + " \"consumer_wake_consumer\" : {\n" + + " \"tps\" : 1,\n" + + " \"msTotalTime\" : 1.0000000000000002E-6,\n" + + " \"msMaxLatency\" : 1.0000000000000002E-6\n" + + " }\n" + + " }\n" + + " }\n" + + " }\n" + + " }\n" + + " }\n" + + " }\n" + + "}"; + Assert.assertEquals(Json.encodePrettily(Json.decodeValue(expect, Object.class)), + Json.encodePrettily(model.getConsumer())); + + expect = "{\n" + + " \"operationPerfGroups\" : {\n" + + " \"groups\" : {\n" + + " \"rest\" : {\n" + + " \"200\" : {\n" + + " \"transport\" : \"rest\",\n" + + " \"status\" : \"200\",\n" + + " \"operationPerfs\" : [ {\n" + + " \"operation\" : \"m.s.o\",\n" + + " \"stages\" : {\n" + + " \"server_filters_request\" : {\n" + + " \"tps\" : 1,\n" + + " \"msTotalTime\" : 0.0,\n" + + " \"msMaxLatency\" : 0.0\n" + + " },\n" + + " \"execution\" : {\n" + + " \"tps\" : 1,\n" + + " \"msTotalTime\" : 3.0000000000000005E-6,\n" + + " \"msMaxLatency\" : 3.0000000000000005E-6\n" + + " },\n" + + " \"prepare\" : {\n" + + " \"tps\" : 1,\n" + + " \"msTotalTime\" : 5.0E-6,\n" + + " \"msMaxLatency\" : 5.0E-6\n" + + " },\n" + + " \"producer_send_response\" : {\n" + + " \"tps\" : 1,\n" + + " \"msTotalTime\" : 2.0000000000000003E-6,\n" + + " \"msMaxLatency\" : 2.0000000000000003E-6\n" + + " },\n" + + " \"total\" : {\n" + + " \"tps\" : 1,\n" + + " \"msTotalTime\" : 1.4000000000000001E-5,\n" + + " \"msMaxLatency\" : 1.4000000000000001E-5\n" + + " },\n" + + " \"handlers_request\" : {\n" + + " \"tps\" : 1,\n" + + " \"msTotalTime\" : 6.000000000000001E-6,\n" + + " \"msMaxLatency\" : 6.000000000000001E-6\n" + + " },\n" + + " \"handlers_response\" : {\n" + + " \"tps\" : 1,\n" + + " \"msTotalTime\" : 1.0000000000000002E-6,\n" + + " \"msMaxLatency\" : 1.0000000000000002E-6\n" + + " },\n" + + " \"queue\" : {\n" + + " \"tps\" : 0,\n" + + " \"msTotalTime\" : 0.0,\n" + + " \"msMaxLatency\" : 0.0\n" + + " },\n" + + " \"server_filters_response\" : {\n" + + " \"tps\" : 1,\n" + + " \"msTotalTime\" : 1.0000000000000002E-6,\n" + + " \"msMaxLatency\" : 1.0000000000000002E-6\n" + + " }\n" + + " }\n" + + " } ],\n" + + " \"summary\" : {\n" + + " \"operation\" : \"\",\n" + + " \"stages\" : {\n" + + " \"server_filters_request\" : {\n" + + " \"tps\" : 1,\n" + + " \"msTotalTime\" : 0.0,\n" + + " \"msMaxLatency\" : 0.0\n" + + " },\n" + + " \"prepare\" : {\n" + + " \"tps\" : 1,\n" + + " \"msTotalTime\" : 5.0E-6,\n" + + " \"msMaxLatency\" : 5.0E-6\n" + + " },\n" + + " \"execution\" : {\n" + + " \"tps\" : 1,\n" + + " \"msTotalTime\" : 3.0000000000000005E-6,\n" + + " \"msMaxLatency\" : 3.0000000000000005E-6\n" + + " },\n" + + " \"total\" : {\n" + + " \"tps\" : 1,\n" + + " \"msTotalTime\" : 1.4000000000000001E-5,\n" + + " \"msMaxLatency\" : 1.4000000000000001E-5\n" + + " },\n" + + " \"producer_send_response\" : {\n" + + " \"tps\" : 1,\n" + + " \"msTotalTime\" : 2.0000000000000003E-6,\n" + + " \"msMaxLatency\" : 2.0000000000000003E-6\n" + + " },\n" + + " \"handlers_request\" : {\n" + + " \"tps\" : 1,\n" + + " \"msTotalTime\" : 6.000000000000001E-6,\n" + + " \"msMaxLatency\" : 6.000000000000001E-6\n" + + " },\n" + + " \"handlers_response\" : {\n" + + " \"tps\" : 1,\n" + + " \"msTotalTime\" : 1.0000000000000002E-6,\n" + + " \"msMaxLatency\" : 1.0000000000000002E-6\n" + + " },\n" + + " \"queue\" : {\n" + + " \"tps\" : 0,\n" + + " \"msTotalTime\" : 0.0,\n" + + " \"msMaxLatency\" : 0.0\n" + + " },\n" + + " \"server_filters_response\" : {\n" + + " \"tps\" : 1,\n" + + " \"msTotalTime\" : 1.0000000000000002E-6,\n" + + " \"msMaxLatency\" : 1.0000000000000002E-6\n" + + " }\n" + + " }\n" + + " }\n" + + " }\n" + + " }\n" + + " }\n" + + " }\n" + + "}"; + Assert.assertEquals(Json.encodePrettily(Json.decodeValue(expect, Object.class)), + Json.encodePrettily(model.getProducer())); } protected void prepareInvocation() {
