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 50365b81584e8d68ecf947d02e0f7082f64bc507 Author: wujimin <wuji...@huawei.com> AuthorDate: Thu Nov 22 09:22:28 2018 +0800 [SCB-1034] log publisher switch to new mechanism --- .../metrics/publish/spectator/MeasurementTree.java | 2 +- .../metrics/core/publish/DefaultLogPublisher.java | 54 ++++++++++----------- .../core/publish/TestDefaultLogPublisher.java | 56 +++++++++++----------- 3 files changed, 57 insertions(+), 55 deletions(-) diff --git a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/publish/spectator/MeasurementTree.java b/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/publish/spectator/MeasurementTree.java index a342f34..79101fa 100644 --- a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/publish/spectator/MeasurementTree.java +++ b/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/publish/spectator/MeasurementTree.java @@ -56,7 +56,7 @@ public class MeasurementTree extends MeasurementNode { Tag tag = tagFinder.find(id.tags()); if (tag == null) { if (tagFinder.skipOnNull()) { - return; + break; } throw new IllegalStateException( String.format("tag key \"%s\" not exist in %s", diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/DefaultLogPublisher.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/DefaultLogPublisher.java index 6052f7e..8259ff9 100644 --- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/DefaultLogPublisher.java +++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/DefaultLogPublisher.java @@ -28,6 +28,7 @@ import org.apache.servicecomb.foundation.metrics.MetricsInitializer; import org.apache.servicecomb.foundation.metrics.PolledEvent; import org.apache.servicecomb.foundation.metrics.publish.spectator.MeasurementNode; import org.apache.servicecomb.foundation.metrics.publish.spectator.MeasurementTree; +import org.apache.servicecomb.foundation.metrics.registry.GlobalRegistry; import org.apache.servicecomb.foundation.vertx.VertxUtils; import org.apache.servicecomb.metrics.core.meter.invocation.MeterInvocationConst; import org.apache.servicecomb.metrics.core.meter.os.NetMeter; @@ -44,7 +45,6 @@ import org.slf4j.LoggerFactory; import com.google.common.eventbus.EventBus; import com.google.common.eventbus.Subscribe; import com.netflix.config.DynamicPropertyFactory; -import com.netflix.spectator.api.CompositeRegistry; import com.netflix.spectator.api.Meter; import io.vertx.core.impl.VertxImplEx; @@ -56,30 +56,30 @@ public class DefaultLogPublisher implements MetricsInitializer { //sample private static final String SIMPLE_HEADER = "%s:\n simple:\n" - + " status tps latency operation\n"; + + " status tps latency operation\n"; - private static final String FIRST_LINE_SIMPLE_FORMAT = " %-15s %-13s %-42s %s\n"; + private static final String FIRST_LINE_SIMPLE_FORMAT = " %-15s %-8s %-19s %s\n"; - private static final String SIMPLE_FORMAT = " %-13s %-42s %s\n"; + private static final String SIMPLE_FORMAT = " %-8s %-19s %s\n"; //details - private static final String PRODUCER_DETAILS_FORMAT = - " prepare: %-22s queue : %-22s filtersReq : %-22s handlersReq: %s\n" - + " execute: %-22s handlersResp: %-22s filtersResp: %-22s sendResp : %s\n"; + private static final String PRODUCER_DETAILS_FORMAT = "" + + " prepare: %-19s queue : %-19s filtersReq : %-19s handlersReq: %s\n" + + " execute: %-19s handlersResp: %-19s filtersResp: %-19s sendResp : %s\n"; - private static final String CONSUMER_DETAILS_FORMAT = - " prepare : %-22s handlersReq : %-22s clientFiltersReq: %-22s sendReq : %s\n" - + " getConnect : %-22s writeBuf : %-22s waitResp : %-22s wakeConsumer: %s\n" - + " clientFiltersResp: %-22s handlersResp: %s\n"; + private static final String CONSUMER_DETAILS_FORMAT = "" + + " prepare : %-19s handlersReq : %-19s cFiltersReq: %-19s sendReq : %s\n" + + " getConnect : %-19s writeBuf : %-19s waitResp : %-19s wakeConsumer: %s\n" + + " cFiltersResp: %-19s handlersResp: %s\n"; - private static final String EDGE_DETAILS_FORMAT = - " prepare : %-22s queue : %-22s serverFiltersReq : %-22s handlersReq : %s\n" - + " clientFiltersReq : %-22s sendReq : %-22s getConnect : %-22s writeBuf : %s\n" - + " waitResp : %-22s wakeConsumer: %-22s clientFiltersResp: %-22s handlersResp: %s\n" - + " serverFiltersResp: %-22s sendResp : %s\n"; + private static final String EDGE_DETAILS_FORMAT = "" + + " prepare : %-19s queue : %-19s sFiltersReq : %-19s handlersReq : %s\n" + + " cFiltersReq : %-19s sendReq : %-19s getConnect : %-19s writeBuf : %s\n" + + " waitResp : %-19s wakeConsumer: %-19s cFiltersResp: %-19s handlersResp: %s\n" + + " sFiltersResp: %-19s sendResp : %s\n"; @Override - public void init(CompositeRegistry globalRegistry, EventBus eventBus, MetricsBootstrapConfig config) { + public void init(GlobalRegistry globalRegistry, EventBus eventBus, MetricsBootstrapConfig config) { if (!DynamicPropertyFactory.getInstance() .getBooleanProperty(ENABLED, false) .get()) { @@ -100,17 +100,16 @@ public class DefaultLogPublisher implements MetricsInitializer { } protected void printLog(List<Meter> meters) { - StringBuilder sb = new StringBuilder(); sb.append("\n"); - printVertxMetrics(sb); - PublishModelFactory factory = new PublishModelFactory(meters); DefaultPublishModel model = factory.createDefaultPublishModel(); - printThreadPoolMetrics(model, sb); printOsLog(factory.getTree(), sb); + printVertxMetrics(sb); + printThreadPoolMetrics(model, sb); + printConsumerLog(model, sb); printProducerLog(model, sb); printEdgeLog(model, sb); @@ -152,7 +151,7 @@ public class DefaultLogPublisher implements MetricsInitializer { interfaceNode.getName()); } if (tmpSb.length() != 0) { - appendLine(sb, tmpSb.toString()); + sb.append(tmpSb.toString()); } } @@ -372,7 +371,6 @@ public class DefaultLogPublisher implements MetricsInitializer { PerfInfo prepare, queue, serverFiltersReq, handlersReq, clientFiltersReq, sendReq, getConnect, writeBuf, waitResp, wakeConsumer, clientFiltersResp, handlersResp, serverFiltersResp, sendResp; for (OperationPerf operationPerf : perfGroup.getOperationPerfs()) { - prepare = operationPerf.findStage(MeterInvocationConst.STAGE_PREPARE); queue = operationPerf.findStage(MeterInvocationConst.STAGE_EXECUTOR_QUEUE); serverFiltersReq = operationPerf.findStage(MeterInvocationConst.STAGE_SERVER_FILTERS_REQUEST); @@ -413,12 +411,14 @@ public class DefaultLogPublisher implements MetricsInitializer { } protected void printVertxMetrics(StringBuilder sb) { - sb.append("vertx:\n") - .append(" name eventLoopContext-created\n"); + appendLine(sb, "vertx:"); + + appendLine(sb, " instances:"); + appendLine(sb, " name eventLoopContext-created"); for (Entry<String, VertxImplEx> entry : VertxUtils.getVertxMap().entrySet()) { - sb.append(String.format(" %-10s %d\n", + appendLine(sb, " %-10s %d", entry.getKey(), - entry.getValue().getEventLoopContextCreatedCount())); + entry.getValue().getEventLoopContextCreatedCount()); } } diff --git a/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/publish/TestDefaultLogPublisher.java b/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/publish/TestDefaultLogPublisher.java index 2ad68a6..81ab22c 100644 --- a/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/publish/TestDefaultLogPublisher.java +++ b/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/publish/TestDefaultLogPublisher.java @@ -30,6 +30,7 @@ import org.apache.servicecomb.foundation.metrics.MetricsBootstrapConfig; import org.apache.servicecomb.foundation.metrics.PolledEvent; import org.apache.servicecomb.foundation.metrics.publish.spectator.MeasurementNode; import org.apache.servicecomb.foundation.metrics.publish.spectator.MeasurementTree; +import org.apache.servicecomb.foundation.metrics.registry.GlobalRegistry; import org.apache.servicecomb.foundation.test.scaffolding.config.ArchaiusUtils; import org.apache.servicecomb.foundation.test.scaffolding.log.LogCollector; import org.apache.servicecomb.foundation.vertx.VertxUtils; @@ -47,7 +48,6 @@ import org.junit.Before; import org.junit.Test; import com.google.common.eventbus.EventBus; -import com.netflix.spectator.api.CompositeRegistry; import com.netflix.spectator.api.Measurement; import io.vertx.core.impl.VertxImplEx; @@ -57,7 +57,7 @@ import mockit.MockUp; import mockit.Mocked; public class TestDefaultLogPublisher { - CompositeRegistry globalRegistry = null; + GlobalRegistry globalRegistry = new GlobalRegistry(); EventBus eventBus = new EventBus(); @@ -145,8 +145,9 @@ public class TestDefaultLogPublisher { DefaultPublishModel model = new DefaultPublishModel(); PerfInfo perfTotal = new PerfInfo(); - perfTotal.setTps(10); - perfTotal.setMsTotalTime(100); + perfTotal.setTps(100_0000); + perfTotal.setMsTotalTime(30000L * 100_0000); + perfTotal.setMsMaxLatency(30000); OperationPerf operationPerf = new OperationPerf(); operationPerf.setOperation("op"); @@ -222,41 +223,42 @@ public class TestDefaultLogPublisher { List<LoggingEvent> events = collector.getEvents().stream().filter(e -> { return DefaultLogPublisher.class.getName().equals(e.getLoggerName()); }).collect(Collectors.toList()); + LoggingEvent event = events.get(0); - Assert.assertEquals("\n" + - "vertx:\n" + - " name eventLoopContext-created\n" + - " v 1\n" + - "threadPool:\n" + - " corePoolSize maxThreads poolSize currentThreadsBusy queueSize taskCount completedTaskCount name\n" + - " 0 0 0 0 0 0.0 0.0 test\n" + - "os:\n" + Assert.assertEquals("\n" + + "os:\n" + " cpu: 100.00%\n" + " net:\n" + " send receive interface\n" - + " 1 B 1 B eth0\n" + - "\n" + - "consumer:\n" + - " simple:\n" - + " status tps latency operation\n" - + " rest.OK 10 10.000/0.000 op\n" - + " 10 10.000/0.000 (summary)\n" + + " 1 B 1 B eth0\n" + + "vertx:\n" + + " instances:\n" + + " name eventLoopContext-created\n" + + " v 1\n" + + "threadPool:\n" + + " corePoolSize maxThreads poolSize currentThreadsBusy queueSize taskCount completedTaskCount name\n" + + " 0 0 0 0 0 0.0 0.0 test\n" + + "consumer:\n" + + " simple:\n" + + " status tps latency operation\n" + + " rest.OK 1000000 30000.000/30000.000 op\n" + + " 1000000 30000.000/30000.000 (summary)\n" + " details:\n" + " rest.OK:\n" + " op:\n" - + " prepare : 10.000/0.000 handlersReq : 10.000/0.000 clientFiltersReq: 10.000/0.000 sendReq : 10.000/0.000\n" - + " getConnect : 10.000/0.000 writeBuf : 10.000/0.000 waitResp : 10.000/0.000 wakeConsumer: 10.000/0.000\n" - + " clientFiltersResp: 10.000/0.000 handlersResp: 10.000/0.000\n" + + " prepare : 30000.000/30000.000 handlersReq : 30000.000/30000.000 cFiltersReq: 30000.000/30000.000 sendReq : 30000.000/30000.000\n" + + " getConnect : 30000.000/30000.000 writeBuf : 30000.000/30000.000 waitResp : 30000.000/30000.000 wakeConsumer: 30000.000/30000.000\n" + + " cFiltersResp: 30000.000/30000.000 handlersResp: 30000.000/30000.000\n" + "producer:\n" + " simple:\n" - + " status tps latency operation\n" - + " rest.OK 10 10.000/0.000 op\n" - + " 10 10.000/0.000 (summary)\n" + + " status tps latency operation\n" + + " rest.OK 1000000 30000.000/30000.000 op\n" + + " 1000000 30000.000/30000.000 (summary)\n" + " details:\n" + " rest.OK:\n" + " op:\n" - + " prepare: 10.000/0.000 queue : 10.000/0.000 filtersReq : 10.000/0.000 handlersReq: 10.000/0.000\n" - + " execute: 10.000/0.000 handlersResp: 10.000/0.000 filtersResp: 10.000/0.000 sendResp : 10.000/0.000\n", + + " prepare: 30000.000/30000.000 queue : 30000.000/30000.000 filtersReq : 30000.000/30000.000 handlersReq: 30000.000/30000.000\n" + + " execute: 30000.000/30000.000 handlersResp: 30000.000/30000.000 filtersResp: 30000.000/30000.000 sendResp : 30000.000/30000.000\n", event.getMessage()); } }