From a41b037df37d4dbf9764f107948d9cebbeb90610 Mon Sep 17 00:00:00 2001 From: pengys5 <8082209@qq.com> Date: Sun, 3 Sep 2017 21:23:12 +0800 Subject: [PATCH 01/18] Fixed instance register mistake that not return instance id but application --- .../apm/collector/agentregister/instance/InstanceIDService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/instance/InstanceIDService.java b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/instance/InstanceIDService.java index 40743ab21..85ba57eac 100644 --- a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/instance/InstanceIDService.java +++ b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/instance/InstanceIDService.java @@ -33,7 +33,7 @@ public class InstanceIDService { logger.error(e.getMessage(), e); } } - return applicationId; + return instanceId; } public void recover(int instanceId, int applicationId, long registerTime, String osInfo) { From e81b2741bab05a3c616cd8973e03cd410f5640ab Mon Sep 17 00:00:00 2001 From: pengys5 <8082209@qq.com> Date: Sun, 3 Sep 2017 22:40:31 +0800 Subject: [PATCH 02/18] add application id into mapping builder which inside of for. --- .../grpc/handler/ApplicationRegisterServiceHandler.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/grpc/handler/ApplicationRegisterServiceHandler.java b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/grpc/handler/ApplicationRegisterServiceHandler.java index 413c35552..9540d7737 100644 --- a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/grpc/handler/ApplicationRegisterServiceHandler.java +++ b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/grpc/handler/ApplicationRegisterServiceHandler.java @@ -23,14 +23,16 @@ public class ApplicationRegisterServiceHandler extends ApplicationRegisterServic @Override public void register(Application request, StreamObserver responseObserver) { logger.debug("register application"); ProtocolStringList applicationCodes = request.getApplicationCodeList(); + + ApplicationMapping.Builder builder = ApplicationMapping.newBuilder(); for (int i = 0; i < applicationCodes.size(); i++) { String applicationCode = applicationCodes.get(i); int applicationId = applicationIDService.getOrCreate(applicationCode); KeyWithIntegerValue value = KeyWithIntegerValue.newBuilder().setKey(applicationCode).setValue(applicationId).build(); - ApplicationMapping mapping = ApplicationMapping.newBuilder().addApplication(i, value).build(); - responseObserver.onNext(mapping); + builder.addApplication(i, value); } + responseObserver.onNext(builder.build()); responseObserver.onCompleted(); } } From 752d19309bc5321c924d1a05cc39c1366a63f376 Mon Sep 17 00:00:00 2001 From: pengys5 <8082209@qq.com> Date: Sun, 3 Sep 2017 23:29:42 +0800 Subject: [PATCH 03/18] Segment no entry span that will save a error entry service data --- .../worker/service/entry/ServiceEntrySpanListener.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/service/entry/ServiceEntrySpanListener.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/service/entry/ServiceEntrySpanListener.java index aa60baa2e..d0c144f77 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/service/entry/ServiceEntrySpanListener.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/service/entry/ServiceEntrySpanListener.java @@ -29,6 +29,7 @@ public class ServiceEntrySpanListener implements RefsListener, FirstSpanListener private int applicationId; private int entryServiceId; private String entryServiceName; + private boolean hasEntry = false; @Override public void parseEntry(SpanObject spanObject, int applicationId, int applicationInstanceId, String segmentId) { @@ -39,6 +40,7 @@ public class ServiceEntrySpanListener implements RefsListener, FirstSpanListener } else { this.entryServiceName = ServiceCache.getServiceName(this.entryServiceId); } + this.hasEntry = true; } @Override public void parseRef(TraceSegmentReference reference, int applicationId, int applicationInstanceId, @@ -54,7 +56,7 @@ public class ServiceEntrySpanListener implements RefsListener, FirstSpanListener @Override public void build() { logger.debug("entry service listener build"); StreamModuleContext context = (StreamModuleContext)CollectorContextHelper.INSTANCE.getContext(StreamModuleGroupDefine.GROUP_NAME); - if (!hasReference) { + if (!hasReference && hasEntry) { ServiceEntryDataDefine.ServiceEntry serviceEntry = new ServiceEntryDataDefine.ServiceEntry(); serviceEntry.setId(applicationId + Const.ID_SPLIT + entryServiceName); serviceEntry.setApplicationId(applicationId); From 6b5045ae5c5d624ab00b2fad9223dc6077d0efa7 Mon Sep 17 00:00:00 2001 From: pengys5 <8082209@qq.com> Date: Sun, 3 Sep 2017 23:46:04 +0800 Subject: [PATCH 04/18] Segment no entry span that will save a error service reference data --- .../ServiceReferenceSpanListener.java | 86 ++++++++++--------- 1 file changed, 45 insertions(+), 41 deletions(-) diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/ServiceReferenceSpanListener.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/ServiceReferenceSpanListener.java index 634fa7589..b59b74873 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/ServiceReferenceSpanListener.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/ServiceReferenceSpanListener.java @@ -36,6 +36,7 @@ public class ServiceReferenceSpanListener implements FirstSpanListener, EntrySpa private long endTime = 0; private boolean isError = false; private long timeBucket; + private boolean hasEntry = false; @Override public void parseFirst(SpanObject spanObject, int applicationId, int applicationInstanceId, String segmentId) { @@ -58,6 +59,7 @@ public class ServiceReferenceSpanListener implements FirstSpanListener, EntrySpa startTime = spanObject.getStartTime(); endTime = spanObject.getEndTime(); isError = spanObject.getIsError(); + this.hasEntry = true; } @Override @@ -96,65 +98,67 @@ public class ServiceReferenceSpanListener implements FirstSpanListener, EntrySpa @Override public void build() { logger.debug("service reference listener build"); - StreamModuleContext context = (StreamModuleContext)CollectorContextHelper.INSTANCE.getContext(StreamModuleGroupDefine.GROUP_NAME); + if (hasEntry) { + StreamModuleContext context = (StreamModuleContext)CollectorContextHelper.INSTANCE.getContext(StreamModuleGroupDefine.GROUP_NAME); - if (referenceServices.size() > 0) { - referenceServices.forEach(reference -> { - ServiceReferenceDataDefine.ServiceReference serviceReference = new ServiceReferenceDataDefine.ServiceReference(); - int entryServiceId = reference.getEntryServiceId(); - String entryServiceName = buildServiceName(reference.getEntryApplicationInstanceId(), reference.getEntryServiceId(), reference.getEntryServiceName()); - - int frontServiceId = reference.getParentServiceId(); - String frontServiceName = buildServiceName(reference.getParentApplicationInstanceId(), reference.getParentServiceId(), reference.getParentServiceName()); - - int behindServiceId = serviceId; - String behindServiceName = serviceName; - - calculateCost(serviceReference, startTime, endTime, isError); - - logger.debug("has reference, entryServiceId: {}, entryServiceName: {}", entryServiceId, entryServiceName); - sendToAggregationWorker(context, serviceReference, entryServiceId, entryServiceName, frontServiceId, frontServiceName, behindServiceId, behindServiceName); - }); - } else { - ServiceReferenceDataDefine.ServiceReference serviceReference = new ServiceReferenceDataDefine.ServiceReference(); - int entryServiceId = serviceId; - String entryServiceName = serviceName; - - int frontServiceId = Const.NONE_SERVICE_ID; - String frontServiceName = Const.EMPTY_STRING; - - int behindServiceId = serviceId; - String behindServiceName = serviceName; - - calculateCost(serviceReference, startTime, endTime, isError); - sendToAggregationWorker(context, serviceReference, entryServiceId, entryServiceName, frontServiceId, frontServiceName, behindServiceId, behindServiceName); - } - - exitServiceRefs.forEach(serviceReference -> { if (referenceServices.size() > 0) { referenceServices.forEach(reference -> { + ServiceReferenceDataDefine.ServiceReference serviceReference = new ServiceReferenceDataDefine.ServiceReference(); int entryServiceId = reference.getEntryServiceId(); String entryServiceName = buildServiceName(reference.getEntryApplicationInstanceId(), reference.getEntryServiceId(), reference.getEntryServiceName()); int frontServiceId = reference.getParentServiceId(); String frontServiceName = buildServiceName(reference.getParentApplicationInstanceId(), reference.getParentServiceId(), reference.getParentServiceName()); - int behindServiceId = serviceReference.getBehindServiceId(); - String behindServiceName = serviceReference.getBehindServiceName(); + int behindServiceId = serviceId; + String behindServiceName = serviceName; + + calculateCost(serviceReference, startTime, endTime, isError); + + logger.debug("has reference, entryServiceId: {}, entryServiceName: {}", entryServiceId, entryServiceName); sendToAggregationWorker(context, serviceReference, entryServiceId, entryServiceName, frontServiceId, frontServiceName, behindServiceId, behindServiceName); }); } else { + ServiceReferenceDataDefine.ServiceReference serviceReference = new ServiceReferenceDataDefine.ServiceReference(); int entryServiceId = serviceId; String entryServiceName = serviceName; - int frontServiceId = serviceId; - String frontServiceName = serviceName; + int frontServiceId = Const.NONE_SERVICE_ID; + String frontServiceName = Const.EMPTY_STRING; - int behindServiceId = serviceReference.getBehindServiceId(); - String behindServiceName = serviceReference.getBehindServiceName(); + int behindServiceId = serviceId; + String behindServiceName = serviceName; + + calculateCost(serviceReference, startTime, endTime, isError); sendToAggregationWorker(context, serviceReference, entryServiceId, entryServiceName, frontServiceId, frontServiceName, behindServiceId, behindServiceName); } - }); + + exitServiceRefs.forEach(serviceReference -> { + if (referenceServices.size() > 0) { + referenceServices.forEach(reference -> { + int entryServiceId = reference.getEntryServiceId(); + String entryServiceName = buildServiceName(reference.getEntryApplicationInstanceId(), reference.getEntryServiceId(), reference.getEntryServiceName()); + + int frontServiceId = reference.getParentServiceId(); + String frontServiceName = buildServiceName(reference.getParentApplicationInstanceId(), reference.getParentServiceId(), reference.getParentServiceName()); + + int behindServiceId = serviceReference.getBehindServiceId(); + String behindServiceName = serviceReference.getBehindServiceName(); + sendToAggregationWorker(context, serviceReference, entryServiceId, entryServiceName, frontServiceId, frontServiceName, behindServiceId, behindServiceName); + }); + } else { + int entryServiceId = serviceId; + String entryServiceName = serviceName; + + int frontServiceId = serviceId; + String frontServiceName = serviceName; + + int behindServiceId = serviceReference.getBehindServiceId(); + String behindServiceName = serviceReference.getBehindServiceName(); + sendToAggregationWorker(context, serviceReference, entryServiceId, entryServiceName, frontServiceId, frontServiceName, behindServiceId, behindServiceName); + } + }); + } } private void sendToAggregationWorker(StreamModuleContext context, From 73ae751882050fe01c82c99d2661f129e0e42762 Mon Sep 17 00:00:00 2001 From: ascrutae Date: Mon, 4 Sep 2017 22:52:18 +0800 Subject: [PATCH 05/18] modify the IP value of elastic search cluster node --- .../apm-collector-boot/src/main/resources/application.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apm-collector/apm-collector-boot/src/main/resources/application.yml b/apm-collector/apm-collector-boot/src/main/resources/application.yml index b1d440ec5..1a84f5740 100644 --- a/apm-collector/apm-collector-boot/src/main/resources/application.yml +++ b/apm-collector/apm-collector-boot/src/main/resources/application.yml @@ -25,6 +25,6 @@ storage: elasticsearch: cluster_name: CollectorDBCluster cluster_transport_sniffer: true - cluster_nodes: 10.0.0.19:9300,10.0.0.6:9300 + cluster_nodes: 127.0.0.1:9300 From f767431607c70da4ea4bc3c22be5ecfab4d04938 Mon Sep 17 00:00:00 2001 From: pengys5 <8082209@qq.com> Date: Mon, 4 Sep 2017 23:33:18 +0800 Subject: [PATCH 06/18] Single segment has entry span, but no exit span and no reference span test success. --- .../noderef/NodeReferenceSpanListener.java | 22 ++-- .../ServiceNameRegisterSerialWorker.java | 8 +- .../segment/cost/SegmentCostSpanListener.java | 8 +- .../ServiceReferenceSpanListener.java | 46 +------- .../mock/grpc/ApplicationRegister.java | 25 +++++ .../mock/grpc/GrpcSegmentPost.java | 85 ++------------- .../mock/grpc/InstanceRegister.java | 39 +++++++ .../mock/grpc/ServiceRegister.java | 32 ++++++ .../grpc/SingleHasEntryNoExitNoRefSpan.java | 102 ++++++++++++++++++ .../src/main/resources/application.yml | 2 +- .../apm/collector/core/util/Const.java | 1 + .../noderef/NodeReferenceDataDefine.java | 46 ++++---- .../ui/dao/ServiceReferenceEsDAO.java | 16 ++- .../src/main/proto/DiscoveryService.proto | 8 +- 14 files changed, 271 insertions(+), 169 deletions(-) create mode 100644 apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/mock/grpc/ApplicationRegister.java create mode 100644 apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/mock/grpc/InstanceRegister.java create mode 100644 apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/mock/grpc/ServiceRegister.java create mode 100644 apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/mock/grpc/SingleHasEntryNoExitNoRefSpan.java diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/NodeReferenceSpanListener.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/NodeReferenceSpanListener.java index a5646ac5a..94e408251 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/NodeReferenceSpanListener.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/NodeReferenceSpanListener.java @@ -27,9 +27,9 @@ public class NodeReferenceSpanListener implements EntrySpanListener, ExitSpanLis private final Logger logger = LoggerFactory.getLogger(NodeReferenceSpanListener.class); - private List nodeExitReferences = new ArrayList<>(); - private List nodeEntryReferences = new ArrayList<>(); - private List nodeReferences = new ArrayList<>(); + private List nodeExitReferences = new ArrayList<>(); + private List nodeEntryReferences = new ArrayList<>(); + private List nodeReferences = new ArrayList<>(); private long timeBucket; private boolean hasReference = false; private long startTime; @@ -38,8 +38,8 @@ public class NodeReferenceSpanListener implements EntrySpanListener, ExitSpanLis @Override public void parseExit(SpanObject spanObject, int applicationId, int applicationInstanceId, String segmentId) { - NodeReferenceDataDefine.NodeReferenceSum referenceSum = new NodeReferenceDataDefine.NodeReferenceSum(); - referenceSum.setApplicationId(applicationId); + NodeReferenceDataDefine.NodeReference referenceSum = new NodeReferenceDataDefine.NodeReference(); + referenceSum.setFrontApplicationId(applicationId); referenceSum.setBehindApplicationId(spanObject.getPeerId()); String id = String.valueOf(applicationId); @@ -56,8 +56,8 @@ public class NodeReferenceSpanListener implements EntrySpanListener, ExitSpanLis @Override public void parseEntry(SpanObject spanObject, int applicationId, int applicationInstanceId, String segmentId) { - NodeReferenceDataDefine.NodeReferenceSum referenceSum = new NodeReferenceDataDefine.NodeReferenceSum(); - referenceSum.setApplicationId(Const.USER_ID); + NodeReferenceDataDefine.NodeReference referenceSum = new NodeReferenceDataDefine.NodeReference(); + referenceSum.setFrontApplicationId(Const.USER_ID); referenceSum.setBehindApplicationId(applicationId); referenceSum.setBehindPeer(Const.EMPTY_STRING); @@ -66,7 +66,7 @@ public class NodeReferenceSpanListener implements EntrySpanListener, ExitSpanLis nodeEntryReferences.add(buildNodeRefSum(referenceSum, spanObject.getStartTime(), spanObject.getEndTime(), spanObject.getIsError())); } - private NodeReferenceDataDefine.NodeReferenceSum buildNodeRefSum(NodeReferenceDataDefine.NodeReferenceSum referenceSum, + private NodeReferenceDataDefine.NodeReference buildNodeRefSum(NodeReferenceDataDefine.NodeReference referenceSum, long startTime, long endTime, boolean isError) { long cost = endTime - startTime; if (cost <= 1000 && !isError) { @@ -96,8 +96,8 @@ public class NodeReferenceSpanListener implements EntrySpanListener, ExitSpanLis String segmentId) { int parentApplicationId = InstanceCache.get(reference.getParentApplicationInstanceId()); - NodeReferenceDataDefine.NodeReferenceSum referenceSum = new NodeReferenceDataDefine.NodeReferenceSum(); - referenceSum.setApplicationId(parentApplicationId); + NodeReferenceDataDefine.NodeReference referenceSum = new NodeReferenceDataDefine.NodeReference(); + referenceSum.setFrontApplicationId(parentApplicationId); referenceSum.setBehindApplicationId(applicationId); referenceSum.setBehindPeer(Const.EMPTY_STRING); @@ -119,7 +119,7 @@ public class NodeReferenceSpanListener implements EntrySpanListener, ExitSpanLis }); } - for (NodeReferenceDataDefine.NodeReferenceSum referenceSum : nodeExitReferences) { + for (NodeReferenceDataDefine.NodeReference referenceSum : nodeExitReferences) { referenceSum.setId(timeBucket + Const.ID_SPLIT + referenceSum.getId()); referenceSum.setTimeBucket(timeBucket); diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/register/servicename/ServiceNameRegisterSerialWorker.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/register/servicename/ServiceNameRegisterSerialWorker.java index 5d6fd9efd..c2aa4462d 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/register/servicename/ServiceNameRegisterSerialWorker.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/register/servicename/ServiceNameRegisterSerialWorker.java @@ -2,6 +2,7 @@ package org.skywalking.apm.collector.agentstream.worker.register.servicename; import org.skywalking.apm.collector.agentstream.worker.register.IdAutoIncrement; import org.skywalking.apm.collector.agentstream.worker.register.servicename.dao.IServiceNameDAO; +import org.skywalking.apm.collector.core.util.Const; import org.skywalking.apm.collector.storage.dao.DAOContainer; import org.skywalking.apm.collector.storage.define.DataDefine; import org.skywalking.apm.collector.storage.define.register.ServiceNameDataDefine; @@ -42,8 +43,11 @@ public class ServiceNameRegisterSerialWorker extends AbstractLocalAsyncWorker { if (serviceId == 0) { int min = dao.getMinServiceId(); if (min == 0) { - serviceName.setServiceId(1); - serviceName.setId("1"); + ServiceNameDataDefine.ServiceName noneServiceName = new ServiceNameDataDefine.ServiceName("1", Const.NONE_SERVICE_Name, 0, Const.NONE_SERVICE_ID); + dao.save(noneServiceName); + + serviceName.setServiceId(-1); + serviceName.setId("-1"); } else { int max = dao.getMaxServiceId(); serviceId = IdAutoIncrement.INSTANCE.increment(min, max); diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/cost/SegmentCostSpanListener.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/cost/SegmentCostSpanListener.java index 4aecaa94e..f3c88e395 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/cost/SegmentCostSpanListener.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/cost/SegmentCostSpanListener.java @@ -2,14 +2,14 @@ package org.skywalking.apm.collector.agentstream.worker.segment.cost; import java.util.ArrayList; import java.util.List; +import org.skywalking.apm.collector.agentstream.worker.cache.ServiceCache; import org.skywalking.apm.collector.agentstream.worker.segment.EntrySpanListener; import org.skywalking.apm.collector.agentstream.worker.segment.ExitSpanListener; import org.skywalking.apm.collector.agentstream.worker.segment.FirstSpanListener; import org.skywalking.apm.collector.agentstream.worker.segment.LocalSpanListener; -import org.skywalking.apm.collector.storage.define.segment.SegmentCostDataDefine; -import org.skywalking.apm.collector.agentstream.worker.util.ExchangeMarkUtils; -import org.skywalking.apm.collector.core.util.TimeBucketUtils; import org.skywalking.apm.collector.core.framework.CollectorContextHelper; +import org.skywalking.apm.collector.core.util.TimeBucketUtils; +import org.skywalking.apm.collector.storage.define.segment.SegmentCostDataDefine; import org.skywalking.apm.collector.stream.StreamModuleContext; import org.skywalking.apm.collector.stream.StreamModuleGroupDefine; import org.skywalking.apm.collector.stream.worker.WorkerInvokeException; @@ -45,7 +45,7 @@ public class SegmentCostSpanListener implements EntrySpanListener, ExitSpanListe if (spanObject.getOperationNameId() == 0) { segmentCost.setServiceName(spanObject.getOperationName()); } else { - segmentCost.setServiceName(ExchangeMarkUtils.INSTANCE.buildMarkedID(spanObject.getOperationNameId())); + segmentCost.setServiceName(ServiceCache.getServiceName(spanObject.getOperationNameId())); } segmentCosts.add(segmentCost); diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/ServiceReferenceSpanListener.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/ServiceReferenceSpanListener.java index b59b74873..009870de6 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/ServiceReferenceSpanListener.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/ServiceReferenceSpanListener.java @@ -4,7 +4,6 @@ import java.util.ArrayList; import java.util.List; import org.skywalking.apm.collector.agentstream.worker.cache.InstanceCache; import org.skywalking.apm.collector.agentstream.worker.segment.EntrySpanListener; -import org.skywalking.apm.collector.agentstream.worker.segment.ExitSpanListener; import org.skywalking.apm.collector.agentstream.worker.segment.FirstSpanListener; import org.skywalking.apm.collector.agentstream.worker.segment.RefsListener; import org.skywalking.apm.collector.core.framework.CollectorContextHelper; @@ -15,7 +14,6 @@ import org.skywalking.apm.collector.stream.StreamModuleContext; import org.skywalking.apm.collector.stream.StreamModuleGroupDefine; import org.skywalking.apm.collector.stream.worker.WorkerInvokeException; import org.skywalking.apm.collector.stream.worker.WorkerNotFoundException; -import org.skywalking.apm.network.proto.SpanLayer; import org.skywalking.apm.network.proto.SpanObject; import org.skywalking.apm.network.proto.TraceSegmentReference; import org.slf4j.Logger; @@ -24,11 +22,10 @@ import org.slf4j.LoggerFactory; /** * @author pengys5 */ -public class ServiceReferenceSpanListener implements FirstSpanListener, EntrySpanListener, ExitSpanListener, RefsListener { +public class ServiceReferenceSpanListener implements FirstSpanListener, EntrySpanListener, RefsListener { private final Logger logger = LoggerFactory.getLogger(ServiceReferenceSpanListener.class); - private List exitServiceRefs = new ArrayList<>(); private List referenceServices = new ArrayList<>(); private int serviceId = 0; private String serviceName = ""; @@ -62,21 +59,6 @@ public class ServiceReferenceSpanListener implements FirstSpanListener, EntrySpa this.hasEntry = true; } - @Override - public void parseExit(SpanObject spanObject, int applicationId, int applicationInstanceId, String segmentId) { - if (spanObject.getSpanLayer().equals(SpanLayer.Database)) { - ServiceReferenceDataDefine.ServiceReference serviceReference = new ServiceReferenceDataDefine.ServiceReference(); - serviceReference.setBehindServiceId(spanObject.getOperationNameId()); - if (spanObject.getOperationNameId() == 0) { - serviceReference.setBehindServiceName(String.valueOf(applicationId) + Const.ID_SPLIT + spanObject.getOperationName()); - } else { - serviceReference.setBehindServiceName(Const.EMPTY_STRING); - } - calculateCost(serviceReference, spanObject.getStartTime(), spanObject.getEndTime(), spanObject.getIsError()); - exitServiceRefs.add(serviceReference); - } - } - private void calculateCost(ServiceReferenceDataDefine.ServiceReference serviceReference, long startTime, long endTime, boolean isError) { @@ -132,32 +114,6 @@ public class ServiceReferenceSpanListener implements FirstSpanListener, EntrySpa calculateCost(serviceReference, startTime, endTime, isError); sendToAggregationWorker(context, serviceReference, entryServiceId, entryServiceName, frontServiceId, frontServiceName, behindServiceId, behindServiceName); } - - exitServiceRefs.forEach(serviceReference -> { - if (referenceServices.size() > 0) { - referenceServices.forEach(reference -> { - int entryServiceId = reference.getEntryServiceId(); - String entryServiceName = buildServiceName(reference.getEntryApplicationInstanceId(), reference.getEntryServiceId(), reference.getEntryServiceName()); - - int frontServiceId = reference.getParentServiceId(); - String frontServiceName = buildServiceName(reference.getParentApplicationInstanceId(), reference.getParentServiceId(), reference.getParentServiceName()); - - int behindServiceId = serviceReference.getBehindServiceId(); - String behindServiceName = serviceReference.getBehindServiceName(); - sendToAggregationWorker(context, serviceReference, entryServiceId, entryServiceName, frontServiceId, frontServiceName, behindServiceId, behindServiceName); - }); - } else { - int entryServiceId = serviceId; - String entryServiceName = serviceName; - - int frontServiceId = serviceId; - String frontServiceName = serviceName; - - int behindServiceId = serviceReference.getBehindServiceId(); - String behindServiceName = serviceReference.getBehindServiceName(); - sendToAggregationWorker(context, serviceReference, entryServiceId, entryServiceName, frontServiceId, frontServiceName, behindServiceId, behindServiceName); - } - }); } } diff --git a/apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/mock/grpc/ApplicationRegister.java b/apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/mock/grpc/ApplicationRegister.java new file mode 100644 index 000000000..f00d2db1e --- /dev/null +++ b/apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/mock/grpc/ApplicationRegister.java @@ -0,0 +1,25 @@ +package org.skywalking.apm.collector.agentstream.mock.grpc; + +import io.grpc.ManagedChannel; +import org.skywalking.apm.network.proto.Application; +import org.skywalking.apm.network.proto.ApplicationMapping; +import org.skywalking.apm.network.proto.ApplicationRegisterServiceGrpc; + +/** + * @author pengys5 + */ +public class ApplicationRegister { + + public static int register(ManagedChannel channel, String applicationCode) { + ApplicationRegisterServiceGrpc.ApplicationRegisterServiceBlockingStub stub = ApplicationRegisterServiceGrpc.newBlockingStub(channel); + Application application = Application.newBuilder().addApplicationCode(applicationCode).build(); + ApplicationMapping mapping = stub.register(application); + int applicationId = mapping.getApplication(0).getValue(); + + try { + Thread.sleep(10); + } catch (InterruptedException e) { + } + return applicationId; + } +} diff --git a/apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/mock/grpc/GrpcSegmentPost.java b/apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/mock/grpc/GrpcSegmentPost.java index 3672c633b..064f534eb 100644 --- a/apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/mock/grpc/GrpcSegmentPost.java +++ b/apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/mock/grpc/GrpcSegmentPost.java @@ -8,21 +8,10 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicLong; import org.junit.Test; import org.skywalking.apm.collector.core.util.TimeBucketUtils; -import org.skywalking.apm.network.proto.Application; -import org.skywalking.apm.network.proto.ApplicationInstance; -import org.skywalking.apm.network.proto.ApplicationInstanceMapping; -import org.skywalking.apm.network.proto.ApplicationMapping; -import org.skywalking.apm.network.proto.ApplicationRegisterServiceGrpc; import org.skywalking.apm.network.proto.Downstream; -import org.skywalking.apm.network.proto.InstanceDiscoveryServiceGrpc; import org.skywalking.apm.network.proto.KeyWithStringValue; import org.skywalking.apm.network.proto.LogMessage; -import org.skywalking.apm.network.proto.OSInfo; import org.skywalking.apm.network.proto.RefType; -import org.skywalking.apm.network.proto.ServiceNameCollection; -import org.skywalking.apm.network.proto.ServiceNameDiscoveryServiceGrpc; -import org.skywalking.apm.network.proto.ServiceNameElement; -import org.skywalking.apm.network.proto.ServiceNameMappingCollection; import org.skywalking.apm.network.proto.SpanLayer; import org.skywalking.apm.network.proto.SpanObject; import org.skywalking.apm.network.proto.SpanType; @@ -58,28 +47,28 @@ public class GrpcSegmentPost { int providerEntryServiceId = 0; while (consumerApplicationId == 0) { - consumerApplicationId = registerApplication(channel, "consumer"); + consumerApplicationId = ApplicationRegister.register(channel, "consumer"); } while (consumerExitApplicationId == 0) { - consumerExitApplicationId = registerApplication(channel, "172.25.0.4:20880"); + consumerExitApplicationId = ApplicationRegister.register(channel, "172.25.0.4:20880"); } while (providerApplicationId == 0) { - providerApplicationId = registerApplication(channel, "provider"); + providerApplicationId = ApplicationRegister.register(channel, "provider"); } while (consumerInstanceId == 0) { - consumerInstanceId = registerInstanceId(channel, "ConsumerUUID", consumerApplicationId, "consumer_host_name", 1); + consumerInstanceId = InstanceRegister.register(channel, "ConsumerUUID", consumerApplicationId, "consumer_host_name", 1); } while (providerInstanceId == 0) { - providerInstanceId = registerInstanceId(channel, "ProviderUUID", providerApplicationId, "provider_host_name", 2); + providerInstanceId = InstanceRegister.register(channel, "ProviderUUID", providerApplicationId, "provider_host_name", 2); } while (consumerEntryServiceId == 0) { - consumerEntryServiceId = registerServiceId(channel, consumerApplicationId, "/dubbox-case/case/dubbox-rest"); + consumerEntryServiceId = ServiceRegister.register(channel, consumerApplicationId, "/dubbox-case/case/dubbox-rest"); } while (consumerExitServiceId == 0) { - consumerExitServiceId = registerServiceId(channel, consumerApplicationId, "org.skywaking.apm.testcase.dubbo.services.GreetService.doBusiness()"); + consumerExitServiceId = ServiceRegister.register(channel, consumerApplicationId, "org.skywaking.apm.testcase.dubbo.services.GreetService.doBusiness()"); } while (providerEntryServiceId == 0) { - providerEntryServiceId = registerServiceId(channel, providerApplicationId, "org.skywaking.apm.testcase.dubbo.services.GreetService.doBusiness()"); + providerEntryServiceId = ServiceRegister.register(channel, providerApplicationId, "org.skywaking.apm.testcase.dubbo.services.GreetService.doBusiness()"); } Ids ids = new Ids(); @@ -121,64 +110,6 @@ public class GrpcSegmentPost { } } - private int registerApplication(ManagedChannel channel, String applicationCode) { - ApplicationRegisterServiceGrpc.ApplicationRegisterServiceBlockingStub stub = ApplicationRegisterServiceGrpc.newBlockingStub(channel); - Application application = Application.newBuilder().addApplicationCode(applicationCode).build(); - ApplicationMapping mapping = stub.register(application); - int applicationId = mapping.getApplication(0).getValue(); - - try { - Thread.sleep(10); - } catch (InterruptedException e) { - } - return applicationId; - } - - private int registerInstanceId(ManagedChannel channel, String agentUUId, Integer applicationId, - String hostName, int processNo) { - InstanceDiscoveryServiceGrpc.InstanceDiscoveryServiceBlockingStub stub = InstanceDiscoveryServiceGrpc.newBlockingStub(channel); - ApplicationInstance.Builder instance = ApplicationInstance.newBuilder(); - instance.setApplicationId(applicationId); - instance.setRegisterTime(System.currentTimeMillis()); - instance.setAgentUUID(agentUUId); - - OSInfo.Builder osInfo = OSInfo.newBuilder(); - osInfo.setHostname(hostName); - osInfo.setOsName("Linux"); - osInfo.setProcessNo(processNo); - osInfo.addIpv4S("10.0.0.1"); - osInfo.addIpv4S("10.0.0.2"); - instance.setOsinfo(osInfo.build()); - - ApplicationInstanceMapping mapping = stub.register(instance.build()); - int instanceId = mapping.getApplicationInstanceId(); - - try { - Thread.sleep(10); - } catch (InterruptedException e) { - } - return instanceId; - } - - private int registerServiceId(ManagedChannel channel, int applicationId, String serviceName) { - ServiceNameDiscoveryServiceGrpc.ServiceNameDiscoveryServiceBlockingStub stub = ServiceNameDiscoveryServiceGrpc.newBlockingStub(channel); - ServiceNameCollection.Builder collection = ServiceNameCollection.newBuilder(); - - ServiceNameElement.Builder element = ServiceNameElement.newBuilder(); - element.setApplicationId(applicationId); - element.setServiceName(serviceName); - collection.addElements(element); - - ServiceNameMappingCollection mappingCollection = stub.discovery(collection.build()); - int serviceId = mappingCollection.getElements(0).getServiceId(); - - try { - Thread.sleep(10); - } catch (InterruptedException e) { - } - return serviceId; - } - class BuildNewSegment implements Runnable { private final ManagedChannel segmentChannel; private final Ids ids; diff --git a/apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/mock/grpc/InstanceRegister.java b/apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/mock/grpc/InstanceRegister.java new file mode 100644 index 000000000..33f73af8a --- /dev/null +++ b/apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/mock/grpc/InstanceRegister.java @@ -0,0 +1,39 @@ +package org.skywalking.apm.collector.agentstream.mock.grpc; + +import io.grpc.ManagedChannel; +import org.skywalking.apm.network.proto.ApplicationInstance; +import org.skywalking.apm.network.proto.ApplicationInstanceMapping; +import org.skywalking.apm.network.proto.InstanceDiscoveryServiceGrpc; +import org.skywalking.apm.network.proto.OSInfo; + +/** + * @author pengys5 + */ +public class InstanceRegister { + + public static int register(ManagedChannel channel, String agentUUId, Integer applicationId, + String hostName, int processNo) { + InstanceDiscoveryServiceGrpc.InstanceDiscoveryServiceBlockingStub stub = InstanceDiscoveryServiceGrpc.newBlockingStub(channel); + ApplicationInstance.Builder instance = ApplicationInstance.newBuilder(); + instance.setApplicationId(applicationId); + instance.setRegisterTime(System.currentTimeMillis()); + instance.setAgentUUID(agentUUId); + + OSInfo.Builder osInfo = OSInfo.newBuilder(); + osInfo.setHostname(hostName); + osInfo.setOsName("Linux"); + osInfo.setProcessNo(processNo); + osInfo.addIpv4S("10.0.0.1"); + osInfo.addIpv4S("10.0.0.2"); + instance.setOsinfo(osInfo.build()); + + ApplicationInstanceMapping mapping = stub.register(instance.build()); + int instanceId = mapping.getApplicationInstanceId(); + + try { + Thread.sleep(10); + } catch (InterruptedException e) { + } + return instanceId; + } +} diff --git a/apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/mock/grpc/ServiceRegister.java b/apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/mock/grpc/ServiceRegister.java new file mode 100644 index 000000000..838699f4f --- /dev/null +++ b/apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/mock/grpc/ServiceRegister.java @@ -0,0 +1,32 @@ +package org.skywalking.apm.collector.agentstream.mock.grpc; + +import io.grpc.ManagedChannel; +import org.skywalking.apm.network.proto.ServiceNameCollection; +import org.skywalking.apm.network.proto.ServiceNameDiscoveryServiceGrpc; +import org.skywalking.apm.network.proto.ServiceNameElement; +import org.skywalking.apm.network.proto.ServiceNameMappingCollection; + +/** + * @author pengys5 + */ +public class ServiceRegister { + + public static int register(ManagedChannel channel, int applicationId, String serviceName) { + ServiceNameDiscoveryServiceGrpc.ServiceNameDiscoveryServiceBlockingStub stub = ServiceNameDiscoveryServiceGrpc.newBlockingStub(channel); + ServiceNameCollection.Builder collection = ServiceNameCollection.newBuilder(); + + ServiceNameElement.Builder element = ServiceNameElement.newBuilder(); + element.setApplicationId(applicationId); + element.setServiceName(serviceName); + collection.addElements(element); + + ServiceNameMappingCollection mappingCollection = stub.discovery(collection.build()); + int serviceId = mappingCollection.getElements(0).getServiceId(); + + try { + Thread.sleep(10); + } catch (InterruptedException e) { + } + return serviceId; + } +} diff --git a/apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/mock/grpc/SingleHasEntryNoExitNoRefSpan.java b/apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/mock/grpc/SingleHasEntryNoExitNoRefSpan.java new file mode 100644 index 000000000..32d8717ba --- /dev/null +++ b/apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/mock/grpc/SingleHasEntryNoExitNoRefSpan.java @@ -0,0 +1,102 @@ +package org.skywalking.apm.collector.agentstream.mock.grpc; + +import io.grpc.ManagedChannel; +import io.grpc.ManagedChannelBuilder; +import io.grpc.stub.StreamObserver; +import org.skywalking.apm.network.proto.Downstream; +import org.skywalking.apm.network.proto.SpanLayer; +import org.skywalking.apm.network.proto.SpanObject; +import org.skywalking.apm.network.proto.SpanType; +import org.skywalking.apm.network.proto.TraceSegmentObject; +import org.skywalking.apm.network.proto.TraceSegmentServiceGrpc; +import org.skywalking.apm.network.proto.UniqueId; +import org.skywalking.apm.network.proto.UpstreamSegment; +import org.skywalking.apm.network.trace.component.ComponentsDefine; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @author pengys5 + */ +public class SingleHasEntryNoExitNoRefSpan { + + public static void main(String[] args) { + Post post = new Post(); + post.send(); + + try { + Thread.sleep(2000); + } catch (InterruptedException e) { + } + } + + static class Post { + private final Logger logger = LoggerFactory.getLogger(Post.class); + + public void send() { + ManagedChannel channel = ManagedChannelBuilder.forAddress("localhost", 11800).maxInboundMessageSize(1024 * 1024 * 50).usePlaintext(true).build(); + + int applicationId = 0; + int instanceId = 0; + int entryServiceId = 0; + while (applicationId == 0) { + applicationId = ApplicationRegister.register(channel, "consumer"); + } + + while (instanceId == 0) { + instanceId = InstanceRegister.register(channel, "ConsumerUUID", applicationId, "consumer_host_name", 1); + } + + while (entryServiceId == 0) { + entryServiceId = ServiceRegister.register(channel, applicationId, "/dubbox-case/case/dubbox-rest"); + } + + TraceSegmentServiceGrpc.TraceSegmentServiceStub stub = TraceSegmentServiceGrpc.newStub(channel); + StreamObserver streamObserver = stub.collect(new StreamObserver() { + @Override public void onNext(Downstream downstream) { + } + + @Override public void onError(Throwable throwable) { + logger.error(throwable.getMessage(), throwable); + } + + @Override public void onCompleted() { + } + }); + + long now = System.currentTimeMillis(); + + int id = 1; + UniqueId.Builder builder = UniqueId.newBuilder(); + builder.addIdParts(id); + builder.addIdParts(id); + builder.addIdParts(id); + UniqueId segmentId = builder.build(); + + UpstreamSegment.Builder upstream = UpstreamSegment.newBuilder(); + upstream.addGlobalTraceIds(segmentId); + + TraceSegmentObject.Builder segmentBuilder = TraceSegmentObject.newBuilder(); + segmentBuilder.setApplicationId(applicationId); + segmentBuilder.setApplicationInstanceId(instanceId); + segmentBuilder.setTraceSegmentId(segmentId); + + SpanObject.Builder entrySpan = SpanObject.newBuilder(); + entrySpan.setSpanId(0); + entrySpan.setSpanType(SpanType.Entry); + entrySpan.setSpanLayer(SpanLayer.Http); + entrySpan.setParentSpanId(-1); + entrySpan.setStartTime(now); + entrySpan.setEndTime(now + 3000); + entrySpan.setComponentId(ComponentsDefine.TOMCAT.getId()); + entrySpan.setOperationNameId(entryServiceId); + entrySpan.setIsError(false); + segmentBuilder.addSpans(entrySpan); + + upstream.setSegment(segmentBuilder.build().toByteString()); + + streamObserver.onNext(upstream.build()); + streamObserver.onCompleted(); + } + } +} diff --git a/apm-collector/apm-collector-boot/src/main/resources/application.yml b/apm-collector/apm-collector-boot/src/main/resources/application.yml index b1d440ec5..c11a54187 100644 --- a/apm-collector/apm-collector-boot/src/main/resources/application.yml +++ b/apm-collector/apm-collector-boot/src/main/resources/application.yml @@ -25,6 +25,6 @@ storage: elasticsearch: cluster_name: CollectorDBCluster cluster_transport_sniffer: true - cluster_nodes: 10.0.0.19:9300,10.0.0.6:9300 + cluster_nodes: localhost:9300 diff --git a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/util/Const.java b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/util/Const.java index 70af1e7ad..db328fc3f 100644 --- a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/util/Const.java +++ b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/util/Const.java @@ -7,6 +7,7 @@ public class Const { public static final String ID_SPLIT = "_"; public static final int USER_ID = 1; public static final int NONE_SERVICE_ID = 1; + public static final String NONE_SERVICE_Name = "None"; public static final String USER_CODE = "User"; public static final String SEGMENT_SPAN_SPLIT = "S"; public static final String UNKNOWN = "Unknown"; diff --git a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/noderef/NodeReferenceDataDefine.java b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/noderef/NodeReferenceDataDefine.java index fe0a074bf..a1d514e3e 100644 --- a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/noderef/NodeReferenceDataDefine.java +++ b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/noderef/NodeReferenceDataDefine.java @@ -44,29 +44,29 @@ public class NodeReferenceDataDefine extends DataDefine { int summary = remoteData.getDataIntegers(6); int error = remoteData.getDataIntegers(7); long timeBucket = remoteData.getDataLongs(0); - return new NodeReferenceSum(id, applicationId, behindApplicationId, behindPeer, s1LTE, s3LTE, s5LTE, s5GT, summary, error, timeBucket); + return new NodeReference(id, applicationId, behindApplicationId, behindPeer, s1LTE, s3LTE, s5LTE, s5GT, summary, error, timeBucket); } @Override public RemoteData serialize(Object object) { - NodeReferenceSum nodeReferenceSum = (NodeReferenceSum)object; + NodeReference nodeReference = (NodeReference)object; RemoteData.Builder builder = RemoteData.newBuilder(); - builder.addDataStrings(nodeReferenceSum.getId()); - builder.addDataIntegers(nodeReferenceSum.getApplicationId()); - builder.addDataIntegers(nodeReferenceSum.getBehindApplicationId()); - builder.addDataStrings(nodeReferenceSum.getBehindPeer()); - builder.addDataIntegers(nodeReferenceSum.getS1LTE()); - builder.addDataIntegers(nodeReferenceSum.getS3LTE()); - builder.addDataIntegers(nodeReferenceSum.getS5LTE()); - builder.addDataIntegers(nodeReferenceSum.getS5GT()); - builder.addDataIntegers(nodeReferenceSum.getSummary()); - builder.addDataIntegers(nodeReferenceSum.getError()); - builder.addDataLongs(nodeReferenceSum.getTimeBucket()); + builder.addDataStrings(nodeReference.getId()); + builder.addDataIntegers(nodeReference.getFrontApplicationId()); + builder.addDataIntegers(nodeReference.getBehindApplicationId()); + builder.addDataStrings(nodeReference.getBehindPeer()); + builder.addDataIntegers(nodeReference.getS1LTE()); + builder.addDataIntegers(nodeReference.getS3LTE()); + builder.addDataIntegers(nodeReference.getS5LTE()); + builder.addDataIntegers(nodeReference.getS5GT()); + builder.addDataIntegers(nodeReference.getSummary()); + builder.addDataIntegers(nodeReference.getError()); + builder.addDataLongs(nodeReference.getTimeBucket()); return builder.build(); } - public static class NodeReferenceSum implements Transform { + public static class NodeReference implements Transform { private String id; - private int applicationId; + private int frontApplicationId; private int behindApplicationId; private String behindPeer; private int s1LTE = 0; @@ -77,11 +77,11 @@ public class NodeReferenceDataDefine extends DataDefine { private int error = 0; private long timeBucket; - public NodeReferenceSum(String id, int applicationId, int behindApplicationId, String behindPeer, int s1LTE, + public NodeReference(String id, int frontApplicationId, int behindApplicationId, String behindPeer, int s1LTE, int s3LTE, int s5LTE, int s5GT, int summary, int error, long timeBucket) { this.id = id; - this.applicationId = applicationId; + this.frontApplicationId = frontApplicationId; this.behindApplicationId = behindApplicationId; this.behindPeer = behindPeer; this.s1LTE = s1LTE; @@ -93,14 +93,14 @@ public class NodeReferenceDataDefine extends DataDefine { this.timeBucket = timeBucket; } - public NodeReferenceSum() { + public NodeReference() { } @Override public Data toData() { NodeReferenceDataDefine define = new NodeReferenceDataDefine(); Data data = define.build(id); data.setDataString(0, this.id); - data.setDataInteger(0, this.applicationId); + data.setDataInteger(0, this.frontApplicationId); data.setDataInteger(1, this.behindApplicationId); data.setDataString(1, this.behindPeer); data.setDataInteger(2, this.s1LTE); @@ -125,12 +125,12 @@ public class NodeReferenceDataDefine extends DataDefine { this.id = id; } - public int getApplicationId() { - return applicationId; + public int getFrontApplicationId() { + return frontApplicationId; } - public void setApplicationId(int applicationId) { - this.applicationId = applicationId; + public void setFrontApplicationId(int frontApplicationId) { + this.frontApplicationId = frontApplicationId; } public int getBehindApplicationId() { diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceReferenceEsDAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceReferenceEsDAO.java index 695195437..83e1fc7dd 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceReferenceEsDAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceReferenceEsDAO.java @@ -41,7 +41,13 @@ public class ServiceReferenceEsDAO extends EsDAO implements IServiceReferenceDAO searchRequestBuilder.addAggregation(AggregationBuilders.terms(ServiceReferenceTable.COLUMN_FRONT_SERVICE_ID).field(ServiceReferenceTable.COLUMN_FRONT_SERVICE_ID).size(100) .subAggregation(AggregationBuilders.terms(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_ID).field(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_ID).size(100) - .subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_SUMMARY).field(ServiceReferenceTable.COLUMN_SUMMARY))) + .subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_S1_LTE).field(ServiceReferenceTable.COLUMN_S1_LTE)) + .subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_S3_LTE).field(ServiceReferenceTable.COLUMN_S3_LTE)) + .subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_S5_LTE).field(ServiceReferenceTable.COLUMN_S5_LTE)) + .subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_S5_GT).field(ServiceReferenceTable.COLUMN_S5_GT)) + .subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_ERROR).field(ServiceReferenceTable.COLUMN_ERROR)) + .subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_SUMMARY).field(ServiceReferenceTable.COLUMN_SUMMARY)) + .subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_COST_SUMMARY).field(ServiceReferenceTable.COLUMN_COST_SUMMARY))) .subAggregation(AggregationBuilders.terms(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_NAME).field(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_NAME).size(100) .subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_S1_LTE).field(ServiceReferenceTable.COLUMN_S1_LTE)) .subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_S3_LTE).field(ServiceReferenceTable.COLUMN_S3_LTE)) @@ -53,7 +59,13 @@ public class ServiceReferenceEsDAO extends EsDAO implements IServiceReferenceDAO searchRequestBuilder.addAggregation(AggregationBuilders.terms(ServiceReferenceTable.COLUMN_FRONT_SERVICE_NAME).field(ServiceReferenceTable.COLUMN_FRONT_SERVICE_NAME).size(100) .subAggregation(AggregationBuilders.terms(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_ID).field(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_ID).size(100) - .subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_SUMMARY).field(ServiceReferenceTable.COLUMN_SUMMARY))) + .subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_S1_LTE).field(ServiceReferenceTable.COLUMN_S1_LTE)) + .subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_S3_LTE).field(ServiceReferenceTable.COLUMN_S3_LTE)) + .subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_S5_LTE).field(ServiceReferenceTable.COLUMN_S5_LTE)) + .subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_S5_GT).field(ServiceReferenceTable.COLUMN_S5_GT)) + .subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_ERROR).field(ServiceReferenceTable.COLUMN_ERROR)) + .subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_SUMMARY).field(ServiceReferenceTable.COLUMN_SUMMARY)) + .subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_COST_SUMMARY).field(ServiceReferenceTable.COLUMN_COST_SUMMARY))) .subAggregation(AggregationBuilders.terms(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_NAME).field(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_NAME).size(100) .subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_S1_LTE).field(ServiceReferenceTable.COLUMN_S1_LTE)) .subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_S3_LTE).field(ServiceReferenceTable.COLUMN_S3_LTE)) diff --git a/apm-network/src/main/proto/DiscoveryService.proto b/apm-network/src/main/proto/DiscoveryService.proto index 0715b36b5..3c8ae1799 100644 --- a/apm-network/src/main/proto/DiscoveryService.proto +++ b/apm-network/src/main/proto/DiscoveryService.proto @@ -19,19 +19,19 @@ service InstanceDiscoveryService { } message ApplicationInstance { - int32 applicationId = 1; + int32 frontApplicationId = 1; string agentUUID = 2; int64 registerTime = 3; OSInfo osinfo = 4; } message ApplicationInstanceMapping { - int32 applicationId = 1; + int32 frontApplicationId = 1; int32 applicationInstanceId = 2; } message ApplicationInstanceRecover { - int32 applicationId = 1; + int32 frontApplicationId = 1; int32 applicationInstanceId = 2; int64 registerTime = 3; OSInfo osinfo = 4; @@ -70,5 +70,5 @@ message ServiceNameMappingElement { message ServiceNameElement { string serviceName = 1; - int32 applicationId = 2; + int32 frontApplicationId = 2; } From cf4430a2543f49779bef030f6db12fb17ef2df12 Mon Sep 17 00:00:00 2001 From: pengys5 <8082209@qq.com> Date: Tue, 5 Sep 2017 16:34:16 +0800 Subject: [PATCH 07/18] Replace mistake --- apm-network/src/main/proto/DiscoveryService.proto | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/apm-network/src/main/proto/DiscoveryService.proto b/apm-network/src/main/proto/DiscoveryService.proto index 3c8ae1799..0715b36b5 100644 --- a/apm-network/src/main/proto/DiscoveryService.proto +++ b/apm-network/src/main/proto/DiscoveryService.proto @@ -19,19 +19,19 @@ service InstanceDiscoveryService { } message ApplicationInstance { - int32 frontApplicationId = 1; + int32 applicationId = 1; string agentUUID = 2; int64 registerTime = 3; OSInfo osinfo = 4; } message ApplicationInstanceMapping { - int32 frontApplicationId = 1; + int32 applicationId = 1; int32 applicationInstanceId = 2; } message ApplicationInstanceRecover { - int32 frontApplicationId = 1; + int32 applicationId = 1; int32 applicationInstanceId = 2; int64 registerTime = 3; OSInfo osinfo = 4; @@ -70,5 +70,5 @@ message ServiceNameMappingElement { message ServiceNameElement { string serviceName = 1; - int32 frontApplicationId = 2; + int32 applicationId = 2; } From 9267fde67a786e4b67c55cb1dcd8341f34ba5836 Mon Sep 17 00:00:00 2001 From: pengys5 <8082209@qq.com> Date: Thu, 7 Sep 2017 09:01:08 +0800 Subject: [PATCH 08/18] Just contains the exit span scene. --- .../noderef/NodeReferenceSpanListener.java | 125 ++++++++--------- .../worker/segment/SegmentParse.java | 8 +- .../entry/ServiceEntrySpanListener.java | 6 +- .../ServiceReferenceSpanListener.java | 4 +- .../grpc/SingleHasEntryHasExitNoRefSpan.java | 115 +++++++++++++++ .../grpc/SingleHasEntryNoExitHasRefSpan.java | 132 ++++++++++++++++++ .../grpc/SingleNoEntryHasExitNoRefSpan.java | 103 ++++++++++++++ 7 files changed, 416 insertions(+), 77 deletions(-) create mode 100644 apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/mock/grpc/SingleHasEntryHasExitNoRefSpan.java create mode 100644 apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/mock/grpc/SingleHasEntryNoExitHasRefSpan.java create mode 100644 apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/mock/grpc/SingleNoEntryHasExitNoRefSpan.java diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/NodeReferenceSpanListener.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/NodeReferenceSpanListener.java index 94e408251..cf967c431 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/NodeReferenceSpanListener.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/NodeReferenceSpanListener.java @@ -1,13 +1,13 @@ package org.skywalking.apm.collector.agentstream.worker.noderef; -import java.util.ArrayList; +import java.util.LinkedList; import java.util.List; import org.skywalking.apm.collector.agentstream.worker.cache.InstanceCache; import org.skywalking.apm.collector.agentstream.worker.segment.EntrySpanListener; import org.skywalking.apm.collector.agentstream.worker.segment.ExitSpanListener; -import org.skywalking.apm.collector.agentstream.worker.segment.FirstSpanListener; import org.skywalking.apm.collector.agentstream.worker.segment.RefsListener; import org.skywalking.apm.collector.core.framework.CollectorContextHelper; +import org.skywalking.apm.collector.core.util.CollectionUtils; import org.skywalking.apm.collector.core.util.Const; import org.skywalking.apm.collector.core.util.TimeBucketUtils; import org.skywalking.apm.collector.storage.define.noderef.NodeReferenceDataDefine; @@ -23,73 +23,57 @@ import org.slf4j.LoggerFactory; /** * @author pengys5 */ -public class NodeReferenceSpanListener implements EntrySpanListener, ExitSpanListener, FirstSpanListener, RefsListener { +public class NodeReferenceSpanListener implements EntrySpanListener, ExitSpanListener, RefsListener { private final Logger logger = LoggerFactory.getLogger(NodeReferenceSpanListener.class); - private List nodeExitReferences = new ArrayList<>(); - private List nodeEntryReferences = new ArrayList<>(); - private List nodeReferences = new ArrayList<>(); - private long timeBucket; - private boolean hasReference = false; - private long startTime; - private long endTime; - private boolean isError; + private List nodeReferences = new LinkedList<>(); + private List references = new LinkedList<>(); @Override public void parseExit(SpanObject spanObject, int applicationId, int applicationInstanceId, String segmentId) { - NodeReferenceDataDefine.NodeReference referenceSum = new NodeReferenceDataDefine.NodeReference(); - referenceSum.setFrontApplicationId(applicationId); - referenceSum.setBehindApplicationId(spanObject.getPeerId()); + NodeReferenceDataDefine.NodeReference nodeReference = new NodeReferenceDataDefine.NodeReference(); + nodeReference.setFrontApplicationId(applicationId); + nodeReference.setBehindApplicationId(spanObject.getPeerId()); + nodeReference.setTimeBucket(TimeBucketUtils.INSTANCE.getMinuteTimeBucket(spanObject.getStartTime())); - String id = String.valueOf(applicationId); + StringBuilder idBuilder = new StringBuilder(); + idBuilder.append(nodeReference.getTimeBucket()).append(Const.ID_SPLIT).append(applicationId); if (spanObject.getPeerId() != 0) { - referenceSum.setBehindPeer(Const.EMPTY_STRING); - id = id + Const.ID_SPLIT + String.valueOf(spanObject.getPeerId()); + nodeReference.setBehindPeer(Const.EMPTY_STRING); + idBuilder.append(Const.ID_SPLIT).append(spanObject.getPeerId()); } else { - referenceSum.setBehindPeer(spanObject.getPeer()); - id = id + Const.ID_SPLIT + spanObject.getPeer(); + nodeReference.setBehindPeer(spanObject.getPeer()); + idBuilder.append(Const.ID_SPLIT).append(spanObject.getPeer()); } - referenceSum.setId(id); - nodeExitReferences.add(buildNodeRefSum(referenceSum, spanObject.getStartTime(), spanObject.getEndTime(), spanObject.getIsError())); + nodeReference.setId(idBuilder.toString()); + nodeReferences.add(buildNodeRefSum(nodeReference, spanObject.getStartTime(), spanObject.getEndTime(), spanObject.getIsError())); } @Override public void parseEntry(SpanObject spanObject, int applicationId, int applicationInstanceId, String segmentId) { - NodeReferenceDataDefine.NodeReference referenceSum = new NodeReferenceDataDefine.NodeReference(); - referenceSum.setFrontApplicationId(Const.USER_ID); - referenceSum.setBehindApplicationId(applicationId); - referenceSum.setBehindPeer(Const.EMPTY_STRING); + if (CollectionUtils.isNotEmpty(references)) { + references.forEach(nodeReference -> { + nodeReference.setTimeBucket(TimeBucketUtils.INSTANCE.getMinuteTimeBucket(spanObject.getStartTime())); + String idBuilder = String.valueOf(nodeReference.getTimeBucket()) + Const.ID_SPLIT + nodeReference.getFrontApplicationId() + + Const.ID_SPLIT + nodeReference.getBehindApplicationId(); - String id = String.valueOf(Const.USER_ID) + Const.ID_SPLIT + String.valueOf(applicationId); - referenceSum.setId(id); - nodeEntryReferences.add(buildNodeRefSum(referenceSum, spanObject.getStartTime(), spanObject.getEndTime(), spanObject.getIsError())); - } - - private NodeReferenceDataDefine.NodeReference buildNodeRefSum(NodeReferenceDataDefine.NodeReference referenceSum, - long startTime, long endTime, boolean isError) { - long cost = endTime - startTime; - if (cost <= 1000 && !isError) { - referenceSum.setS1LTE(1); - } else if (1000 < cost && cost <= 3000 && !isError) { - referenceSum.setS3LTE(1); - } else if (3000 < cost && cost <= 5000 && !isError) { - referenceSum.setS5LTE(1); - } else if (5000 < cost && !isError) { - referenceSum.setS5GT(1); + nodeReference.setId(idBuilder); + nodeReferences.add(buildNodeRefSum(nodeReference, spanObject.getStartTime(), spanObject.getEndTime(), spanObject.getIsError())); + }); } else { - referenceSum.setError(1); - } - referenceSum.setSummary(1); - return referenceSum; - } + NodeReferenceDataDefine.NodeReference nodeReference = new NodeReferenceDataDefine.NodeReference(); + nodeReference.setFrontApplicationId(Const.USER_ID); + nodeReference.setBehindApplicationId(applicationId); + nodeReference.setBehindPeer(Const.EMPTY_STRING); + nodeReference.setTimeBucket(TimeBucketUtils.INSTANCE.getMinuteTimeBucket(spanObject.getStartTime())); - @Override - public void parseFirst(SpanObject spanObject, int applicationId, int applicationInstanceId, String segmentId) { - timeBucket = TimeBucketUtils.INSTANCE.getMinuteTimeBucket(spanObject.getStartTime()); - startTime = spanObject.getStartTime(); - endTime = spanObject.getEndTime(); - isError = spanObject.getIsError(); + String idBuilder = String.valueOf(nodeReference.getTimeBucket()) + Const.ID_SPLIT + nodeReference.getFrontApplicationId() + + Const.ID_SPLIT + nodeReference.getBehindApplicationId(); + + nodeReference.setId(idBuilder); + nodeReferences.add(buildNodeRefSum(nodeReference, spanObject.getStartTime(), spanObject.getEndTime(), spanObject.getIsError())); + } } @Override public void parseRef(TraceSegmentReference reference, int applicationId, int applicationInstanceId, @@ -100,29 +84,14 @@ public class NodeReferenceSpanListener implements EntrySpanListener, ExitSpanLis referenceSum.setFrontApplicationId(parentApplicationId); referenceSum.setBehindApplicationId(applicationId); referenceSum.setBehindPeer(Const.EMPTY_STRING); - - String id = String.valueOf(parentApplicationId) + Const.ID_SPLIT + String.valueOf(applicationId); - referenceSum.setId(id); - - hasReference = true; - nodeReferences.add(referenceSum); + references.add(referenceSum); } @Override public void build() { logger.debug("node reference summary listener build"); StreamModuleContext context = (StreamModuleContext)CollectorContextHelper.INSTANCE.getContext(StreamModuleGroupDefine.GROUP_NAME); - if (!hasReference) { - nodeExitReferences.addAll(nodeEntryReferences); - } else { - nodeReferences.forEach(referenceSum -> { - nodeExitReferences.add(buildNodeRefSum(referenceSum, startTime, endTime, isError)); - }); - } - - for (NodeReferenceDataDefine.NodeReference referenceSum : nodeExitReferences) { - referenceSum.setId(timeBucket + Const.ID_SPLIT + referenceSum.getId()); - referenceSum.setTimeBucket(timeBucket); + for (NodeReferenceDataDefine.NodeReference referenceSum : nodeReferences) { try { logger.debug("send to node reference summary aggregation worker, id: {}", referenceSum.getId()); context.getClusterWorkerContext().lookup(NodeReferenceAggregationWorker.WorkerRole.INSTANCE).tell(referenceSum.toData()); @@ -131,4 +100,22 @@ public class NodeReferenceSpanListener implements EntrySpanListener, ExitSpanLis } } } + + private NodeReferenceDataDefine.NodeReference buildNodeRefSum(NodeReferenceDataDefine.NodeReference reference, + long startTime, long endTime, boolean isError) { + long cost = endTime - startTime; + if (cost <= 1000 && !isError) { + reference.setS1LTE(1); + } else if (1000 < cost && cost <= 3000 && !isError) { + reference.setS3LTE(1); + } else if (3000 < cost && cost <= 5000 && !isError) { + reference.setS5LTE(1); + } else if (5000 < cost && !isError) { + reference.setS5GT(1); + } else { + reference.setError(1); + } + reference.setSummary(1); + return reference; + } } diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/SegmentParse.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/SegmentParse.java index 9f60ca953..38815207d 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/SegmentParse.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/SegmentParse.java @@ -49,9 +49,7 @@ public class SegmentParse { public void parse(List traceIds, TraceSegmentObject segmentObject) { StringBuilder segmentIdBuilder = new StringBuilder(); - segmentObject.getTraceSegmentId().getIdPartsList().forEach(part -> { - segmentIdBuilder.append(part); - }); + segmentObject.getTraceSegmentId().getIdPartsList().forEach(segmentIdBuilder::append); String segmentId = segmentIdBuilder.toString(); for (UniqueId uniqueId : traceIds) { @@ -88,7 +86,7 @@ public class SegmentParse { buildSegment(segmentId, segmentObject.toByteArray()); } - public void buildSegment(String id, byte[] dataBinary) { + private void buildSegment(String id, byte[] dataBinary) { StreamModuleContext context = (StreamModuleContext)CollectorContextHelper.INSTANCE.getContext(StreamModuleGroupDefine.GROUP_NAME); SegmentDataDefine.Segment segment = new SegmentDataDefine.Segment(); segment.setId(id); @@ -103,7 +101,7 @@ public class SegmentParse { } private void notifyListenerToBuild() { - spanListeners.forEach(listener -> listener.build()); + spanListeners.forEach(SpanListener::build); } private void notifyExitListener(SpanObject spanObject, int applicationId, int applicationInstanceId, diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/service/entry/ServiceEntrySpanListener.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/service/entry/ServiceEntrySpanListener.java index d0c144f77..0773b00be 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/service/entry/ServiceEntrySpanListener.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/service/entry/ServiceEntrySpanListener.java @@ -58,7 +58,11 @@ public class ServiceEntrySpanListener implements RefsListener, FirstSpanListener StreamModuleContext context = (StreamModuleContext)CollectorContextHelper.INSTANCE.getContext(StreamModuleGroupDefine.GROUP_NAME); if (!hasReference && hasEntry) { ServiceEntryDataDefine.ServiceEntry serviceEntry = new ServiceEntryDataDefine.ServiceEntry(); - serviceEntry.setId(applicationId + Const.ID_SPLIT + entryServiceName); + if (entryServiceId == 0) { + serviceEntry.setId(applicationId + Const.ID_SPLIT + entryServiceName); + } else { + serviceEntry.setId(applicationId + Const.ID_SPLIT + entryServiceId); + } serviceEntry.setApplicationId(applicationId); serviceEntry.setEntryServiceId(entryServiceId); serviceEntry.setEntryServiceName(entryServiceName); diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/ServiceReferenceSpanListener.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/ServiceReferenceSpanListener.java index 009870de6..65b1e0271 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/ServiceReferenceSpanListener.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/ServiceReferenceSpanListener.java @@ -1,6 +1,6 @@ package org.skywalking.apm.collector.agentstream.worker.serviceref; -import java.util.ArrayList; +import java.util.LinkedList; import java.util.List; import org.skywalking.apm.collector.agentstream.worker.cache.InstanceCache; import org.skywalking.apm.collector.agentstream.worker.segment.EntrySpanListener; @@ -26,7 +26,7 @@ public class ServiceReferenceSpanListener implements FirstSpanListener, EntrySpa private final Logger logger = LoggerFactory.getLogger(ServiceReferenceSpanListener.class); - private List referenceServices = new ArrayList<>(); + private List referenceServices = new LinkedList<>(); private int serviceId = 0; private String serviceName = ""; private long startTime = 0; diff --git a/apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/mock/grpc/SingleHasEntryHasExitNoRefSpan.java b/apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/mock/grpc/SingleHasEntryHasExitNoRefSpan.java new file mode 100644 index 000000000..2eee08472 --- /dev/null +++ b/apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/mock/grpc/SingleHasEntryHasExitNoRefSpan.java @@ -0,0 +1,115 @@ +package org.skywalking.apm.collector.agentstream.mock.grpc; + +import io.grpc.ManagedChannel; +import io.grpc.ManagedChannelBuilder; +import io.grpc.stub.StreamObserver; +import org.skywalking.apm.network.proto.Downstream; +import org.skywalking.apm.network.proto.SpanLayer; +import org.skywalking.apm.network.proto.SpanObject; +import org.skywalking.apm.network.proto.SpanType; +import org.skywalking.apm.network.proto.TraceSegmentObject; +import org.skywalking.apm.network.proto.TraceSegmentServiceGrpc; +import org.skywalking.apm.network.proto.UniqueId; +import org.skywalking.apm.network.proto.UpstreamSegment; +import org.skywalking.apm.network.trace.component.ComponentsDefine; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @author pengys5 + */ +public class SingleHasEntryHasExitNoRefSpan { + + public static void main(String[] args) { + Post post = new Post(); + post.send(); + + try { + Thread.sleep(2000); + } catch (InterruptedException e) { + } + } + + static class Post { + private final Logger logger = LoggerFactory.getLogger(Post.class); + + public void send() { + ManagedChannel channel = ManagedChannelBuilder.forAddress("localhost", 11800).maxInboundMessageSize(1024 * 1024 * 50).usePlaintext(true).build(); + + int applicationId = 0; + int instanceId = 0; + int entryServiceId = 0; + while (applicationId == 0) { + applicationId = ApplicationRegister.register(channel, "consumer"); + } + + while (instanceId == 0) { + instanceId = InstanceRegister.register(channel, "ConsumerUUID", applicationId, "consumer_host_name", 1); + } + + while (entryServiceId == 0) { + entryServiceId = ServiceRegister.register(channel, applicationId, "/dubbox-case/case/dubbox-rest"); + } + + TraceSegmentServiceGrpc.TraceSegmentServiceStub stub = TraceSegmentServiceGrpc.newStub(channel); + StreamObserver streamObserver = stub.collect(new StreamObserver() { + @Override public void onNext(Downstream downstream) { + } + + @Override public void onError(Throwable throwable) { + logger.error(throwable.getMessage(), throwable); + } + + @Override public void onCompleted() { + } + }); + + long now = System.currentTimeMillis(); + + int id = 1; + UniqueId.Builder builder = UniqueId.newBuilder(); + builder.addIdParts(id); + builder.addIdParts(id); + builder.addIdParts(id); + UniqueId segmentId = builder.build(); + + UpstreamSegment.Builder upstream = UpstreamSegment.newBuilder(); + upstream.addGlobalTraceIds(segmentId); + + TraceSegmentObject.Builder segmentBuilder = TraceSegmentObject.newBuilder(); + segmentBuilder.setApplicationId(applicationId); + segmentBuilder.setApplicationInstanceId(instanceId); + segmentBuilder.setTraceSegmentId(segmentId); + + SpanObject.Builder entrySpan = SpanObject.newBuilder(); + entrySpan.setSpanId(0); + entrySpan.setSpanType(SpanType.Entry); + entrySpan.setSpanLayer(SpanLayer.Http); + entrySpan.setParentSpanId(-1); + entrySpan.setStartTime(now); + entrySpan.setEndTime(now + 3000); + entrySpan.setComponentId(ComponentsDefine.TOMCAT.getId()); + entrySpan.setOperationNameId(entryServiceId); + entrySpan.setIsError(false); + segmentBuilder.addSpans(entrySpan); + + SpanObject.Builder exitSpan = SpanObject.newBuilder(); + exitSpan.setSpanId(1); + exitSpan.setSpanType(SpanType.Exit); + exitSpan.setSpanLayer(SpanLayer.Database); + exitSpan.setParentSpanId(0); + exitSpan.setStartTime(now); + exitSpan.setEndTime(now + 3000); + exitSpan.setComponentId(ComponentsDefine.MONGODB.getId()); + exitSpan.setOperationNameId(entryServiceId); + exitSpan.setIsError(false); + exitSpan.setPeer("localhost:8888"); + segmentBuilder.addSpans(exitSpan); + + upstream.setSegment(segmentBuilder.build().toByteString()); + + streamObserver.onNext(upstream.build()); + streamObserver.onCompleted(); + } + } +} diff --git a/apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/mock/grpc/SingleHasEntryNoExitHasRefSpan.java b/apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/mock/grpc/SingleHasEntryNoExitHasRefSpan.java new file mode 100644 index 000000000..56e256a6d --- /dev/null +++ b/apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/mock/grpc/SingleHasEntryNoExitHasRefSpan.java @@ -0,0 +1,132 @@ +package org.skywalking.apm.collector.agentstream.mock.grpc; + +import io.grpc.ManagedChannel; +import io.grpc.ManagedChannelBuilder; +import io.grpc.stub.StreamObserver; +import org.skywalking.apm.network.proto.Downstream; +import org.skywalking.apm.network.proto.RefType; +import org.skywalking.apm.network.proto.SpanLayer; +import org.skywalking.apm.network.proto.SpanObject; +import org.skywalking.apm.network.proto.SpanType; +import org.skywalking.apm.network.proto.TraceSegmentObject; +import org.skywalking.apm.network.proto.TraceSegmentReference; +import org.skywalking.apm.network.proto.TraceSegmentServiceGrpc; +import org.skywalking.apm.network.proto.UniqueId; +import org.skywalking.apm.network.proto.UpstreamSegment; +import org.skywalking.apm.network.trace.component.ComponentsDefine; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @author pengys5 + */ +public class SingleHasEntryNoExitHasRefSpan { + + public static void main(String[] args) { + Post post = new Post(); + post.send(); + + try { + Thread.sleep(2000); + } catch (InterruptedException e) { + } + } + + static class Post { + private final Logger logger = LoggerFactory.getLogger(Post.class); + + public void send() { + ManagedChannel channel = ManagedChannelBuilder.forAddress("localhost", 11800).maxInboundMessageSize(1024 * 1024 * 50).usePlaintext(true).build(); + + int consumerApplicationId = 0; + int providerApplicationId = 0; + int consumerInstanceId = 0; + int providerInstanceId = 0; + int consumerEntryServiceId = 0; + int consumerExitServiceId = 0; + int consumerExitApplicationId = 0; + int providerEntryServiceId = 0; + + while (consumerApplicationId == 0) { + consumerApplicationId = ApplicationRegister.register(channel, "consumer"); + } + while (consumerExitApplicationId == 0) { + consumerExitApplicationId = ApplicationRegister.register(channel, "172.25.0.4:20880"); + } + while (providerApplicationId == 0) { + providerApplicationId = ApplicationRegister.register(channel, "provider"); + } + while (consumerInstanceId == 0) { + consumerInstanceId = InstanceRegister.register(channel, "ConsumerUUID", consumerApplicationId, "consumer_host_name", 1); + } + while (providerInstanceId == 0) { + providerInstanceId = InstanceRegister.register(channel, "ProviderUUID", providerApplicationId, "provider_host_name", 2); + } + while (consumerEntryServiceId == 0) { + consumerEntryServiceId = ServiceRegister.register(channel, consumerApplicationId, "/dubbox-case/case/dubbox-rest"); + } + while (consumerExitServiceId == 0) { + consumerExitServiceId = ServiceRegister.register(channel, consumerApplicationId, "org.skywaking.apm.testcase.dubbo.services.GreetService.doBusiness()"); + } + while (providerEntryServiceId == 0) { + providerEntryServiceId = ServiceRegister.register(channel, providerApplicationId, "org.skywaking.apm.testcase.dubbo.services.GreetService.doBusiness()"); + } + + TraceSegmentServiceGrpc.TraceSegmentServiceStub stub = TraceSegmentServiceGrpc.newStub(channel); + StreamObserver streamObserver = stub.collect(new StreamObserver() { + @Override public void onNext(Downstream downstream) { + } + + @Override public void onError(Throwable throwable) { + logger.error(throwable.getMessage(), throwable); + } + + @Override public void onCompleted() { + } + }); + + long now = System.currentTimeMillis(); + + int id = 1; + UniqueId.Builder builder = UniqueId.newBuilder(); + builder.addIdParts(id); + builder.addIdParts(id); + builder.addIdParts(id); + UniqueId segmentId = builder.build(); + + UpstreamSegment.Builder upstream = UpstreamSegment.newBuilder(); + upstream.addGlobalTraceIds(segmentId); + + TraceSegmentObject.Builder segmentBuilder = TraceSegmentObject.newBuilder(); + segmentBuilder.setApplicationId(consumerApplicationId); + segmentBuilder.setApplicationInstanceId(consumerInstanceId); + segmentBuilder.setTraceSegmentId(segmentId); + + TraceSegmentReference.Builder referenceBuilder = TraceSegmentReference.newBuilder(); + referenceBuilder.setEntryApplicationInstanceId(providerInstanceId); + referenceBuilder.setEntryServiceName("/rest/test"); + referenceBuilder.setParentApplicationInstanceId(providerInstanceId); + referenceBuilder.setParentServiceName("/rest/test"); + referenceBuilder.setRefType(RefType.CrossProcess); + referenceBuilder.setNetworkAddress("localhost:8080"); + segmentBuilder.addRefs(referenceBuilder); + + SpanObject.Builder entrySpan = SpanObject.newBuilder(); + entrySpan.setSpanId(0); + entrySpan.setSpanType(SpanType.Entry); + entrySpan.setSpanLayer(SpanLayer.Http); + entrySpan.setParentSpanId(-1); + entrySpan.setStartTime(now); + entrySpan.setEndTime(now + 3000); + entrySpan.setComponentId(ComponentsDefine.TOMCAT.getId()); + entrySpan.setOperationNameId(consumerEntryServiceId); + entrySpan.setIsError(false); + segmentBuilder.addSpans(entrySpan); + + upstream.setSegment(segmentBuilder.build().toByteString()); + + streamObserver.onNext(upstream.build()); + streamObserver.onCompleted(); + } + } +} diff --git a/apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/mock/grpc/SingleNoEntryHasExitNoRefSpan.java b/apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/mock/grpc/SingleNoEntryHasExitNoRefSpan.java new file mode 100644 index 000000000..2d41d7300 --- /dev/null +++ b/apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/mock/grpc/SingleNoEntryHasExitNoRefSpan.java @@ -0,0 +1,103 @@ +package org.skywalking.apm.collector.agentstream.mock.grpc; + +import io.grpc.ManagedChannel; +import io.grpc.ManagedChannelBuilder; +import io.grpc.stub.StreamObserver; +import org.skywalking.apm.network.proto.Downstream; +import org.skywalking.apm.network.proto.SpanLayer; +import org.skywalking.apm.network.proto.SpanObject; +import org.skywalking.apm.network.proto.SpanType; +import org.skywalking.apm.network.proto.TraceSegmentObject; +import org.skywalking.apm.network.proto.TraceSegmentServiceGrpc; +import org.skywalking.apm.network.proto.UniqueId; +import org.skywalking.apm.network.proto.UpstreamSegment; +import org.skywalking.apm.network.trace.component.ComponentsDefine; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @author pengys5 + */ +public class SingleNoEntryHasExitNoRefSpan { + + public static void main(String[] args) { + Post post = new Post(); + post.send(); + + try { + Thread.sleep(2000); + } catch (InterruptedException e) { + } + } + + static class Post { + private final Logger logger = LoggerFactory.getLogger(Post.class); + + public void send() { + ManagedChannel channel = ManagedChannelBuilder.forAddress("localhost", 11800).maxInboundMessageSize(1024 * 1024 * 50).usePlaintext(true).build(); + + int applicationId = 0; + int instanceId = 0; + int entryServiceId = 0; + while (applicationId == 0) { + applicationId = ApplicationRegister.register(channel, "consumer"); + } + + while (instanceId == 0) { + instanceId = InstanceRegister.register(channel, "ConsumerUUID", applicationId, "consumer_host_name", 1); + } + + while (entryServiceId == 0) { + entryServiceId = ServiceRegister.register(channel, applicationId, "/dubbox-case/case/dubbox-rest"); + } + + TraceSegmentServiceGrpc.TraceSegmentServiceStub stub = TraceSegmentServiceGrpc.newStub(channel); + StreamObserver streamObserver = stub.collect(new StreamObserver() { + @Override public void onNext(Downstream downstream) { + } + + @Override public void onError(Throwable throwable) { + logger.error(throwable.getMessage(), throwable); + } + + @Override public void onCompleted() { + } + }); + + long now = System.currentTimeMillis(); + + int id = 1; + UniqueId.Builder builder = UniqueId.newBuilder(); + builder.addIdParts(id); + builder.addIdParts(id); + builder.addIdParts(id); + UniqueId segmentId = builder.build(); + + UpstreamSegment.Builder upstream = UpstreamSegment.newBuilder(); + upstream.addGlobalTraceIds(segmentId); + + TraceSegmentObject.Builder segmentBuilder = TraceSegmentObject.newBuilder(); + segmentBuilder.setApplicationId(applicationId); + segmentBuilder.setApplicationInstanceId(instanceId); + segmentBuilder.setTraceSegmentId(segmentId); + + SpanObject.Builder exitSpan = SpanObject.newBuilder(); + exitSpan.setSpanId(0); + exitSpan.setSpanType(SpanType.Exit); + exitSpan.setSpanLayer(SpanLayer.Database); + exitSpan.setParentSpanId(-1); + exitSpan.setStartTime(now); + exitSpan.setEndTime(now + 3000); + exitSpan.setComponentId(ComponentsDefine.MONGODB.getId()); + exitSpan.setOperationNameId(entryServiceId); + exitSpan.setIsError(false); + exitSpan.setPeer("localhost:8888"); + segmentBuilder.addSpans(exitSpan); + + upstream.setSegment(segmentBuilder.build().toByteString()); + + streamObserver.onNext(upstream.build()); + streamObserver.onCompleted(); + } + } +} From 6d46e85a6fe5cdc96f89ee7ef4d3eee6c42200c2 Mon Sep 17 00:00:00 2001 From: ascrutae Date: Tue, 5 Sep 2017 19:34:49 +0800 Subject: [PATCH 09/18] fix time bucket issue --- .../ServiceNameRegisterSerialWorker.java | 2 +- .../apm/collector/core/util/Const.java | 2 +- .../collector/core/util/TimeBucketUtils.java | 11 +++++++++++ .../apm/collector/ui/dao/CpuMetricEsDAO.java | 9 +++++---- .../apm/collector/ui/dao/GCMetricEsDAO.java | 17 +++++++++-------- .../collector/ui/dao/InstPerformanceEsDAO.java | 15 +++++++++------ .../apm/collector/ui/dao/MemoryMetricEsDAO.java | 16 ++++++++++------ .../collector/ui/dao/MemoryPoolMetricEsDAO.java | 17 ++++++++++------- 8 files changed, 56 insertions(+), 33 deletions(-) diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/register/servicename/ServiceNameRegisterSerialWorker.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/register/servicename/ServiceNameRegisterSerialWorker.java index c2aa4462d..3f9ba4b31 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/register/servicename/ServiceNameRegisterSerialWorker.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/register/servicename/ServiceNameRegisterSerialWorker.java @@ -43,7 +43,7 @@ public class ServiceNameRegisterSerialWorker extends AbstractLocalAsyncWorker { if (serviceId == 0) { int min = dao.getMinServiceId(); if (min == 0) { - ServiceNameDataDefine.ServiceName noneServiceName = new ServiceNameDataDefine.ServiceName("1", Const.NONE_SERVICE_Name, 0, Const.NONE_SERVICE_ID); + ServiceNameDataDefine.ServiceName noneServiceName = new ServiceNameDataDefine.ServiceName("1", Const.NONE_SERVICE_NAME, 0, Const.NONE_SERVICE_ID); dao.save(noneServiceName); serviceName.setServiceId(-1); diff --git a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/util/Const.java b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/util/Const.java index db328fc3f..af1a1e13e 100644 --- a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/util/Const.java +++ b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/util/Const.java @@ -7,7 +7,7 @@ public class Const { public static final String ID_SPLIT = "_"; public static final int USER_ID = 1; public static final int NONE_SERVICE_ID = 1; - public static final String NONE_SERVICE_Name = "None"; + public static final String NONE_SERVICE_NAME = "None"; public static final String USER_CODE = "User"; public static final String SEGMENT_SPAN_SPLIT = "S"; public static final String UNKNOWN = "Unknown"; diff --git a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/util/TimeBucketUtils.java b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/util/TimeBucketUtils.java index 7178e79ff..76cb675ec 100644 --- a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/util/TimeBucketUtils.java +++ b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/util/TimeBucketUtils.java @@ -88,6 +88,17 @@ public enum TimeBucketUtils { } } + public long addSecondForSecondTimeBucket(String timeBucketType, long timeBucket, int second) { + if (!TimeBucketType.SECOND.name().equals(timeBucketType)) { + throw new UnexpectedException("time bucket type must be second "); + } + Calendar calendar = Calendar.getInstance(); + calendar.setTimeInMillis(changeTimeBucket2TimeStamp(timeBucketType, timeBucket)); + calendar.add(Calendar.SECOND, second); + + return getSecondTimeBucket(calendar.getTimeInMillis()); + } + public enum TimeBucketType { SECOND, MINUTE, HOUR, DAY } diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/CpuMetricEsDAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/CpuMetricEsDAO.java index becd67d5a..2e7672c19 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/CpuMetricEsDAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/CpuMetricEsDAO.java @@ -6,6 +6,7 @@ import org.elasticsearch.action.get.MultiGetItemResponse; import org.elasticsearch.action.get.MultiGetRequestBuilder; import org.elasticsearch.action.get.MultiGetResponse; import org.skywalking.apm.collector.core.util.Const; +import org.skywalking.apm.collector.core.util.TimeBucketUtils; import org.skywalking.apm.collector.storage.define.jvm.CpuMetricTable; import org.skywalking.apm.collector.storage.elasticsearch.dao.EsDAO; @@ -27,13 +28,13 @@ public class CpuMetricEsDAO extends EsDAO implements ICpuMetricDAO { @Override public JsonArray getMetric(int instanceId, long startTimeBucket, long endTimeBucket) { MultiGetRequestBuilder prepareMultiGet = getClient().prepareMultiGet(); - int i = 0; + long timeBucket = startTimeBucket; do { - String id = (startTimeBucket + i) + Const.ID_SPLIT + instanceId; + timeBucket = TimeBucketUtils.INSTANCE.addSecondForSecondTimeBucket(TimeBucketUtils.TimeBucketType.SECOND.name(), timeBucket, 1); + String id = timeBucket + Const.ID_SPLIT + instanceId; prepareMultiGet.add(CpuMetricTable.TABLE, CpuMetricTable.TABLE_TYPE, id); - i++; } - while (startTimeBucket + i <= endTimeBucket); + while (timeBucket <= endTimeBucket); JsonArray metrics = new JsonArray(); MultiGetResponse multiGetResponse = prepareMultiGet.get(); diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/GCMetricEsDAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/GCMetricEsDAO.java index 16b441e5e..76dda35d8 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/GCMetricEsDAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/GCMetricEsDAO.java @@ -16,6 +16,7 @@ import org.elasticsearch.search.aggregations.AggregationBuilders; import org.elasticsearch.search.aggregations.bucket.terms.Terms; import org.elasticsearch.search.aggregations.metrics.sum.Sum; import org.skywalking.apm.collector.core.util.Const; +import org.skywalking.apm.collector.core.util.TimeBucketUtils; import org.skywalking.apm.collector.storage.define.jvm.GCMetricTable; import org.skywalking.apm.collector.storage.elasticsearch.dao.EsDAO; import org.skywalking.apm.network.proto.GCPhrase; @@ -89,13 +90,13 @@ public class GCMetricEsDAO extends EsDAO implements IGCMetricDAO { JsonObject response = new JsonObject(); MultiGetRequestBuilder youngPrepareMultiGet = getClient().prepareMultiGet(); - int i = 0; + long timeBucket = startTimeBucket; do { - String youngId = (startTimeBucket + i) + Const.ID_SPLIT + instanceId + Const.ID_SPLIT + GCPhrase.NEW_VALUE; + timeBucket = TimeBucketUtils.INSTANCE.addSecondForSecondTimeBucket(TimeBucketUtils.TimeBucketType.SECOND.name(), timeBucket, 1); + String youngId = timeBucket + Const.ID_SPLIT + instanceId + Const.ID_SPLIT + GCPhrase.NEW_VALUE; youngPrepareMultiGet.add(GCMetricTable.TABLE, GCMetricTable.TABLE_TYPE, youngId); - i++; } - while (startTimeBucket + i <= endTimeBucket); + while (timeBucket <= endTimeBucket); JsonArray youngArray = new JsonArray(); MultiGetResponse multiGetResponse = youngPrepareMultiGet.get(); @@ -109,13 +110,13 @@ public class GCMetricEsDAO extends EsDAO implements IGCMetricDAO { response.add("ygc", youngArray); MultiGetRequestBuilder oldPrepareMultiGet = getClient().prepareMultiGet(); - i = 0; + timeBucket = startTimeBucket; do { - String oldId = (startTimeBucket + i) + Const.ID_SPLIT + instanceId + Const.ID_SPLIT + GCPhrase.OLD_VALUE; + timeBucket = TimeBucketUtils.INSTANCE.addSecondForSecondTimeBucket(TimeBucketUtils.TimeBucketType.SECOND.name(), timeBucket, 1); + String oldId = timeBucket + Const.ID_SPLIT + instanceId + Const.ID_SPLIT + GCPhrase.OLD_VALUE; oldPrepareMultiGet.add(GCMetricTable.TABLE, GCMetricTable.TABLE_TYPE, oldId); - i++; } - while (startTimeBucket + i <= endTimeBucket); + while (timeBucket <= endTimeBucket); JsonArray oldArray = new JsonArray(); diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/InstPerformanceEsDAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/InstPerformanceEsDAO.java index e7dcd7dbd..79cfcca24 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/InstPerformanceEsDAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/InstPerformanceEsDAO.java @@ -17,6 +17,7 @@ import org.elasticsearch.search.aggregations.AggregationBuilders; import org.elasticsearch.search.aggregations.bucket.terms.Terms; import org.elasticsearch.search.aggregations.metrics.sum.Sum; import org.skywalking.apm.collector.core.util.Const; +import org.skywalking.apm.collector.core.util.TimeBucketUtils; import org.skywalking.apm.collector.storage.define.instance.InstPerformanceTable; import org.skywalking.apm.collector.storage.elasticsearch.dao.EsDAO; @@ -80,13 +81,13 @@ public class InstPerformanceEsDAO extends EsDAO implements IInstPerformanceDAO { @Override public JsonArray getTpsMetric(int instanceId, long startTimeBucket, long endTimeBucket) { MultiGetRequestBuilder prepareMultiGet = getClient().prepareMultiGet(); - int i = 0; + long timeBucket = startTimeBucket; do { - String id = (startTimeBucket + i) + Const.ID_SPLIT + instanceId; + String id = timeBucket + Const.ID_SPLIT + instanceId; prepareMultiGet.add(InstPerformanceTable.TABLE, InstPerformanceTable.TABLE_TYPE, id); - i++; + timeBucket = TimeBucketUtils.INSTANCE.addSecondForSecondTimeBucket(TimeBucketUtils.TimeBucketType.SECOND.name(), timeBucket, 1); } - while (startTimeBucket + i <= endTimeBucket); + while (timeBucket <= endTimeBucket); JsonArray metrics = new JsonArray(); MultiGetResponse multiGetResponse = prepareMultiGet.get(); @@ -116,12 +117,14 @@ public class InstPerformanceEsDAO extends EsDAO implements IInstPerformanceDAO { MultiGetRequestBuilder prepareMultiGet = getClient().prepareMultiGet(); int i = 0; + long timeBucket; do { - String id = (startTimeBucket + i) + Const.ID_SPLIT + instanceId; + timeBucket = TimeBucketUtils.INSTANCE.addSecondForSecondTimeBucket(TimeBucketUtils.TimeBucketType.SECOND.name(), startTimeBucket, i); + String id = timeBucket + Const.ID_SPLIT + instanceId; prepareMultiGet.add(InstPerformanceTable.TABLE, InstPerformanceTable.TABLE_TYPE, id); i++; } - while (startTimeBucket + i <= endTimeBucket); + while (timeBucket <= endTimeBucket); JsonArray metrics = new JsonArray(); MultiGetResponse multiGetResponse = prepareMultiGet.get(); diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/MemoryMetricEsDAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/MemoryMetricEsDAO.java index e441b0e1c..ce53c7d58 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/MemoryMetricEsDAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/MemoryMetricEsDAO.java @@ -7,6 +7,7 @@ import org.elasticsearch.action.get.MultiGetItemResponse; import org.elasticsearch.action.get.MultiGetRequestBuilder; import org.elasticsearch.action.get.MultiGetResponse; import org.skywalking.apm.collector.core.util.Const; +import org.skywalking.apm.collector.core.util.TimeBucketUtils; import org.skywalking.apm.collector.storage.define.jvm.MemoryMetricTable; import org.skywalking.apm.collector.storage.elasticsearch.dao.EsDAO; @@ -36,22 +37,25 @@ public class MemoryMetricEsDAO extends EsDAO implements IMemoryMetricDAO { MultiGetRequestBuilder prepareMultiGet = getClient().prepareMultiGet(); int i = 0; + long timeBucket = startTimeBucket; do { - String id = (startTimeBucket + i) + Const.ID_SPLIT + instanceId + Const.ID_SPLIT + isHeap; + timeBucket = TimeBucketUtils.INSTANCE.addSecondForSecondTimeBucket(TimeBucketUtils.TimeBucketType.SECOND.name(), timeBucket, 1); + String id = timeBucket + Const.ID_SPLIT + instanceId + Const.ID_SPLIT + isHeap; prepareMultiGet.add(MemoryMetricTable.TABLE, MemoryMetricTable.TABLE_TYPE, id); - i++; } - while (startTimeBucket + i <= endTimeBucket); + while (timeBucket <= endTimeBucket); JsonObject metric = new JsonObject(); JsonArray usedMetric = new JsonArray(); MultiGetResponse multiGetResponse = prepareMultiGet.get(); for (MultiGetItemResponse response : multiGetResponse.getResponses()) { if (response.getResponse().isExists()) { - metric.addProperty("max", ((Number)response.getResponse().getSource().get(MemoryMetricTable.COLUMN_MAX)).intValue()); - metric.addProperty("init", ((Number)response.getResponse().getSource().get(MemoryMetricTable.COLUMN_INIT)).intValue()); - usedMetric.add(((Number)response.getResponse().getSource().get(MemoryMetricTable.COLUMN_USED)).intValue()); + metric.addProperty("max", ((Number)response.getResponse().getSource().get(MemoryMetricTable.COLUMN_MAX)).longValue()); + metric.addProperty("init", ((Number)response.getResponse().getSource().get(MemoryMetricTable.COLUMN_INIT)).longValue()); + usedMetric.add(((Number)response.getResponse().getSource().get(MemoryMetricTable.COLUMN_USED)).longValue()); } else { + metric.addProperty("max", 0); + metric.addProperty("init",0); usedMetric.add(0); } } diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/MemoryPoolMetricEsDAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/MemoryPoolMetricEsDAO.java index 01b78c3ee..222b9cfb6 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/MemoryPoolMetricEsDAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/MemoryPoolMetricEsDAO.java @@ -7,6 +7,7 @@ import org.elasticsearch.action.get.MultiGetItemResponse; import org.elasticsearch.action.get.MultiGetRequestBuilder; import org.elasticsearch.action.get.MultiGetResponse; import org.skywalking.apm.collector.core.util.Const; +import org.skywalking.apm.collector.core.util.TimeBucketUtils; import org.skywalking.apm.collector.storage.define.jvm.MemoryPoolMetricTable; import org.skywalking.apm.collector.storage.elasticsearch.dao.EsDAO; @@ -36,23 +37,25 @@ public class MemoryPoolMetricEsDAO extends EsDAO implements IMemoryPoolMetricDAO int poolType) { MultiGetRequestBuilder prepareMultiGet = getClient().prepareMultiGet(); - int i = 0; + long timeBucket = startTimeBucket; do { - String id = (startTimeBucket + i) + Const.ID_SPLIT + instanceId + Const.ID_SPLIT + isHeap + Const.ID_SPLIT + poolType; + timeBucket = TimeBucketUtils.INSTANCE.addSecondForSecondTimeBucket(TimeBucketUtils.TimeBucketType.SECOND.name(), timeBucket, 1); + String id = timeBucket + Const.ID_SPLIT + instanceId + Const.ID_SPLIT + isHeap + Const.ID_SPLIT + poolType; prepareMultiGet.add(MemoryPoolMetricTable.TABLE, MemoryPoolMetricTable.TABLE_TYPE, id); - i++; } - while (startTimeBucket + i <= endTimeBucket); + while (timeBucket <= endTimeBucket); JsonObject metric = new JsonObject(); JsonArray usedMetric = new JsonArray(); MultiGetResponse multiGetResponse = prepareMultiGet.get(); for (MultiGetItemResponse response : multiGetResponse.getResponses()) { if (response.getResponse().isExists()) { - metric.addProperty("max", ((Number)response.getResponse().getSource().get(MemoryPoolMetricTable.COLUMN_MAX)).intValue()); - metric.addProperty("init", ((Number)response.getResponse().getSource().get(MemoryPoolMetricTable.COLUMN_INIT)).intValue()); - usedMetric.add(((Number)response.getResponse().getSource().get(MemoryPoolMetricTable.COLUMN_USED)).intValue()); + metric.addProperty("max", ((Number)response.getResponse().getSource().get(MemoryPoolMetricTable.COLUMN_MAX)).longValue()); + metric.addProperty("init", ((Number)response.getResponse().getSource().get(MemoryPoolMetricTable.COLUMN_INIT)).longValue()); + usedMetric.add(((Number)response.getResponse().getSource().get(MemoryPoolMetricTable.COLUMN_USED)).longValue()); } else { + metric.addProperty("max", 0); + metric.addProperty("init", 0); usedMetric.add(0); } } From 8abad65f6b776bd1794d340ca614a5554341369c Mon Sep 17 00:00:00 2001 From: pengys5 <8082209@qq.com> Date: Fri, 8 Sep 2017 00:35:25 +0800 Subject: [PATCH 10/18] Register service do not return the id when value of 0. --- .../handler/ApplicationRegisterServiceHandler.java | 6 ++++-- .../handler/ServiceNameDiscoveryServiceHandler.java | 11 +++++++---- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/grpc/handler/ApplicationRegisterServiceHandler.java b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/grpc/handler/ApplicationRegisterServiceHandler.java index 9540d7737..28c1a1539 100644 --- a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/grpc/handler/ApplicationRegisterServiceHandler.java +++ b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/grpc/handler/ApplicationRegisterServiceHandler.java @@ -29,8 +29,10 @@ public class ApplicationRegisterServiceHandler extends ApplicationRegisterServic String applicationCode = applicationCodes.get(i); int applicationId = applicationIDService.getOrCreate(applicationCode); - KeyWithIntegerValue value = KeyWithIntegerValue.newBuilder().setKey(applicationCode).setValue(applicationId).build(); - builder.addApplication(i, value); + if (applicationId != 0) { + KeyWithIntegerValue value = KeyWithIntegerValue.newBuilder().setKey(applicationCode).setValue(applicationId).build(); + builder.addApplication(value); + } } responseObserver.onNext(builder.build()); responseObserver.onCompleted(); diff --git a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/grpc/handler/ServiceNameDiscoveryServiceHandler.java b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/grpc/handler/ServiceNameDiscoveryServiceHandler.java index 1009658a7..608b7c36d 100644 --- a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/grpc/handler/ServiceNameDiscoveryServiceHandler.java +++ b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/grpc/handler/ServiceNameDiscoveryServiceHandler.java @@ -30,10 +30,13 @@ public class ServiceNameDiscoveryServiceHandler extends ServiceNameDiscoveryServ int applicationId = serviceNameElement.getApplicationId(); String serviceName = serviceNameElement.getServiceName(); int serviceId = serviceNameService.getOrCreate(applicationId, serviceName); - ServiceNameMappingElement.Builder mappingElement = ServiceNameMappingElement.newBuilder(); - mappingElement.setServiceId(serviceId); - mappingElement.setElement(serviceNameElement); - builder.addElements(mappingElement); + + if (serviceId != 0) { + ServiceNameMappingElement.Builder mappingElement = ServiceNameMappingElement.newBuilder(); + mappingElement.setServiceId(serviceId); + mappingElement.setElement(serviceNameElement); + builder.addElements(mappingElement); + } } responseObserver.onNext(builder.build()); From 4582e9d9fa6458c8c1bb74e4c05f58059cd2cc8d Mon Sep 17 00:00:00 2001 From: pengys5 <8082209@qq.com> Date: Fri, 8 Sep 2017 17:15:54 +0800 Subject: [PATCH 11/18] Support entry service id or entry service name argument to query service tree. --- .../entry/ServiceEntrySpanListener.java | 6 +- .../service/ServiceEntryDataDefine.java | 2 +- .../collector/ui/cache/ServiceNameCache.java | 2 +- .../ui/dao/IServiceReferenceDAO.java | 2 + .../collector/ui/dao/ServiceNameEsDAO.java | 4 +- .../ui/dao/ServiceReferenceEsDAO.java | 43 ++++++++++++- .../ui/dao/ServiceReferenceH2DAO.java | 4 ++ .../ui/jetty/UIJettyModuleDefine.java | 6 +- ...er.java => ServiceTreeGetByIdHandler.java} | 6 +- .../ServiceTreeGetByNameHandler.java | 62 +++++++++++++++++++ .../ui/service/ServiceTreeService.java | 5 ++ .../apm/collector/ui/service/SpanService.java | 9 ++- .../ui/service/TraceStackService.java | 8 ++- 13 files changed, 142 insertions(+), 17 deletions(-) rename apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/servicetree/{ServiceTreeGetHandler.java => ServiceTreeGetByIdHandler.java} (94%) create mode 100644 apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/servicetree/ServiceTreeGetByNameHandler.java diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/service/entry/ServiceEntrySpanListener.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/service/entry/ServiceEntrySpanListener.java index 0773b00be..d0c144f77 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/service/entry/ServiceEntrySpanListener.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/service/entry/ServiceEntrySpanListener.java @@ -58,11 +58,7 @@ public class ServiceEntrySpanListener implements RefsListener, FirstSpanListener StreamModuleContext context = (StreamModuleContext)CollectorContextHelper.INSTANCE.getContext(StreamModuleGroupDefine.GROUP_NAME); if (!hasReference && hasEntry) { ServiceEntryDataDefine.ServiceEntry serviceEntry = new ServiceEntryDataDefine.ServiceEntry(); - if (entryServiceId == 0) { - serviceEntry.setId(applicationId + Const.ID_SPLIT + entryServiceName); - } else { - serviceEntry.setId(applicationId + Const.ID_SPLIT + entryServiceId); - } + serviceEntry.setId(applicationId + Const.ID_SPLIT + entryServiceName); serviceEntry.setApplicationId(applicationId); serviceEntry.setEntryServiceId(entryServiceId); serviceEntry.setEntryServiceName(entryServiceName); diff --git a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/service/ServiceEntryDataDefine.java b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/service/ServiceEntryDataDefine.java index 0ae79d695..20b4214e5 100644 --- a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/service/ServiceEntryDataDefine.java +++ b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/service/ServiceEntryDataDefine.java @@ -21,7 +21,7 @@ public class ServiceEntryDataDefine extends DataDefine { @Override protected void attributeDefine() { addAttribute(0, new Attribute(ServiceEntryTable.COLUMN_ID, AttributeType.STRING, new NonOperation())); addAttribute(1, new Attribute(ServiceEntryTable.COLUMN_APPLICATION_ID, AttributeType.INTEGER, new NonOperation())); - addAttribute(2, new Attribute(ServiceEntryTable.COLUMN_ENTRY_SERVICE_ID, AttributeType.INTEGER, new NonOperation())); + addAttribute(2, new Attribute(ServiceEntryTable.COLUMN_ENTRY_SERVICE_ID, AttributeType.INTEGER, new CoverOperation())); addAttribute(3, new Attribute(ServiceEntryTable.COLUMN_ENTRY_SERVICE_NAME, AttributeType.STRING, new NonOperation())); addAttribute(4, new Attribute(ServiceEntryTable.COLUMN_REGISTER_TIME, AttributeType.LONG, new NonOperation())); addAttribute(5, new Attribute(ServiceEntryTable.COLUMN_NEWEST_TIME, AttributeType.LONG, new CoverOperation())); diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/cache/ServiceNameCache.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/cache/ServiceNameCache.java index 8235b01a6..342bb5d0e 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/cache/ServiceNameCache.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/cache/ServiceNameCache.java @@ -12,7 +12,7 @@ import org.skywalking.apm.collector.ui.dao.IServiceNameDAO; public class ServiceNameCache { //TODO size configuration - private static Cache CACHE = CacheBuilder.newBuilder().maximumSize(1000).build(); + private static Cache CACHE = CacheBuilder.newBuilder().maximumSize(10000).build(); public static String get(int serviceId) { try { diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/IServiceReferenceDAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/IServiceReferenceDAO.java index d92e53960..ca1c5950c 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/IServiceReferenceDAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/IServiceReferenceDAO.java @@ -7,4 +7,6 @@ import com.google.gson.JsonArray; */ public interface IServiceReferenceDAO { JsonArray load(int entryServiceId, long startTime, long endTime); + + JsonArray load(String entryServiceName, int entryApplicationId, long startTime, long endTime); } diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceNameEsDAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceNameEsDAO.java index f8a177e9d..4c590fa94 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceNameEsDAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceNameEsDAO.java @@ -22,7 +22,9 @@ public class ServiceNameEsDAO extends EsDAO implements IServiceNameDAO { GetResponse getResponse = getRequestBuilder.get(); if (getResponse.isExists()) { - return (String)getResponse.getSource().get(ServiceNameTable.COLUMN_SERVICE_NAME); + String serviceName = (String)getResponse.getSource().get(ServiceNameTable.COLUMN_SERVICE_NAME); + int applicationId = ((Number)getResponse.getSource().get(ServiceNameTable.COLUMN_APPLICATION_ID)).intValue(); + return applicationId + Const.ID_SPLIT + serviceName; } return Const.UNKNOWN; } diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceReferenceEsDAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceReferenceEsDAO.java index 83e1fc7dd..e10b99c5f 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceReferenceEsDAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceReferenceEsDAO.java @@ -27,18 +27,51 @@ public class ServiceReferenceEsDAO extends EsDAO implements IServiceReferenceDAO private final Logger logger = LoggerFactory.getLogger(ServiceReferenceEsDAO.class); + @Override public JsonArray load(String entryServiceName, int entryApplicationId, long startTime, long endTime) { + SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(ServiceReferenceTable.TABLE); + searchRequestBuilder.setTypes(ServiceReferenceTable.TABLE_TYPE); + searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH); + + BoolQueryBuilder boolQuery = QueryBuilders.boolQuery(); + boolQuery.must().add(QueryBuilders.rangeQuery(ServiceReferenceTable.COLUMN_TIME_BUCKET).gte(startTime).lte(endTime)); + boolQuery.must().add(QueryBuilders.rangeQuery(ServiceReferenceTable.COLUMN_TIME_BUCKET).gte(startTime).lte(endTime)); + + int entryServiceId = ServiceIdCache.get(entryApplicationId, entryServiceName); + BoolQueryBuilder entryBoolQuery = QueryBuilders.boolQuery(); + if (entryServiceId != 0) { + entryBoolQuery.should().add(QueryBuilders.matchQuery(ServiceReferenceTable.COLUMN_ENTRY_SERVICE_ID, entryServiceId)); + } + entryBoolQuery.should().add(QueryBuilders.matchQuery(ServiceReferenceTable.COLUMN_ENTRY_SERVICE_NAME, entryApplicationId + Const.ID_SPLIT + entryServiceName)); + boolQuery.must(entryBoolQuery); + + searchRequestBuilder.setQuery(boolQuery); + searchRequestBuilder.setSize(0); + + return load(searchRequestBuilder); + } + @Override public JsonArray load(int entryServiceId, long startTime, long endTime) { SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(ServiceReferenceTable.TABLE); searchRequestBuilder.setTypes(ServiceReferenceTable.TABLE_TYPE); searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH); BoolQueryBuilder boolQuery = QueryBuilders.boolQuery(); - boolQuery.should().add(QueryBuilders.matchQuery(ServiceReferenceTable.COLUMN_ENTRY_SERVICE_ID, entryServiceId)); - boolQuery.should().add(QueryBuilders.matchQuery(ServiceReferenceTable.COLUMN_ENTRY_SERVICE_NAME, ServiceNameCache.getForUI(entryServiceId))); boolQuery.must().add(QueryBuilders.rangeQuery(ServiceReferenceTable.COLUMN_TIME_BUCKET).gte(startTime).lte(endTime)); + boolQuery.must().add(QueryBuilders.rangeQuery(ServiceReferenceTable.COLUMN_TIME_BUCKET).gte(startTime).lte(endTime)); + + String entryServiceName = ServiceNameCache.get(entryServiceId); + BoolQueryBuilder entryBoolQuery = QueryBuilders.boolQuery(); + entryBoolQuery.should().add(QueryBuilders.matchQuery(ServiceReferenceTable.COLUMN_ENTRY_SERVICE_ID, entryServiceId)); + entryBoolQuery.should().add(QueryBuilders.matchQuery(ServiceReferenceTable.COLUMN_ENTRY_SERVICE_NAME, entryServiceName)); + boolQuery.must(entryBoolQuery); + searchRequestBuilder.setQuery(boolQuery); searchRequestBuilder.setSize(0); + return load(searchRequestBuilder); + } + + private JsonArray load(SearchRequestBuilder searchRequestBuilder) { searchRequestBuilder.addAggregation(AggregationBuilders.terms(ServiceReferenceTable.COLUMN_FRONT_SERVICE_ID).field(ServiceReferenceTable.COLUMN_FRONT_SERVICE_ID).size(100) .subAggregation(AggregationBuilders.terms(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_ID).field(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_ID).size(100) .subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_S1_LTE).field(ServiceReferenceTable.COLUMN_S1_LTE)) @@ -112,7 +145,13 @@ public class ServiceReferenceEsDAO extends EsDAO implements IServiceReferenceDAO Sum costSum = behindServiceIdBucket.getAggregations().get(ServiceReferenceTable.COLUMN_COST_SUMMARY); String frontServiceName = ServiceNameCache.getForUI(frontServiceId); + if (StringUtils.isNotEmpty(frontServiceName)) { + frontServiceName = frontServiceName.split(Const.ID_SPLIT)[1]; + } String behindServiceName = ServiceNameCache.getForUI(behindServiceId); + if (StringUtils.isNotEmpty(frontServiceName)) { + behindServiceName = behindServiceName.split(Const.ID_SPLIT)[1]; + } JsonObject serviceReference = new JsonObject(); serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_FRONT_SERVICE_ID), frontServiceId); diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceReferenceH2DAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceReferenceH2DAO.java index 716204ffb..932d25c32 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceReferenceH2DAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceReferenceH2DAO.java @@ -11,4 +11,8 @@ public class ServiceReferenceH2DAO extends H2DAO implements IServiceReferenceDAO @Override public JsonArray load(int entryServiceId, long startTime, long endTime) { return null; } + + @Override public JsonArray load(String entryServiceName, int entryApplicationId, long startTime, long endTime) { + return null; + } } diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/UIJettyModuleDefine.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/UIJettyModuleDefine.java index 1b367ec8a..5e2392171 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/UIJettyModuleDefine.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/UIJettyModuleDefine.java @@ -21,7 +21,8 @@ import org.skywalking.apm.collector.ui.jetty.handler.instancemetric.InstanceMetr import org.skywalking.apm.collector.ui.jetty.handler.instancemetric.InstanceMetricGetRangeTimeBucketHandler; import org.skywalking.apm.collector.ui.jetty.handler.instancemetric.InstanceOsInfoGetHandler; import org.skywalking.apm.collector.ui.jetty.handler.servicetree.EntryServiceGetHandler; -import org.skywalking.apm.collector.ui.jetty.handler.servicetree.ServiceTreeGetHandler; +import org.skywalking.apm.collector.ui.jetty.handler.servicetree.ServiceTreeGetByIdHandler; +import org.skywalking.apm.collector.ui.jetty.handler.servicetree.ServiceTreeGetByNameHandler; import org.skywalking.apm.collector.ui.jetty.handler.time.AllInstanceLastTimeGetHandler; import org.skywalking.apm.collector.ui.jetty.handler.time.OneInstanceLastTimeGetHandler; @@ -71,7 +72,8 @@ public class UIJettyModuleDefine extends UIModuleDefine { handlers.add(new InstanceMetricGetOneTimeBucketHandler()); handlers.add(new InstanceMetricGetRangeTimeBucketHandler()); handlers.add(new EntryServiceGetHandler()); - handlers.add(new ServiceTreeGetHandler()); + handlers.add(new ServiceTreeGetByIdHandler()); + handlers.add(new ServiceTreeGetByNameHandler()); return handlers; } } diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/servicetree/ServiceTreeGetHandler.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/servicetree/ServiceTreeGetByIdHandler.java similarity index 94% rename from apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/servicetree/ServiceTreeGetHandler.java rename to apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/servicetree/ServiceTreeGetByIdHandler.java index 1461b496c..ea0b09354 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/servicetree/ServiceTreeGetHandler.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/servicetree/ServiceTreeGetByIdHandler.java @@ -11,12 +11,12 @@ import org.slf4j.LoggerFactory; /** * @author pengys5 */ -public class ServiceTreeGetHandler extends JettyHandler { +public class ServiceTreeGetByIdHandler extends JettyHandler { - private final Logger logger = LoggerFactory.getLogger(ServiceTreeGetHandler.class); + private final Logger logger = LoggerFactory.getLogger(ServiceTreeGetByIdHandler.class); @Override public String pathSpec() { - return "/service/tree"; + return "/service/tree/entryServiceId"; } private ServiceTreeService service = new ServiceTreeService(); diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/servicetree/ServiceTreeGetByNameHandler.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/servicetree/ServiceTreeGetByNameHandler.java new file mode 100644 index 000000000..e9d83d784 --- /dev/null +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/servicetree/ServiceTreeGetByNameHandler.java @@ -0,0 +1,62 @@ +package org.skywalking.apm.collector.ui.jetty.handler.servicetree; + +import com.google.gson.JsonElement; +import javax.servlet.http.HttpServletRequest; +import org.skywalking.apm.collector.server.jetty.ArgumentsParseException; +import org.skywalking.apm.collector.server.jetty.JettyHandler; +import org.skywalking.apm.collector.ui.service.ServiceTreeService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @author pengys5 + */ +public class ServiceTreeGetByNameHandler extends JettyHandler { + + private final Logger logger = LoggerFactory.getLogger(ServiceTreeGetByNameHandler.class); + + @Override public String pathSpec() { + return "/service/tree/entryServiceName"; + } + + private ServiceTreeService service = new ServiceTreeService(); + + @Override protected JsonElement doGet(HttpServletRequest req) throws ArgumentsParseException { + if (!req.getParameterMap().containsKey("entryServiceName") || !req.getParameterMap().containsKey("entryApplicationId") || !req.getParameterMap().containsKey("startTime") || !req.getParameterMap().containsKey("endTime")) { + throw new ArgumentsParseException("must contains parameters: entryServiceName, entryApplicationId, startTime, endTime"); + } + + String entryServiceName = req.getParameter("entryServiceName"); + String entryApplicationIdStr = req.getParameter("entryApplicationId"); + String startTimeStr = req.getParameter("startTime"); + String endTimeStr = req.getParameter("endTime"); + logger.debug("service entry get entryServiceName: {}, startTime: {}, endTime: {}", entryServiceName, startTimeStr, endTimeStr); + + int entryApplicationId; + try { + entryApplicationId = Integer.parseInt(entryApplicationIdStr); + } catch (NumberFormatException e) { + throw new ArgumentsParseException("entry application id must be integer"); + } + + long startTime; + try { + startTime = Long.parseLong(startTimeStr); + } catch (NumberFormatException e) { + throw new ArgumentsParseException("start time must be long"); + } + + long endTime; + try { + endTime = Long.parseLong(endTimeStr); + } catch (NumberFormatException e) { + throw new ArgumentsParseException("end time must be long"); + } + + return service.loadServiceTree(entryServiceName, entryApplicationId, startTime, endTime); + } + + @Override protected JsonElement doPost(HttpServletRequest req) throws ArgumentsParseException { + throw new UnsupportedOperationException(); + } +} diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/ServiceTreeService.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/ServiceTreeService.java index 0d133fc0d..654ed0cfb 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/ServiceTreeService.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/ServiceTreeService.java @@ -21,4 +21,9 @@ public class ServiceTreeService { IServiceReferenceDAO serviceReferenceDAO = (IServiceReferenceDAO)DAOContainer.INSTANCE.get(IServiceReferenceDAO.class.getName()); return serviceReferenceDAO.load(entryServiceId, startTime, endTime); } + + public JsonArray loadServiceTree(String entryServiceName, int entryApplicationId, long startTime, long endTime) { + IServiceReferenceDAO serviceReferenceDAO = (IServiceReferenceDAO)DAOContainer.INSTANCE.get(IServiceReferenceDAO.class.getName()); + return serviceReferenceDAO.load(entryServiceName, entryApplicationId, startTime, endTime); + } } \ No newline at end of file diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/SpanService.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/SpanService.java index bbc9f02fa..c86343587 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/SpanService.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/SpanService.java @@ -3,6 +3,8 @@ package org.skywalking.apm.collector.ui.service; import com.google.gson.JsonArray; import com.google.gson.JsonObject; import java.util.List; +import org.skywalking.apm.collector.core.util.Const; +import org.skywalking.apm.collector.core.util.StringUtils; import org.skywalking.apm.collector.storage.dao.DAOContainer; import org.skywalking.apm.collector.ui.cache.ServiceNameCache; import org.skywalking.apm.collector.ui.dao.ISegmentDAO; @@ -26,7 +28,12 @@ public class SpanService { if (spanId == spanObject.getSpanId()) { String operationName = spanObject.getOperationName(); if (spanObject.getOperationNameId() != 0) { - operationName = ServiceNameCache.get(spanObject.getOperationNameId()); + String serviceName = ServiceNameCache.get(spanObject.getOperationNameId()); + if (StringUtils.isNotEmpty(serviceName)) { + operationName = serviceName.split(Const.ID_SPLIT)[1]; + } else { + operationName = Const.EMPTY_STRING; + } } spanJson.addProperty("operationName", operationName); spanJson.addProperty("startTime", spanObject.getStartTime()); diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/TraceStackService.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/TraceStackService.java index 170c37908..19a90826b 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/TraceStackService.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/TraceStackService.java @@ -7,6 +7,7 @@ import java.util.List; import org.skywalking.apm.collector.core.util.CollectionUtils; import org.skywalking.apm.collector.core.util.Const; import org.skywalking.apm.collector.core.util.ObjectUtils; +import org.skywalking.apm.collector.core.util.StringUtils; import org.skywalking.apm.collector.storage.dao.DAOContainer; import org.skywalking.apm.collector.ui.cache.ApplicationCache; import org.skywalking.apm.collector.ui.cache.ServiceNameCache; @@ -98,7 +99,12 @@ public class TraceStackService { String operationName = spanObject.getOperationName(); if (spanObject.getOperationNameId() != 0) { - operationName = ServiceNameCache.get(spanObject.getOperationNameId()); + String serviceName = ServiceNameCache.get(spanObject.getOperationNameId()); + if (StringUtils.isNotEmpty(serviceName)) { + operationName = serviceName.split(Const.ID_SPLIT)[1]; + } else { + operationName = Const.EMPTY_STRING; + } } String applicationCode = ApplicationCache.get(segment.getApplicationId()); From 7aac7365ac9a297f527686cac9ebc14caa006ee1 Mon Sep 17 00:00:00 2001 From: pengys5 <8082209@qq.com> Date: Sat, 9 Sep 2017 10:29:38 +0800 Subject: [PATCH 12/18] Fixed the GlobalTraceId contidtion not effect in trece stack web ui. --- .../global/GlobalTraceSpanListener.java | 12 +++++-- .../worker/segment/SegmentParse.java | 10 +++++- .../src/main/resources/logback.xml | 2 +- .../collector/core/util/CollectionUtils.java | 4 +++ .../apm/collector/ui/dao/ISegmentCostDAO.java | 3 +- .../apm/collector/ui/dao/InstanceEsDAO.java | 4 +++ .../collector/ui/dao/SegmentCostEsDAO.java | 7 ++-- .../collector/ui/dao/SegmentCostH2DAO.java | 3 +- .../ui/service/SegmentTopService.java | 12 ++++++- .../ui/service/TraceDagDataBuilder.java | 34 ++++++++++++++++--- .../ui/service/TraceStackService.java | 8 ++++- .../dictionary/OperationNameDictionary.java | 2 +- 12 files changed, 85 insertions(+), 16 deletions(-) diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/global/GlobalTraceSpanListener.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/global/GlobalTraceSpanListener.java index 095a21ae1..62230883f 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/global/GlobalTraceSpanListener.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/global/GlobalTraceSpanListener.java @@ -2,11 +2,11 @@ package org.skywalking.apm.collector.agentstream.worker.global; import java.util.ArrayList; import java.util.List; -import org.skywalking.apm.collector.storage.define.global.GlobalTraceDataDefine; import org.skywalking.apm.collector.agentstream.worker.segment.FirstSpanListener; import org.skywalking.apm.collector.agentstream.worker.segment.GlobalTraceIdsListener; -import org.skywalking.apm.collector.core.util.TimeBucketUtils; import org.skywalking.apm.collector.core.framework.CollectorContextHelper; +import org.skywalking.apm.collector.core.util.TimeBucketUtils; +import org.skywalking.apm.collector.storage.define.global.GlobalTraceDataDefine; import org.skywalking.apm.collector.stream.StreamModuleContext; import org.skywalking.apm.collector.stream.StreamModuleGroupDefine; import org.skywalking.apm.collector.stream.worker.WorkerInvokeException; @@ -35,7 +35,13 @@ public class GlobalTraceSpanListener implements FirstSpanListener, GlobalTraceId @Override public void parseGlobalTraceId(UniqueId uniqueId) { StringBuilder globalTraceIdBuilder = new StringBuilder(); - uniqueId.getIdPartsList().forEach(globalTraceIdBuilder::append); + for (int i = 0; i < uniqueId.getIdPartsList().size(); i++) { + if (i == 0) { + globalTraceIdBuilder.append(uniqueId.getIdPartsList().get(i)); + } else { + globalTraceIdBuilder.append(".").append(uniqueId.getIdPartsList().get(i)); + } + } globalTraceIds.add(globalTraceIdBuilder.toString()); } diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/SegmentParse.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/SegmentParse.java index 38815207d..ed1e3d874 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/SegmentParse.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/SegmentParse.java @@ -49,7 +49,15 @@ public class SegmentParse { public void parse(List traceIds, TraceSegmentObject segmentObject) { StringBuilder segmentIdBuilder = new StringBuilder(); - segmentObject.getTraceSegmentId().getIdPartsList().forEach(segmentIdBuilder::append); + + for (int i = 0; i < segmentObject.getTraceSegmentId().getIdPartsList().size(); i++) { + if (i == 0) { + segmentIdBuilder.append(segmentObject.getTraceSegmentId().getIdPartsList().get(i)); + } else { + segmentIdBuilder.append(".").append(segmentObject.getTraceSegmentId().getIdPartsList().get(i)); + } + } + String segmentId = segmentIdBuilder.toString(); for (UniqueId uniqueId : traceIds) { diff --git a/apm-collector/apm-collector-boot/src/main/resources/logback.xml b/apm-collector/apm-collector-boot/src/main/resources/logback.xml index a0ca18fb1..46eba2b93 100644 --- a/apm-collector/apm-collector-boot/src/main/resources/logback.xml +++ b/apm-collector/apm-collector-boot/src/main/resources/logback.xml @@ -10,7 +10,7 @@ - + \ No newline at end of file diff --git a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/util/CollectionUtils.java b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/util/CollectionUtils.java index 22141d6a2..3566341b3 100644 --- a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/util/CollectionUtils.java +++ b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/util/CollectionUtils.java @@ -19,4 +19,8 @@ public class CollectionUtils { public static boolean isNotEmpty(List list) { return !isEmpty(list); } + + public static boolean isNotEmpty(T[] array) { + return array != null && array.length > 0; + } } diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ISegmentCostDAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ISegmentCostDAO.java index 99c09d34e..02771b221 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ISegmentCostDAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ISegmentCostDAO.java @@ -1,13 +1,14 @@ package org.skywalking.apm.collector.ui.dao; import com.google.gson.JsonObject; +import java.util.List; /** * @author pengys5 */ public interface ISegmentCostDAO { JsonObject loadTop(long startTime, long endTime, long minCost, long maxCost, String operationName, - String globalTraceId, int limit, int from, Sort sort); + List segmentIds, int limit, int from, Sort sort); public enum Sort { Cost, Time diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/InstanceEsDAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/InstanceEsDAO.java index e79a8874a..429e55c2a 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/InstanceEsDAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/InstanceEsDAO.java @@ -18,6 +18,7 @@ import org.elasticsearch.search.aggregations.bucket.terms.Terms; import org.elasticsearch.search.aggregations.metrics.valuecount.ValueCount; import org.elasticsearch.search.sort.SortBuilders; import org.elasticsearch.search.sort.SortMode; +import org.skywalking.apm.collector.core.util.TimeBucketUtils; import org.skywalking.apm.collector.storage.define.register.InstanceDataDefine; import org.skywalking.apm.collector.storage.define.register.InstanceTable; import org.skywalking.apm.collector.storage.elasticsearch.dao.EsDAO; @@ -34,12 +35,15 @@ public class InstanceEsDAO extends EsDAO implements IInstanceDAO { @Override public Long lastHeartBeatTime() { long fiveMinuteBefore = System.currentTimeMillis() - 5 * 60 * 1000; + fiveMinuteBefore = TimeBucketUtils.INSTANCE.getSecondTimeBucket(fiveMinuteBefore); RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery(InstanceTable.COLUMN_HEARTBEAT_TIME).gt(fiveMinuteBefore); return heartBeatTime(rangeQueryBuilder); } @Override public Long instanceLastHeartBeatTime(long applicationInstanceId) { long fiveMinuteBefore = System.currentTimeMillis() - 5 * 60 * 1000; + fiveMinuteBefore = TimeBucketUtils.INSTANCE.getSecondTimeBucket(fiveMinuteBefore); + BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder(); RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery(InstanceTable.COLUMN_HEARTBEAT_TIME).gt(fiveMinuteBefore); MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery(InstanceTable.COLUMN_INSTANCE_ID, applicationInstanceId); diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/SegmentCostEsDAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/SegmentCostEsDAO.java index f724a7451..8e8942856 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/SegmentCostEsDAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/SegmentCostEsDAO.java @@ -25,7 +25,7 @@ import org.skywalking.apm.collector.storage.elasticsearch.dao.EsDAO; public class SegmentCostEsDAO extends EsDAO implements ISegmentCostDAO { @Override public JsonObject loadTop(long startTime, long endTime, long minCost, long maxCost, String operationName, - String globalTraceId, int limit, int from, Sort sort) { + List segmentIds, int limit, int from, Sort sort) { SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(SegmentCostTable.TABLE); searchRequestBuilder.setTypes(SegmentCostTable.TABLE_TYPE); searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH); @@ -44,9 +44,12 @@ public class SegmentCostEsDAO extends EsDAO implements ISegmentCostDAO { } boolQueryBuilder.must().add(rangeQueryBuilder); } - if (!StringUtils.isEmpty(operationName)) { + if (StringUtils.isNotEmpty(operationName)) { mustQueryList.add(QueryBuilders.matchQuery(SegmentCostTable.COLUMN_SERVICE_NAME, operationName)); } + if (CollectionUtils.isNotEmpty(segmentIds)) { + boolQueryBuilder.must().add(QueryBuilders.termsQuery(SegmentCostTable.COLUMN_SEGMENT_ID, segmentIds.toArray(new String[0]))); + } if (Sort.Cost.equals(sort)) { searchRequestBuilder.addSort(SegmentCostTable.COLUMN_COST, SortOrder.DESC); diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/SegmentCostH2DAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/SegmentCostH2DAO.java index 644eab487..4da022890 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/SegmentCostH2DAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/SegmentCostH2DAO.java @@ -1,6 +1,7 @@ package org.skywalking.apm.collector.ui.dao; import com.google.gson.JsonObject; +import java.util.List; import org.skywalking.apm.collector.storage.h2.dao.H2DAO; /** @@ -8,7 +9,7 @@ import org.skywalking.apm.collector.storage.h2.dao.H2DAO; */ public class SegmentCostH2DAO extends H2DAO implements ISegmentCostDAO { @Override public JsonObject loadTop(long startTime, long endTime, long minCost, long maxCost, String operationName, - String globalTraceId, int limit, int from, Sort sort) { + List segmentIds, int limit, int from, Sort sort) { return null; } } diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/SegmentTopService.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/SegmentTopService.java index 48ed414af..c976cc3bf 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/SegmentTopService.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/SegmentTopService.java @@ -1,7 +1,11 @@ package org.skywalking.apm.collector.ui.service; import com.google.gson.JsonObject; +import java.util.LinkedList; +import java.util.List; +import org.skywalking.apm.collector.core.util.StringUtils; import org.skywalking.apm.collector.storage.dao.DAOContainer; +import org.skywalking.apm.collector.ui.dao.IGlobalTraceDAO; import org.skywalking.apm.collector.ui.dao.ISegmentCostDAO; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -16,7 +20,13 @@ public class SegmentTopService { public JsonObject loadTop(long startTime, long endTime, long minCost, long maxCost, String operationName, String globalTraceId, int limit, int from, ISegmentCostDAO.Sort sort) { logger.debug("startTime: {}, endTime: {}, minCost: {}, maxCost: {}, operationName: {}, globalTraceId: {}, limit: {}, from: {}", startTime, endTime, minCost, maxCost, operationName, globalTraceId, limit, from); + + List segmentIds = new LinkedList<>(); + if (StringUtils.isNotEmpty(globalTraceId)) { + IGlobalTraceDAO globalTraceDAO = (IGlobalTraceDAO)DAOContainer.INSTANCE.get(IGlobalTraceDAO.class.getName()); + segmentIds = globalTraceDAO.getSegmentIds(globalTraceId); + } ISegmentCostDAO segmentCostDAO = (ISegmentCostDAO)DAOContainer.INSTANCE.get(ISegmentCostDAO.class.getName()); - return segmentCostDAO.loadTop(startTime, endTime, minCost, maxCost, operationName, globalTraceId, limit, from, sort); + return segmentCostDAO.loadTop(startTime, endTime, minCost, maxCost, operationName, segmentIds, limit, from, sort); } } diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/TraceDagDataBuilder.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/TraceDagDataBuilder.java index 092991334..d7109bdc8 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/TraceDagDataBuilder.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/TraceDagDataBuilder.java @@ -3,6 +3,7 @@ package org.skywalking.apm.collector.ui.service; import com.google.gson.JsonArray; import com.google.gson.JsonObject; import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.Map; import org.skywalking.apm.collector.core.util.Const; import org.skywalking.apm.collector.storage.define.noderef.NodeReferenceTable; @@ -26,13 +27,14 @@ public class TraceDagDataBuilder { changeNodeComp2Map(nodeCompArray); changeMapping2Map(nodesMappingArray); - for (int i = 0; i < resSumArray.size(); i++) { - JsonObject nodeRefJsonObj = resSumArray.get(i).getAsJsonObject(); + Map mergedResSumMap = merge(resSumArray); + + mergedResSumMap.values().forEach(nodeRefJsonObj -> { String front = nodeRefJsonObj.get("front").getAsString(); String behind = nodeRefJsonObj.get("behind").getAsString(); if (hasMapping(behind)) { - continue; + return; } JsonObject lineJsonObj = new JsonObject(); @@ -42,7 +44,7 @@ public class TraceDagDataBuilder { lineArray.add(lineJsonObj); logger.debug("line: {}", lineJsonObj); - } + }); JsonObject dagJsonObj = new JsonObject(); dagJsonObj.add("nodes", pointArray); @@ -93,4 +95,28 @@ public class TraceDagDataBuilder { private boolean hasMapping(String peers) { return mappingMap.containsKey(peers); } + + private Map merge(JsonArray nodeReference) { + Map mergedRef = new LinkedHashMap<>(); + for (int i = 0; i < nodeReference.size(); i++) { + JsonObject nodeRefJsonObj = nodeReference.get(i).getAsJsonObject(); + String front = nodeRefJsonObj.get("front").getAsString(); + String behind = nodeRefJsonObj.get("behind").getAsString(); + + String id = front + Const.ID_SPLIT + behind; + if (mergedRef.containsKey(id)) { + JsonObject oldValue = mergedRef.get(id); + oldValue.addProperty(NodeReferenceTable.COLUMN_S1_LTE, oldValue.get(NodeReferenceTable.COLUMN_S1_LTE).getAsLong() + nodeRefJsonObj.get(NodeReferenceTable.COLUMN_S1_LTE).getAsLong()); + oldValue.addProperty(NodeReferenceTable.COLUMN_S3_LTE, oldValue.get(NodeReferenceTable.COLUMN_S3_LTE).getAsLong() + nodeRefJsonObj.get(NodeReferenceTable.COLUMN_S3_LTE).getAsLong()); + oldValue.addProperty(NodeReferenceTable.COLUMN_S5_LTE, oldValue.get(NodeReferenceTable.COLUMN_S5_LTE).getAsLong() + nodeRefJsonObj.get(NodeReferenceTable.COLUMN_S5_LTE).getAsLong()); + oldValue.addProperty(NodeReferenceTable.COLUMN_S5_GT, oldValue.get(NodeReferenceTable.COLUMN_S5_GT).getAsLong() + nodeRefJsonObj.get(NodeReferenceTable.COLUMN_S5_GT).getAsLong()); + oldValue.addProperty(NodeReferenceTable.COLUMN_ERROR, oldValue.get(NodeReferenceTable.COLUMN_ERROR).getAsLong() + nodeRefJsonObj.get(NodeReferenceTable.COLUMN_ERROR).getAsLong()); + oldValue.addProperty(NodeReferenceTable.COLUMN_SUMMARY, oldValue.get(NodeReferenceTable.COLUMN_SUMMARY).getAsLong() + nodeRefJsonObj.get(NodeReferenceTable.COLUMN_SUMMARY).getAsLong()); + } else { + mergedRef.put(id, nodeReference.get(i).getAsJsonObject()); + } + } + + return mergedRef; + } } diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/TraceStackService.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/TraceStackService.java index 19a90826b..96703b821 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/TraceStackService.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/TraceStackService.java @@ -119,7 +119,13 @@ public class TraceStackService { UniqueId uniqueId = reference.getParentTraceSegmentId(); StringBuilder segmentIdBuilder = new StringBuilder(); - uniqueId.getIdPartsList().forEach(part -> segmentIdBuilder.append(String.valueOf(part))); + for (int i = 0; i < uniqueId.getIdPartsList().size(); i++) { + if (i == 0) { + segmentIdBuilder.append(String.valueOf(uniqueId.getIdPartsList().get(i))); + } else { + segmentIdBuilder.append(".").append(String.valueOf(uniqueId.getIdPartsList().get(i))); + } + } String parentSegmentId = segmentIdBuilder.toString(); segmentParentSpanId = parentSegmentId + Const.SEGMENT_SPAN_SPLIT + String.valueOf(parentSpanId); diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/dictionary/OperationNameDictionary.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/dictionary/OperationNameDictionary.java index 1e06333f6..f5b0c6a79 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/dictionary/OperationNameDictionary.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/dictionary/OperationNameDictionary.java @@ -35,7 +35,7 @@ public enum OperationNameDictionary { OperationNameKey key = new OperationNameKey(applicationId, operationName); Integer operationId = operationNameDictionary.get(key); if (operationId != null) { - return new Found(applicationId); + return new Found(operationId); } else { if (registerWhenNotFound && operationNameDictionary.size() + unRegisterOperationNames.size() < OPERATION_NAME_BUFFER_SIZE) { From 7ac93aff5d936c90e04cbf7daff0bf000cc9ae9e Mon Sep 17 00:00:00 2001 From: pengys5 <8082209@qq.com> Date: Sat, 9 Sep 2017 15:18:06 +0800 Subject: [PATCH 13/18] delete the s5TimeBucket column --- .../handler/JVMMetricsServiceHandler.java | 45 +++++++++-------- .../worker/cpu/dao/CpuMetricEsDAO.java | 2 +- .../cpu/define/CpuMetricEsTableDefine.java | 2 +- .../cpu/define/CpuMetricH2TableDefine.java | 2 +- .../agentjvm/worker/gc/dao/GCMetricEsDAO.java | 3 +- .../gc/define/GCMetricEsTableDefine.java | 3 +- .../gc/define/GCMetricH2TableDefine.java | 3 +- .../memorypool/dao/MemoryPoolMetricEsDAO.java | 2 +- .../define/MemoryPoolMetricEsTableDefine.java | 2 +- .../define/MemoryPoolMetricH2TableDefine.java | 2 +- .../global/GlobalTraceSpanListener.java | 3 +- .../InstPerformanceSpanListener.java | 11 ++--- .../performance/dao/InstPerformanceEsDAO.java | 9 ++-- .../define/InstPerformanceEsTableDefine.java | 3 +- .../define/InstPerformanceH2TableDefine.java | 3 +- .../collector/core/util/TimeBucketUtils.java | 19 ++++--- .../core/utils/TimeBucketUtilsTestCase.java | 14 +++--- .../collector/storage/define/CommonTable.java | 1 - .../instance/InstPerformanceDataDefine.java | 38 +++++--------- .../define/instance/InstPerformanceTable.java | 2 +- .../define/jvm/CpuMetricDataDefine.java | 20 ++++---- .../storage/define/jvm/CpuMetricTable.java | 2 +- .../define/jvm/GCMetricDataDefine.java | 36 +++++--------- .../storage/define/jvm/GCMetricTable.java | 2 +- .../jvm/MemoryPoolMetricDataDefine.java | 20 ++++---- .../define/jvm/MemoryPoolMetricTable.java | 2 +- .../apm/collector/ui/dao/GCMetricEsDAO.java | 12 ++--- .../apm/collector/ui/dao/GCMetricH2DAO.java | 2 +- .../apm/collector/ui/dao/IGCMetricDAO.java | 2 +- .../collector/ui/dao/IInstPerformanceDAO.java | 13 +++-- .../apm/collector/ui/dao/IInstanceDAO.java | 3 ++ .../ui/dao/InstPerformanceEsDAO.java | 49 +++++-------------- .../ui/dao/InstPerformanceH2DAO.java | 3 +- .../apm/collector/ui/dao/InstanceEsDAO.java | 35 +++++++++++-- .../apm/collector/ui/dao/InstanceH2DAO.java | 5 ++ .../time/AllInstanceLastTimeGetHandler.java | 14 ++++-- .../ui/service/InstanceHealthService.java | 42 +++++++++++----- .../src/main/proto/DiscoveryService.proto | 6 +-- 38 files changed, 212 insertions(+), 225 deletions(-) diff --git a/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/grpc/handler/JVMMetricsServiceHandler.java b/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/grpc/handler/JVMMetricsServiceHandler.java index d3bb58800..ddab788a8 100644 --- a/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/grpc/handler/JVMMetricsServiceHandler.java +++ b/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/grpc/handler/JVMMetricsServiceHandler.java @@ -38,29 +38,29 @@ public class JVMMetricsServiceHandler extends JVMMetricsServiceGrpc.JVMMetricsSe private final Logger logger = LoggerFactory.getLogger(JVMMetricsServiceHandler.class); @Override public void collect(JVMMetrics request, StreamObserver responseObserver) { - int applicationInstanceId = request.getApplicationInstanceId(); - logger.debug("receive the jvm metric from application instance, id: {}", applicationInstanceId); + int instanceId = request.getApplicationInstanceId(); + logger.debug("receive the jvm metric from application instance, id: {}", instanceId); StreamModuleContext context = (StreamModuleContext)CollectorContextHelper.INSTANCE.getContext(StreamModuleGroupDefine.GROUP_NAME); request.getMetricsList().forEach(metric -> { long time = TimeBucketUtils.INSTANCE.getSecondTimeBucket(metric.getTime()); - senToInstanceHeartBeatPersistenceWorker(context, applicationInstanceId, metric.getTime()); - sendToCpuMetricPersistenceWorker(context, applicationInstanceId, time, metric.getCpu()); - sendToMemoryMetricPersistenceWorker(context, applicationInstanceId, time, metric.getMemoryList()); - sendToMemoryPoolMetricPersistenceWorker(context, applicationInstanceId, time, metric.getMemoryPoolList()); - sendToGCMetricPersistenceWorker(context, applicationInstanceId, time, metric.getGcList()); + senToInstanceHeartBeatPersistenceWorker(context, instanceId, metric.getTime()); + sendToCpuMetricPersistenceWorker(context, instanceId, time, metric.getCpu()); + sendToMemoryMetricPersistenceWorker(context, instanceId, time, metric.getMemoryList()); + sendToMemoryPoolMetricPersistenceWorker(context, instanceId, time, metric.getMemoryPoolList()); + sendToGCMetricPersistenceWorker(context, instanceId, time, metric.getGcList()); }); responseObserver.onNext(Downstream.newBuilder().build()); responseObserver.onCompleted(); } - private void senToInstanceHeartBeatPersistenceWorker(StreamModuleContext context, int applicationInstanceId, + private void senToInstanceHeartBeatPersistenceWorker(StreamModuleContext context, int instanceId, long heartBeatTime) { InstanceHeartBeatDataDefine.InstanceHeartBeat heartBeat = new InstanceHeartBeatDataDefine.InstanceHeartBeat(); - heartBeat.setId(String.valueOf(applicationInstanceId)); + heartBeat.setId(String.valueOf(instanceId)); heartBeat.setHeartBeatTime(TimeBucketUtils.INSTANCE.getSecondTimeBucket(heartBeatTime)); - heartBeat.setInstanceId(applicationInstanceId); + heartBeat.setInstanceId(instanceId); try { logger.debug("send to instance heart beat persistence worker, id: {}", heartBeat.getId()); context.getClusterWorkerContext().lookup(InstHeartBeatPersistenceWorker.WorkerRole.INSTANCE).tell(heartBeat.toData()); @@ -69,11 +69,11 @@ public class JVMMetricsServiceHandler extends JVMMetricsServiceGrpc.JVMMetricsSe } } - private void sendToCpuMetricPersistenceWorker(StreamModuleContext context, int applicationInstanceId, + private void sendToCpuMetricPersistenceWorker(StreamModuleContext context, int instanceId, long timeBucket, CPU cpu) { CpuMetricDataDefine.CpuMetric cpuMetric = new CpuMetricDataDefine.CpuMetric(); - cpuMetric.setId(timeBucket + Const.ID_SPLIT + applicationInstanceId); - cpuMetric.setApplicationInstanceId(applicationInstanceId); + cpuMetric.setId(timeBucket + Const.ID_SPLIT + instanceId); + cpuMetric.setInstanceId(instanceId); cpuMetric.setUsagePercent(cpu.getUsagePercent()); cpuMetric.setTimeBucket(timeBucket); try { @@ -84,13 +84,13 @@ public class JVMMetricsServiceHandler extends JVMMetricsServiceGrpc.JVMMetricsSe } } - private void sendToMemoryMetricPersistenceWorker(StreamModuleContext context, int applicationInstanceId, + private void sendToMemoryMetricPersistenceWorker(StreamModuleContext context, int instanceId, long timeBucket, List memories) { memories.forEach(memory -> { MemoryMetricDataDefine.MemoryMetric memoryMetric = new MemoryMetricDataDefine.MemoryMetric(); - memoryMetric.setId(timeBucket + Const.ID_SPLIT + applicationInstanceId + Const.ID_SPLIT + String.valueOf(memory.getIsHeap())); - memoryMetric.setApplicationInstanceId(applicationInstanceId); + memoryMetric.setId(timeBucket + Const.ID_SPLIT + instanceId + Const.ID_SPLIT + String.valueOf(memory.getIsHeap())); + memoryMetric.setApplicationInstanceId(instanceId); memoryMetric.setHeap(memory.getIsHeap()); memoryMetric.setInit(memory.getInit()); memoryMetric.setMax(memory.getMax()); @@ -106,13 +106,13 @@ public class JVMMetricsServiceHandler extends JVMMetricsServiceGrpc.JVMMetricsSe }); } - private void sendToMemoryPoolMetricPersistenceWorker(StreamModuleContext context, int applicationInstanceId, + private void sendToMemoryPoolMetricPersistenceWorker(StreamModuleContext context, int instanceId, long timeBucket, List memoryPools) { memoryPools.forEach(memoryPool -> { MemoryPoolMetricDataDefine.MemoryPoolMetric memoryPoolMetric = new MemoryPoolMetricDataDefine.MemoryPoolMetric(); - memoryPoolMetric.setId(timeBucket + Const.ID_SPLIT + applicationInstanceId + Const.ID_SPLIT + memoryPool.getIsHeap() + Const.ID_SPLIT + String.valueOf(memoryPool.getType().getNumber())); - memoryPoolMetric.setApplicationInstanceId(applicationInstanceId); + memoryPoolMetric.setId(timeBucket + Const.ID_SPLIT + instanceId + Const.ID_SPLIT + memoryPool.getIsHeap() + Const.ID_SPLIT + String.valueOf(memoryPool.getType().getNumber())); + memoryPoolMetric.setInstanceId(instanceId); memoryPoolMetric.setPoolType(memoryPool.getType().getNumber()); memoryPoolMetric.setHeap(memoryPool.getIsHeap()); memoryPoolMetric.setInit(memoryPool.getInit()); @@ -129,17 +129,16 @@ public class JVMMetricsServiceHandler extends JVMMetricsServiceGrpc.JVMMetricsSe }); } - private void sendToGCMetricPersistenceWorker(StreamModuleContext context, int applicationInstanceId, + private void sendToGCMetricPersistenceWorker(StreamModuleContext context, int instanceId, long timeBucket, List gcs) { gcs.forEach(gc -> { GCMetricDataDefine.GCMetric gcMetric = new GCMetricDataDefine.GCMetric(); - gcMetric.setId(timeBucket + Const.ID_SPLIT + applicationInstanceId + Const.ID_SPLIT + String.valueOf(gc.getPhraseValue())); - gcMetric.setApplicationInstanceId(applicationInstanceId); + gcMetric.setId(timeBucket + Const.ID_SPLIT + instanceId + Const.ID_SPLIT + String.valueOf(gc.getPhraseValue())); + gcMetric.setInstanceId(instanceId); gcMetric.setPhrase(gc.getPhraseValue()); gcMetric.setCount(gc.getCount()); gcMetric.setTime(gc.getTime()); gcMetric.setTimeBucket(timeBucket); - gcMetric.setS5TimeBucket(TimeBucketUtils.INSTANCE.getFiveSecondTimeBucket(timeBucket)); try { logger.debug("send to gc metric persistence worker, id: {}", gcMetric.getId()); context.getClusterWorkerContext().lookup(GCMetricPersistenceWorker.WorkerRole.INSTANCE).tell(gcMetric.toData()); diff --git a/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/worker/cpu/dao/CpuMetricEsDAO.java b/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/worker/cpu/dao/CpuMetricEsDAO.java index 6a00e2aa1..1c541da8b 100644 --- a/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/worker/cpu/dao/CpuMetricEsDAO.java +++ b/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/worker/cpu/dao/CpuMetricEsDAO.java @@ -25,7 +25,7 @@ public class CpuMetricEsDAO extends EsDAO implements ICpuMetricDAO, IPersistence @Override public IndexRequestBuilder prepareBatchInsert(Data data) { Map source = new HashMap<>(); - source.put(CpuMetricTable.COLUMN_APPLICATION_INSTANCE_ID, data.getDataInteger(0)); + source.put(CpuMetricTable.COLUMN_INSTANCE_ID, data.getDataInteger(0)); source.put(CpuMetricTable.COLUMN_USAGE_PERCENT, data.getDataDouble(0)); source.put(CpuMetricTable.COLUMN_TIME_BUCKET, data.getDataLong(0)); diff --git a/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/worker/cpu/define/CpuMetricEsTableDefine.java b/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/worker/cpu/define/CpuMetricEsTableDefine.java index 65019c24f..cffcf2184 100644 --- a/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/worker/cpu/define/CpuMetricEsTableDefine.java +++ b/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/worker/cpu/define/CpuMetricEsTableDefine.java @@ -26,7 +26,7 @@ public class CpuMetricEsTableDefine extends ElasticSearchTableDefine { } @Override public void initialize() { - addColumn(new ElasticSearchColumnDefine(CpuMetricTable.COLUMN_APPLICATION_INSTANCE_ID, ElasticSearchColumnDefine.Type.Integer.name())); + addColumn(new ElasticSearchColumnDefine(CpuMetricTable.COLUMN_INSTANCE_ID, ElasticSearchColumnDefine.Type.Integer.name())); addColumn(new ElasticSearchColumnDefine(CpuMetricTable.COLUMN_USAGE_PERCENT, ElasticSearchColumnDefine.Type.Double.name())); addColumn(new ElasticSearchColumnDefine(CpuMetricTable.COLUMN_TIME_BUCKET, ElasticSearchColumnDefine.Type.Long.name())); } diff --git a/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/worker/cpu/define/CpuMetricH2TableDefine.java b/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/worker/cpu/define/CpuMetricH2TableDefine.java index 970d3afb8..31956bf6c 100644 --- a/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/worker/cpu/define/CpuMetricH2TableDefine.java +++ b/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/worker/cpu/define/CpuMetricH2TableDefine.java @@ -15,7 +15,7 @@ public class CpuMetricH2TableDefine extends H2TableDefine { @Override public void initialize() { addColumn(new H2ColumnDefine(CpuMetricTable.COLUMN_ID, H2ColumnDefine.Type.Varchar.name())); - addColumn(new H2ColumnDefine(CpuMetricTable.COLUMN_APPLICATION_INSTANCE_ID, H2ColumnDefine.Type.Int.name())); + addColumn(new H2ColumnDefine(CpuMetricTable.COLUMN_INSTANCE_ID, H2ColumnDefine.Type.Int.name())); addColumn(new H2ColumnDefine(CpuMetricTable.COLUMN_USAGE_PERCENT, H2ColumnDefine.Type.Double.name())); addColumn(new H2ColumnDefine(CpuMetricTable.COLUMN_TIME_BUCKET, H2ColumnDefine.Type.Bigint.name())); } diff --git a/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/worker/gc/dao/GCMetricEsDAO.java b/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/worker/gc/dao/GCMetricEsDAO.java index 6c645c0a6..43454c9ce 100644 --- a/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/worker/gc/dao/GCMetricEsDAO.java +++ b/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/worker/gc/dao/GCMetricEsDAO.java @@ -21,12 +21,11 @@ public class GCMetricEsDAO extends EsDAO implements IGCMetricDAO, IPersistenceDA @Override public IndexRequestBuilder prepareBatchInsert(Data data) { Map source = new HashMap<>(); - source.put(GCMetricTable.COLUMN_APPLICATION_INSTANCE_ID, data.getDataInteger(0)); + source.put(GCMetricTable.COLUMN_INSTANCE_ID, data.getDataInteger(0)); source.put(GCMetricTable.COLUMN_PHRASE, data.getDataInteger(1)); source.put(GCMetricTable.COLUMN_COUNT, data.getDataLong(0)); source.put(GCMetricTable.COLUMN_TIME, data.getDataLong(1)); source.put(GCMetricTable.COLUMN_TIME_BUCKET, data.getDataLong(2)); - source.put(GCMetricTable.COLUMN_5S_TIME_BUCKET, data.getDataLong(3)); return getClient().prepareIndex(GCMetricTable.TABLE, data.getDataString(0)).setSource(source); } diff --git a/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/worker/gc/define/GCMetricEsTableDefine.java b/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/worker/gc/define/GCMetricEsTableDefine.java index 58933d2e4..677bd4889 100644 --- a/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/worker/gc/define/GCMetricEsTableDefine.java +++ b/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/worker/gc/define/GCMetricEsTableDefine.java @@ -26,11 +26,10 @@ public class GCMetricEsTableDefine extends ElasticSearchTableDefine { } @Override public void initialize() { - addColumn(new ElasticSearchColumnDefine(GCMetricTable.COLUMN_APPLICATION_INSTANCE_ID, ElasticSearchColumnDefine.Type.Integer.name())); + addColumn(new ElasticSearchColumnDefine(GCMetricTable.COLUMN_INSTANCE_ID, ElasticSearchColumnDefine.Type.Integer.name())); addColumn(new ElasticSearchColumnDefine(GCMetricTable.COLUMN_PHRASE, ElasticSearchColumnDefine.Type.Integer.name())); addColumn(new ElasticSearchColumnDefine(GCMetricTable.COLUMN_COUNT, ElasticSearchColumnDefine.Type.Long.name())); addColumn(new ElasticSearchColumnDefine(GCMetricTable.COLUMN_TIME, ElasticSearchColumnDefine.Type.Long.name())); addColumn(new ElasticSearchColumnDefine(GCMetricTable.COLUMN_TIME_BUCKET, ElasticSearchColumnDefine.Type.Long.name())); - addColumn(new ElasticSearchColumnDefine(GCMetricTable.COLUMN_5S_TIME_BUCKET, ElasticSearchColumnDefine.Type.Long.name())); } } diff --git a/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/worker/gc/define/GCMetricH2TableDefine.java b/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/worker/gc/define/GCMetricH2TableDefine.java index 1d0859952..7c3ad7f2c 100644 --- a/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/worker/gc/define/GCMetricH2TableDefine.java +++ b/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/worker/gc/define/GCMetricH2TableDefine.java @@ -15,11 +15,10 @@ public class GCMetricH2TableDefine extends H2TableDefine { @Override public void initialize() { addColumn(new H2ColumnDefine(GCMetricTable.COLUMN_ID, H2ColumnDefine.Type.Varchar.name())); - addColumn(new H2ColumnDefine(GCMetricTable.COLUMN_APPLICATION_INSTANCE_ID, H2ColumnDefine.Type.Int.name())); + addColumn(new H2ColumnDefine(GCMetricTable.COLUMN_INSTANCE_ID, H2ColumnDefine.Type.Int.name())); addColumn(new H2ColumnDefine(GCMetricTable.COLUMN_PHRASE, H2ColumnDefine.Type.Int.name())); addColumn(new H2ColumnDefine(GCMetricTable.COLUMN_COUNT, H2ColumnDefine.Type.Bigint.name())); addColumn(new H2ColumnDefine(GCMetricTable.COLUMN_TIME, H2ColumnDefine.Type.Bigint.name())); addColumn(new H2ColumnDefine(GCMetricTable.COLUMN_TIME_BUCKET, H2ColumnDefine.Type.Bigint.name())); - addColumn(new H2ColumnDefine(GCMetricTable.COLUMN_5S_TIME_BUCKET, H2ColumnDefine.Type.Bigint.name())); } } diff --git a/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/worker/memorypool/dao/MemoryPoolMetricEsDAO.java b/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/worker/memorypool/dao/MemoryPoolMetricEsDAO.java index c75fdfa84..e363e4a16 100644 --- a/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/worker/memorypool/dao/MemoryPoolMetricEsDAO.java +++ b/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/worker/memorypool/dao/MemoryPoolMetricEsDAO.java @@ -21,7 +21,7 @@ public class MemoryPoolMetricEsDAO extends EsDAO implements IMemoryPoolMetricDAO @Override public IndexRequestBuilder prepareBatchInsert(Data data) { Map source = new HashMap<>(); - source.put(MemoryPoolMetricTable.COLUMN_APPLICATION_INSTANCE_ID, data.getDataInteger(0)); + source.put(MemoryPoolMetricTable.COLUMN_INSTANCE_ID, data.getDataInteger(0)); source.put(MemoryPoolMetricTable.COLUMN_POOL_TYPE, data.getDataInteger(1)); source.put(MemoryPoolMetricTable.COLUMN_IS_HEAP, data.getDataBoolean(0)); source.put(MemoryPoolMetricTable.COLUMN_INIT, data.getDataLong(0)); diff --git a/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/worker/memorypool/define/MemoryPoolMetricEsTableDefine.java b/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/worker/memorypool/define/MemoryPoolMetricEsTableDefine.java index be3de7547..dac81726c 100644 --- a/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/worker/memorypool/define/MemoryPoolMetricEsTableDefine.java +++ b/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/worker/memorypool/define/MemoryPoolMetricEsTableDefine.java @@ -26,7 +26,7 @@ public class MemoryPoolMetricEsTableDefine extends ElasticSearchTableDefine { } @Override public void initialize() { - addColumn(new ElasticSearchColumnDefine(MemoryPoolMetricTable.COLUMN_APPLICATION_INSTANCE_ID, ElasticSearchColumnDefine.Type.Integer.name())); + addColumn(new ElasticSearchColumnDefine(MemoryPoolMetricTable.COLUMN_INSTANCE_ID, ElasticSearchColumnDefine.Type.Integer.name())); addColumn(new ElasticSearchColumnDefine(MemoryPoolMetricTable.COLUMN_POOL_TYPE, ElasticSearchColumnDefine.Type.Integer.name())); addColumn(new ElasticSearchColumnDefine(MemoryPoolMetricTable.COLUMN_IS_HEAP, ElasticSearchColumnDefine.Type.Boolean.name())); addColumn(new ElasticSearchColumnDefine(MemoryPoolMetricTable.COLUMN_INIT, ElasticSearchColumnDefine.Type.Long.name())); diff --git a/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/worker/memorypool/define/MemoryPoolMetricH2TableDefine.java b/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/worker/memorypool/define/MemoryPoolMetricH2TableDefine.java index 12684ef36..2254eeac3 100644 --- a/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/worker/memorypool/define/MemoryPoolMetricH2TableDefine.java +++ b/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/worker/memorypool/define/MemoryPoolMetricH2TableDefine.java @@ -15,7 +15,7 @@ public class MemoryPoolMetricH2TableDefine extends H2TableDefine { @Override public void initialize() { addColumn(new H2ColumnDefine(MemoryPoolMetricTable.COLUMN_ID, H2ColumnDefine.Type.Varchar.name())); - addColumn(new H2ColumnDefine(MemoryPoolMetricTable.COLUMN_APPLICATION_INSTANCE_ID, H2ColumnDefine.Type.Int.name())); + addColumn(new H2ColumnDefine(MemoryPoolMetricTable.COLUMN_INSTANCE_ID, H2ColumnDefine.Type.Int.name())); addColumn(new H2ColumnDefine(MemoryPoolMetricTable.COLUMN_POOL_TYPE, H2ColumnDefine.Type.Int.name())); addColumn(new H2ColumnDefine(MemoryPoolMetricTable.COLUMN_IS_HEAP, H2ColumnDefine.Type.Boolean.name())); addColumn(new H2ColumnDefine(MemoryPoolMetricTable.COLUMN_INIT, H2ColumnDefine.Type.Bigint.name())); diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/global/GlobalTraceSpanListener.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/global/GlobalTraceSpanListener.java index 62230883f..e38947017 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/global/GlobalTraceSpanListener.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/global/GlobalTraceSpanListener.java @@ -5,6 +5,7 @@ import java.util.List; import org.skywalking.apm.collector.agentstream.worker.segment.FirstSpanListener; import org.skywalking.apm.collector.agentstream.worker.segment.GlobalTraceIdsListener; import org.skywalking.apm.collector.core.framework.CollectorContextHelper; +import org.skywalking.apm.collector.core.util.Const; import org.skywalking.apm.collector.core.util.TimeBucketUtils; import org.skywalking.apm.collector.storage.define.global.GlobalTraceDataDefine; import org.skywalking.apm.collector.stream.StreamModuleContext; @@ -52,7 +53,7 @@ public class GlobalTraceSpanListener implements FirstSpanListener, GlobalTraceId for (String globalTraceId : globalTraceIds) { GlobalTraceDataDefine.GlobalTrace globalTrace = new GlobalTraceDataDefine.GlobalTrace(); globalTrace.setGlobalTraceId(globalTraceId); - globalTrace.setId(segmentId + globalTraceId); + globalTrace.setId(segmentId + Const.ID_SPLIT + globalTraceId); globalTrace.setSegmentId(segmentId); globalTrace.setTimeBucket(timeBucket); try { diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/instance/performance/InstPerformanceSpanListener.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/instance/performance/InstPerformanceSpanListener.java index 110fd4238..8fbec1864 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/instance/performance/InstPerformanceSpanListener.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/instance/performance/InstPerformanceSpanListener.java @@ -22,7 +22,7 @@ public class InstPerformanceSpanListener implements EntrySpanListener, FirstSpan private final Logger logger = LoggerFactory.getLogger(InstPerformanceSpanListener.class); private int applicationId; - private int applicationInstanceId; + private int instanceId; private long cost; private long timeBucket; @@ -33,7 +33,7 @@ public class InstPerformanceSpanListener implements EntrySpanListener, FirstSpan @Override public void parseFirst(SpanObject spanObject, int applicationId, int applicationInstanceId, String segmentId) { this.applicationId = applicationId; - this.applicationInstanceId = applicationInstanceId; + this.instanceId = applicationInstanceId; this.cost = spanObject.getEndTime() - spanObject.getStartTime(); timeBucket = TimeBucketUtils.INSTANCE.getSecondTimeBucket(spanObject.getStartTime()); } @@ -42,13 +42,12 @@ public class InstPerformanceSpanListener implements EntrySpanListener, FirstSpan StreamModuleContext context = (StreamModuleContext)CollectorContextHelper.INSTANCE.getContext(StreamModuleGroupDefine.GROUP_NAME); InstPerformanceDataDefine.InstPerformance instPerformance = new InstPerformanceDataDefine.InstPerformance(); - instPerformance.setId(timeBucket + Const.ID_SPLIT + applicationInstanceId); + instPerformance.setId(timeBucket + Const.ID_SPLIT + instanceId); instPerformance.setApplicationId(applicationId); - instPerformance.setInstanceId(applicationInstanceId); - instPerformance.setCallTimes(1); + instPerformance.setInstanceId(instanceId); + instPerformance.setCalls(1); instPerformance.setCostTotal(cost); instPerformance.setTimeBucket(timeBucket); - instPerformance.setS5TimeBucket(TimeBucketUtils.INSTANCE.getFiveSecondTimeBucket(timeBucket)); try { logger.debug("send to instance performance persistence worker, id: {}", instPerformance.getId()); diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/instance/performance/dao/InstPerformanceEsDAO.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/instance/performance/dao/InstPerformanceEsDAO.java index 8ba89a0ca..26a322c8d 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/instance/performance/dao/InstPerformanceEsDAO.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/instance/performance/dao/InstPerformanceEsDAO.java @@ -28,10 +28,9 @@ public class InstPerformanceEsDAO extends EsDAO implements IInstPerformanceDAO, Map source = getResponse.getSource(); data.setDataInteger(0, (Integer)source.get(InstPerformanceTable.COLUMN_APPLICATION_ID)); data.setDataInteger(1, (Integer)source.get(InstPerformanceTable.COLUMN_INSTANCE_ID)); - data.setDataInteger(2, (Integer)source.get(InstPerformanceTable.COLUMN_CALL_TIMES)); + data.setDataInteger(2, (Integer)source.get(InstPerformanceTable.COLUMN_CALLS)); data.setDataLong(0, ((Number)source.get(InstPerformanceTable.COLUMN_COST_TOTAL)).longValue()); data.setDataLong(1, ((Number)source.get(InstPerformanceTable.COLUMN_TIME_BUCKET)).longValue()); - data.setDataLong(2, ((Number)source.get(InstPerformanceTable.COLUMN_5S_TIME_BUCKET)).longValue()); return data; } else { return null; @@ -42,10 +41,9 @@ public class InstPerformanceEsDAO extends EsDAO implements IInstPerformanceDAO, Map source = new HashMap<>(); source.put(InstPerformanceTable.COLUMN_APPLICATION_ID, data.getDataInteger(0)); source.put(InstPerformanceTable.COLUMN_INSTANCE_ID, data.getDataInteger(1)); - source.put(InstPerformanceTable.COLUMN_CALL_TIMES, data.getDataInteger(2)); + source.put(InstPerformanceTable.COLUMN_CALLS, data.getDataInteger(2)); source.put(InstPerformanceTable.COLUMN_COST_TOTAL, data.getDataLong(0)); source.put(InstPerformanceTable.COLUMN_TIME_BUCKET, data.getDataLong(1)); - source.put(InstPerformanceTable.COLUMN_5S_TIME_BUCKET, data.getDataLong(2)); return getClient().prepareIndex(InstPerformanceTable.TABLE, data.getDataString(0)).setSource(source); } @@ -54,10 +52,9 @@ public class InstPerformanceEsDAO extends EsDAO implements IInstPerformanceDAO, Map source = new HashMap<>(); source.put(InstPerformanceTable.COLUMN_APPLICATION_ID, data.getDataInteger(0)); source.put(InstPerformanceTable.COLUMN_INSTANCE_ID, data.getDataInteger(1)); - source.put(InstPerformanceTable.COLUMN_CALL_TIMES, data.getDataInteger(2)); + source.put(InstPerformanceTable.COLUMN_CALLS, data.getDataInteger(2)); source.put(InstPerformanceTable.COLUMN_COST_TOTAL, data.getDataLong(0)); source.put(InstPerformanceTable.COLUMN_TIME_BUCKET, data.getDataLong(1)); - source.put(InstPerformanceTable.COLUMN_5S_TIME_BUCKET, data.getDataLong(2)); return getClient().prepareUpdate(InstPerformanceTable.TABLE, data.getDataString(0)).setDoc(source); } diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/instance/performance/define/InstPerformanceEsTableDefine.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/instance/performance/define/InstPerformanceEsTableDefine.java index 32a51a46d..f0afdd86c 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/instance/performance/define/InstPerformanceEsTableDefine.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/instance/performance/define/InstPerformanceEsTableDefine.java @@ -28,9 +28,8 @@ public class InstPerformanceEsTableDefine extends ElasticSearchTableDefine { @Override public void initialize() { addColumn(new ElasticSearchColumnDefine(InstPerformanceTable.COLUMN_APPLICATION_ID, ElasticSearchColumnDefine.Type.Integer.name())); addColumn(new ElasticSearchColumnDefine(InstPerformanceTable.COLUMN_INSTANCE_ID, ElasticSearchColumnDefine.Type.Integer.name())); - addColumn(new ElasticSearchColumnDefine(InstPerformanceTable.COLUMN_CALL_TIMES, ElasticSearchColumnDefine.Type.Integer.name())); + addColumn(new ElasticSearchColumnDefine(InstPerformanceTable.COLUMN_CALLS, ElasticSearchColumnDefine.Type.Integer.name())); addColumn(new ElasticSearchColumnDefine(InstPerformanceTable.COLUMN_COST_TOTAL, ElasticSearchColumnDefine.Type.Long.name())); addColumn(new ElasticSearchColumnDefine(InstPerformanceTable.COLUMN_TIME_BUCKET, ElasticSearchColumnDefine.Type.Long.name())); - addColumn(new ElasticSearchColumnDefine(InstPerformanceTable.COLUMN_5S_TIME_BUCKET, ElasticSearchColumnDefine.Type.Long.name())); } } diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/instance/performance/define/InstPerformanceH2TableDefine.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/instance/performance/define/InstPerformanceH2TableDefine.java index c0e9bd2d7..9ccf8c173 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/instance/performance/define/InstPerformanceH2TableDefine.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/instance/performance/define/InstPerformanceH2TableDefine.java @@ -17,9 +17,8 @@ public class InstPerformanceH2TableDefine extends H2TableDefine { addColumn(new H2ColumnDefine(InstPerformanceTable.COLUMN_ID, H2ColumnDefine.Type.Varchar.name())); addColumn(new H2ColumnDefine(InstPerformanceTable.COLUMN_APPLICATION_ID, H2ColumnDefine.Type.Int.name())); addColumn(new H2ColumnDefine(InstPerformanceTable.COLUMN_INSTANCE_ID, H2ColumnDefine.Type.Int.name())); - addColumn(new H2ColumnDefine(InstPerformanceTable.COLUMN_CALL_TIMES, H2ColumnDefine.Type.Int.name())); + addColumn(new H2ColumnDefine(InstPerformanceTable.COLUMN_CALLS, H2ColumnDefine.Type.Int.name())); addColumn(new H2ColumnDefine(InstPerformanceTable.COLUMN_COST_TOTAL, H2ColumnDefine.Type.Bigint.name())); addColumn(new H2ColumnDefine(InstPerformanceTable.COLUMN_TIME_BUCKET, H2ColumnDefine.Type.Bigint.name())); - addColumn(new H2ColumnDefine(InstPerformanceTable.COLUMN_5S_TIME_BUCKET, H2ColumnDefine.Type.Bigint.name())); } } diff --git a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/util/TimeBucketUtils.java b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/util/TimeBucketUtils.java index 76cb675ec..e2390ef29 100644 --- a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/util/TimeBucketUtils.java +++ b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/util/TimeBucketUtils.java @@ -67,15 +67,18 @@ public enum TimeBucketUtils { } } - public long getFiveSecondTimeBucket(long secondTimeBucket) { - long mantissa = secondTimeBucket % 10; - if (mantissa < 5) { - return (secondTimeBucket / 10) * 10; - } else if (mantissa == 5) { - return secondTimeBucket; - } else { - return ((secondTimeBucket / 10) + 1) * 10; + public long[] getFiveSecondTimeBuckets(long secondTimeBucket) { + long timeStamp = changeTimeBucket2TimeStamp(TimeBucketType.SECOND.name(), secondTimeBucket); + Calendar calendar = Calendar.getInstance(); + calendar.setTimeInMillis(timeStamp); + + long[] timeBuckets = new long[5]; + timeBuckets[0] = secondTimeBucket; + for (int i = 0; i < 4; i++) { + calendar.add(Calendar.SECOND, -1); + timeBuckets[i + 1] = getSecondTimeBucket(calendar.getTimeInMillis()); } + return timeBuckets; } public long changeToUTCTimeBucket(long timeBucket) { diff --git a/apm-collector/apm-collector-core/src/test/java/org/skywalking/apm/collector/core/utils/TimeBucketUtilsTestCase.java b/apm-collector/apm-collector-core/src/test/java/org/skywalking/apm/collector/core/utils/TimeBucketUtilsTestCase.java index a7cc822cd..6f35df1f8 100644 --- a/apm-collector/apm-collector-core/src/test/java/org/skywalking/apm/collector/core/utils/TimeBucketUtilsTestCase.java +++ b/apm-collector/apm-collector-core/src/test/java/org/skywalking/apm/collector/core/utils/TimeBucketUtilsTestCase.java @@ -11,14 +11,12 @@ public class TimeBucketUtilsTestCase { @Test public void testGetFiveSecondTimeBucket() { - long fiveSecondTimeBucket = TimeBucketUtils.INSTANCE.getFiveSecondTimeBucket(20170804224812L); - Assert.assertEquals(20170804224810L, fiveSecondTimeBucket); - - fiveSecondTimeBucket = TimeBucketUtils.INSTANCE.getFiveSecondTimeBucket(20170804224818L); - Assert.assertEquals(20170804224820L, fiveSecondTimeBucket); - - fiveSecondTimeBucket = TimeBucketUtils.INSTANCE.getFiveSecondTimeBucket(20170804224815L); - Assert.assertEquals(20170804224815L, fiveSecondTimeBucket); + long[] timeBuckets = TimeBucketUtils.INSTANCE.getFiveSecondTimeBuckets(20170804224810L); + Assert.assertEquals(20170804224810L, timeBuckets[0]); + Assert.assertEquals(20170804224809L, timeBuckets[1]); + Assert.assertEquals(20170804224808L, timeBuckets[2]); + Assert.assertEquals(20170804224807L, timeBuckets[3]); + Assert.assertEquals(20170804224806L, timeBuckets[4]); } @Test diff --git a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/CommonTable.java b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/CommonTable.java index 05db7ae6e..eb2eb953e 100644 --- a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/CommonTable.java +++ b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/CommonTable.java @@ -8,5 +8,4 @@ public class CommonTable { public static final String COLUMN_ID = "id"; public static final String COLUMN_AGG = "agg"; public static final String COLUMN_TIME_BUCKET = "time_bucket"; - public static final String COLUMN_5S_TIME_BUCKET = "s5_time_bucket"; } diff --git a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/instance/InstPerformanceDataDefine.java b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/instance/InstPerformanceDataDefine.java index 79f9201b6..6beee1494 100644 --- a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/instance/InstPerformanceDataDefine.java +++ b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/instance/InstPerformanceDataDefine.java @@ -16,17 +16,16 @@ import org.skywalking.apm.collector.storage.define.DataDefine; public class InstPerformanceDataDefine extends DataDefine { @Override protected int initialCapacity() { - return 7; + return 6; } @Override protected void attributeDefine() { addAttribute(0, new Attribute(InstPerformanceTable.COLUMN_ID, AttributeType.STRING, new NonOperation())); addAttribute(1, new Attribute(InstPerformanceTable.COLUMN_APPLICATION_ID, AttributeType.INTEGER, new CoverOperation())); addAttribute(2, new Attribute(InstPerformanceTable.COLUMN_INSTANCE_ID, AttributeType.INTEGER, new CoverOperation())); - addAttribute(3, new Attribute(InstPerformanceTable.COLUMN_CALL_TIMES, AttributeType.INTEGER, new AddOperation())); + addAttribute(3, new Attribute(InstPerformanceTable.COLUMN_CALLS, AttributeType.INTEGER, new AddOperation())); addAttribute(4, new Attribute(InstPerformanceTable.COLUMN_COST_TOTAL, AttributeType.LONG, new AddOperation())); addAttribute(5, new Attribute(InstPerformanceTable.COLUMN_TIME_BUCKET, AttributeType.LONG, new CoverOperation())); - addAttribute(6, new Attribute(InstPerformanceTable.COLUMN_5S_TIME_BUCKET, AttributeType.LONG, new CoverOperation())); } @Override public Object deserialize(RemoteData remoteData) { @@ -41,21 +40,18 @@ public class InstPerformanceDataDefine extends DataDefine { private String id; private int applicationId; private int instanceId; - private int callTimes; + private int calls; private long costTotal; private long timeBucket; - private long s5TimeBucket; - public InstPerformance(String id, int applicationId, int instanceId, int callTimes, long costTotal, - long timeBucket, - long s5TimeBucket) { + public InstPerformance(String id, int applicationId, int instanceId, int calls, long costTotal, + long timeBucket) { this.id = id; this.applicationId = applicationId; this.instanceId = instanceId; - this.callTimes = callTimes; + this.calls = calls; this.costTotal = costTotal; this.timeBucket = timeBucket; - this.s5TimeBucket = s5TimeBucket; } public InstPerformance() { @@ -67,10 +63,9 @@ public class InstPerformanceDataDefine extends DataDefine { data.setDataString(0, this.id); data.setDataInteger(0, this.applicationId); data.setDataInteger(1, this.instanceId); - data.setDataInteger(2, this.callTimes); + data.setDataInteger(2, this.calls); data.setDataLong(0, this.costTotal); data.setDataLong(1, this.timeBucket); - data.setDataLong(2, this.s5TimeBucket); return data; } @@ -78,10 +73,9 @@ public class InstPerformanceDataDefine extends DataDefine { this.id = data.getDataString(0); this.applicationId = data.getDataInteger(0); this.instanceId = data.getDataInteger(1); - this.callTimes = data.getDataInteger(2); + this.calls = data.getDataInteger(2); this.costTotal = data.getDataLong(0); this.timeBucket = data.getDataLong(1); - this.s5TimeBucket = data.getDataLong(2); return this; } @@ -101,12 +95,12 @@ public class InstPerformanceDataDefine extends DataDefine { this.instanceId = instanceId; } - public int getCallTimes() { - return callTimes; + public int getCalls() { + return calls; } - public void setCallTimes(int callTimes) { - this.callTimes = callTimes; + public void setCalls(int calls) { + this.calls = calls; } public long getCostTotal() { @@ -132,13 +126,5 @@ public class InstPerformanceDataDefine extends DataDefine { public void setApplicationId(int applicationId) { this.applicationId = applicationId; } - - public long getS5TimeBucket() { - return s5TimeBucket; - } - - public void setS5TimeBucket(long s5TimeBucket) { - this.s5TimeBucket = s5TimeBucket; - } } } diff --git a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/instance/InstPerformanceTable.java b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/instance/InstPerformanceTable.java index f6ff2e487..ac21ce2ea 100644 --- a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/instance/InstPerformanceTable.java +++ b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/instance/InstPerformanceTable.java @@ -9,6 +9,6 @@ public class InstPerformanceTable extends CommonTable { public static final String TABLE = "instance_performance"; public static final String COLUMN_APPLICATION_ID = "application_id"; public static final String COLUMN_INSTANCE_ID = "instance_id"; - public static final String COLUMN_CALL_TIMES = "call_times"; + public static final String COLUMN_CALLS = "calls"; public static final String COLUMN_COST_TOTAL = "cost_total"; } diff --git a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/jvm/CpuMetricDataDefine.java b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/jvm/CpuMetricDataDefine.java index ffab67d49..b2383440d 100644 --- a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/jvm/CpuMetricDataDefine.java +++ b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/jvm/CpuMetricDataDefine.java @@ -21,7 +21,7 @@ public class CpuMetricDataDefine extends DataDefine { @Override protected void attributeDefine() { addAttribute(0, new Attribute(CpuMetricTable.COLUMN_ID, AttributeType.STRING, new NonOperation())); - addAttribute(1, new Attribute(CpuMetricTable.COLUMN_APPLICATION_INSTANCE_ID, AttributeType.INTEGER, new CoverOperation())); + addAttribute(1, new Attribute(CpuMetricTable.COLUMN_INSTANCE_ID, AttributeType.INTEGER, new CoverOperation())); addAttribute(2, new Attribute(CpuMetricTable.COLUMN_USAGE_PERCENT, AttributeType.DOUBLE, new CoverOperation())); addAttribute(3, new Attribute(CpuMetricTable.COLUMN_TIME_BUCKET, AttributeType.LONG, new CoverOperation())); } @@ -36,13 +36,13 @@ public class CpuMetricDataDefine extends DataDefine { public static class CpuMetric implements Transform { private String id; - private int applicationInstanceId; + private int instanceId; private double usagePercent; private long timeBucket; - public CpuMetric(String id, int applicationInstanceId, double usagePercent, long timeBucket) { + public CpuMetric(String id, int instanceId, double usagePercent, long timeBucket) { this.id = id; - this.applicationInstanceId = applicationInstanceId; + this.instanceId = instanceId; this.usagePercent = usagePercent; this.timeBucket = timeBucket; } @@ -54,7 +54,7 @@ public class CpuMetricDataDefine extends DataDefine { CpuMetricDataDefine define = new CpuMetricDataDefine(); Data data = define.build(id); data.setDataString(0, this.id); - data.setDataInteger(0, this.applicationInstanceId); + data.setDataInteger(0, this.instanceId); data.setDataDouble(0, this.usagePercent); data.setDataLong(0, this.timeBucket); return data; @@ -62,7 +62,7 @@ public class CpuMetricDataDefine extends DataDefine { @Override public CpuMetric toSelf(Data data) { this.id = data.getDataString(0); - this.applicationInstanceId = data.getDataInteger(0); + this.instanceId = data.getDataInteger(0); this.usagePercent = data.getDataDouble(0); this.timeBucket = data.getDataLong(0); return this; @@ -72,8 +72,8 @@ public class CpuMetricDataDefine extends DataDefine { this.id = id; } - public void setApplicationInstanceId(int applicationInstanceId) { - this.applicationInstanceId = applicationInstanceId; + public void setInstanceId(int instanceId) { + this.instanceId = instanceId; } public void setUsagePercent(double usagePercent) { @@ -88,8 +88,8 @@ public class CpuMetricDataDefine extends DataDefine { return id; } - public int getApplicationInstanceId() { - return applicationInstanceId; + public int getInstanceId() { + return instanceId; } public double getUsagePercent() { diff --git a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/jvm/CpuMetricTable.java b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/jvm/CpuMetricTable.java index bec9c4ef6..73cec897a 100644 --- a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/jvm/CpuMetricTable.java +++ b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/jvm/CpuMetricTable.java @@ -7,6 +7,6 @@ import org.skywalking.apm.collector.storage.define.CommonTable; */ public class CpuMetricTable extends CommonTable { public static final String TABLE = "cpu_metric"; - public static final String COLUMN_APPLICATION_INSTANCE_ID = "application_instance_id"; + public static final String COLUMN_INSTANCE_ID = "instance_id"; public static final String COLUMN_USAGE_PERCENT = "usage_percent"; } diff --git a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/jvm/GCMetricDataDefine.java b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/jvm/GCMetricDataDefine.java index 5b30f3579..a1fc3a7f4 100644 --- a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/jvm/GCMetricDataDefine.java +++ b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/jvm/GCMetricDataDefine.java @@ -16,17 +16,16 @@ import org.skywalking.apm.collector.storage.define.DataDefine; public class GCMetricDataDefine extends DataDefine { @Override protected int initialCapacity() { - return 7; + return 6; } @Override protected void attributeDefine() { addAttribute(0, new Attribute(GCMetricTable.COLUMN_ID, AttributeType.STRING, new NonOperation())); - addAttribute(1, new Attribute(GCMetricTable.COLUMN_APPLICATION_INSTANCE_ID, AttributeType.INTEGER, new CoverOperation())); + addAttribute(1, new Attribute(GCMetricTable.COLUMN_INSTANCE_ID, AttributeType.INTEGER, new CoverOperation())); addAttribute(2, new Attribute(GCMetricTable.COLUMN_PHRASE, AttributeType.INTEGER, new CoverOperation())); addAttribute(3, new Attribute(GCMetricTable.COLUMN_COUNT, AttributeType.LONG, new CoverOperation())); addAttribute(4, new Attribute(GCMetricTable.COLUMN_TIME, AttributeType.LONG, new CoverOperation())); addAttribute(5, new Attribute(GCMetricTable.COLUMN_TIME_BUCKET, AttributeType.LONG, new CoverOperation())); - addAttribute(6, new Attribute(GCMetricTable.COLUMN_5S_TIME_BUCKET, AttributeType.LONG, new CoverOperation())); } @Override public Object deserialize(RemoteData remoteData) { @@ -39,22 +38,19 @@ public class GCMetricDataDefine extends DataDefine { public static class GCMetric implements Transform { private String id; - private int applicationInstanceId; + private int instanceId; private int phrase; private long count; private long time; private long timeBucket; - private long s5TimeBucket; - public GCMetric(String id, int applicationInstanceId, int phrase, long count, long time, long timeBucket, - long s5TimeBucket) { + public GCMetric(String id, int instanceId, int phrase, long count, long time, long timeBucket) { this.id = id; - this.applicationInstanceId = applicationInstanceId; + this.instanceId = instanceId; this.phrase = phrase; this.count = count; this.time = time; this.timeBucket = timeBucket; - this.s5TimeBucket = s5TimeBucket; } public GCMetric() { @@ -64,23 +60,21 @@ public class GCMetricDataDefine extends DataDefine { GCMetricDataDefine define = new GCMetricDataDefine(); Data data = define.build(id); data.setDataString(0, this.id); - data.setDataInteger(0, this.applicationInstanceId); + data.setDataInteger(0, this.instanceId); data.setDataInteger(1, this.phrase); data.setDataLong(0, this.count); data.setDataLong(1, this.time); data.setDataLong(2, this.timeBucket); - data.setDataLong(3, this.s5TimeBucket); return data; } @Override public GCMetric toSelf(Data data) { this.id = data.getDataString(0); - this.applicationInstanceId = data.getDataInteger(0); + this.instanceId = data.getDataInteger(0); this.phrase = data.getDataInteger(1); this.count = data.getDataLong(0); this.time = data.getDataLong(1); this.timeBucket = data.getDataLong(2); - this.s5TimeBucket = data.getDataLong(3); return this; } @@ -88,8 +82,8 @@ public class GCMetricDataDefine extends DataDefine { this.id = id; } - public void setApplicationInstanceId(int applicationInstanceId) { - this.applicationInstanceId = applicationInstanceId; + public void setInstanceId(int instanceId) { + this.instanceId = instanceId; } public void setTimeBucket(long timeBucket) { @@ -100,8 +94,8 @@ public class GCMetricDataDefine extends DataDefine { return id; } - public int getApplicationInstanceId() { - return applicationInstanceId; + public int getInstanceId() { + return instanceId; } public long getTimeBucket() { @@ -131,13 +125,5 @@ public class GCMetricDataDefine extends DataDefine { public void setTime(long time) { this.time = time; } - - public long getS5TimeBucket() { - return s5TimeBucket; - } - - public void setS5TimeBucket(long s5TimeBucket) { - this.s5TimeBucket = s5TimeBucket; - } } } diff --git a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/jvm/GCMetricTable.java b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/jvm/GCMetricTable.java index 6691ba5de..e5219672a 100644 --- a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/jvm/GCMetricTable.java +++ b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/jvm/GCMetricTable.java @@ -7,7 +7,7 @@ import org.skywalking.apm.collector.storage.define.CommonTable; */ public class GCMetricTable extends CommonTable { public static final String TABLE = "gc_metric"; - public static final String COLUMN_APPLICATION_INSTANCE_ID = "application_instance_id"; + public static final String COLUMN_INSTANCE_ID = "instance_id"; public static final String COLUMN_PHRASE = "phrase"; public static final String COLUMN_COUNT = "count"; public static final String COLUMN_TIME = "time"; diff --git a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/jvm/MemoryPoolMetricDataDefine.java b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/jvm/MemoryPoolMetricDataDefine.java index 4f14c40be..a09265d50 100644 --- a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/jvm/MemoryPoolMetricDataDefine.java +++ b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/jvm/MemoryPoolMetricDataDefine.java @@ -21,7 +21,7 @@ public class MemoryPoolMetricDataDefine extends DataDefine { @Override protected void attributeDefine() { addAttribute(0, new Attribute(MemoryPoolMetricTable.COLUMN_ID, AttributeType.STRING, new NonOperation())); - addAttribute(1, new Attribute(MemoryPoolMetricTable.COLUMN_APPLICATION_INSTANCE_ID, AttributeType.INTEGER, new CoverOperation())); + addAttribute(1, new Attribute(MemoryPoolMetricTable.COLUMN_INSTANCE_ID, AttributeType.INTEGER, new CoverOperation())); addAttribute(2, new Attribute(MemoryPoolMetricTable.COLUMN_POOL_TYPE, AttributeType.INTEGER, new CoverOperation())); addAttribute(3, new Attribute(MemoryPoolMetricTable.COLUMN_IS_HEAP, AttributeType.BOOLEAN, new CoverOperation())); addAttribute(4, new Attribute(MemoryPoolMetricTable.COLUMN_INIT, AttributeType.LONG, new CoverOperation())); @@ -41,7 +41,7 @@ public class MemoryPoolMetricDataDefine extends DataDefine { public static class MemoryPoolMetric implements Transform { private String id; - private int applicationInstanceId; + private int instanceId; private int poolType; private boolean isHeap; private long init; @@ -50,10 +50,10 @@ public class MemoryPoolMetricDataDefine extends DataDefine { private long committed; private long timeBucket; - public MemoryPoolMetric(String id, int applicationInstanceId, int poolType, boolean isHeap, long init, long max, + public MemoryPoolMetric(String id, int instanceId, int poolType, boolean isHeap, long init, long max, long used, long committed, long timeBucket) { this.id = id; - this.applicationInstanceId = applicationInstanceId; + this.instanceId = instanceId; this.poolType = poolType; this.isHeap = isHeap; this.init = init; @@ -70,7 +70,7 @@ public class MemoryPoolMetricDataDefine extends DataDefine { MemoryPoolMetricDataDefine define = new MemoryPoolMetricDataDefine(); Data data = define.build(id); data.setDataString(0, this.id); - data.setDataInteger(0, this.applicationInstanceId); + data.setDataInteger(0, this.instanceId); data.setDataInteger(1, this.poolType); data.setDataBoolean(0, this.isHeap); data.setDataLong(0, this.init); @@ -83,7 +83,7 @@ public class MemoryPoolMetricDataDefine extends DataDefine { @Override public MemoryPoolMetric toSelf(Data data) { this.id = data.getDataString(0); - this.applicationInstanceId = data.getDataInteger(0); + this.instanceId = data.getDataInteger(0); this.poolType = data.getDataInteger(1); this.isHeap = data.getDataBoolean(0); this.init = data.getDataLong(0); @@ -98,8 +98,8 @@ public class MemoryPoolMetricDataDefine extends DataDefine { this.id = id; } - public void setApplicationInstanceId(int applicationInstanceId) { - this.applicationInstanceId = applicationInstanceId; + public void setInstanceId(int instanceId) { + this.instanceId = instanceId; } public void setPoolType(int poolType) { @@ -134,8 +134,8 @@ public class MemoryPoolMetricDataDefine extends DataDefine { return id; } - public int getApplicationInstanceId() { - return applicationInstanceId; + public int getInstanceId() { + return instanceId; } public long getTimeBucket() { diff --git a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/jvm/MemoryPoolMetricTable.java b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/jvm/MemoryPoolMetricTable.java index efa6089bd..b321dda82 100644 --- a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/jvm/MemoryPoolMetricTable.java +++ b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/jvm/MemoryPoolMetricTable.java @@ -7,7 +7,7 @@ import org.skywalking.apm.collector.storage.define.CommonTable; */ public class MemoryPoolMetricTable extends CommonTable { public static final String TABLE = "memory_pool_metric"; - public static final String COLUMN_APPLICATION_INSTANCE_ID = "application_instance_id"; + public static final String COLUMN_INSTANCE_ID = "instance_id"; public static final String COLUMN_POOL_TYPE = "pool_type"; public static final String COLUMN_IS_HEAP = "is_heap"; public static final String COLUMN_INIT = "init"; diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/GCMetricEsDAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/GCMetricEsDAO.java index 76dda35d8..934b9c8e7 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/GCMetricEsDAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/GCMetricEsDAO.java @@ -10,7 +10,6 @@ import org.elasticsearch.action.search.SearchRequestBuilder; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.action.search.SearchType; import org.elasticsearch.index.query.BoolQueryBuilder; -import org.elasticsearch.index.query.MatchQueryBuilder; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.aggregations.AggregationBuilders; import org.elasticsearch.search.aggregations.bucket.terms.Terms; @@ -30,18 +29,15 @@ public class GCMetricEsDAO extends EsDAO implements IGCMetricDAO { private final Logger logger = LoggerFactory.getLogger(GCMetricEsDAO.class); - @Override public GCCount getGCCount(long s5TimeBucket, int instanceId) { - logger.debug("get gc count, s5TimeBucket: {}, instanceId: {}", s5TimeBucket, instanceId); + @Override public GCCount getGCCount(long[] timeBuckets, int instanceId) { + logger.debug("get gc count, timeBuckets: {}, instanceId: {}", timeBuckets, instanceId); SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(GCMetricTable.TABLE); searchRequestBuilder.setTypes(GCMetricTable.TABLE_TYPE); searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH); BoolQueryBuilder boolQuery = QueryBuilders.boolQuery(); - MatchQueryBuilder matchApplicationId = QueryBuilders.matchQuery(GCMetricTable.COLUMN_APPLICATION_INSTANCE_ID, instanceId); - MatchQueryBuilder matchTimeBucket = QueryBuilders.matchQuery(GCMetricTable.COLUMN_5S_TIME_BUCKET, s5TimeBucket); - - boolQuery.must().add(matchApplicationId); - boolQuery.must().add(matchTimeBucket); + boolQuery.must().add(QueryBuilders.termQuery(GCMetricTable.COLUMN_INSTANCE_ID, instanceId)); + boolQuery.must().add(QueryBuilders.termsQuery(GCMetricTable.COLUMN_TIME_BUCKET, timeBuckets)); searchRequestBuilder.setQuery(boolQuery); searchRequestBuilder.setSize(0); diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/GCMetricH2DAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/GCMetricH2DAO.java index e8f39776a..b72d5d3d4 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/GCMetricH2DAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/GCMetricH2DAO.java @@ -8,7 +8,7 @@ import org.skywalking.apm.collector.storage.h2.dao.H2DAO; */ public class GCMetricH2DAO extends H2DAO implements IGCMetricDAO { - @Override public GCCount getGCCount(long timestamp, int instanceId) { + @Override public GCCount getGCCount(long[] timeBuckets, int instanceId) { return null; } diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/IGCMetricDAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/IGCMetricDAO.java index e9babdac2..3a552ee18 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/IGCMetricDAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/IGCMetricDAO.java @@ -7,7 +7,7 @@ import com.google.gson.JsonObject; */ public interface IGCMetricDAO { - GCCount getGCCount(long timestamp, int instanceId); + GCCount getGCCount(long[] timeBuckets, int instanceId); JsonObject getMetric(int instanceId, long timeBucket); diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/IInstPerformanceDAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/IInstPerformanceDAO.java index 850872e38..771741656 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/IInstPerformanceDAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/IInstPerformanceDAO.java @@ -1,13 +1,12 @@ package org.skywalking.apm.collector.ui.dao; import com.google.gson.JsonArray; -import java.util.List; /** * @author pengys5 */ public interface IInstPerformanceDAO { - List getMultiple(long timeBucket, int applicationId); + InstPerformance get(long[] timeBuckets, int instanceId); int getTpsMetric(int instanceId, long timeBucket); @@ -19,12 +18,12 @@ public interface IInstPerformanceDAO { class InstPerformance { private final int instanceId; - private final int callTimes; + private final int calls; private final long costTotal; - public InstPerformance(int instanceId, int callTimes, long costTotal) { + public InstPerformance(int instanceId, int calls, long costTotal) { this.instanceId = instanceId; - this.callTimes = callTimes; + this.calls = calls; this.costTotal = costTotal; } @@ -32,8 +31,8 @@ public interface IInstPerformanceDAO { return instanceId; } - public int getCallTimes() { - return callTimes; + public int getCalls() { + return calls; } public long getCostTotal() { diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/IInstanceDAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/IInstanceDAO.java index 039a45d95..a8aa077b8 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/IInstanceDAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/IInstanceDAO.java @@ -1,6 +1,7 @@ package org.skywalking.apm.collector.ui.dao; import com.google.gson.JsonArray; +import java.util.List; import org.skywalking.apm.collector.storage.define.register.InstanceDataDefine; /** @@ -15,6 +16,8 @@ public interface IInstanceDAO { InstanceDataDefine.Instance getInstance(int instanceId); + List getInstances(int applicationId, long timeBucket); + class Application { private final int applicationId; private final long count; diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/InstPerformanceEsDAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/InstPerformanceEsDAO.java index 79cfcca24..d844e3fcc 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/InstPerformanceEsDAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/InstPerformanceEsDAO.java @@ -1,8 +1,6 @@ package org.skywalking.apm.collector.ui.dao; import com.google.gson.JsonArray; -import java.util.LinkedList; -import java.util.List; import org.elasticsearch.action.get.GetResponse; import org.elasticsearch.action.get.MultiGetItemResponse; import org.elasticsearch.action.get.MultiGetRequestBuilder; @@ -11,10 +9,8 @@ import org.elasticsearch.action.search.SearchRequestBuilder; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.action.search.SearchType; import org.elasticsearch.index.query.BoolQueryBuilder; -import org.elasticsearch.index.query.MatchQueryBuilder; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.aggregations.AggregationBuilders; -import org.elasticsearch.search.aggregations.bucket.terms.Terms; import org.elasticsearch.search.aggregations.metrics.sum.Sum; import org.skywalking.apm.collector.core.util.Const; import org.skywalking.apm.collector.core.util.TimeBucketUtils; @@ -26,46 +22,25 @@ import org.skywalking.apm.collector.storage.elasticsearch.dao.EsDAO; */ public class InstPerformanceEsDAO extends EsDAO implements IInstPerformanceDAO { - @Override public List getMultiple(long timeBucket, int applicationId) { + @Override public InstPerformance get(long[] timeBuckets, int instanceId) { SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(InstPerformanceTable.TABLE); searchRequestBuilder.setTypes(InstPerformanceTable.TABLE_TYPE); searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH); BoolQueryBuilder boolQuery = QueryBuilders.boolQuery(); - MatchQueryBuilder matchApplicationId = QueryBuilders.matchQuery(InstPerformanceTable.COLUMN_APPLICATION_ID, applicationId); - MatchQueryBuilder matchTimeBucket = QueryBuilders.matchQuery(InstPerformanceTable.COLUMN_5S_TIME_BUCKET, timeBucket); - - boolQuery.must().add(matchApplicationId); - boolQuery.must().add(matchTimeBucket); + boolQuery.must().add(QueryBuilders.termQuery(InstPerformanceTable.COLUMN_INSTANCE_ID, instanceId)); + boolQuery.must().add(QueryBuilders.termsQuery(InstPerformanceTable.COLUMN_TIME_BUCKET, timeBuckets)); searchRequestBuilder.setQuery(boolQuery); searchRequestBuilder.setSize(0); - searchRequestBuilder.addAggregation( - AggregationBuilders.terms(InstPerformanceTable.COLUMN_INSTANCE_ID).field(InstPerformanceTable.COLUMN_INSTANCE_ID) - .subAggregation( - AggregationBuilders.terms(InstPerformanceTable.COLUMN_5S_TIME_BUCKET).field(InstPerformanceTable.COLUMN_5S_TIME_BUCKET) - .subAggregation(AggregationBuilders.sum(InstPerformanceTable.COLUMN_CALL_TIMES).field(InstPerformanceTable.COLUMN_CALL_TIMES)) - .subAggregation(AggregationBuilders.sum(InstPerformanceTable.COLUMN_COST_TOTAL).field(InstPerformanceTable.COLUMN_COST_TOTAL)))); + searchRequestBuilder.addAggregation(AggregationBuilders.sum(InstPerformanceTable.COLUMN_CALLS).field(InstPerformanceTable.COLUMN_CALLS)); + searchRequestBuilder.addAggregation(AggregationBuilders.sum(InstPerformanceTable.COLUMN_COST_TOTAL).field(InstPerformanceTable.COLUMN_COST_TOTAL)); SearchResponse searchResponse = searchRequestBuilder.execute().actionGet(); - - Terms instanceTerms = searchResponse.getAggregations().get(InstPerformanceTable.COLUMN_INSTANCE_ID); - List instPerformances = new LinkedList<>(); - for (Terms.Bucket instanceBucket : instanceTerms.getBuckets()) { - int instanceId = instanceBucket.getKeyAsNumber().intValue(); - Terms timeBucketTerms = instanceBucket.getAggregations().get(InstPerformanceTable.COLUMN_5S_TIME_BUCKET); - for (Terms.Bucket timeBucketBucket : timeBucketTerms.getBuckets()) { - long count = timeBucketBucket.getDocCount(); - Sum sumCallTimes = timeBucketBucket.getAggregations().get(InstPerformanceTable.COLUMN_CALL_TIMES); - Sum sumCostTotal = timeBucketBucket.getAggregations().get(InstPerformanceTable.COLUMN_COST_TOTAL); - int avgCallTimes = (int)(sumCallTimes.getValue() / count); - int avgCost = (int)(sumCostTotal.getValue() / count); - instPerformances.add(new InstPerformance(instanceId, avgCallTimes, avgCost)); - } - } - - return instPerformances; + Sum sumCalls = searchResponse.getAggregations().get(InstPerformanceTable.COLUMN_CALLS); + Sum sumCostTotal = searchResponse.getAggregations().get(InstPerformanceTable.COLUMN_CALLS); + return new InstPerformance(instanceId, (int)sumCalls.getValue(), (long)sumCostTotal.getValue()); } @Override public int getTpsMetric(int instanceId, long timeBucket) { @@ -73,7 +48,7 @@ public class InstPerformanceEsDAO extends EsDAO implements IInstPerformanceDAO { GetResponse getResponse = getClient().prepareGet(InstPerformanceTable.TABLE, id).get(); if (getResponse.isExists()) { - return ((Number)getResponse.getSource().get(InstPerformanceTable.COLUMN_CALL_TIMES)).intValue(); + return ((Number)getResponse.getSource().get(InstPerformanceTable.COLUMN_CALLS)).intValue(); } return 0; } @@ -93,7 +68,7 @@ public class InstPerformanceEsDAO extends EsDAO implements IInstPerformanceDAO { MultiGetResponse multiGetResponse = prepareMultiGet.get(); for (MultiGetItemResponse response : multiGetResponse.getResponses()) { if (response.getResponse().isExists()) { - metrics.add(((Number)response.getResponse().getSource().get(InstPerformanceTable.COLUMN_CALL_TIMES)).intValue()); + metrics.add(((Number)response.getResponse().getSource().get(InstPerformanceTable.COLUMN_CALLS)).intValue()); } else { metrics.add(0); } @@ -106,7 +81,7 @@ public class InstPerformanceEsDAO extends EsDAO implements IInstPerformanceDAO { GetResponse getResponse = getClient().prepareGet(InstPerformanceTable.TABLE, id).get(); if (getResponse.isExists()) { - int callTimes = ((Number)getResponse.getSource().get(InstPerformanceTable.COLUMN_CALL_TIMES)).intValue(); + int callTimes = ((Number)getResponse.getSource().get(InstPerformanceTable.COLUMN_CALLS)).intValue(); int costTotal = ((Number)getResponse.getSource().get(InstPerformanceTable.COLUMN_COST_TOTAL)).intValue(); return costTotal / callTimes; } @@ -130,7 +105,7 @@ public class InstPerformanceEsDAO extends EsDAO implements IInstPerformanceDAO { MultiGetResponse multiGetResponse = prepareMultiGet.get(); for (MultiGetItemResponse response : multiGetResponse.getResponses()) { if (response.getResponse().isExists()) { - int callTimes = ((Number)response.getResponse().getSource().get(InstPerformanceTable.COLUMN_CALL_TIMES)).intValue(); + int callTimes = ((Number)response.getResponse().getSource().get(InstPerformanceTable.COLUMN_CALLS)).intValue(); int costTotal = ((Number)response.getResponse().getSource().get(InstPerformanceTable.COLUMN_COST_TOTAL)).intValue(); metrics.add(costTotal / callTimes); } else { diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/InstPerformanceH2DAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/InstPerformanceH2DAO.java index fcb20253b..7dc331d19 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/InstPerformanceH2DAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/InstPerformanceH2DAO.java @@ -1,7 +1,6 @@ package org.skywalking.apm.collector.ui.dao; import com.google.gson.JsonArray; -import java.util.List; import org.skywalking.apm.collector.storage.h2.dao.H2DAO; /** @@ -9,7 +8,7 @@ import org.skywalking.apm.collector.storage.h2.dao.H2DAO; */ public class InstPerformanceH2DAO extends H2DAO implements IInstPerformanceDAO { - @Override public List getMultiple(long timestamp, int applicationId) { + @Override public InstPerformance get(long[] timeBuckets, int instanceId) { return null; } diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/InstanceEsDAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/InstanceEsDAO.java index 429e55c2a..5ea16c3ba 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/InstanceEsDAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/InstanceEsDAO.java @@ -2,6 +2,8 @@ package org.skywalking.apm.collector.ui.dao; import com.google.gson.JsonArray; import com.google.gson.JsonObject; +import java.util.LinkedList; +import java.util.List; import org.elasticsearch.action.get.GetRequestBuilder; import org.elasticsearch.action.get.GetResponse; import org.elasticsearch.action.search.SearchRequestBuilder; @@ -9,7 +11,6 @@ import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.action.search.SearchType; import org.elasticsearch.index.query.AbstractQueryBuilder; import org.elasticsearch.index.query.BoolQueryBuilder; -import org.elasticsearch.index.query.MatchQueryBuilder; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.index.query.RangeQueryBuilder; import org.elasticsearch.search.SearchHit; @@ -45,10 +46,8 @@ public class InstanceEsDAO extends EsDAO implements IInstanceDAO { fiveMinuteBefore = TimeBucketUtils.INSTANCE.getSecondTimeBucket(fiveMinuteBefore); BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder(); - RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery(InstanceTable.COLUMN_HEARTBEAT_TIME).gt(fiveMinuteBefore); - MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery(InstanceTable.COLUMN_INSTANCE_ID, applicationInstanceId); - boolQueryBuilder.must(rangeQueryBuilder); - boolQueryBuilder.must(matchQueryBuilder); + boolQueryBuilder.must(QueryBuilders.rangeQuery(InstanceTable.COLUMN_HEARTBEAT_TIME).gt(fiveMinuteBefore)); + boolQueryBuilder.must(QueryBuilders.termQuery(InstanceTable.COLUMN_INSTANCE_ID, applicationInstanceId)); return heartBeatTime(boolQueryBuilder); } @@ -118,4 +117,30 @@ public class InstanceEsDAO extends EsDAO implements IInstanceDAO { } return null; } + + @Override public List getInstances(int applicationId, long timeBucket) { + logger.debug("get instances info, application id: {}, timeBucket: {}", applicationId, timeBucket); + SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(InstanceTable.TABLE); + searchRequestBuilder.setTypes(InstanceTable.TABLE_TYPE); + searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH); + searchRequestBuilder.setSize(1000); + + BoolQueryBuilder boolQuery = QueryBuilders.boolQuery(); + boolQuery.must().add(QueryBuilders.rangeQuery(InstanceTable.COLUMN_HEARTBEAT_TIME).gte(timeBucket)); + boolQuery.must().add(QueryBuilders.termQuery(InstanceTable.COLUMN_APPLICATION_ID, applicationId)); + searchRequestBuilder.setQuery(boolQuery); + + SearchResponse searchResponse = searchRequestBuilder.execute().actionGet(); + SearchHit[] searchHits = searchResponse.getHits().getHits(); + + List instanceList = new LinkedList<>(); + for (SearchHit searchHit : searchHits) { + InstanceDataDefine.Instance instance = new InstanceDataDefine.Instance(); + instance.setApplicationId(((Number)searchHit.getSource().get(InstanceTable.COLUMN_APPLICATION_ID)).intValue()); + instance.setHeartBeatTime(((Number)searchHit.getSource().get(InstanceTable.COLUMN_HEARTBEAT_TIME)).longValue()); + instance.setInstanceId(((Number)searchHit.getSource().get(InstanceTable.COLUMN_INSTANCE_ID)).intValue()); + instanceList.add(instance); + } + return instanceList; + } } diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/InstanceH2DAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/InstanceH2DAO.java index db9945135..0f7028bbe 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/InstanceH2DAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/InstanceH2DAO.java @@ -1,6 +1,7 @@ package org.skywalking.apm.collector.ui.dao; import com.google.gson.JsonArray; +import java.util.List; import org.skywalking.apm.collector.storage.define.register.InstanceDataDefine; import org.skywalking.apm.collector.storage.h2.dao.H2DAO; @@ -23,4 +24,8 @@ public class InstanceH2DAO extends H2DAO implements IInstanceDAO { @Override public InstanceDataDefine.Instance getInstance(int instanceId) { return null; } + + @Override public List getInstances(int applicationId, long timeBucket) { + return null; + } } diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/time/AllInstanceLastTimeGetHandler.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/time/AllInstanceLastTimeGetHandler.java index ed4f43046..3a2f47806 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/time/AllInstanceLastTimeGetHandler.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/time/AllInstanceLastTimeGetHandler.java @@ -28,12 +28,18 @@ public class AllInstanceLastTimeGetHandler extends JettyHandler { Long timeBucket = service.allInstanceLastTime(); logger.debug("all instance last time: {}", timeBucket); - Calendar calendar = Calendar.getInstance(); - calendar.setTimeInMillis(TimeBucketUtils.INSTANCE.changeTimeBucket2TimeStamp(TimeBucketUtils.TimeBucketType.SECOND.name(), timeBucket)); - calendar.add(Calendar.SECOND, -5); + long instanceTimeBucket; + if (timeBucket == 0) { + instanceTimeBucket = 0; + } else { + Calendar calendar = Calendar.getInstance(); + calendar.setTimeInMillis(TimeBucketUtils.INSTANCE.changeTimeBucket2TimeStamp(TimeBucketUtils.TimeBucketType.SECOND.name(), timeBucket)); + calendar.add(Calendar.SECOND, -5); + instanceTimeBucket = calendar.getTimeInMillis(); + } JsonObject timeJson = new JsonObject(); - timeJson.addProperty("timeBucket", TimeBucketUtils.INSTANCE.getSecondTimeBucket(calendar.getTimeInMillis())); + timeJson.addProperty("timeBucket", TimeBucketUtils.INSTANCE.getSecondTimeBucket(instanceTimeBucket)); return timeJson; } diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/InstanceHealthService.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/InstanceHealthService.java index fff48a03f..a0434ed2a 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/InstanceHealthService.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/InstanceHealthService.java @@ -5,9 +5,11 @@ import com.google.gson.JsonObject; import java.util.List; import org.skywalking.apm.collector.core.util.TimeBucketUtils; import org.skywalking.apm.collector.storage.dao.DAOContainer; +import org.skywalking.apm.collector.storage.define.register.InstanceDataDefine; import org.skywalking.apm.collector.ui.cache.ApplicationCache; import org.skywalking.apm.collector.ui.dao.IGCMetricDAO; import org.skywalking.apm.collector.ui.dao.IInstPerformanceDAO; +import org.skywalking.apm.collector.ui.dao.IInstanceDAO; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -21,23 +23,29 @@ public class InstanceHealthService { public JsonObject getInstances(long timeBucket, int applicationId) { JsonObject response = new JsonObject(); - long s5TimeBucket = TimeBucketUtils.INSTANCE.getFiveSecondTimeBucket(timeBucket); + long[] timeBuckets = TimeBucketUtils.INSTANCE.getFiveSecondTimeBuckets(timeBucket); + long halfHourBeforeTimeBucket = TimeBucketUtils.INSTANCE.addSecondForSecondTimeBucket(TimeBucketUtils.TimeBucketType.SECOND.name(), timeBucket, -60 * 30); + IInstanceDAO instanceDAO = (IInstanceDAO)DAOContainer.INSTANCE.get(IInstanceDAO.class.getName()); + List instanceList = instanceDAO.getInstances(applicationId, halfHourBeforeTimeBucket); - IInstPerformanceDAO instPerformanceDAO = (IInstPerformanceDAO)DAOContainer.INSTANCE.get(IInstPerformanceDAO.class.getName()); - List performances = instPerformanceDAO.getMultiple(s5TimeBucket, applicationId); + instanceList.forEach(instance -> { + JsonArray instances = new JsonArray(); + response.addProperty("applicationCode", ApplicationCache.getForUI(applicationId)); + response.addProperty("applicationId", applicationId); + response.add("instances", instances); - JsonArray instances = new JsonArray(); - response.addProperty("applicationCode", ApplicationCache.getForUI(applicationId)); - response.addProperty("applicationId", applicationId); - response.add("instances", instances); + IInstPerformanceDAO instPerformanceDAO = (IInstPerformanceDAO)DAOContainer.INSTANCE.get(IInstPerformanceDAO.class.getName()); + IInstPerformanceDAO.InstPerformance performance = instPerformanceDAO.get(timeBuckets, instance.getInstanceId()); - IGCMetricDAO gcMetricDAO = (IGCMetricDAO)DAOContainer.INSTANCE.get(IGCMetricDAO.class.getName()); - performances.forEach(instance -> { + IGCMetricDAO gcMetricDAO = (IGCMetricDAO)DAOContainer.INSTANCE.get(IGCMetricDAO.class.getName()); JsonObject instanceJson = new JsonObject(); instanceJson.addProperty("id", instance.getInstanceId()); - instanceJson.addProperty("tps", instance.getCallTimes()); + instanceJson.addProperty("tps", performance.getCalls()); - int avg = (int)(instance.getCostTotal() / instance.getCallTimes()); + int avg = 0; + if (performance.getCalls() != 0) { + avg = (int)(performance.getCostTotal() / performance.getCalls()); + } instanceJson.addProperty("avg", avg); if (avg > 5000) { @@ -50,14 +58,22 @@ public class InstanceHealthService { instanceJson.addProperty("healthLevel", 3); } - instanceJson.addProperty("status", 0); + long heartBeatTime = TimeBucketUtils.INSTANCE.changeTimeBucket2TimeStamp(TimeBucketUtils.TimeBucketType.SECOND.name(), instance.getHeartBeatTime()); + long currentTime = TimeBucketUtils.INSTANCE.changeTimeBucket2TimeStamp(TimeBucketUtils.TimeBucketType.SECOND.name(), timeBucket); - IGCMetricDAO.GCCount gcCount = gcMetricDAO.getGCCount(s5TimeBucket, instance.getInstanceId()); + if (currentTime - heartBeatTime < 1000 * 60 * 2) { + instanceJson.addProperty("status", 0); + } else { + instanceJson.addProperty("status", 1); + } + + IGCMetricDAO.GCCount gcCount = gcMetricDAO.getGCCount(timeBuckets, instance.getInstanceId()); instanceJson.addProperty("ygc", gcCount.getYoung()); instanceJson.addProperty("ogc", gcCount.getOld()); instances.add(instanceJson); }); + return response; } } diff --git a/apm-network/src/main/proto/DiscoveryService.proto b/apm-network/src/main/proto/DiscoveryService.proto index 0715b36b5..f245f896d 100644 --- a/apm-network/src/main/proto/DiscoveryService.proto +++ b/apm-network/src/main/proto/DiscoveryService.proto @@ -27,18 +27,18 @@ message ApplicationInstance { message ApplicationInstanceMapping { int32 applicationId = 1; - int32 applicationInstanceId = 2; + int32 instanceId = 2; } message ApplicationInstanceRecover { int32 applicationId = 1; - int32 applicationInstanceId = 2; + int32 instanceId = 2; int64 registerTime = 3; OSInfo osinfo = 4; } message ApplicationInstanceHeartbeat { - int32 applicationInstanceId = 1; + int32 instanceId = 1; int64 heartbeatTime = 2; } From 5e2204e2d0af714055ab200480db4dc6e2277e96 Mon Sep 17 00:00:00 2001 From: pengys5 <8082209@qq.com> Date: Sat, 9 Sep 2017 15:59:50 +0800 Subject: [PATCH 14/18] Add some property into tag array. --- .../apm/collector/ui/service/SpanService.java | 34 +++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/SpanService.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/SpanService.java index c86343587..362dd6fdf 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/SpanService.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/SpanService.java @@ -6,12 +6,14 @@ import java.util.List; import org.skywalking.apm.collector.core.util.Const; import org.skywalking.apm.collector.core.util.StringUtils; import org.skywalking.apm.collector.storage.dao.DAOContainer; +import org.skywalking.apm.collector.ui.cache.ApplicationCache; import org.skywalking.apm.collector.ui.cache.ServiceNameCache; import org.skywalking.apm.collector.ui.dao.ISegmentDAO; import org.skywalking.apm.network.proto.KeyWithStringValue; import org.skywalking.apm.network.proto.LogMessage; import org.skywalking.apm.network.proto.SpanObject; import org.skywalking.apm.network.proto.TraceSegmentObject; +import org.skywalking.apm.network.trace.component.ComponentsDefine; /** * @author pengys5 @@ -31,8 +33,6 @@ public class SpanService { String serviceName = ServiceNameCache.get(spanObject.getOperationNameId()); if (StringUtils.isNotEmpty(serviceName)) { operationName = serviceName.split(Const.ID_SPLIT)[1]; - } else { - operationName = Const.EMPTY_STRING; } } spanJson.addProperty("operationName", operationName); @@ -58,12 +58,42 @@ public class SpanService { spanJson.add("logMessage", logsArray); JsonArray tagsArray = new JsonArray(); + + JsonObject spanTypeJson = new JsonObject(); + spanTypeJson.addProperty("key", "span type"); + spanTypeJson.addProperty("value", spanObject.getSpanType().name()); + tagsArray.add(spanTypeJson); + + JsonObject componentJson = new JsonObject(); + componentJson.addProperty("key", "component"); + if (spanObject.getComponentId() == 0) { + componentJson.addProperty("value", spanObject.getComponent()); + } else { + componentJson.addProperty("value", ComponentsDefine.getInstance().getComponentName(spanObject.getComponentId())); + } + tagsArray.add(componentJson); + + JsonObject peerJson = new JsonObject(); + peerJson.addProperty("key", "peer"); + if (spanObject.getPeerId() == 0) { + peerJson.addProperty("value", spanObject.getPeer()); + } else { + peerJson.addProperty("value", ApplicationCache.getForUI(spanObject.getPeerId())); + } + tagsArray.add(peerJson); + for (KeyWithStringValue tagValue : spanObject.getTagsList()) { JsonObject tagJson = new JsonObject(); tagJson.addProperty("key", tagValue.getKey()); tagJson.addProperty("value", tagValue.getValue()); tagsArray.add(tagJson); } + + JsonObject isErrorJson = new JsonObject(); + isErrorJson.addProperty("key", "is error"); + isErrorJson.addProperty("value", spanObject.getIsError()); + tagsArray.add(isErrorJson); + spanJson.add("tags", tagsArray); } } From c0344337c86f23330f06f2a3968c2c658fb7cec0 Mon Sep 17 00:00:00 2001 From: ascrutae Date: Sat, 9 Sep 2017 17:24:04 +0800 Subject: [PATCH 15/18] fix issue that cpu metric data is incorrect --- .../skywalking/apm/agent/core/jvm/cpu/CPUMetricAccessor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/jvm/cpu/CPUMetricAccessor.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/jvm/cpu/CPUMetricAccessor.java index e0dc1a6fb..4af6f145c 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/jvm/cpu/CPUMetricAccessor.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/jvm/cpu/CPUMetricAccessor.java @@ -27,6 +27,6 @@ public abstract class CPUMetricAccessor { long now = System.nanoTime(); CPU.Builder cpuBuilder = CPU.newBuilder(); - return cpuBuilder.setUsagePercent(cpuCost * 1.0d / (now - lastSampleTimeNs) * cpuCoreNum).build(); + return cpuBuilder.setUsagePercent(cpuCost * 1.0d / ((now - lastSampleTimeNs) * cpuCoreNum)).build(); } } From 73080cbd49b881d2c0cfb1fb1d6a957a0b7286d6 Mon Sep 17 00:00:00 2001 From: pengys5 <8082209@qq.com> Date: Sat, 9 Sep 2017 20:15:36 +0800 Subject: [PATCH 16/18] Cpu usage percent --- .../collector/storage/define/jvm/CpuMetricDataDefine.java | 7 ++++--- .../skywalking/apm/collector/ui/dao/CpuMetricEsDAO.java | 3 ++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/jvm/CpuMetricDataDefine.java b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/jvm/CpuMetricDataDefine.java index b2383440d..d6e6348f5 100644 --- a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/jvm/CpuMetricDataDefine.java +++ b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/jvm/CpuMetricDataDefine.java @@ -3,12 +3,13 @@ package org.skywalking.apm.collector.storage.define.jvm; import org.skywalking.apm.collector.core.framework.UnexpectedException; import org.skywalking.apm.collector.core.stream.Data; import org.skywalking.apm.collector.core.stream.Transform; +import org.skywalking.apm.collector.core.stream.operate.AddOperation; +import org.skywalking.apm.collector.core.stream.operate.CoverOperation; +import org.skywalking.apm.collector.core.stream.operate.NonOperation; import org.skywalking.apm.collector.remote.grpc.proto.RemoteData; import org.skywalking.apm.collector.storage.define.Attribute; import org.skywalking.apm.collector.storage.define.AttributeType; import org.skywalking.apm.collector.storage.define.DataDefine; -import org.skywalking.apm.collector.core.stream.operate.CoverOperation; -import org.skywalking.apm.collector.core.stream.operate.NonOperation; /** * @author pengys5 @@ -22,7 +23,7 @@ public class CpuMetricDataDefine extends DataDefine { @Override protected void attributeDefine() { addAttribute(0, new Attribute(CpuMetricTable.COLUMN_ID, AttributeType.STRING, new NonOperation())); addAttribute(1, new Attribute(CpuMetricTable.COLUMN_INSTANCE_ID, AttributeType.INTEGER, new CoverOperation())); - addAttribute(2, new Attribute(CpuMetricTable.COLUMN_USAGE_PERCENT, AttributeType.DOUBLE, new CoverOperation())); + addAttribute(2, new Attribute(CpuMetricTable.COLUMN_USAGE_PERCENT, AttributeType.DOUBLE, new AddOperation())); addAttribute(3, new Attribute(CpuMetricTable.COLUMN_TIME_BUCKET, AttributeType.LONG, new CoverOperation())); } diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/CpuMetricEsDAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/CpuMetricEsDAO.java index 2e7672c19..f39aed2d8 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/CpuMetricEsDAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/CpuMetricEsDAO.java @@ -40,7 +40,8 @@ public class CpuMetricEsDAO extends EsDAO implements ICpuMetricDAO { MultiGetResponse multiGetResponse = prepareMultiGet.get(); for (MultiGetItemResponse response : multiGetResponse.getResponses()) { if (response.getResponse().isExists()) { - metrics.add(((Number)response.getResponse().getSource().get(CpuMetricTable.COLUMN_USAGE_PERCENT)).intValue()); + double cpuUsed = ((Number)response.getResponse().getSource().get(CpuMetricTable.COLUMN_USAGE_PERCENT)).doubleValue(); + metrics.add((int)(cpuUsed * 100)); } else { metrics.add(0); } From cd78b93029c62d28af0ce63480c0e397bedd1925 Mon Sep 17 00:00:00 2001 From: pengys5 <8082209@qq.com> Date: Sat, 9 Sep 2017 20:42:43 +0800 Subject: [PATCH 17/18] service reference merge id and name row --- .../ui/dao/ServiceReferenceEsDAO.java | 33 +++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceReferenceEsDAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceReferenceEsDAO.java index e10b99c5f..fa5c4c25f 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceReferenceEsDAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceReferenceEsDAO.java @@ -2,6 +2,8 @@ package org.skywalking.apm.collector.ui.dao; import com.google.gson.JsonArray; import com.google.gson.JsonObject; +import java.util.LinkedHashMap; +import java.util.Map; import org.elasticsearch.action.search.SearchRequestBuilder; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.action.search.SearchType; @@ -132,6 +134,8 @@ public class ServiceReferenceEsDAO extends EsDAO implements IServiceReferenceDAO private void parseSubAggregate(JsonArray serviceReferenceArray, Terms.Bucket frontServiceBucket, int frontServiceId) { + Map serviceReferenceMap = new LinkedHashMap<>(); + Terms behindServiceIdTerms = frontServiceBucket.getAggregations().get(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_ID); for (Terms.Bucket behindServiceIdBucket : behindServiceIdTerms.getBuckets()) { int behindServiceId = behindServiceIdBucket.getKeyAsNumber().intValue(); @@ -165,7 +169,7 @@ public class ServiceReferenceEsDAO extends EsDAO implements IServiceReferenceDAO serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_ERROR), (long)error.getValue()); serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_SUMMARY), (long)summary.getValue()); serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_COST_SUMMARY), (long)costSum.getValue()); - serviceReferenceArray.add(serviceReference); + merge(serviceReferenceMap, serviceReference); } } @@ -198,8 +202,33 @@ public class ServiceReferenceEsDAO extends EsDAO implements IServiceReferenceDAO serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_ERROR), (long)error.getValue()); serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_SUMMARY), (long)summary.getValue()); serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_COST_SUMMARY), (long)costSum.getValue()); - serviceReferenceArray.add(serviceReference); + merge(serviceReferenceMap, serviceReference); } } + + serviceReferenceMap.values().forEach(serviceReferenceArray::add); + } + + private void merge(Map serviceReferenceMap, JsonObject serviceReference) { + String id = serviceReference.get(ServiceReferenceTable.COLUMN_FRONT_SERVICE_ID) + Const.ID_SPLIT + serviceReference.get(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_ID); + + if (serviceReferenceMap.containsKey(id)) { + JsonObject reference = serviceReferenceMap.get(id); + add(reference, serviceReference, ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_S1_LTE)); + add(reference, serviceReference, ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_S3_LTE)); + add(reference, serviceReference, ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_S5_LTE)); + add(reference, serviceReference, ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_S5_GT)); + add(reference, serviceReference, ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_ERROR)); + add(reference, serviceReference, ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_SUMMARY)); + add(reference, serviceReference, ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_COST_SUMMARY)); + } else { + serviceReferenceMap.put(id, serviceReference); + } + } + + private void add(JsonObject oldReference, JsonObject newReference, String key) { + long oldValue = oldReference.get(key).getAsLong(); + long newValue = newReference.get(key).getAsLong(); + oldReference.addProperty(key, oldValue + newValue); } } From bd48a75b143250dd27bb7cb306233c5d3bcbc2d1 Mon Sep 17 00:00:00 2001 From: pengys5 <8082209@qq.com> Date: Sat, 9 Sep 2017 20:51:20 +0800 Subject: [PATCH 18/18] Mistake --- apm-network/src/main/proto/DiscoveryService.proto | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apm-network/src/main/proto/DiscoveryService.proto b/apm-network/src/main/proto/DiscoveryService.proto index f245f896d..0715b36b5 100644 --- a/apm-network/src/main/proto/DiscoveryService.proto +++ b/apm-network/src/main/proto/DiscoveryService.proto @@ -27,18 +27,18 @@ message ApplicationInstance { message ApplicationInstanceMapping { int32 applicationId = 1; - int32 instanceId = 2; + int32 applicationInstanceId = 2; } message ApplicationInstanceRecover { int32 applicationId = 1; - int32 instanceId = 2; + int32 applicationInstanceId = 2; int64 registerTime = 3; OSInfo osinfo = 4; } message ApplicationInstanceHeartbeat { - int32 instanceId = 1; + int32 applicationInstanceId = 1; int64 heartbeatTime = 2; }