Search in sources :

Example 1 with PolledEvent

use of org.apache.servicecomb.foundation.metrics.PolledEvent in project incubator-servicecomb-java-chassis by apache.

the class TestDefaultLogPublisher method onPolledEvent.

@Test
public void onPolledEvent(@Mocked VertxImplEx vertxImplEx) {
    new Expectations(VertxUtils.class) {

        {
            VertxUtils.getVertxMap();
            result = Collections.singletonMap("v", vertxImplEx);
            vertxImplEx.getEventLoopContextCreatedCount();
            result = 1;
        }
    };
    DefaultPublishModel model = new DefaultPublishModel();
    PerfInfo perfTotal = new PerfInfo();
    perfTotal.setTps(10);
    perfTotal.setMsTotalTime(100);
    OperationPerf operationPerf = new OperationPerf();
    operationPerf.setOperation("op");
    operationPerf.getStages().put(MeterInvocationConst.STAGE_TOTAL, perfTotal);
    operationPerf.getStages().put(MeterInvocationConst.STAGE_EXECUTOR_QUEUE, perfTotal);
    operationPerf.getStages().put(MeterInvocationConst.STAGE_EXECUTION, perfTotal);
    OperationPerfGroup operationPerfGroup = new OperationPerfGroup(Const.RESTFUL, Status.OK.name());
    operationPerfGroup.addOperationPerf(operationPerf);
    OperationPerfGroups operationPerfGroups = new OperationPerfGroups();
    operationPerfGroups.getGroups().put(operationPerfGroup.getTransport(), Collections.singletonMap(operationPerfGroup.getStatus(), operationPerfGroup));
    model.getConsumer().setOperationPerfGroups(operationPerfGroups);
    model.getProducer().setOperationPerfGroups(operationPerfGroups);
    new MockUp<PublishModelFactory>() {

        @Mock
        DefaultPublishModel createDefaultPublishModel() {
            return model;
        }
    };
    publisher.onPolledEvent(new PolledEvent(Collections.emptyList()));
    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" + "consumer:\n" + "  tps     latency(ms) max-latency(ms) operation\n" + "  rest.OK:\n" + "  10      10.000      0.000           op\n" + "  10      10.000      0.000           \n" + "producer:\n" + "  tps     latency(ms) max-latency(ms) queue(ms) max-queue(ms) execute(ms) max-execute(ms) operation\n" + "  rest.OK:\n" + "  10      10.000      0.000           10.000    0.000         10.000      0.000           op\n" + "  10      10.000      0.000           10.000    0.000         10.000      0.000           \n" + "", event.getMessage());
}
Also used : Expectations(mockit.Expectations) LoggingEvent(org.apache.log4j.spi.LoggingEvent) OperationPerfGroup(org.apache.servicecomb.metrics.core.publish.model.invocation.OperationPerfGroup) CompositeRegistry(com.netflix.spectator.api.CompositeRegistry) Expectations(mockit.Expectations) ArchaiusUtils(org.apache.servicecomb.foundation.test.scaffolding.config.ArchaiusUtils) DefaultPublishModel(org.apache.servicecomb.metrics.core.publish.model.DefaultPublishModel) MeterInvocationConst(org.apache.servicecomb.metrics.core.meter.invocation.MeterInvocationConst) PerfInfo(org.apache.servicecomb.metrics.core.publish.model.invocation.PerfInfo) VertxImplEx(io.vertx.core.impl.VertxImplEx) MetricsBootstrapConfig(org.apache.servicecomb.foundation.metrics.MetricsBootstrapConfig) EventBus(com.google.common.eventbus.EventBus) OperationPerfGroups(org.apache.servicecomb.metrics.core.publish.model.invocation.OperationPerfGroups) VertxUtils(org.apache.servicecomb.foundation.vertx.VertxUtils) After(org.junit.After) Mock(mockit.Mock) PolledEvent(org.apache.servicecomb.foundation.metrics.PolledEvent) OperationPerf(org.apache.servicecomb.metrics.core.publish.model.invocation.OperationPerf) Status(javax.ws.rs.core.Response.Status) Before(org.junit.Before) LogCollector(org.apache.servicecomb.foundation.test.scaffolding.log.LogCollector) MockUp(mockit.MockUp) Const(org.apache.servicecomb.core.Const) LoggingEvent(org.apache.log4j.spi.LoggingEvent) Test(org.junit.Test) Collectors(java.util.stream.Collectors) List(java.util.List) Holder(javax.xml.ws.Holder) Assert(org.junit.Assert) Collections(java.util.Collections) Mocked(mockit.Mocked) OperationPerfGroups(org.apache.servicecomb.metrics.core.publish.model.invocation.OperationPerfGroups) PolledEvent(org.apache.servicecomb.foundation.metrics.PolledEvent) OperationPerf(org.apache.servicecomb.metrics.core.publish.model.invocation.OperationPerf) DefaultPublishModel(org.apache.servicecomb.metrics.core.publish.model.DefaultPublishModel) MockUp(mockit.MockUp) PerfInfo(org.apache.servicecomb.metrics.core.publish.model.invocation.PerfInfo) OperationPerfGroup(org.apache.servicecomb.metrics.core.publish.model.invocation.OperationPerfGroup) Test(org.junit.Test)

Example 2 with PolledEvent

use of org.apache.servicecomb.foundation.metrics.PolledEvent in project java-chassis by ServiceComb.

the class TestVertxMetersInitializer method testLog.

private void testLog(LogCollector logCollector, List<Meter> meters, List<Measurement> measurements, boolean printDetail) {
    ArchaiusUtils.setProperty(DefaultLogPublisher.ENDPOINTS_CLIENT_DETAIL_ENABLED, String.valueOf(printDetail));
    logPublisher.onPolledEvent(new PolledEvent(meters, measurements));
    StringBuilder sb = new StringBuilder();
    logCollector.getEvents().forEach(event -> sb.append(event.getMessage()).append("\n"));
    String actual = sb.toString();
    int idx = actual.indexOf("vertx:\n");
    actual = actual.substring(idx);
    String clientLatency;
    String serverLatency;
    String expect = "vertx:\n" + "  instances:\n" + "    name       eventLoopContext-created\n" + "    registry   0\n" + "    registry-watch 0\n" + "    transport  0\n" + "  transport:\n";
    int clientLatencyIndex = actual.indexOf("1            0               0             1           1        ") + "1            0               0             1           1        ".length();
    clientLatency = actual.substring(clientLatencyIndex, actual.indexOf(" ", clientLatencyIndex));
    int serverLatencyIndex = actual.lastIndexOf("1            0               0             1           1        ") + "1            0               0             1           1        ".length();
    serverLatency = actual.substring(serverLatencyIndex, actual.indexOf(" ", serverLatencyIndex));
    int portSize = String.valueOf(port).length();
    // in new vert.x version, bytes written must be higher than 4K or will be zero
    if (printDetail) {
        expect = expect + "    client.endpoints:\n" + "      connectCount disconnectCount queue         connections requests latency send(Bps) receive(Bps) remote\n";
        expect += "      1            0               0             1           1        %-7s 4         21           http://127.0.0.1:%-" + portSize + "s\n" + "      1            0               0             1           0        0       0         0            tcp://127.0.0.1:%-" + portSize + "s\n";
    }
    expect += "" + "    server.endpoints:\n" + "      connectCount disconnectCount rejectByLimit connections requests latency send(Bps) receive(Bps) listen\n" + "      1            0               0             1           1        %-7s 21        4            0.0.0.0:0\n\n";
    if (printDetail) {
        expect = String.format(expect, clientLatency, port, port, serverLatency);
    } else {
        expect = String.format(expect, serverLatency);
    }
    Assert.assertEquals(expect, actual);
}
Also used : PolledEvent(org.apache.servicecomb.foundation.metrics.PolledEvent)

Example 3 with PolledEvent

use of org.apache.servicecomb.foundation.metrics.PolledEvent in project java-chassis by ServiceComb.

the class GlobalRegistry method poll.

public PolledEvent poll(long secondInterval) {
    long msNow = clock.wallTime();
    List<Meter> meters = new ArrayList<>();
    List<Measurement> measurements = new ArrayList<>();
    for (Registry registry : registries) {
        SpectatorUtils.removeExpiredMeters(registry);
        for (Meter meter : registry) {
            if (meter instanceof PeriodMeter) {
                ((PeriodMeter) meter).calcMeasurements(msNow, secondInterval);
            }
            meters.add(meter);
            meter.measure().forEach(measurements::add);
        }
    }
    return new PolledEvent(meters, measurements);
}
Also used : Measurement(com.netflix.spectator.api.Measurement) PeriodMeter(org.apache.servicecomb.foundation.metrics.meter.PeriodMeter) PeriodMeter(org.apache.servicecomb.foundation.metrics.meter.PeriodMeter) Meter(com.netflix.spectator.api.Meter) PolledEvent(org.apache.servicecomb.foundation.metrics.PolledEvent) ArrayList(java.util.ArrayList) CopyOnWriteArrayList(java.util.concurrent.CopyOnWriteArrayList) Registry(com.netflix.spectator.api.Registry)

Example 4 with PolledEvent

use of org.apache.servicecomb.foundation.metrics.PolledEvent in project java-chassis by ServiceComb.

the class TestDefaultLogPublisher method onPolledEvent.

@Test
public void onPolledEvent(@Injectable VertxImpl vertxImpl, @Injectable MeasurementTree tree, @Injectable GlobalRegistry globalRegistry, @Injectable EventBus eventBus, @Injectable MetricsBootstrapConfig config) {
    try {
        ArchaiusUtils.setProperty("servicecomb.metrics.publisher.defaultLog.enabled", true);
        ArchaiusUtils.setProperty("servicecomb.metrics.invocation.latencyDistribution", "0,1,100");
        publisher.init(globalRegistry, eventBus, config);
        new Expectations(VertxUtils.class) {

            {
                VertxUtils.getVertxMap();
                result = Collections.singletonMap("v", vertxImpl);
            }
        };
        DefaultPublishModel model = new DefaultPublishModel();
        PerfInfo perfTotal = new PerfInfo();
        perfTotal.setTps(10_0000);
        perfTotal.setMsTotalTime(30000L * 1_0000);
        perfTotal.setMsMaxLatency(30000);
        OperationPerf operationPerf = new OperationPerf();
        operationPerf.setOperation("op");
        operationPerf.setLatencyDistribution(new Integer[] { 12, 120, 1200 });
        operationPerf.getStages().put(MeterInvocationConst.STAGE_TOTAL, perfTotal);
        operationPerf.getStages().put(MeterInvocationConst.STAGE_EXECUTOR_QUEUE, perfTotal);
        operationPerf.getStages().put(MeterInvocationConst.STAGE_EXECUTION, perfTotal);
        operationPerf.getStages().put(MeterInvocationConst.STAGE_PREPARE, perfTotal);
        operationPerf.getStages().put(MeterInvocationConst.STAGE_HANDLERS_REQUEST, perfTotal);
        operationPerf.getStages().put(MeterInvocationConst.STAGE_HANDLERS_RESPONSE, perfTotal);
        operationPerf.getStages().put(MeterInvocationConst.STAGE_CLIENT_FILTERS_REQUEST, perfTotal);
        operationPerf.getStages().put(MeterInvocationConst.STAGE_CLIENT_FILTERS_RESPONSE, perfTotal);
        operationPerf.getStages().put(MeterInvocationConst.STAGE_CONSUMER_SEND_REQUEST, perfTotal);
        operationPerf.getStages().put(MeterInvocationConst.STAGE_PRODUCER_SEND_RESPONSE, perfTotal);
        operationPerf.getStages().put(MeterInvocationConst.STAGE_CONSUMER_GET_CONNECTION, perfTotal);
        operationPerf.getStages().put(MeterInvocationConst.STAGE_CONSUMER_WRITE_TO_BUF, perfTotal);
        operationPerf.getStages().put(MeterInvocationConst.STAGE_CONSUMER_WAIT_RESPONSE, perfTotal);
        operationPerf.getStages().put(MeterInvocationConst.STAGE_CONSUMER_WAKE_CONSUMER, perfTotal);
        operationPerf.getStages().put(MeterInvocationConst.STAGE_SERVER_FILTERS_REQUEST, perfTotal);
        operationPerf.getStages().put(MeterInvocationConst.STAGE_SERVER_FILTERS_RESPONSE, perfTotal);
        OperationPerfGroup operationPerfGroup = new OperationPerfGroup(Const.RESTFUL, Status.OK.name());
        operationPerfGroup.addOperationPerf(operationPerf);
        OperationPerfGroups operationPerfGroups = new OperationPerfGroups();
        operationPerfGroups.getGroups().put(operationPerfGroup.getTransport(), Collections.singletonMap(operationPerfGroup.getStatus(), operationPerfGroup));
        model.getConsumer().setOperationPerfGroups(operationPerfGroups);
        model.getProducer().setOperationPerfGroups(operationPerfGroups);
        model.getEdge().setOperationPerfGroups(operationPerfGroups);
        model.getThreadPools().put("test", new ThreadPoolPublishModel());
        Measurement measurement = new Measurement(null, 0L, 1.0);
        MeasurementNode measurementNodeCpuAll = new MeasurementNode("allProcess", new HashMap<>());
        MeasurementNode measurementNodeCpuProcess = new MeasurementNode("currentProcess", new HashMap<>());
        MeasurementNode measurementNodeSend = new MeasurementNode("send", new HashMap<>());
        MeasurementNode measurementNodeSendPacket = new MeasurementNode("sendPackets", new HashMap<>());
        MeasurementNode measurementNodeRecv = new MeasurementNode("receive", new HashMap<>());
        MeasurementNode measurementNodeRecvPacket = new MeasurementNode("receivePackets", new HashMap<>());
        MeasurementNode measurementNodeEth0 = new MeasurementNode("eth0", new HashMap<>());
        MeasurementNode measurementNodeNet = new MeasurementNode("net", new HashMap<>());
        MeasurementNode measurementNodeOs = new MeasurementNode("os", new HashMap<>());
        measurementNodeSend.getMeasurements().add(measurement);
        measurementNodeRecv.getMeasurements().add(measurement);
        measurementNodeCpuAll.getMeasurements().add(measurement);
        measurementNodeCpuProcess.getMeasurements().add(measurement);
        measurementNodeRecvPacket.getMeasurements().add(measurement);
        measurementNodeSendPacket.getMeasurements().add(measurement);
        measurementNodeEth0.getChildren().put("send", measurementNodeSend);
        measurementNodeEth0.getChildren().put("receive", measurementNodeRecv);
        measurementNodeEth0.getChildren().put("receivePackets", measurementNodeRecvPacket);
        measurementNodeEth0.getChildren().put("sendPackets", measurementNodeSendPacket);
        measurementNodeNet.getChildren().put("eth0", measurementNodeEth0);
        measurementNodeOs.getChildren().put("cpu", measurementNodeCpuAll);
        measurementNodeOs.getChildren().put("processCpu", measurementNodeCpuProcess);
        measurementNodeOs.getChildren().put("net", measurementNodeNet);
        measurementNodeOs.getMeasurements().add(measurement);
        measurementNodeNet.getMeasurements().add(measurement);
        measurementNodeEth0.getMeasurements().add(measurement);
        new MockUp<PublishModelFactory>() {

            @Mock
            DefaultPublishModel createDefaultPublishModel() {
                return model;
            }

            @Mock
            MeasurementTree getTree() {
                return tree;
            }
        };
        new Expectations() {

            {
                tree.findChild(OsMeter.OS_NAME);
                result = measurementNodeOs;
            }
        };
        publisher.onPolledEvent(new PolledEvent(Collections.emptyList(), Collections.emptyList()));
        List<LoggingEvent> events = collector.getEvents().stream().filter(e -> DefaultLogPublisher.class.getName().equals(e.getLoggerName())).collect(Collectors.toList());
        LoggingEvent event = events.get(0);
        Assert.assertEquals("\n" + "os:\n" + "  cpu:\n" + "    all usage: 100.00%    all idle: 0.00%    process: 100.00%\n" + "  net:\n" + "    send(Bps)    recv(Bps)    send(pps)    recv(pps)    interface\n" + "    1            1            1            1            eth0\n" + "vertx:\n" + "  instances:\n" + "    name       eventLoopContext-created\n" + "    v          0\n" + "threadPool:\n" + "  coreSize maxThreads poolSize currentBusy rejected queueSize taskCount taskFinished name\n" + "  0        0          0        0           NaN      0         0.0       0.0          test\n" + "consumer:\n" + " simple:\n" + "  status      tps      latency            [0,1)  [1,100) [100,) operation\n" + "  rest.OK     100000.0 3000.000/30000.000 12     120     1200   op\n" + "              100000.0 3000.000/30000.000 12     120     1200   (summary)\n" + " details:\n" + "    rest.OK:\n" + "      op:\n" + "        prepare     : 3000.000/30000.000 handlersReq : 3000.000/30000.000 cFiltersReq: 3000.000/30000.000 sendReq     : 3000.000/30000.000\n" + "        getConnect  : 3000.000/30000.000 writeBuf    : 3000.000/30000.000 waitResp   : 3000.000/30000.000 wakeConsumer: 3000.000/30000.000\n" + "        cFiltersResp: 3000.000/30000.000 handlersResp: 3000.000/30000.000\n" + "producer:\n" + " simple:\n" + "  status      tps      latency            [0,1)  [1,100) [100,) operation\n" + "  rest.OK     100000.0 3000.000/30000.000 12     120     1200   op\n" + "              100000.0 3000.000/30000.000 12     120     1200   (summary)\n" + " details:\n" + "    rest.OK:\n" + "      op:\n" + "        prepare: 3000.000/30000.000 queue       : 3000.000/30000.000 filtersReq : 3000.000/30000.000 handlersReq: 3000.000/30000.000\n" + "        execute: 3000.000/30000.000 handlersResp: 3000.000/30000.000 filtersResp: 3000.000/30000.000 sendResp   : 3000.000/30000.000\n" + "edge:\n" + " simple:\n" + "  status      tps      latency            [0,1)  [1,100) [100,) operation\n" + "  rest.OK     100000.0 3000.000/30000.000 12     120     1200   op\n" + "              100000.0 3000.000/30000.000 12     120     1200   (summary)\n" + " details:\n" + "    rest.OK:\n" + "      op:\n" + "        prepare     : 3000.000/30000.000 queue       : 3000.000/30000.000 sFiltersReq : 3000.000/30000.000 handlersReq : 3000.000/30000.000\n" + "        cFiltersReq : 3000.000/30000.000 sendReq     : 3000.000/30000.000 getConnect  : 3000.000/30000.000 writeBuf    : 3000.000/30000.000\n" + "        waitResp    : 3000.000/30000.000 wakeConsumer: 3000.000/30000.000 cFiltersResp: 3000.000/30000.000 handlersResp: 3000.000/30000.000\n" + "        sFiltersResp: 3000.000/30000.000 sendResp    : 3000.000/30000.000\n", event.getMessage());
    } catch (Exception e) {
        e.printStackTrace();
        Assert.fail("unexpected error happen. " + e.getMessage());
    }
}
Also used : Expectations(mockit.Expectations) Measurement(com.netflix.spectator.api.Measurement) MeasurementNode(org.apache.servicecomb.foundation.metrics.publish.spectator.MeasurementNode) OperationPerfGroup(org.apache.servicecomb.metrics.core.publish.model.invocation.OperationPerfGroup) MethodSorters(org.junit.runners.MethodSorters) MeasurementTree(org.apache.servicecomb.foundation.metrics.publish.spectator.MeasurementTree) Expectations(mockit.Expectations) ArchaiusUtils(org.apache.servicecomb.foundation.test.scaffolding.config.ArchaiusUtils) HashMap(java.util.HashMap) DefaultPublishModel(org.apache.servicecomb.metrics.core.publish.model.DefaultPublishModel) ThreadPoolPublishModel(org.apache.servicecomb.metrics.core.publish.model.ThreadPoolPublishModel) MeterInvocationConst(org.apache.servicecomb.metrics.core.meter.invocation.MeterInvocationConst) PerfInfo(org.apache.servicecomb.metrics.core.publish.model.invocation.PerfInfo) MetricsBootstrapConfig(org.apache.servicecomb.foundation.metrics.MetricsBootstrapConfig) EventBus(com.google.common.eventbus.EventBus) OperationPerfGroups(org.apache.servicecomb.metrics.core.publish.model.invocation.OperationPerfGroups) VertxUtils(org.apache.servicecomb.foundation.vertx.VertxUtils) MeasurementNode(org.apache.servicecomb.foundation.metrics.publish.spectator.MeasurementNode) After(org.junit.After) Mock(mockit.Mock) PolledEvent(org.apache.servicecomb.foundation.metrics.PolledEvent) OperationPerf(org.apache.servicecomb.metrics.core.publish.model.invocation.OperationPerf) Measurement(com.netflix.spectator.api.Measurement) Status(javax.ws.rs.core.Response.Status) Before(org.junit.Before) LogCollector(org.apache.servicecomb.foundation.test.scaffolding.log.LogCollector) VertxImpl(io.vertx.core.impl.VertxImpl) MockUp(mockit.MockUp) GlobalRegistry(org.apache.servicecomb.foundation.metrics.registry.GlobalRegistry) Const(org.apache.servicecomb.core.Const) LoggingEvent(org.apache.log4j.spi.LoggingEvent) Holder(org.apache.servicecomb.foundation.common.Holder) Test(org.junit.Test) OsMeter(org.apache.servicecomb.metrics.core.meter.os.OsMeter) Collectors(java.util.stream.Collectors) List(java.util.List) Injectable(mockit.Injectable) Assert(org.junit.Assert) FixMethodOrder(org.junit.FixMethodOrder) Collections(java.util.Collections) Mocked(mockit.Mocked) OperationPerfGroups(org.apache.servicecomb.metrics.core.publish.model.invocation.OperationPerfGroups) OperationPerf(org.apache.servicecomb.metrics.core.publish.model.invocation.OperationPerf) DefaultPublishModel(org.apache.servicecomb.metrics.core.publish.model.DefaultPublishModel) MockUp(mockit.MockUp) PerfInfo(org.apache.servicecomb.metrics.core.publish.model.invocation.PerfInfo) OperationPerfGroup(org.apache.servicecomb.metrics.core.publish.model.invocation.OperationPerfGroup) ThreadPoolPublishModel(org.apache.servicecomb.metrics.core.publish.model.ThreadPoolPublishModel) LoggingEvent(org.apache.log4j.spi.LoggingEvent) PolledEvent(org.apache.servicecomb.foundation.metrics.PolledEvent) Test(org.junit.Test)

Aggregations

PolledEvent (org.apache.servicecomb.foundation.metrics.PolledEvent)4 EventBus (com.google.common.eventbus.EventBus)2 Measurement (com.netflix.spectator.api.Measurement)2 Collections (java.util.Collections)2 List (java.util.List)2 Collectors (java.util.stream.Collectors)2 Status (javax.ws.rs.core.Response.Status)2 Expectations (mockit.Expectations)2 Mock (mockit.Mock)2 MockUp (mockit.MockUp)2 Mocked (mockit.Mocked)2 LoggingEvent (org.apache.log4j.spi.LoggingEvent)2 Const (org.apache.servicecomb.core.Const)2 MetricsBootstrapConfig (org.apache.servicecomb.foundation.metrics.MetricsBootstrapConfig)2 ArchaiusUtils (org.apache.servicecomb.foundation.test.scaffolding.config.ArchaiusUtils)2 LogCollector (org.apache.servicecomb.foundation.test.scaffolding.log.LogCollector)2 VertxUtils (org.apache.servicecomb.foundation.vertx.VertxUtils)2 MeterInvocationConst (org.apache.servicecomb.metrics.core.meter.invocation.MeterInvocationConst)2 DefaultPublishModel (org.apache.servicecomb.metrics.core.publish.model.DefaultPublishModel)2 OperationPerf (org.apache.servicecomb.metrics.core.publish.model.invocation.OperationPerf)2