use of org.apache.servicecomb.metrics.core.publish.model.invocation.OperationPerfGroup 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());
}
}
use of org.apache.servicecomb.metrics.core.publish.model.invocation.OperationPerfGroup in project java-chassis by ServiceComb.
the class PublishUtils method addOperationPerfGroups.
public static void addOperationPerfGroups(OperationPerfGroups operationPerfGroups, String transport, String operation, MeasurementNode statusNode) {
Map<String, OperationPerfGroup> statusMap = operationPerfGroups.getGroups().computeIfAbsent(transport, tn -> new HashMap<>());
OperationPerfGroup group = statusMap.computeIfAbsent(statusNode.getName(), status -> new OperationPerfGroup(transport, status));
OperationPerf operationPerf = createOperationPerf(operation, statusNode);
group.addOperationPerf(operationPerf);
}
use of org.apache.servicecomb.metrics.core.publish.model.invocation.OperationPerfGroup in project java-chassis by ServiceComb.
the class DefaultLogPublisher method printProducerLog.
protected void printProducerLog(DefaultPublishModel model, StringBuilder sb) {
OperationPerfGroups producerPerf = model.getProducer().getOperationPerfGroups();
if (producerPerf == null) {
return;
}
sb.append("" + "producer:\n" + " simple:\n" + " status tps latency ").append(latencyDistributionHeader).append("operation\n");
// use detailsBuilder, we can traverse the map only once
StringBuilder detailsBuilder = new StringBuilder();
// print sample
for (Map<String, OperationPerfGroup> statusMap : producerPerf.getGroups().values()) {
for (OperationPerfGroup perfGroup : statusMap.values()) {
// append sample
sb.append(printSamplePerf(perfGroup));
// append details
detailsBuilder.append(printProducerDetailsPerf(perfGroup));
}
}
// print details
sb.append(" details:\n").append(detailsBuilder);
}
use of org.apache.servicecomb.metrics.core.publish.model.invocation.OperationPerfGroup in project java-chassis by ServiceComb.
the class DefaultLogPublisher method printEdgeLog.
protected void printEdgeLog(DefaultPublishModel model, StringBuilder sb) {
OperationPerfGroups edgePerf = model.getEdge().getOperationPerfGroups();
if (edgePerf == null) {
return;
}
sb.append("" + "edge:\n" + " simple:\n" + " status tps latency ").append(latencyDistributionHeader).append("operation\n");
StringBuilder detailsBuilder = new StringBuilder();
// print sample
for (Map<String, OperationPerfGroup> statusMap : edgePerf.getGroups().values()) {
for (OperationPerfGroup perfGroup : statusMap.values()) {
// append sample
sb.append(printSamplePerf(perfGroup));
// append details
detailsBuilder.append(printEdgeDetailsPerf(perfGroup));
}
}
sb.append(" details:\n").append(detailsBuilder);
}
use of org.apache.servicecomb.metrics.core.publish.model.invocation.OperationPerfGroup in project incubator-servicecomb-java-chassis by apache.
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());
}
}
Aggregations