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 3b6f8a4f5fca..d3bb58800542 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 @@ -59,7 +59,7 @@ private void senToInstanceHeartBeatPersistenceWorker(StreamModuleContext context long heartBeatTime) { InstanceHeartBeatDataDefine.InstanceHeartBeat heartBeat = new InstanceHeartBeatDataDefine.InstanceHeartBeat(); heartBeat.setId(String.valueOf(applicationInstanceId)); - heartBeat.setHeartBeatTime(heartBeatTime); + heartBeat.setHeartBeatTime(TimeBucketUtils.INSTANCE.getSecondTimeBucket(heartBeatTime)); heartBeat.setInstanceId(applicationInstanceId); try { logger.debug("send to instance heart beat persistence worker, id: {}", heartBeat.getId()); diff --git a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/grpc/handler/InstanceDiscoveryServiceHandler.java b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/grpc/handler/InstanceDiscoveryServiceHandler.java index 8c2c8568af6c..43cd70e01355 100644 --- a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/grpc/handler/InstanceDiscoveryServiceHandler.java +++ b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/grpc/handler/InstanceDiscoveryServiceHandler.java @@ -4,9 +4,9 @@ import com.google.gson.JsonObject; import io.grpc.stub.StreamObserver; import org.skywalking.apm.collector.agentregister.instance.InstanceIDService; +import org.skywalking.apm.collector.core.util.TimeBucketUtils; import org.skywalking.apm.collector.server.grpc.GRPCHandler; import org.skywalking.apm.network.proto.ApplicationInstance; -import org.skywalking.apm.network.proto.ApplicationInstanceHeartbeat; import org.skywalking.apm.network.proto.ApplicationInstanceMapping; import org.skywalking.apm.network.proto.ApplicationInstanceRecover; import org.skywalking.apm.network.proto.Downstream; @@ -26,7 +26,8 @@ public class InstanceDiscoveryServiceHandler extends InstanceDiscoveryServiceGrp @Override public void register(ApplicationInstance request, StreamObserver responseObserver) { - int instanceId = instanceIDService.getOrCreate(request.getApplicationId(), request.getAgentUUID(), request.getRegisterTime(), buildOsInfo(request.getOsinfo())); + long timeBucket = TimeBucketUtils.INSTANCE.getSecondTimeBucket(request.getRegisterTime()); + int instanceId = instanceIDService.getOrCreate(request.getApplicationId(), request.getAgentUUID(), timeBucket, buildOsInfo(request.getOsinfo())); ApplicationInstanceMapping.Builder builder = ApplicationInstanceMapping.newBuilder(); builder.setApplicationId(request.getApplicationId()); builder.setApplicationInstanceId(instanceId); @@ -34,15 +35,10 @@ public void register(ApplicationInstance request, StreamObserver responseObserver) { - instanceIDService.heartBeat(request.getApplicationInstanceId(), request.getHeartbeatTime()); - responseObserver.onNext(Downstream.newBuilder().build()); - responseObserver.onCompleted(); - } - @Override public void registerRecover(ApplicationInstanceRecover request, StreamObserver responseObserver) { - instanceIDService.recover(request.getApplicationInstanceId(), request.getApplicationId(), request.getRegisterTime(), buildOsInfo(request.getOsinfo())); + long timeBucket = TimeBucketUtils.INSTANCE.getSecondTimeBucket(request.getRegisterTime()); + instanceIDService.recover(request.getApplicationInstanceId(), request.getApplicationId(), timeBucket, buildOsInfo(request.getOsinfo())); responseObserver.onNext(Downstream.newBuilder().build()); responseObserver.onCompleted(); } 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 0ecb9570fc21..fa5f5bb22d21 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 @@ -1,10 +1,10 @@ package org.skywalking.apm.collector.agentregister.instance; import org.skywalking.apm.collector.agentstream.worker.register.application.ApplicationRegisterRemoteWorker; -import org.skywalking.apm.collector.storage.define.register.InstanceDataDefine; import org.skywalking.apm.collector.agentstream.worker.register.instance.dao.IInstanceDAO; import org.skywalking.apm.collector.core.framework.CollectorContextHelper; import org.skywalking.apm.collector.storage.dao.DAOContainer; +import org.skywalking.apm.collector.storage.define.register.InstanceDataDefine; import org.skywalking.apm.collector.stream.StreamModuleContext; import org.skywalking.apm.collector.stream.StreamModuleGroupDefine; import org.skywalking.apm.collector.stream.worker.WorkerInvokeException; @@ -36,12 +36,6 @@ public int getOrCreate(int applicationId, String agentUUID, long registerTime, S return applicationId; } - public void heartBeat(int instanceId, long heartbeatTime) { - logger.debug("instance heart beat, instance id: {}, heartbeat time: {}", instanceId, heartbeatTime); - IInstanceDAO dao = (IInstanceDAO)DAOContainer.INSTANCE.get(IInstanceDAO.class.getName()); - dao.updateHeartbeatTime(instanceId, heartbeatTime); - } - public void recover(int instanceId, int applicationId, long registerTime, String osInfo) { logger.debug("instance recover, instance id: {}, application id: {}, register time: {}", instanceId, applicationId, registerTime); IInstanceDAO dao = (IInstanceDAO)DAOContainer.INSTANCE.get(IInstanceDAO.class.getName()); diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/jetty/handler/TraceSegmentServletHandler.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/jetty/handler/TraceSegmentServletHandler.java index 7622aac48fd3..3e28aaf6c4d7 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/jetty/handler/TraceSegmentServletHandler.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/jetty/handler/TraceSegmentServletHandler.java @@ -43,6 +43,7 @@ public class TraceSegmentServletHandler extends JettyHandler { private void read(BufferedReader bufferedReader) throws IOException { JsonReader reader = new JsonReader(bufferedReader); + reader.beginArray(); while (reader.hasNext()) { SegmentParse segmentParse = new SegmentParse(); diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/cache/ServiceNameCache.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/cache/ServiceCache.java similarity index 60% rename from apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/cache/ServiceNameCache.java rename to apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/cache/ServiceCache.java index cb5795e0ace0..6d0294bd7002 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/cache/ServiceNameCache.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/cache/ServiceCache.java @@ -2,25 +2,25 @@ import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; -import org.skywalking.apm.collector.core.util.Const; 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; /** * @author pengys5 */ -public class ServiceNameCache { +public class ServiceCache { - private static Cache CACHE = CacheBuilder.newBuilder().maximumSize(2000).build(); + private static Cache CACHE = CacheBuilder.newBuilder().maximumSize(10000).build(); - public static int get(int applicationId, String serviceName) { + public static String getServiceName(int serviceId) { try { - return CACHE.get(applicationId + Const.ID_SPLIT + serviceName, () -> { + return CACHE.get(serviceId, () -> { IServiceNameDAO dao = (IServiceNameDAO)DAOContainer.INSTANCE.get(IServiceNameDAO.class.getName()); - return dao.getServiceId(applicationId, serviceName); + return dao.getServiceName(serviceId); }); } catch (Throwable e) { - return 0; + return Const.EMPTY_STRING; } } } diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/node/component/NodeComponentSpanListener.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/node/component/NodeComponentSpanListener.java index 7866954f4fa1..6423f460e727 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/node/component/NodeComponentSpanListener.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/node/component/NodeComponentSpanListener.java @@ -2,15 +2,13 @@ import java.util.ArrayList; import java.util.List; -import org.skywalking.apm.collector.core.util.Const; -import org.skywalking.apm.collector.storage.define.node.NodeComponentDataDefine; 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.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.Const; +import org.skywalking.apm.collector.core.util.TimeBucketUtils; +import org.skywalking.apm.collector.storage.define.node.NodeComponentDataDefine; import org.skywalking.apm.collector.stream.StreamModuleContext; import org.skywalking.apm.collector.stream.StreamModuleGroupDefine; import org.skywalking.apm.collector.stream.worker.WorkerInvokeException; @@ -22,48 +20,59 @@ /** * @author pengys5 */ -public class NodeComponentSpanListener implements EntrySpanListener, ExitSpanListener, FirstSpanListener, LocalSpanListener { +public class NodeComponentSpanListener implements EntrySpanListener, ExitSpanListener, FirstSpanListener { private final Logger logger = LoggerFactory.getLogger(NodeComponentSpanListener.class); - private List nodeComponents = new ArrayList<>(); + private List nodeComponents = new ArrayList<>(); private long timeBucket; @Override public void parseExit(SpanObject spanObject, int applicationId, int applicationInstanceId, String segmentId) { - String componentName = ExchangeMarkUtils.INSTANCE.buildMarkedID(spanObject.getComponentId()); + NodeComponentDataDefine.NodeComponent nodeComponent = new NodeComponentDataDefine.NodeComponent(); + nodeComponent.setComponentId(spanObject.getComponentId()); + + String id; if (spanObject.getComponentId() == 0) { - componentName = spanObject.getComponent(); + nodeComponent.setComponentName(spanObject.getComponent()); + id = nodeComponent.getComponentName(); + } else { + nodeComponent.setComponentName(Const.EMPTY_STRING); + id = String.valueOf(nodeComponent.getComponentId()); } - String peer = ExchangeMarkUtils.INSTANCE.buildMarkedID(spanObject.getPeerId()); + + nodeComponent.setPeerId(spanObject.getPeerId()); if (spanObject.getPeerId() == 0) { - peer = spanObject.getPeer(); + nodeComponent.setPeer(spanObject.getPeer()); + id = id + Const.ID_SPLIT + nodeComponent.getPeer(); + } else { + nodeComponent.setPeer(Const.EMPTY_STRING); + id = id + Const.ID_SPLIT + nodeComponent.getPeerId(); } - - String agg = peer + Const.ID_SPLIT + componentName; - nodeComponents.add(agg); + nodeComponent.setId(id); + nodeComponents.add(nodeComponent); } @Override public void parseEntry(SpanObject spanObject, int applicationId, int applicationInstanceId, String segmentId) { - buildEntryOrLocal(spanObject, applicationId); - } - - @Override - public void parseLocal(SpanObject spanObject, int applicationId, int applicationInstanceId, String segmentId) { - buildEntryOrLocal(spanObject, applicationId); - } - - private void buildEntryOrLocal(SpanObject spanObject, int applicationId) { - String componentName = ExchangeMarkUtils.INSTANCE.buildMarkedID(spanObject.getComponentId()); + NodeComponentDataDefine.NodeComponent nodeComponent = new NodeComponentDataDefine.NodeComponent(); + nodeComponent.setComponentId(spanObject.getComponentId()); + String id; if (spanObject.getComponentId() == 0) { - componentName = spanObject.getComponent(); + nodeComponent.setComponentName(spanObject.getComponent()); + id = nodeComponent.getComponentName(); + } else { + id = String.valueOf(nodeComponent.getComponentId()); + nodeComponent.setComponentName(Const.EMPTY_STRING); } - String peer = ExchangeMarkUtils.INSTANCE.buildMarkedID(applicationId); - String agg = peer + Const.ID_SPLIT + componentName; - nodeComponents.add(agg); + nodeComponent.setPeerId(applicationId); + nodeComponent.setPeer(Const.EMPTY_STRING); + id = id + Const.ID_SPLIT + String.valueOf(applicationId); + nodeComponent.setId(id); + + nodeComponents.add(nodeComponent); } @Override @@ -74,10 +83,8 @@ public void parseFirst(SpanObject spanObject, int applicationId, int application @Override public void build() { StreamModuleContext context = (StreamModuleContext)CollectorContextHelper.INSTANCE.getContext(StreamModuleGroupDefine.GROUP_NAME); - nodeComponents.forEach(agg -> { - NodeComponentDataDefine.NodeComponent nodeComponent = new NodeComponentDataDefine.NodeComponent(); - nodeComponent.setId(timeBucket + Const.ID_SPLIT + agg); - nodeComponent.setAgg(agg); + nodeComponents.forEach(nodeComponent -> { + nodeComponent.setId(timeBucket + Const.ID_SPLIT + nodeComponent.getId()); nodeComponent.setTimeBucket(timeBucket); try { diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/node/component/dao/NodeComponentEsDAO.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/node/component/dao/NodeComponentEsDAO.java index cd53b5537ffa..25cf19d4be1d 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/node/component/dao/NodeComponentEsDAO.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/node/component/dao/NodeComponentEsDAO.java @@ -5,11 +5,11 @@ import org.elasticsearch.action.get.GetResponse; import org.elasticsearch.action.index.IndexRequestBuilder; import org.elasticsearch.action.update.UpdateRequestBuilder; +import org.skywalking.apm.collector.core.stream.Data; +import org.skywalking.apm.collector.storage.define.DataDefine; import org.skywalking.apm.collector.storage.define.node.NodeComponentTable; import org.skywalking.apm.collector.storage.elasticsearch.dao.EsDAO; import org.skywalking.apm.collector.stream.worker.impl.dao.IPersistenceDAO; -import org.skywalking.apm.collector.core.stream.Data; -import org.skywalking.apm.collector.storage.define.DataDefine; /** * @author pengys5 @@ -21,7 +21,10 @@ public class NodeComponentEsDAO extends EsDAO implements INodeComponentDAO, IPer if (getResponse.isExists()) { Data data = dataDefine.build(id); Map source = getResponse.getSource(); - data.setDataString(1, (String)source.get(NodeComponentTable.COLUMN_AGG)); + data.setDataInteger(0, ((Number)source.get(NodeComponentTable.COLUMN_COMPONENT_ID)).intValue()); + data.setDataString(1, (String)source.get(NodeComponentTable.COLUMN_COMPONENT_NAME)); + data.setDataInteger(1, ((Number)source.get(NodeComponentTable.COLUMN_PEER_ID)).intValue()); + data.setDataString(2, (String)source.get(NodeComponentTable.COLUMN_PEER)); data.setDataLong(0, (Long)source.get(NodeComponentTable.COLUMN_TIME_BUCKET)); return data; } else { @@ -31,7 +34,10 @@ public class NodeComponentEsDAO extends EsDAO implements INodeComponentDAO, IPer @Override public IndexRequestBuilder prepareBatchInsert(Data data) { Map source = new HashMap<>(); - source.put(NodeComponentTable.COLUMN_AGG, data.getDataString(1)); + source.put(NodeComponentTable.COLUMN_COMPONENT_ID, data.getDataInteger(0)); + source.put(NodeComponentTable.COLUMN_COMPONENT_NAME, data.getDataString(1)); + source.put(NodeComponentTable.COLUMN_PEER_ID, data.getDataInteger(1)); + source.put(NodeComponentTable.COLUMN_PEER, data.getDataString(2)); source.put(NodeComponentTable.COLUMN_TIME_BUCKET, data.getDataLong(0)); return getClient().prepareIndex(NodeComponentTable.TABLE, data.getDataString(0)).setSource(source); @@ -39,7 +45,10 @@ public class NodeComponentEsDAO extends EsDAO implements INodeComponentDAO, IPer @Override public UpdateRequestBuilder prepareBatchUpdate(Data data) { Map source = new HashMap<>(); - source.put(NodeComponentTable.COLUMN_AGG, data.getDataString(1)); + source.put(NodeComponentTable.COLUMN_COMPONENT_ID, data.getDataInteger(0)); + source.put(NodeComponentTable.COLUMN_COMPONENT_NAME, data.getDataString(1)); + source.put(NodeComponentTable.COLUMN_PEER_ID, data.getDataInteger(1)); + source.put(NodeComponentTable.COLUMN_PEER, data.getDataString(2)); source.put(NodeComponentTable.COLUMN_TIME_BUCKET, data.getDataLong(0)); return getClient().prepareUpdate(NodeComponentTable.TABLE, data.getDataString(0)).setDoc(source); diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/node/component/define/NodeComponentEsTableDefine.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/node/component/define/NodeComponentEsTableDefine.java index ebcc93646813..1ded3d4feb85 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/node/component/define/NodeComponentEsTableDefine.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/node/component/define/NodeComponentEsTableDefine.java @@ -1,8 +1,8 @@ package org.skywalking.apm.collector.agentstream.worker.node.component.define; +import org.skywalking.apm.collector.storage.define.node.NodeComponentTable; import org.skywalking.apm.collector.storage.elasticsearch.define.ElasticSearchColumnDefine; import org.skywalking.apm.collector.storage.elasticsearch.define.ElasticSearchTableDefine; -import org.skywalking.apm.collector.storage.define.node.NodeComponentTable; /** * @author pengys5 @@ -26,7 +26,10 @@ public NodeComponentEsTableDefine() { } @Override public void initialize() { - addColumn(new ElasticSearchColumnDefine(NodeComponentTable.COLUMN_AGG, ElasticSearchColumnDefine.Type.Keyword.name())); + addColumn(new ElasticSearchColumnDefine(NodeComponentTable.COLUMN_COMPONENT_ID, ElasticSearchColumnDefine.Type.Integer.name())); + addColumn(new ElasticSearchColumnDefine(NodeComponentTable.COLUMN_COMPONENT_NAME, ElasticSearchColumnDefine.Type.Keyword.name())); + addColumn(new ElasticSearchColumnDefine(NodeComponentTable.COLUMN_PEER_ID, ElasticSearchColumnDefine.Type.Integer.name())); + addColumn(new ElasticSearchColumnDefine(NodeComponentTable.COLUMN_PEER, ElasticSearchColumnDefine.Type.Keyword.name())); addColumn(new ElasticSearchColumnDefine(NodeComponentTable.COLUMN_TIME_BUCKET, ElasticSearchColumnDefine.Type.Long.name())); } } diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/node/component/define/NodeComponentH2TableDefine.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/node/component/define/NodeComponentH2TableDefine.java index ea6bf09630b4..c38535ea2edd 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/node/component/define/NodeComponentH2TableDefine.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/node/component/define/NodeComponentH2TableDefine.java @@ -1,8 +1,8 @@ package org.skywalking.apm.collector.agentstream.worker.node.component.define; +import org.skywalking.apm.collector.storage.define.node.NodeComponentTable; import org.skywalking.apm.collector.storage.h2.define.H2ColumnDefine; import org.skywalking.apm.collector.storage.h2.define.H2TableDefine; -import org.skywalking.apm.collector.storage.define.node.NodeComponentTable; /** * @author pengys5 @@ -15,7 +15,10 @@ public NodeComponentH2TableDefine() { @Override public void initialize() { addColumn(new H2ColumnDefine(NodeComponentTable.COLUMN_ID, H2ColumnDefine.Type.Varchar.name())); - addColumn(new H2ColumnDefine(NodeComponentTable.COLUMN_AGG, H2ColumnDefine.Type.Varchar.name())); + addColumn(new H2ColumnDefine(NodeComponentTable.COLUMN_COMPONENT_ID, H2ColumnDefine.Type.Int.name())); + addColumn(new H2ColumnDefine(NodeComponentTable.COLUMN_COMPONENT_NAME, H2ColumnDefine.Type.Varchar.name())); + addColumn(new H2ColumnDefine(NodeComponentTable.COLUMN_PEER_ID, H2ColumnDefine.Type.Int.name())); + addColumn(new H2ColumnDefine(NodeComponentTable.COLUMN_PEER, H2ColumnDefine.Type.Varchar.name())); addColumn(new H2ColumnDefine(NodeComponentTable.COLUMN_TIME_BUCKET, H2ColumnDefine.Type.Bigint.name())); } } diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/node/mapping/NodeMappingSpanListener.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/node/mapping/NodeMappingSpanListener.java index 608c0d26753d..c7d3a91aaff0 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/node/mapping/NodeMappingSpanListener.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/node/mapping/NodeMappingSpanListener.java @@ -2,13 +2,12 @@ import java.util.ArrayList; import java.util.List; -import org.skywalking.apm.collector.core.util.Const; -import org.skywalking.apm.collector.storage.define.node.NodeMappingDataDefine; import org.skywalking.apm.collector.agentstream.worker.segment.FirstSpanListener; import org.skywalking.apm.collector.agentstream.worker.segment.RefsListener; -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.Const; +import org.skywalking.apm.collector.core.util.TimeBucketUtils; +import org.skywalking.apm.collector.storage.define.node.NodeMappingDataDefine; import org.skywalking.apm.collector.stream.StreamModuleContext; import org.skywalking.apm.collector.stream.StreamModuleGroupDefine; import org.skywalking.apm.collector.stream.worker.WorkerInvokeException; @@ -25,19 +24,27 @@ public class NodeMappingSpanListener implements RefsListener, FirstSpanListener private final Logger logger = LoggerFactory.getLogger(NodeMappingSpanListener.class); - private List nodeMappings = new ArrayList<>(); + private List nodeMappings = new ArrayList<>(); private long timeBucket; @Override public void parseRef(TraceSegmentReference reference, int applicationId, int applicationInstanceId, String segmentId) { logger.debug("node mapping listener parse reference"); - String peers = reference.getNetworkAddress(); + NodeMappingDataDefine.NodeMapping nodeMapping = new NodeMappingDataDefine.NodeMapping(); + nodeMapping.setApplicationId(applicationId); + nodeMapping.setAddressId(reference.getNetworkAddressId()); + + String id = String.valueOf(applicationId); if (reference.getNetworkAddressId() != 0) { - peers = ExchangeMarkUtils.INSTANCE.buildMarkedID(reference.getNetworkAddressId()); + nodeMapping.setAddress(Const.EMPTY_STRING); + id = id + Const.ID_SPLIT + String.valueOf(nodeMapping.getAddressId()); + } else { + id = id + Const.ID_SPLIT + reference.getNetworkAddress(); + nodeMapping.setAddress(reference.getNetworkAddress()); } - String agg = ExchangeMarkUtils.INSTANCE.buildMarkedID(applicationId) + Const.ID_SPLIT + peers; - nodeMappings.add(agg); + nodeMapping.setId(id); + nodeMappings.add(nodeMapping); } @Override @@ -48,13 +55,11 @@ public void parseFirst(SpanObject spanObject, int applicationId, int application @Override public void build() { logger.debug("node mapping listener build"); StreamModuleContext context = (StreamModuleContext)CollectorContextHelper.INSTANCE.getContext(StreamModuleGroupDefine.GROUP_NAME); - for (String agg : nodeMappings) { - NodeMappingDataDefine.NodeMapping nodeMapping = new NodeMappingDataDefine.NodeMapping(); - nodeMapping.setId(timeBucket + Const.ID_SPLIT + agg); - nodeMapping.setAgg(agg); - nodeMapping.setTimeBucket(timeBucket); + for (NodeMappingDataDefine.NodeMapping nodeMapping : nodeMappings) { try { + nodeMapping.setId(timeBucket + Const.ID_SPLIT + nodeMapping.getId()); + nodeMapping.setTimeBucket(timeBucket); logger.debug("send to node mapping aggregation worker, id: {}", nodeMapping.getId()); context.getClusterWorkerContext().lookup(NodeMappingAggregationWorker.WorkerRole.INSTANCE).tell(nodeMapping.toData()); } catch (WorkerInvokeException | WorkerNotFoundException e) { diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/node/mapping/dao/NodeMappingEsDAO.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/node/mapping/dao/NodeMappingEsDAO.java index 907be8c8e49a..1afd946de7e7 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/node/mapping/dao/NodeMappingEsDAO.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/node/mapping/dao/NodeMappingEsDAO.java @@ -5,11 +5,11 @@ import org.elasticsearch.action.get.GetResponse; import org.elasticsearch.action.index.IndexRequestBuilder; import org.elasticsearch.action.update.UpdateRequestBuilder; +import org.skywalking.apm.collector.core.stream.Data; +import org.skywalking.apm.collector.storage.define.DataDefine; import org.skywalking.apm.collector.storage.define.node.NodeMappingTable; import org.skywalking.apm.collector.storage.elasticsearch.dao.EsDAO; import org.skywalking.apm.collector.stream.worker.impl.dao.IPersistenceDAO; -import org.skywalking.apm.collector.core.stream.Data; -import org.skywalking.apm.collector.storage.define.DataDefine; /** * @author pengys5 @@ -21,8 +21,10 @@ public class NodeMappingEsDAO extends EsDAO implements INodeMappingDAO, IPersist if (getResponse.isExists()) { Data data = dataDefine.build(id); Map source = getResponse.getSource(); - data.setDataString(1, (String)source.get(NodeMappingTable.COLUMN_AGG)); - data.setDataLong(0, (Long)source.get(NodeMappingTable.COLUMN_TIME_BUCKET)); + data.setDataInteger(0, ((Number)source.get(NodeMappingTable.COLUMN_APPLICATION_ID)).intValue()); + data.setDataInteger(1, ((Number)source.get(NodeMappingTable.COLUMN_ADDRESS_ID)).intValue()); + data.setDataString(1, (String)source.get(NodeMappingTable.COLUMN_ADDRESS)); + data.setDataLong(0, ((Number)source.get(NodeMappingTable.COLUMN_TIME_BUCKET)).longValue()); return data; } else { return null; @@ -31,7 +33,9 @@ public class NodeMappingEsDAO extends EsDAO implements INodeMappingDAO, IPersist @Override public IndexRequestBuilder prepareBatchInsert(Data data) { Map source = new HashMap<>(); - source.put(NodeMappingTable.COLUMN_AGG, data.getDataString(1)); + source.put(NodeMappingTable.COLUMN_APPLICATION_ID, data.getDataInteger(0)); + source.put(NodeMappingTable.COLUMN_ADDRESS_ID, data.getDataInteger(1)); + source.put(NodeMappingTable.COLUMN_ADDRESS, data.getDataString(1)); source.put(NodeMappingTable.COLUMN_TIME_BUCKET, data.getDataLong(0)); return getClient().prepareIndex(NodeMappingTable.TABLE, data.getDataString(0)).setSource(source); @@ -39,7 +43,9 @@ public class NodeMappingEsDAO extends EsDAO implements INodeMappingDAO, IPersist @Override public UpdateRequestBuilder prepareBatchUpdate(Data data) { Map source = new HashMap<>(); - source.put(NodeMappingTable.COLUMN_AGG, data.getDataString(1)); + source.put(NodeMappingTable.COLUMN_APPLICATION_ID, data.getDataInteger(0)); + source.put(NodeMappingTable.COLUMN_ADDRESS_ID, data.getDataInteger(1)); + source.put(NodeMappingTable.COLUMN_ADDRESS, data.getDataString(1)); source.put(NodeMappingTable.COLUMN_TIME_BUCKET, data.getDataLong(0)); return getClient().prepareUpdate(NodeMappingTable.TABLE, data.getDataString(0)).setDoc(source); diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/node/mapping/define/NodeMappingEsTableDefine.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/node/mapping/define/NodeMappingEsTableDefine.java index 978f2e1ebda5..e1027b39265d 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/node/mapping/define/NodeMappingEsTableDefine.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/node/mapping/define/NodeMappingEsTableDefine.java @@ -1,8 +1,8 @@ package org.skywalking.apm.collector.agentstream.worker.node.mapping.define; +import org.skywalking.apm.collector.storage.define.node.NodeMappingTable; import org.skywalking.apm.collector.storage.elasticsearch.define.ElasticSearchColumnDefine; import org.skywalking.apm.collector.storage.elasticsearch.define.ElasticSearchTableDefine; -import org.skywalking.apm.collector.storage.define.node.NodeMappingTable; /** * @author pengys5 @@ -26,7 +26,9 @@ public NodeMappingEsTableDefine() { } @Override public void initialize() { - addColumn(new ElasticSearchColumnDefine(NodeMappingTable.COLUMN_AGG, ElasticSearchColumnDefine.Type.Keyword.name())); + addColumn(new ElasticSearchColumnDefine(NodeMappingTable.COLUMN_APPLICATION_ID, ElasticSearchColumnDefine.Type.Integer.name())); + addColumn(new ElasticSearchColumnDefine(NodeMappingTable.COLUMN_ADDRESS_ID, ElasticSearchColumnDefine.Type.Integer.name())); + addColumn(new ElasticSearchColumnDefine(NodeMappingTable.COLUMN_ADDRESS, ElasticSearchColumnDefine.Type.Keyword.name())); addColumn(new ElasticSearchColumnDefine(NodeMappingTable.COLUMN_TIME_BUCKET, ElasticSearchColumnDefine.Type.Long.name())); } } diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/node/mapping/define/NodeMappingH2TableDefine.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/node/mapping/define/NodeMappingH2TableDefine.java index ddd7a5b6577c..721b323b127c 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/node/mapping/define/NodeMappingH2TableDefine.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/node/mapping/define/NodeMappingH2TableDefine.java @@ -1,8 +1,8 @@ package org.skywalking.apm.collector.agentstream.worker.node.mapping.define; +import org.skywalking.apm.collector.storage.define.node.NodeMappingTable; import org.skywalking.apm.collector.storage.h2.define.H2ColumnDefine; import org.skywalking.apm.collector.storage.h2.define.H2TableDefine; -import org.skywalking.apm.collector.storage.define.node.NodeMappingTable; /** * @author pengys5 @@ -15,7 +15,9 @@ public NodeMappingH2TableDefine() { @Override public void initialize() { addColumn(new H2ColumnDefine(NodeMappingTable.COLUMN_ID, H2ColumnDefine.Type.Varchar.name())); - addColumn(new H2ColumnDefine(NodeMappingTable.COLUMN_AGG, H2ColumnDefine.Type.Varchar.name())); + addColumn(new H2ColumnDefine(NodeMappingTable.COLUMN_APPLICATION_ID, H2ColumnDefine.Type.Int.name())); + addColumn(new H2ColumnDefine(NodeMappingTable.COLUMN_ADDRESS_ID, H2ColumnDefine.Type.Int.name())); + addColumn(new H2ColumnDefine(NodeMappingTable.COLUMN_ADDRESS, H2ColumnDefine.Type.Varchar.name())); addColumn(new H2ColumnDefine(NodeMappingTable.COLUMN_TIME_BUCKET, H2ColumnDefine.Type.Bigint.name())); } } diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/summary/NodeRefSumAggregationWorker.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/NodeReferenceAggregationWorker.java similarity index 70% rename from apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/summary/NodeRefSumAggregationWorker.java rename to apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/NodeReferenceAggregationWorker.java index 7fcb633ca519..ce0f6cc63fd4 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/summary/NodeRefSumAggregationWorker.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/NodeReferenceAggregationWorker.java @@ -1,6 +1,6 @@ -package org.skywalking.apm.collector.agentstream.worker.noderef.summary; +package org.skywalking.apm.collector.agentstream.worker.noderef; -import org.skywalking.apm.collector.storage.define.noderef.NodeRefSumDataDefine; +import org.skywalking.apm.collector.storage.define.noderef.NodeReferenceDataDefine; import org.skywalking.apm.collector.stream.worker.AbstractLocalAsyncWorkerProvider; import org.skywalking.apm.collector.stream.worker.ClusterWorkerContext; import org.skywalking.apm.collector.stream.worker.ProviderNotFoundException; @@ -15,9 +15,9 @@ /** * @author pengys5 */ -public class NodeRefSumAggregationWorker extends AggregationWorker { +public class NodeReferenceAggregationWorker extends AggregationWorker { - public NodeRefSumAggregationWorker(Role role, ClusterWorkerContext clusterContext) { + public NodeReferenceAggregationWorker(Role role, ClusterWorkerContext clusterContext) { super(role, clusterContext); } @@ -26,18 +26,18 @@ public NodeRefSumAggregationWorker(Role role, ClusterWorkerContext clusterContex } @Override protected WorkerRefs nextWorkRef(String id) throws WorkerNotFoundException { - return getClusterContext().lookup(NodeRefSumRemoteWorker.WorkerRole.INSTANCE); + return getClusterContext().lookup(NodeReferenceRemoteWorker.WorkerRole.INSTANCE); } - public static class Factory extends AbstractLocalAsyncWorkerProvider { + public static class Factory extends AbstractLocalAsyncWorkerProvider { @Override public Role role() { return WorkerRole.INSTANCE; } @Override - public NodeRefSumAggregationWorker workerInstance(ClusterWorkerContext clusterContext) { - return new NodeRefSumAggregationWorker(role(), clusterContext); + public NodeReferenceAggregationWorker workerInstance(ClusterWorkerContext clusterContext) { + return new NodeReferenceAggregationWorker(role(), clusterContext); } @Override @@ -51,7 +51,7 @@ public enum WorkerRole implements Role { @Override public String roleName() { - return NodeRefSumAggregationWorker.class.getSimpleName(); + return NodeReferenceAggregationWorker.class.getSimpleName(); } @Override @@ -60,7 +60,7 @@ public WorkerSelector workerSelector() { } @Override public DataDefine dataDefine() { - return new NodeRefSumDataDefine(); + return new NodeReferenceDataDefine(); } } } diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/reference/NodeRefPersistenceWorker.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/NodeReferencePersistenceWorker.java similarity index 72% rename from apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/reference/NodeRefPersistenceWorker.java rename to apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/NodeReferencePersistenceWorker.java index 35089a74f150..885921b4cb10 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/reference/NodeRefPersistenceWorker.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/NodeReferencePersistenceWorker.java @@ -1,24 +1,24 @@ -package org.skywalking.apm.collector.agentstream.worker.noderef.reference; +package org.skywalking.apm.collector.agentstream.worker.noderef; -import org.skywalking.apm.collector.agentstream.worker.noderef.reference.dao.INodeReferenceDAO; -import org.skywalking.apm.collector.storage.define.noderef.NodeRefDataDefine; +import org.skywalking.apm.collector.agentstream.worker.noderef.dao.INodeReferenceDAO; import org.skywalking.apm.collector.storage.dao.DAOContainer; +import org.skywalking.apm.collector.storage.define.DataDefine; +import org.skywalking.apm.collector.storage.define.noderef.NodeReferenceDataDefine; import org.skywalking.apm.collector.stream.worker.AbstractLocalAsyncWorkerProvider; import org.skywalking.apm.collector.stream.worker.ClusterWorkerContext; import org.skywalking.apm.collector.stream.worker.ProviderNotFoundException; import org.skywalking.apm.collector.stream.worker.Role; import org.skywalking.apm.collector.stream.worker.impl.PersistenceWorker; import org.skywalking.apm.collector.stream.worker.impl.dao.IPersistenceDAO; -import org.skywalking.apm.collector.storage.define.DataDefine; import org.skywalking.apm.collector.stream.worker.selector.HashCodeSelector; import org.skywalking.apm.collector.stream.worker.selector.WorkerSelector; /** * @author pengys5 */ -public class NodeRefPersistenceWorker extends PersistenceWorker { +public class NodeReferencePersistenceWorker extends PersistenceWorker { - public NodeRefPersistenceWorker(Role role, ClusterWorkerContext clusterContext) { + public NodeReferencePersistenceWorker(Role role, ClusterWorkerContext clusterContext) { super(role, clusterContext); } @@ -34,15 +34,15 @@ public NodeRefPersistenceWorker(Role role, ClusterWorkerContext clusterContext) return (IPersistenceDAO)DAOContainer.INSTANCE.get(INodeReferenceDAO.class.getName()); } - public static class Factory extends AbstractLocalAsyncWorkerProvider { + public static class Factory extends AbstractLocalAsyncWorkerProvider { @Override public Role role() { return WorkerRole.INSTANCE; } @Override - public NodeRefPersistenceWorker workerInstance(ClusterWorkerContext clusterContext) { - return new NodeRefPersistenceWorker(role(), clusterContext); + public NodeReferencePersistenceWorker workerInstance(ClusterWorkerContext clusterContext) { + return new NodeReferencePersistenceWorker(role(), clusterContext); } @Override @@ -56,7 +56,7 @@ public enum WorkerRole implements Role { @Override public String roleName() { - return NodeRefPersistenceWorker.class.getSimpleName(); + return NodeReferencePersistenceWorker.class.getSimpleName(); } @Override @@ -65,7 +65,7 @@ public WorkerSelector workerSelector() { } @Override public DataDefine dataDefine() { - return new NodeRefDataDefine(); + return new NodeReferenceDataDefine(); } } } diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/summary/NodeRefSumRemoteWorker.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/NodeReferenceRemoteWorker.java similarity index 68% rename from apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/summary/NodeRefSumRemoteWorker.java rename to apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/NodeReferenceRemoteWorker.java index 14ee311718cb..64c6a54f8165 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/summary/NodeRefSumRemoteWorker.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/NodeReferenceRemoteWorker.java @@ -1,6 +1,6 @@ -package org.skywalking.apm.collector.agentstream.worker.noderef.summary; +package org.skywalking.apm.collector.agentstream.worker.noderef; -import org.skywalking.apm.collector.storage.define.noderef.NodeRefSumDataDefine; +import org.skywalking.apm.collector.storage.define.noderef.NodeReferenceDataDefine; import org.skywalking.apm.collector.stream.worker.AbstractRemoteWorker; import org.skywalking.apm.collector.stream.worker.AbstractRemoteWorkerProvider; import org.skywalking.apm.collector.stream.worker.ClusterWorkerContext; @@ -14,9 +14,9 @@ /** * @author pengys5 */ -public class NodeRefSumRemoteWorker extends AbstractRemoteWorker { +public class NodeReferenceRemoteWorker extends AbstractRemoteWorker { - protected NodeRefSumRemoteWorker(Role role, ClusterWorkerContext clusterContext) { + protected NodeReferenceRemoteWorker(Role role, ClusterWorkerContext clusterContext) { super(role, clusterContext); } @@ -25,18 +25,18 @@ protected NodeRefSumRemoteWorker(Role role, ClusterWorkerContext clusterContext) } @Override protected void onWork(Object message) throws WorkerException { - getClusterContext().lookup(NodeRefSumPersistenceWorker.WorkerRole.INSTANCE).tell(message); + getClusterContext().lookup(NodeReferencePersistenceWorker.WorkerRole.INSTANCE).tell(message); } - public static class Factory extends AbstractRemoteWorkerProvider { + public static class Factory extends AbstractRemoteWorkerProvider { @Override public Role role() { return WorkerRole.INSTANCE; } @Override - public NodeRefSumRemoteWorker workerInstance(ClusterWorkerContext clusterContext) { - return new NodeRefSumRemoteWorker(role(), clusterContext); + public NodeReferenceRemoteWorker workerInstance(ClusterWorkerContext clusterContext) { + return new NodeReferenceRemoteWorker(role(), clusterContext); } } @@ -45,7 +45,7 @@ public enum WorkerRole implements Role { @Override public String roleName() { - return NodeRefSumRemoteWorker.class.getSimpleName(); + return NodeReferenceRemoteWorker.class.getSimpleName(); } @Override @@ -54,7 +54,7 @@ public WorkerSelector workerSelector() { } @Override public DataDefine dataDefine() { - return new NodeRefSumDataDefine(); + return new NodeReferenceDataDefine(); } } } diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/summary/NodeRefSumSpanListener.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/NodeReferenceSpanListener.java similarity index 53% rename from apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/summary/NodeRefSumSpanListener.java rename to apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/NodeReferenceSpanListener.java index 4742fbbedf3c..a5646ac5a258 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/summary/NodeRefSumSpanListener.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/NodeReferenceSpanListener.java @@ -1,17 +1,16 @@ -package org.skywalking.apm.collector.agentstream.worker.noderef.summary; +package org.skywalking.apm.collector.agentstream.worker.noderef; import java.util.ArrayList; import java.util.List; -import org.skywalking.apm.collector.core.util.Const; import org.skywalking.apm.collector.agentstream.worker.cache.InstanceCache; -import org.skywalking.apm.collector.storage.define.noderef.NodeRefSumDataDefine; 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.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.Const; +import org.skywalking.apm.collector.core.util.TimeBucketUtils; +import org.skywalking.apm.collector.storage.define.noderef.NodeReferenceDataDefine; import org.skywalking.apm.collector.stream.StreamModuleContext; import org.skywalking.apm.collector.stream.StreamModuleGroupDefine; import org.skywalking.apm.collector.stream.worker.WorkerInvokeException; @@ -24,13 +23,13 @@ /** * @author pengys5 */ -public class NodeRefSumSpanListener implements EntrySpanListener, ExitSpanListener, FirstSpanListener, RefsListener { +public class NodeReferenceSpanListener implements EntrySpanListener, ExitSpanListener, FirstSpanListener, RefsListener { - private final Logger logger = LoggerFactory.getLogger(NodeRefSumSpanListener.class); + 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; @@ -39,42 +38,49 @@ public class NodeRefSumSpanListener implements EntrySpanListener, ExitSpanListen @Override public void parseExit(SpanObject spanObject, int applicationId, int applicationInstanceId, String segmentId) { - String front = ExchangeMarkUtils.INSTANCE.buildMarkedID(applicationId); - String behind = spanObject.getPeer(); + NodeReferenceDataDefine.NodeReferenceSum referenceSum = new NodeReferenceDataDefine.NodeReferenceSum(); + referenceSum.setApplicationId(applicationId); + referenceSum.setBehindApplicationId(spanObject.getPeerId()); + + String id = String.valueOf(applicationId); if (spanObject.getPeerId() != 0) { - behind = ExchangeMarkUtils.INSTANCE.buildMarkedID(spanObject.getPeerId()); + referenceSum.setBehindPeer(Const.EMPTY_STRING); + id = id + Const.ID_SPLIT + String.valueOf(spanObject.getPeerId()); + } else { + referenceSum.setBehindPeer(spanObject.getPeer()); + id = id + Const.ID_SPLIT + spanObject.getPeer(); } - - String agg = front + Const.ID_SPLIT + behind; - nodeExitReferences.add(buildNodeRefSum(spanObject.getStartTime(), spanObject.getEndTime(), agg, spanObject.getIsError())); + referenceSum.setId(id); + nodeExitReferences.add(buildNodeRefSum(referenceSum, spanObject.getStartTime(), spanObject.getEndTime(), spanObject.getIsError())); } @Override public void parseEntry(SpanObject spanObject, int applicationId, int applicationInstanceId, String segmentId) { - String behind = ExchangeMarkUtils.INSTANCE.buildMarkedID(applicationId); - String front = ExchangeMarkUtils.INSTANCE.buildMarkedID(Const.USER_ID); - String agg = front + Const.ID_SPLIT + behind; - nodeEntryReferences.add(buildNodeRefSum(spanObject.getStartTime(), spanObject.getEndTime(), agg, spanObject.getIsError())); + NodeReferenceDataDefine.NodeReferenceSum referenceSum = new NodeReferenceDataDefine.NodeReferenceSum(); + referenceSum.setApplicationId(Const.USER_ID); + referenceSum.setBehindApplicationId(applicationId); + referenceSum.setBehindPeer(Const.EMPTY_STRING); + + 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 NodeRefSumDataDefine.NodeReferenceSum buildNodeRefSum(long startTime, long endTime, String agg, - boolean isError) { - NodeRefSumDataDefine.NodeReferenceSum referenceSum = new NodeRefSumDataDefine.NodeReferenceSum(); - referenceSum.setAgg(agg); - + private NodeReferenceDataDefine.NodeReferenceSum buildNodeRefSum(NodeReferenceDataDefine.NodeReferenceSum referenceSum, + long startTime, long endTime, boolean isError) { long cost = endTime - startTime; if (cost <= 1000 && !isError) { - referenceSum.setOneSecondLess(1L); + referenceSum.setS1LTE(1); } else if (1000 < cost && cost <= 3000 && !isError) { - referenceSum.setThreeSecondLess(1L); + referenceSum.setS3LTE(1); } else if (3000 < cost && cost <= 5000 && !isError) { - referenceSum.setFiveSecondLess(1L); + referenceSum.setS5LTE(1); } else if (5000 < cost && !isError) { - referenceSum.setFiveSecondGreater(1L); + referenceSum.setS5GT(1); } else { - referenceSum.setError(1L); + referenceSum.setError(1); } - referenceSum.setSummary(1L); + referenceSum.setSummary(1); return referenceSum; } @@ -90,13 +96,16 @@ public void parseFirst(SpanObject spanObject, int applicationId, int application String segmentId) { int parentApplicationId = InstanceCache.get(reference.getParentApplicationInstanceId()); - String front = ExchangeMarkUtils.INSTANCE.buildMarkedID(parentApplicationId); - String behind = ExchangeMarkUtils.INSTANCE.buildMarkedID(applicationId); + NodeReferenceDataDefine.NodeReferenceSum referenceSum = new NodeReferenceDataDefine.NodeReferenceSum(); + referenceSum.setApplicationId(parentApplicationId); + referenceSum.setBehindApplicationId(applicationId); + referenceSum.setBehindPeer(Const.EMPTY_STRING); - String agg = front + Const.ID_SPLIT + behind; + String id = String.valueOf(parentApplicationId) + Const.ID_SPLIT + String.valueOf(applicationId); + referenceSum.setId(id); hasReference = true; - nodeReferences.add(agg); + nodeReferences.add(referenceSum); } @Override public void build() { @@ -105,18 +114,18 @@ public void parseFirst(SpanObject spanObject, int applicationId, int application if (!hasReference) { nodeExitReferences.addAll(nodeEntryReferences); } else { - nodeReferences.forEach(agg -> { - nodeExitReferences.add(buildNodeRefSum(startTime, endTime, agg, isError)); + nodeReferences.forEach(referenceSum -> { + nodeExitReferences.add(buildNodeRefSum(referenceSum, startTime, endTime, isError)); }); } - for (NodeRefSumDataDefine.NodeReferenceSum referenceSum : nodeExitReferences) { - referenceSum.setId(timeBucket + Const.ID_SPLIT + referenceSum.getAgg()); + for (NodeReferenceDataDefine.NodeReferenceSum referenceSum : nodeExitReferences) { + referenceSum.setId(timeBucket + Const.ID_SPLIT + referenceSum.getId()); referenceSum.setTimeBucket(timeBucket); try { logger.debug("send to node reference summary aggregation worker, id: {}", referenceSum.getId()); - context.getClusterWorkerContext().lookup(NodeRefSumAggregationWorker.WorkerRole.INSTANCE).tell(referenceSum.toData()); + context.getClusterWorkerContext().lookup(NodeReferenceAggregationWorker.WorkerRole.INSTANCE).tell(referenceSum.toData()); } catch (WorkerInvokeException | WorkerNotFoundException e) { logger.error(e.getMessage(), e); } diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/reference/dao/INodeReferenceDAO.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/dao/INodeReferenceDAO.java similarity index 89% rename from apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/reference/dao/INodeReferenceDAO.java rename to apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/dao/INodeReferenceDAO.java index 7f2406d1e9bd..80ce1d386cbf 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/reference/dao/INodeReferenceDAO.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/dao/INodeReferenceDAO.java @@ -1,4 +1,4 @@ -package org.skywalking.apm.collector.agentstream.worker.noderef.reference.dao; +package org.skywalking.apm.collector.agentstream.worker.noderef.dao; /** * @author pengys5 diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/dao/NodeReferenceEsDAO.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/dao/NodeReferenceEsDAO.java new file mode 100644 index 000000000000..dc23324e5c73 --- /dev/null +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/dao/NodeReferenceEsDAO.java @@ -0,0 +1,71 @@ +package org.skywalking.apm.collector.agentstream.worker.noderef.dao; + +import java.util.HashMap; +import java.util.Map; +import org.elasticsearch.action.get.GetResponse; +import org.elasticsearch.action.index.IndexRequestBuilder; +import org.elasticsearch.action.update.UpdateRequestBuilder; +import org.skywalking.apm.collector.core.stream.Data; +import org.skywalking.apm.collector.storage.define.DataDefine; +import org.skywalking.apm.collector.storage.define.noderef.NodeReferenceTable; +import org.skywalking.apm.collector.storage.elasticsearch.dao.EsDAO; +import org.skywalking.apm.collector.stream.worker.impl.dao.IPersistenceDAO; + +/** + * @author pengys5 + */ +public class NodeReferenceEsDAO extends EsDAO implements INodeReferenceDAO, IPersistenceDAO { + + @Override public Data get(String id, DataDefine dataDefine) { + GetResponse getResponse = getClient().prepareGet(NodeReferenceTable.TABLE, id).get(); + if (getResponse.isExists()) { + Data data = dataDefine.build(id); + Map source = getResponse.getSource(); + data.setDataInteger(0, ((Number)source.get(NodeReferenceTable.COLUMN_FRONT_APPLICATION_ID)).intValue()); + data.setDataInteger(1, ((Number)source.get(NodeReferenceTable.COLUMN_BEHIND_APPLICATION_ID)).intValue()); + data.setDataString(1, (String)source.get(NodeReferenceTable.COLUMN_BEHIND_PEER)); + data.setDataInteger(2, ((Number)source.get(NodeReferenceTable.COLUMN_S1_LTE)).intValue()); + data.setDataInteger(3, ((Number)source.get(NodeReferenceTable.COLUMN_S3_LTE)).intValue()); + data.setDataInteger(4, ((Number)source.get(NodeReferenceTable.COLUMN_S5_LTE)).intValue()); + data.setDataInteger(5, ((Number)source.get(NodeReferenceTable.COLUMN_S5_GT)).intValue()); + data.setDataInteger(6, ((Number)source.get(NodeReferenceTable.COLUMN_SUMMARY)).intValue()); + data.setDataInteger(7, ((Number)source.get(NodeReferenceTable.COLUMN_ERROR)).intValue()); + data.setDataLong(0, ((Number)source.get(NodeReferenceTable.COLUMN_TIME_BUCKET)).longValue()); + return data; + } else { + return null; + } + } + + @Override public IndexRequestBuilder prepareBatchInsert(Data data) { + Map source = new HashMap<>(); + source.put(NodeReferenceTable.COLUMN_FRONT_APPLICATION_ID, data.getDataInteger(0)); + source.put(NodeReferenceTable.COLUMN_BEHIND_APPLICATION_ID, data.getDataInteger(1)); + source.put(NodeReferenceTable.COLUMN_BEHIND_PEER, data.getDataString(1)); + source.put(NodeReferenceTable.COLUMN_S1_LTE, data.getDataInteger(2)); + source.put(NodeReferenceTable.COLUMN_S3_LTE, data.getDataInteger(3)); + source.put(NodeReferenceTable.COLUMN_S5_LTE, data.getDataInteger(4)); + source.put(NodeReferenceTable.COLUMN_S5_GT, data.getDataInteger(5)); + source.put(NodeReferenceTable.COLUMN_SUMMARY, data.getDataInteger(6)); + source.put(NodeReferenceTable.COLUMN_ERROR, data.getDataInteger(7)); + source.put(NodeReferenceTable.COLUMN_TIME_BUCKET, data.getDataLong(0)); + + return getClient().prepareIndex(NodeReferenceTable.TABLE, data.getDataString(0)).setSource(source); + } + + @Override public UpdateRequestBuilder prepareBatchUpdate(Data data) { + Map source = new HashMap<>(); + source.put(NodeReferenceTable.COLUMN_FRONT_APPLICATION_ID, data.getDataInteger(0)); + source.put(NodeReferenceTable.COLUMN_BEHIND_APPLICATION_ID, data.getDataInteger(1)); + source.put(NodeReferenceTable.COLUMN_BEHIND_PEER, data.getDataString(1)); + source.put(NodeReferenceTable.COLUMN_S1_LTE, data.getDataInteger(2)); + source.put(NodeReferenceTable.COLUMN_S3_LTE, data.getDataInteger(3)); + source.put(NodeReferenceTable.COLUMN_S5_LTE, data.getDataInteger(4)); + source.put(NodeReferenceTable.COLUMN_S5_GT, data.getDataInteger(5)); + source.put(NodeReferenceTable.COLUMN_SUMMARY, data.getDataInteger(6)); + source.put(NodeReferenceTable.COLUMN_ERROR, data.getDataInteger(7)); + source.put(NodeReferenceTable.COLUMN_TIME_BUCKET, data.getDataLong(0)); + + return getClient().prepareUpdate(NodeReferenceTable.TABLE, data.getDataString(0)).setDoc(source); + } +} diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/summary/dao/NodeRefSumH2DAO.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/dao/NodeReferenceH2DAO.java similarity index 64% rename from apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/summary/dao/NodeRefSumH2DAO.java rename to apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/dao/NodeReferenceH2DAO.java index 7483c8a82619..30a206c3ec50 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/summary/dao/NodeRefSumH2DAO.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/dao/NodeReferenceH2DAO.java @@ -1,9 +1,9 @@ -package org.skywalking.apm.collector.agentstream.worker.noderef.summary.dao; +package org.skywalking.apm.collector.agentstream.worker.noderef.dao; import org.skywalking.apm.collector.storage.h2.dao.H2DAO; /** * @author pengys5 */ -public class NodeRefSumH2DAO extends H2DAO implements INodeRefSumDAO { +public class NodeReferenceH2DAO extends H2DAO implements INodeReferenceDAO { } diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/define/NodeReferenceEsTableDefine.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/define/NodeReferenceEsTableDefine.java new file mode 100644 index 000000000000..da96dc16977b --- /dev/null +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/define/NodeReferenceEsTableDefine.java @@ -0,0 +1,40 @@ +package org.skywalking.apm.collector.agentstream.worker.noderef.define; + +import org.skywalking.apm.collector.storage.define.noderef.NodeReferenceTable; +import org.skywalking.apm.collector.storage.elasticsearch.define.ElasticSearchColumnDefine; +import org.skywalking.apm.collector.storage.elasticsearch.define.ElasticSearchTableDefine; + +/** + * @author pengys5 + */ +public class NodeReferenceEsTableDefine extends ElasticSearchTableDefine { + + public NodeReferenceEsTableDefine() { + super(NodeReferenceTable.TABLE); + } + + @Override public int refreshInterval() { + return 2; + } + + @Override public int numberOfShards() { + return 2; + } + + @Override public int numberOfReplicas() { + return 0; + } + + @Override public void initialize() { + addColumn(new ElasticSearchColumnDefine(NodeReferenceTable.COLUMN_FRONT_APPLICATION_ID, ElasticSearchColumnDefine.Type.Integer.name())); + addColumn(new ElasticSearchColumnDefine(NodeReferenceTable.COLUMN_BEHIND_APPLICATION_ID, ElasticSearchColumnDefine.Type.Integer.name())); + addColumn(new ElasticSearchColumnDefine(NodeReferenceTable.COLUMN_BEHIND_PEER, ElasticSearchColumnDefine.Type.Keyword.name())); + addColumn(new ElasticSearchColumnDefine(NodeReferenceTable.COLUMN_S1_LTE, ElasticSearchColumnDefine.Type.Integer.name())); + addColumn(new ElasticSearchColumnDefine(NodeReferenceTable.COLUMN_S3_LTE, ElasticSearchColumnDefine.Type.Integer.name())); + addColumn(new ElasticSearchColumnDefine(NodeReferenceTable.COLUMN_S5_LTE, ElasticSearchColumnDefine.Type.Integer.name())); + addColumn(new ElasticSearchColumnDefine(NodeReferenceTable.COLUMN_S5_GT, ElasticSearchColumnDefine.Type.Integer.name())); + addColumn(new ElasticSearchColumnDefine(NodeReferenceTable.COLUMN_SUMMARY, ElasticSearchColumnDefine.Type.Integer.name())); + addColumn(new ElasticSearchColumnDefine(NodeReferenceTable.COLUMN_ERROR, ElasticSearchColumnDefine.Type.Integer.name())); + addColumn(new ElasticSearchColumnDefine(NodeReferenceTable.COLUMN_TIME_BUCKET, ElasticSearchColumnDefine.Type.Long.name())); + } +} diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/define/NodeReferenceH2TableDefine.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/define/NodeReferenceH2TableDefine.java new file mode 100644 index 000000000000..43b8377c8cf4 --- /dev/null +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/define/NodeReferenceH2TableDefine.java @@ -0,0 +1,28 @@ +package org.skywalking.apm.collector.agentstream.worker.noderef.define; + +import org.skywalking.apm.collector.storage.define.noderef.NodeReferenceTable; +import org.skywalking.apm.collector.storage.h2.define.H2ColumnDefine; +import org.skywalking.apm.collector.storage.h2.define.H2TableDefine; + +/** + * @author pengys5 + */ +public class NodeReferenceH2TableDefine extends H2TableDefine { + + public NodeReferenceH2TableDefine() { + super(NodeReferenceTable.TABLE); + } + + @Override public void initialize() { + addColumn(new H2ColumnDefine(NodeReferenceTable.COLUMN_FRONT_APPLICATION_ID, H2ColumnDefine.Type.Int.name())); + addColumn(new H2ColumnDefine(NodeReferenceTable.COLUMN_BEHIND_APPLICATION_ID, H2ColumnDefine.Type.Int.name())); + addColumn(new H2ColumnDefine(NodeReferenceTable.COLUMN_BEHIND_PEER, H2ColumnDefine.Type.Varchar.name())); + addColumn(new H2ColumnDefine(NodeReferenceTable.COLUMN_S1_LTE, H2ColumnDefine.Type.Int.name())); + addColumn(new H2ColumnDefine(NodeReferenceTable.COLUMN_S3_LTE, H2ColumnDefine.Type.Int.name())); + addColumn(new H2ColumnDefine(NodeReferenceTable.COLUMN_S5_LTE, H2ColumnDefine.Type.Int.name())); + addColumn(new H2ColumnDefine(NodeReferenceTable.COLUMN_S5_GT, H2ColumnDefine.Type.Int.name())); + addColumn(new H2ColumnDefine(NodeReferenceTable.COLUMN_SUMMARY, H2ColumnDefine.Type.Int.name())); + addColumn(new H2ColumnDefine(NodeReferenceTable.COLUMN_ERROR, H2ColumnDefine.Type.Int.name())); + addColumn(new H2ColumnDefine(NodeReferenceTable.COLUMN_TIME_BUCKET, H2ColumnDefine.Type.Bigint.name())); + } +} diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/reference/NodeRefAggregationWorker.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/reference/NodeRefAggregationWorker.java deleted file mode 100644 index 0dc2e913f549..000000000000 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/reference/NodeRefAggregationWorker.java +++ /dev/null @@ -1,66 +0,0 @@ -package org.skywalking.apm.collector.agentstream.worker.noderef.reference; - -import org.skywalking.apm.collector.storage.define.noderef.NodeRefDataDefine; -import org.skywalking.apm.collector.stream.worker.AbstractLocalAsyncWorkerProvider; -import org.skywalking.apm.collector.stream.worker.ClusterWorkerContext; -import org.skywalking.apm.collector.stream.worker.ProviderNotFoundException; -import org.skywalking.apm.collector.stream.worker.Role; -import org.skywalking.apm.collector.stream.worker.WorkerNotFoundException; -import org.skywalking.apm.collector.stream.worker.WorkerRefs; -import org.skywalking.apm.collector.stream.worker.impl.AggregationWorker; -import org.skywalking.apm.collector.storage.define.DataDefine; -import org.skywalking.apm.collector.stream.worker.selector.HashCodeSelector; -import org.skywalking.apm.collector.stream.worker.selector.WorkerSelector; - -/** - * @author pengys5 - */ -public class NodeRefAggregationWorker extends AggregationWorker { - - public NodeRefAggregationWorker(Role role, ClusterWorkerContext clusterContext) { - super(role, clusterContext); - } - - @Override public void preStart() throws ProviderNotFoundException { - super.preStart(); - } - - @Override protected WorkerRefs nextWorkRef(String id) throws WorkerNotFoundException { - return getClusterContext().lookup(NodeRefRemoteWorker.WorkerRole.INSTANCE); - } - - public static class Factory extends AbstractLocalAsyncWorkerProvider { - @Override - public Role role() { - return WorkerRole.INSTANCE; - } - - @Override - public NodeRefAggregationWorker workerInstance(ClusterWorkerContext clusterContext) { - return new NodeRefAggregationWorker(role(), clusterContext); - } - - @Override - public int queueSize() { - return 1024; - } - } - - public enum WorkerRole implements Role { - INSTANCE; - - @Override - public String roleName() { - return NodeRefAggregationWorker.class.getSimpleName(); - } - - @Override - public WorkerSelector workerSelector() { - return new HashCodeSelector(); - } - - @Override public DataDefine dataDefine() { - return new NodeRefDataDefine(); - } - } -} diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/reference/NodeRefRemoteWorker.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/reference/NodeRefRemoteWorker.java deleted file mode 100644 index 22ec5e183b6d..000000000000 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/reference/NodeRefRemoteWorker.java +++ /dev/null @@ -1,60 +0,0 @@ -package org.skywalking.apm.collector.agentstream.worker.noderef.reference; - -import org.skywalking.apm.collector.storage.define.noderef.NodeRefDataDefine; -import org.skywalking.apm.collector.stream.worker.AbstractRemoteWorker; -import org.skywalking.apm.collector.stream.worker.AbstractRemoteWorkerProvider; -import org.skywalking.apm.collector.stream.worker.ClusterWorkerContext; -import org.skywalking.apm.collector.stream.worker.ProviderNotFoundException; -import org.skywalking.apm.collector.stream.worker.Role; -import org.skywalking.apm.collector.stream.worker.WorkerException; -import org.skywalking.apm.collector.storage.define.DataDefine; -import org.skywalking.apm.collector.stream.worker.selector.HashCodeSelector; -import org.skywalking.apm.collector.stream.worker.selector.WorkerSelector; - -/** - * @author pengys5 - */ -public class NodeRefRemoteWorker extends AbstractRemoteWorker { - - protected NodeRefRemoteWorker(Role role, ClusterWorkerContext clusterContext) { - super(role, clusterContext); - } - - @Override public void preStart() throws ProviderNotFoundException { - - } - - @Override protected void onWork(Object message) throws WorkerException { - getClusterContext().lookup(NodeRefPersistenceWorker.WorkerRole.INSTANCE).tell(message); - } - - public static class Factory extends AbstractRemoteWorkerProvider { - @Override - public Role role() { - return WorkerRole.INSTANCE; - } - - @Override - public NodeRefRemoteWorker workerInstance(ClusterWorkerContext clusterContext) { - return new NodeRefRemoteWorker(role(), clusterContext); - } - } - - public enum WorkerRole implements Role { - INSTANCE; - - @Override - public String roleName() { - return NodeRefRemoteWorker.class.getSimpleName(); - } - - @Override - public WorkerSelector workerSelector() { - return new HashCodeSelector(); - } - - @Override public DataDefine dataDefine() { - return new NodeRefDataDefine(); - } - } -} diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/reference/NodeRefSpanListener.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/reference/NodeRefSpanListener.java deleted file mode 100644 index 31f6ca23d43d..000000000000 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/reference/NodeRefSpanListener.java +++ /dev/null @@ -1,95 +0,0 @@ -package org.skywalking.apm.collector.agentstream.worker.noderef.reference; - -import java.util.ArrayList; -import java.util.List; -import org.skywalking.apm.collector.core.util.Const; -import org.skywalking.apm.collector.agentstream.worker.cache.InstanceCache; -import org.skywalking.apm.collector.storage.define.noderef.NodeRefDataDefine; -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.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.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.SpanObject; -import org.skywalking.apm.network.proto.TraceSegmentReference; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * @author pengys5 - */ -public class NodeRefSpanListener implements EntrySpanListener, ExitSpanListener, FirstSpanListener, RefsListener { - - private final Logger logger = LoggerFactory.getLogger(NodeRefSpanListener.class); - - private List nodeReferences = new ArrayList<>(); - private List nodeEntryReferences = new ArrayList<>(); - private long timeBucket; - private boolean hasReference = false; - - @Override - public void parseExit(SpanObject spanObject, int applicationId, int applicationInstanceId, String segmentId) { - String front = ExchangeMarkUtils.INSTANCE.buildMarkedID(applicationId); - String behind = spanObject.getPeer(); - if (spanObject.getPeerId() != 0) { - behind = ExchangeMarkUtils.INSTANCE.buildMarkedID(spanObject.getPeerId()); - } - - String agg = front + Const.ID_SPLIT + behind; - nodeReferences.add(agg); - } - - @Override - public void parseEntry(SpanObject spanObject, int applicationId, int applicationInstanceId, String segmentId) { - String behind = ExchangeMarkUtils.INSTANCE.buildMarkedID(applicationId); - String front = ExchangeMarkUtils.INSTANCE.buildMarkedID(Const.USER_ID); - String agg = front + Const.ID_SPLIT + behind; - nodeEntryReferences.add(agg); - } - - @Override - public void parseFirst(SpanObject spanObject, int applicationId, int applicationInstanceId, String segmentId) { - timeBucket = TimeBucketUtils.INSTANCE.getMinuteTimeBucket(spanObject.getStartTime()); - } - - @Override public void parseRef(TraceSegmentReference reference, int applicationId, int applicationInstanceId, - String segmentId) { - int parentApplicationId = InstanceCache.get(reference.getParentApplicationInstanceId()); - - String front = ExchangeMarkUtils.INSTANCE.buildMarkedID(parentApplicationId); - String behind = ExchangeMarkUtils.INSTANCE.buildMarkedID(applicationId); - - String agg = front + Const.ID_SPLIT + behind; - nodeReferences.add(agg); - - hasReference = true; - } - - @Override public void build() { - logger.debug("node reference listener build"); - StreamModuleContext context = (StreamModuleContext)CollectorContextHelper.INSTANCE.getContext(StreamModuleGroupDefine.GROUP_NAME); - if (!hasReference) { - nodeReferences.addAll(nodeEntryReferences); - } - - for (String agg : nodeReferences) { - NodeRefDataDefine.NodeReference nodeReference = new NodeRefDataDefine.NodeReference(); - nodeReference.setId(timeBucket + Const.ID_SPLIT + agg); - nodeReference.setAgg(agg); - nodeReference.setTimeBucket(timeBucket); - - try { - logger.debug("send to node reference aggregation worker, id: {}", nodeReference.getId()); - context.getClusterWorkerContext().lookup(NodeRefAggregationWorker.WorkerRole.INSTANCE).tell(nodeReference.toData()); - } catch (WorkerInvokeException | WorkerNotFoundException e) { - logger.error(e.getMessage(), e); - } - } - } -} diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/reference/dao/NodeReferenceEsDAO.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/reference/dao/NodeReferenceEsDAO.java deleted file mode 100644 index 1f5e28116270..000000000000 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/reference/dao/NodeReferenceEsDAO.java +++ /dev/null @@ -1,47 +0,0 @@ -package org.skywalking.apm.collector.agentstream.worker.noderef.reference.dao; - -import java.util.HashMap; -import java.util.Map; -import org.elasticsearch.action.get.GetResponse; -import org.elasticsearch.action.index.IndexRequestBuilder; -import org.elasticsearch.action.update.UpdateRequestBuilder; -import org.skywalking.apm.collector.storage.define.noderef.NodeRefTable; -import org.skywalking.apm.collector.storage.elasticsearch.dao.EsDAO; -import org.skywalking.apm.collector.stream.worker.impl.dao.IPersistenceDAO; -import org.skywalking.apm.collector.core.stream.Data; -import org.skywalking.apm.collector.storage.define.DataDefine; - -/** - * @author pengys5 - */ -public class NodeReferenceEsDAO extends EsDAO implements INodeReferenceDAO, IPersistenceDAO { - - @Override public Data get(String id, DataDefine dataDefine) { - GetResponse getResponse = getClient().prepareGet(NodeRefTable.TABLE, id).get(); - if (getResponse.isExists()) { - Data data = dataDefine.build(id); - Map source = getResponse.getSource(); - data.setDataString(1, (String)source.get(NodeRefTable.COLUMN_AGG)); - data.setDataLong(0, (Long)source.get(NodeRefTable.COLUMN_TIME_BUCKET)); - return data; - } else { - return null; - } - } - - @Override public IndexRequestBuilder prepareBatchInsert(Data data) { - Map source = new HashMap<>(); - source.put(NodeRefTable.COLUMN_AGG, data.getDataString(1)); - source.put(NodeRefTable.COLUMN_TIME_BUCKET, data.getDataLong(0)); - - return getClient().prepareIndex(NodeRefTable.TABLE, data.getDataString(0)).setSource(source); - } - - @Override public UpdateRequestBuilder prepareBatchUpdate(Data data) { - Map source = new HashMap<>(); - source.put(NodeRefTable.COLUMN_AGG, data.getDataString(1)); - source.put(NodeRefTable.COLUMN_TIME_BUCKET, data.getDataLong(0)); - - return getClient().prepareUpdate(NodeRefTable.TABLE, data.getDataString(0)).setDoc(source); - } -} diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/reference/dao/NodeReferenceH2DAO.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/reference/dao/NodeReferenceH2DAO.java deleted file mode 100644 index 3a9cf1508623..000000000000 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/reference/dao/NodeReferenceH2DAO.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.skywalking.apm.collector.agentstream.worker.noderef.reference.dao; - -import org.skywalking.apm.collector.storage.h2.dao.H2DAO; -import org.skywalking.apm.collector.stream.worker.impl.dao.IPersistenceDAO; -import org.skywalking.apm.collector.core.stream.Data; -import org.skywalking.apm.collector.storage.define.DataDefine; - -/** - * @author pengys5 - */ -public class NodeReferenceH2DAO extends H2DAO implements INodeReferenceDAO, IPersistenceDAO { - - @Override public Data get(String id, DataDefine dataDefine) { - return null; - } - - @Override public String prepareBatchInsert(Data data) { - return null; - } - - @Override public String prepareBatchUpdate(Data data) { - return null; - } -} diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/reference/define/NodeRefEsTableDefine.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/reference/define/NodeRefEsTableDefine.java deleted file mode 100644 index 5cb48064ba9a..000000000000 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/reference/define/NodeRefEsTableDefine.java +++ /dev/null @@ -1,32 +0,0 @@ -package org.skywalking.apm.collector.agentstream.worker.noderef.reference.define; - -import org.skywalking.apm.collector.storage.elasticsearch.define.ElasticSearchColumnDefine; -import org.skywalking.apm.collector.storage.elasticsearch.define.ElasticSearchTableDefine; -import org.skywalking.apm.collector.storage.define.noderef.NodeRefTable; - -/** - * @author pengys5 - */ -public class NodeRefEsTableDefine extends ElasticSearchTableDefine { - - public NodeRefEsTableDefine() { - super(NodeRefTable.TABLE); - } - - @Override public int refreshInterval() { - return 2; - } - - @Override public int numberOfShards() { - return 2; - } - - @Override public int numberOfReplicas() { - return 0; - } - - @Override public void initialize() { - addColumn(new ElasticSearchColumnDefine(NodeRefTable.COLUMN_AGG, ElasticSearchColumnDefine.Type.Keyword.name())); - addColumn(new ElasticSearchColumnDefine(NodeRefTable.COLUMN_TIME_BUCKET, ElasticSearchColumnDefine.Type.Long.name())); - } -} diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/reference/define/NodeRefH2TableDefine.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/reference/define/NodeRefH2TableDefine.java deleted file mode 100644 index 5a9173a1fb72..000000000000 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/reference/define/NodeRefH2TableDefine.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.skywalking.apm.collector.agentstream.worker.noderef.reference.define; - -import org.skywalking.apm.collector.storage.h2.define.H2ColumnDefine; -import org.skywalking.apm.collector.storage.h2.define.H2TableDefine; -import org.skywalking.apm.collector.storage.define.noderef.NodeRefTable; - -/** - * @author pengys5 - */ -public class NodeRefH2TableDefine extends H2TableDefine { - - public NodeRefH2TableDefine() { - super(NodeRefTable.TABLE); - } - - @Override public void initialize() { - addColumn(new H2ColumnDefine(NodeRefTable.COLUMN_AGG, H2ColumnDefine.Type.Varchar.name())); - addColumn(new H2ColumnDefine(NodeRefTable.COLUMN_TIME_BUCKET, H2ColumnDefine.Type.Bigint.name())); - } -} diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/summary/NodeRefSumPersistenceWorker.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/summary/NodeRefSumPersistenceWorker.java deleted file mode 100644 index ae2605a4700d..000000000000 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/summary/NodeRefSumPersistenceWorker.java +++ /dev/null @@ -1,71 +0,0 @@ -package org.skywalking.apm.collector.agentstream.worker.noderef.summary; - -import org.skywalking.apm.collector.agentstream.worker.noderef.summary.dao.INodeRefSumDAO; -import org.skywalking.apm.collector.storage.define.noderef.NodeRefSumDataDefine; -import org.skywalking.apm.collector.storage.dao.DAOContainer; -import org.skywalking.apm.collector.stream.worker.AbstractLocalAsyncWorkerProvider; -import org.skywalking.apm.collector.stream.worker.ClusterWorkerContext; -import org.skywalking.apm.collector.stream.worker.ProviderNotFoundException; -import org.skywalking.apm.collector.stream.worker.Role; -import org.skywalking.apm.collector.stream.worker.impl.PersistenceWorker; -import org.skywalking.apm.collector.stream.worker.impl.dao.IPersistenceDAO; -import org.skywalking.apm.collector.storage.define.DataDefine; -import org.skywalking.apm.collector.stream.worker.selector.HashCodeSelector; -import org.skywalking.apm.collector.stream.worker.selector.WorkerSelector; - -/** - * @author pengys5 - */ -public class NodeRefSumPersistenceWorker extends PersistenceWorker { - - public NodeRefSumPersistenceWorker(Role role, ClusterWorkerContext clusterContext) { - super(role, clusterContext); - } - - @Override public void preStart() throws ProviderNotFoundException { - super.preStart(); - } - - @Override protected boolean needMergeDBData() { - return true; - } - - @Override protected IPersistenceDAO persistenceDAO() { - return (IPersistenceDAO)DAOContainer.INSTANCE.get(INodeRefSumDAO.class.getName()); - } - - public static class Factory extends AbstractLocalAsyncWorkerProvider { - @Override - public Role role() { - return WorkerRole.INSTANCE; - } - - @Override - public NodeRefSumPersistenceWorker workerInstance(ClusterWorkerContext clusterContext) { - return new NodeRefSumPersistenceWorker(role(), clusterContext); - } - - @Override - public int queueSize() { - return 1024; - } - } - - public enum WorkerRole implements Role { - INSTANCE; - - @Override - public String roleName() { - return NodeRefSumPersistenceWorker.class.getSimpleName(); - } - - @Override - public WorkerSelector workerSelector() { - return new HashCodeSelector(); - } - - @Override public DataDefine dataDefine() { - return new NodeRefSumDataDefine(); - } - } -} diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/summary/dao/INodeRefSumDAO.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/summary/dao/INodeRefSumDAO.java deleted file mode 100644 index 6be97995717c..000000000000 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/summary/dao/INodeRefSumDAO.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.skywalking.apm.collector.agentstream.worker.noderef.summary.dao; - -/** - * @author pengys5 - */ -public interface INodeRefSumDAO { -} diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/summary/dao/NodeRefSumEsDAO.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/summary/dao/NodeRefSumEsDAO.java deleted file mode 100644 index 5632b5332226..000000000000 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/summary/dao/NodeRefSumEsDAO.java +++ /dev/null @@ -1,66 +0,0 @@ -package org.skywalking.apm.collector.agentstream.worker.noderef.summary.dao; - -import java.util.HashMap; -import java.util.Map; -import org.elasticsearch.action.get.GetResponse; -import org.elasticsearch.action.index.IndexRequestBuilder; -import org.elasticsearch.action.update.UpdateRequestBuilder; -import org.skywalking.apm.collector.storage.define.noderef.NodeRefTable; -import org.skywalking.apm.collector.storage.define.noderef.NodeRefSumTable; -import org.skywalking.apm.collector.storage.elasticsearch.dao.EsDAO; -import org.skywalking.apm.collector.stream.worker.impl.dao.IPersistenceDAO; -import org.skywalking.apm.collector.core.stream.Data; -import org.skywalking.apm.collector.storage.define.DataDefine; - -/** - * @author pengys5 - */ -public class NodeRefSumEsDAO extends EsDAO implements INodeRefSumDAO, IPersistenceDAO { - - @Override public Data get(String id, DataDefine dataDefine) { - GetResponse getResponse = getClient().prepareGet(NodeRefSumTable.TABLE, id).get(); - if (getResponse.isExists()) { - Data data = dataDefine.build(id); - Map source = getResponse.getSource(); - data.setDataLong(0, ((Number)source.get(NodeRefSumTable.COLUMN_ONE_SECOND_LESS)).longValue()); - data.setDataLong(1, ((Number)source.get(NodeRefSumTable.COLUMN_THREE_SECOND_LESS)).longValue()); - data.setDataLong(2, ((Number)source.get(NodeRefSumTable.COLUMN_FIVE_SECOND_LESS)).longValue()); - data.setDataLong(3, ((Number)source.get(NodeRefSumTable.COLUMN_FIVE_SECOND_GREATER)).longValue()); - data.setDataLong(4, ((Number)source.get(NodeRefSumTable.COLUMN_ERROR)).longValue()); - data.setDataLong(5, ((Number)source.get(NodeRefSumTable.COLUMN_SUMMARY)).longValue()); - data.setDataLong(6, ((Number)source.get(NodeRefSumTable.COLUMN_TIME_BUCKET)).longValue()); - data.setDataString(1, (String)source.get(NodeRefSumTable.COLUMN_AGG)); - return data; - } else { - return null; - } - } - - @Override public IndexRequestBuilder prepareBatchInsert(Data data) { - Map source = new HashMap<>(); - source.put(NodeRefSumTable.COLUMN_ONE_SECOND_LESS, data.getDataLong(0)); - source.put(NodeRefSumTable.COLUMN_THREE_SECOND_LESS, data.getDataLong(1)); - source.put(NodeRefSumTable.COLUMN_FIVE_SECOND_LESS, data.getDataLong(2)); - source.put(NodeRefSumTable.COLUMN_FIVE_SECOND_GREATER, data.getDataLong(3)); - source.put(NodeRefSumTable.COLUMN_ERROR, data.getDataLong(4)); - source.put(NodeRefSumTable.COLUMN_SUMMARY, data.getDataLong(5)); - source.put(NodeRefSumTable.COLUMN_AGG, data.getDataString(1)); - source.put(NodeRefSumTable.COLUMN_TIME_BUCKET, data.getDataLong(6)); - - return getClient().prepareIndex(NodeRefSumTable.TABLE, data.getDataString(0)).setSource(source); - } - - @Override public UpdateRequestBuilder prepareBatchUpdate(Data data) { - Map source = new HashMap<>(); - source.put(NodeRefSumTable.COLUMN_ONE_SECOND_LESS, data.getDataLong(0)); - source.put(NodeRefSumTable.COLUMN_THREE_SECOND_LESS, data.getDataLong(1)); - source.put(NodeRefSumTable.COLUMN_FIVE_SECOND_LESS, data.getDataLong(2)); - source.put(NodeRefSumTable.COLUMN_FIVE_SECOND_GREATER, data.getDataLong(3)); - source.put(NodeRefSumTable.COLUMN_ERROR, data.getDataLong(4)); - source.put(NodeRefSumTable.COLUMN_SUMMARY, data.getDataLong(5)); - source.put(NodeRefSumTable.COLUMN_AGG, data.getDataString(1)); - source.put(NodeRefSumTable.COLUMN_TIME_BUCKET, data.getDataLong(6)); - - return getClient().prepareUpdate(NodeRefTable.TABLE, data.getDataString(0)).setDoc(source); - } -} diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/summary/define/NodeRefSumEsTableDefine.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/summary/define/NodeRefSumEsTableDefine.java deleted file mode 100644 index 91e6946ed7c1..000000000000 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/summary/define/NodeRefSumEsTableDefine.java +++ /dev/null @@ -1,38 +0,0 @@ -package org.skywalking.apm.collector.agentstream.worker.noderef.summary.define; - -import org.skywalking.apm.collector.storage.elasticsearch.define.ElasticSearchColumnDefine; -import org.skywalking.apm.collector.storage.elasticsearch.define.ElasticSearchTableDefine; -import org.skywalking.apm.collector.storage.define.noderef.NodeRefSumTable; - -/** - * @author pengys5 - */ -public class NodeRefSumEsTableDefine extends ElasticSearchTableDefine { - - public NodeRefSumEsTableDefine() { - super(NodeRefSumTable.TABLE); - } - - @Override public int refreshInterval() { - return 2; - } - - @Override public int numberOfShards() { - return 2; - } - - @Override public int numberOfReplicas() { - return 0; - } - - @Override public void initialize() { - addColumn(new ElasticSearchColumnDefine(NodeRefSumTable.COLUMN_ONE_SECOND_LESS, ElasticSearchColumnDefine.Type.Long.name())); - addColumn(new ElasticSearchColumnDefine(NodeRefSumTable.COLUMN_THREE_SECOND_LESS, ElasticSearchColumnDefine.Type.Long.name())); - addColumn(new ElasticSearchColumnDefine(NodeRefSumTable.COLUMN_FIVE_SECOND_LESS, ElasticSearchColumnDefine.Type.Long.name())); - addColumn(new ElasticSearchColumnDefine(NodeRefSumTable.COLUMN_FIVE_SECOND_GREATER, ElasticSearchColumnDefine.Type.Long.name())); - addColumn(new ElasticSearchColumnDefine(NodeRefSumTable.COLUMN_ERROR, ElasticSearchColumnDefine.Type.Long.name())); - addColumn(new ElasticSearchColumnDefine(NodeRefSumTable.COLUMN_SUMMARY, ElasticSearchColumnDefine.Type.Long.name())); - addColumn(new ElasticSearchColumnDefine(NodeRefSumTable.COLUMN_AGG, ElasticSearchColumnDefine.Type.Keyword.name())); - addColumn(new ElasticSearchColumnDefine(NodeRefSumTable.COLUMN_TIME_BUCKET, ElasticSearchColumnDefine.Type.Long.name())); - } -} diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/summary/define/NodeRefSumH2TableDefine.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/summary/define/NodeRefSumH2TableDefine.java deleted file mode 100644 index 978df49921f8..000000000000 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/summary/define/NodeRefSumH2TableDefine.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.skywalking.apm.collector.agentstream.worker.noderef.summary.define; - -import org.skywalking.apm.collector.storage.h2.define.H2ColumnDefine; -import org.skywalking.apm.collector.storage.h2.define.H2TableDefine; -import org.skywalking.apm.collector.storage.define.noderef.NodeRefSumTable; - -/** - * @author pengys5 - */ -public class NodeRefSumH2TableDefine extends H2TableDefine { - - public NodeRefSumH2TableDefine() { - super(NodeRefSumTable.TABLE); - } - - @Override public void initialize() { - addColumn(new H2ColumnDefine(NodeRefSumTable.COLUMN_ONE_SECOND_LESS, H2ColumnDefine.Type.Bigint.name())); - addColumn(new H2ColumnDefine(NodeRefSumTable.COLUMN_THREE_SECOND_LESS, H2ColumnDefine.Type.Bigint.name())); - addColumn(new H2ColumnDefine(NodeRefSumTable.COLUMN_FIVE_SECOND_LESS, H2ColumnDefine.Type.Bigint.name())); - addColumn(new H2ColumnDefine(NodeRefSumTable.COLUMN_FIVE_SECOND_GREATER, H2ColumnDefine.Type.Bigint.name())); - addColumn(new H2ColumnDefine(NodeRefSumTable.COLUMN_ERROR, H2ColumnDefine.Type.Bigint.name())); - addColumn(new H2ColumnDefine(NodeRefSumTable.COLUMN_SUMMARY, H2ColumnDefine.Type.Bigint.name())); - addColumn(new H2ColumnDefine(NodeRefSumTable.COLUMN_AGG, H2ColumnDefine.Type.Varchar.name())); - addColumn(new H2ColumnDefine(NodeRefSumTable.COLUMN_TIME_BUCKET, H2ColumnDefine.Type.Bigint.name())); - } -} diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/register/servicename/dao/IServiceNameDAO.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/register/servicename/dao/IServiceNameDAO.java index aa79ec3375da..b02ddf1808ee 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/register/servicename/dao/IServiceNameDAO.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/register/servicename/dao/IServiceNameDAO.java @@ -8,6 +8,8 @@ public interface IServiceNameDAO { int getServiceId(int applicationId, String serviceName); + String getServiceName(int serviceId); + int getMaxServiceId(); int getMinServiceId(); diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/register/servicename/dao/ServiceNameEsDAO.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/register/servicename/dao/ServiceNameEsDAO.java index ac40e1caeba6..150a0b601db5 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/register/servicename/dao/ServiceNameEsDAO.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/register/servicename/dao/ServiceNameEsDAO.java @@ -2,6 +2,7 @@ import java.util.HashMap; import java.util.Map; +import org.elasticsearch.action.get.GetResponse; import org.elasticsearch.action.index.IndexResponse; import org.elasticsearch.action.search.SearchRequestBuilder; import org.elasticsearch.action.search.SearchResponse; @@ -10,9 +11,10 @@ import org.elasticsearch.index.query.BoolQueryBuilder; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.SearchHit; +import org.skywalking.apm.collector.client.elasticsearch.ElasticSearchClient; +import org.skywalking.apm.collector.core.util.Const; import org.skywalking.apm.collector.storage.define.register.ServiceNameDataDefine; import org.skywalking.apm.collector.storage.define.register.ServiceNameTable; -import org.skywalking.apm.collector.client.elasticsearch.ElasticSearchClient; import org.skywalking.apm.collector.storage.elasticsearch.dao.EsDAO; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -53,6 +55,15 @@ public class ServiceNameEsDAO extends EsDAO implements IServiceNameDAO { return getMinId(ServiceNameTable.TABLE, ServiceNameTable.COLUMN_SERVICE_ID); } + @Override public String getServiceName(int serviceId) { + GetResponse response = getClient().prepareGet(ServiceNameTable.TABLE, String.valueOf(serviceId)).get(); + if (response.isExists()) { + return (String)response.getSource().get(ServiceNameTable.COLUMN_SERVICE_NAME); + } else { + return Const.EMPTY_STRING; + } + } + @Override public void save(ServiceNameDataDefine.ServiceName serviceName) { logger.debug("save service name register info, application id: {}, service name: {}", serviceName.getApplicationId(), serviceName.getServiceName()); ElasticSearchClient client = getClient(); diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/register/servicename/dao/ServiceNameH2DAO.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/register/servicename/dao/ServiceNameH2DAO.java index 3a3a288e5d5d..c73b9687f26d 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/register/servicename/dao/ServiceNameH2DAO.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/register/servicename/dao/ServiceNameH2DAO.java @@ -20,6 +20,10 @@ public class ServiceNameH2DAO extends H2DAO implements IServiceNameDAO { return 0; } + @Override public String getServiceName(int serviceId) { + return null; + } + @Override public void save(ServiceNameDataDefine.ServiceName serviceName) { } 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 5564127a4dd5..9f60ca953481 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 @@ -6,15 +6,14 @@ import org.skywalking.apm.collector.agentstream.worker.instance.performance.InstPerformanceSpanListener; import org.skywalking.apm.collector.agentstream.worker.node.component.NodeComponentSpanListener; import org.skywalking.apm.collector.agentstream.worker.node.mapping.NodeMappingSpanListener; -import org.skywalking.apm.collector.agentstream.worker.noderef.reference.NodeRefSpanListener; -import org.skywalking.apm.collector.agentstream.worker.noderef.summary.NodeRefSumSpanListener; +import org.skywalking.apm.collector.agentstream.worker.noderef.NodeReferenceSpanListener; import org.skywalking.apm.collector.agentstream.worker.segment.cost.SegmentCostSpanListener; import org.skywalking.apm.collector.agentstream.worker.segment.origin.SegmentPersistenceWorker; -import org.skywalking.apm.collector.storage.define.segment.SegmentDataDefine; import org.skywalking.apm.collector.agentstream.worker.service.entry.ServiceEntrySpanListener; -import org.skywalking.apm.collector.agentstream.worker.serviceref.reference.ServiceRefSpanListener; +import org.skywalking.apm.collector.agentstream.worker.serviceref.ServiceReferenceSpanListener; import org.skywalking.apm.collector.core.framework.CollectorContextHelper; import org.skywalking.apm.collector.core.util.CollectionUtils; +import org.skywalking.apm.collector.storage.define.segment.SegmentDataDefine; import org.skywalking.apm.collector.stream.StreamModuleContext; import org.skywalking.apm.collector.stream.StreamModuleGroupDefine; import org.skywalking.apm.collector.stream.worker.WorkerInvokeException; @@ -38,14 +37,13 @@ public class SegmentParse { public SegmentParse() { spanListeners = new ArrayList<>(); - spanListeners.add(new NodeRefSpanListener()); spanListeners.add(new NodeComponentSpanListener()); spanListeners.add(new NodeMappingSpanListener()); - spanListeners.add(new NodeRefSumSpanListener()); + spanListeners.add(new NodeReferenceSpanListener()); spanListeners.add(new SegmentCostSpanListener()); spanListeners.add(new GlobalTraceSpanListener()); spanListeners.add(new ServiceEntrySpanListener()); - spanListeners.add(new ServiceRefSpanListener()); + spanListeners.add(new ServiceReferenceSpanListener()); spanListeners.add(new InstPerformanceSpanListener()); } 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 b37d32e88f50..aa60baa2e762 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 @@ -1,13 +1,13 @@ package org.skywalking.apm.collector.agentstream.worker.service.entry; -import org.skywalking.apm.collector.core.util.Const; +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.FirstSpanListener; import org.skywalking.apm.collector.agentstream.worker.segment.RefsListener; -import org.skywalking.apm.collector.storage.define.service.ServiceEntryDataDefine; -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.Const; +import org.skywalking.apm.collector.core.util.TimeBucketUtils; +import org.skywalking.apm.collector.storage.define.service.ServiceEntryDataDefine; import org.skywalking.apm.collector.stream.StreamModuleContext; import org.skywalking.apm.collector.stream.StreamModuleGroupDefine; import org.skywalking.apm.collector.stream.worker.WorkerInvokeException; @@ -26,17 +26,19 @@ public class ServiceEntrySpanListener implements RefsListener, FirstSpanListener private long timeBucket; private boolean hasReference = false; - private String agg; private int applicationId; + private int entryServiceId; + private String entryServiceName; @Override public void parseEntry(SpanObject spanObject, int applicationId, int applicationInstanceId, String segmentId) { - String entryServiceName = spanObject.getOperationName(); - if (spanObject.getOperationNameId() != 0) { - entryServiceName = ExchangeMarkUtils.INSTANCE.buildMarkedID(spanObject.getOperationNameId()); - } - this.agg = ExchangeMarkUtils.INSTANCE.buildMarkedID(applicationId) + Const.ID_SPLIT + entryServiceName; this.applicationId = applicationId; + this.entryServiceId = spanObject.getOperationNameId(); + if (spanObject.getOperationNameId() == 0) { + this.entryServiceName = spanObject.getOperationName(); + } else { + this.entryServiceName = ServiceCache.getServiceName(this.entryServiceId); + } } @Override public void parseRef(TraceSegmentReference reference, int applicationId, int applicationInstanceId, @@ -54,10 +56,12 @@ public void parseFirst(SpanObject spanObject, int applicationId, int application StreamModuleContext context = (StreamModuleContext)CollectorContextHelper.INSTANCE.getContext(StreamModuleGroupDefine.GROUP_NAME); if (!hasReference) { ServiceEntryDataDefine.ServiceEntry serviceEntry = new ServiceEntryDataDefine.ServiceEntry(); - serviceEntry.setId(timeBucket + Const.ID_SPLIT + agg); + serviceEntry.setId(applicationId + Const.ID_SPLIT + entryServiceName); serviceEntry.setApplicationId(applicationId); - serviceEntry.setAgg(agg); - serviceEntry.setTimeBucket(timeBucket); + serviceEntry.setEntryServiceId(entryServiceId); + serviceEntry.setEntryServiceName(entryServiceName); + serviceEntry.setRegisterTime(timeBucket); + serviceEntry.setNewestTime(timeBucket); try { logger.debug("send to service entry aggregation worker, id: {}", serviceEntry.getId()); diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/service/entry/dao/ServiceEntryEsDAO.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/service/entry/dao/ServiceEntryEsDAO.java index d8aadce08c34..77f5a228301e 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/service/entry/dao/ServiceEntryEsDAO.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/service/entry/dao/ServiceEntryEsDAO.java @@ -5,11 +5,11 @@ import org.elasticsearch.action.get.GetResponse; import org.elasticsearch.action.index.IndexRequestBuilder; import org.elasticsearch.action.update.UpdateRequestBuilder; +import org.skywalking.apm.collector.core.stream.Data; +import org.skywalking.apm.collector.storage.define.DataDefine; import org.skywalking.apm.collector.storage.define.service.ServiceEntryTable; import org.skywalking.apm.collector.storage.elasticsearch.dao.EsDAO; import org.skywalking.apm.collector.stream.worker.impl.dao.IPersistenceDAO; -import org.skywalking.apm.collector.core.stream.Data; -import org.skywalking.apm.collector.storage.define.DataDefine; /** * @author pengys5 @@ -21,9 +21,11 @@ public class ServiceEntryEsDAO extends EsDAO implements IServiceEntryDAO, IPersi if (getResponse.isExists()) { Data data = dataDefine.build(id); Map source = getResponse.getSource(); - data.setDataInteger(0, (Integer)source.get(ServiceEntryTable.COLUMN_APPLICATION_ID)); - data.setDataString(1, (String)source.get(ServiceEntryTable.COLUMN_AGG)); - data.setDataLong(0, (Long)source.get(ServiceEntryTable.COLUMN_TIME_BUCKET)); + data.setDataInteger(0, ((Number)source.get(ServiceEntryTable.COLUMN_APPLICATION_ID)).intValue()); + data.setDataInteger(1, ((Number)source.get(ServiceEntryTable.COLUMN_ENTRY_SERVICE_ID)).intValue()); + data.setDataString(1, (String)source.get(ServiceEntryTable.COLUMN_ENTRY_SERVICE_NAME)); + data.setDataLong(0, ((Number)source.get(ServiceEntryTable.COLUMN_REGISTER_TIME)).longValue()); + data.setDataLong(1, ((Number)source.get(ServiceEntryTable.COLUMN_NEWEST_TIME)).longValue()); return data; } else { return null; @@ -33,17 +35,20 @@ public class ServiceEntryEsDAO extends EsDAO implements IServiceEntryDAO, IPersi @Override public IndexRequestBuilder prepareBatchInsert(Data data) { Map source = new HashMap<>(); source.put(ServiceEntryTable.COLUMN_APPLICATION_ID, data.getDataInteger(0)); - source.put(ServiceEntryTable.COLUMN_AGG, data.getDataString(1)); - source.put(ServiceEntryTable.COLUMN_TIME_BUCKET, data.getDataLong(0)); - + source.put(ServiceEntryTable.COLUMN_ENTRY_SERVICE_ID, data.getDataInteger(1)); + source.put(ServiceEntryTable.COLUMN_ENTRY_SERVICE_NAME, data.getDataString(1)); + source.put(ServiceEntryTable.COLUMN_REGISTER_TIME, data.getDataLong(0)); + source.put(ServiceEntryTable.COLUMN_NEWEST_TIME, data.getDataLong(1)); return getClient().prepareIndex(ServiceEntryTable.TABLE, data.getDataString(0)).setSource(source); } @Override public UpdateRequestBuilder prepareBatchUpdate(Data data) { Map source = new HashMap<>(); source.put(ServiceEntryTable.COLUMN_APPLICATION_ID, data.getDataInteger(0)); - source.put(ServiceEntryTable.COLUMN_AGG, data.getDataString(1)); - source.put(ServiceEntryTable.COLUMN_TIME_BUCKET, data.getDataLong(0)); + source.put(ServiceEntryTable.COLUMN_ENTRY_SERVICE_ID, data.getDataInteger(1)); + source.put(ServiceEntryTable.COLUMN_ENTRY_SERVICE_NAME, data.getDataString(1)); + source.put(ServiceEntryTable.COLUMN_REGISTER_TIME, data.getDataLong(0)); + source.put(ServiceEntryTable.COLUMN_NEWEST_TIME, data.getDataLong(1)); return getClient().prepareUpdate(ServiceEntryTable.TABLE, data.getDataString(0)).setDoc(source); } diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/service/entry/define/ServiceEntryEsTableDefine.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/service/entry/define/ServiceEntryEsTableDefine.java index 8818fb223ab0..cf2e43608be3 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/service/entry/define/ServiceEntryEsTableDefine.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/service/entry/define/ServiceEntryEsTableDefine.java @@ -26,7 +26,10 @@ public ServiceEntryEsTableDefine() { } @Override public void initialize() { - addColumn(new ElasticSearchColumnDefine(ServiceEntryTable.COLUMN_AGG, ElasticSearchColumnDefine.Type.Keyword.name())); - addColumn(new ElasticSearchColumnDefine(ServiceEntryTable.COLUMN_TIME_BUCKET, ElasticSearchColumnDefine.Type.Long.name())); + addColumn(new ElasticSearchColumnDefine(ServiceEntryTable.COLUMN_APPLICATION_ID, ElasticSearchColumnDefine.Type.Integer.name())); + addColumn(new ElasticSearchColumnDefine(ServiceEntryTable.COLUMN_ENTRY_SERVICE_ID, ElasticSearchColumnDefine.Type.Integer.name())); + addColumn(new ElasticSearchColumnDefine(ServiceEntryTable.COLUMN_ENTRY_SERVICE_NAME, ElasticSearchColumnDefine.Type.Text.name())); + addColumn(new ElasticSearchColumnDefine(ServiceEntryTable.COLUMN_REGISTER_TIME, ElasticSearchColumnDefine.Type.Long.name())); + addColumn(new ElasticSearchColumnDefine(ServiceEntryTable.COLUMN_NEWEST_TIME, ElasticSearchColumnDefine.Type.Long.name())); } } diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/service/entry/define/ServiceEntryH2TableDefine.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/service/entry/define/ServiceEntryH2TableDefine.java index bcaa02e27f85..bd32780e859e 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/service/entry/define/ServiceEntryH2TableDefine.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/service/entry/define/ServiceEntryH2TableDefine.java @@ -15,7 +15,10 @@ public ServiceEntryH2TableDefine() { @Override public void initialize() { addColumn(new H2ColumnDefine(ServiceEntryTable.COLUMN_ID, H2ColumnDefine.Type.Varchar.name())); - addColumn(new H2ColumnDefine(ServiceEntryTable.COLUMN_AGG, H2ColumnDefine.Type.Varchar.name())); - addColumn(new H2ColumnDefine(ServiceEntryTable.COLUMN_TIME_BUCKET, H2ColumnDefine.Type.Bigint.name())); + addColumn(new H2ColumnDefine(ServiceEntryTable.COLUMN_APPLICATION_ID, H2ColumnDefine.Type.Int.name())); + addColumn(new H2ColumnDefine(ServiceEntryTable.COLUMN_ENTRY_SERVICE_ID, H2ColumnDefine.Type.Int.name())); + addColumn(new H2ColumnDefine(ServiceEntryTable.COLUMN_ENTRY_SERVICE_NAME, H2ColumnDefine.Type.Varchar.name())); + addColumn(new H2ColumnDefine(ServiceEntryTable.COLUMN_REGISTER_TIME, H2ColumnDefine.Type.Bigint.name())); + addColumn(new H2ColumnDefine(ServiceEntryTable.COLUMN_NEWEST_TIME, H2ColumnDefine.Type.Bigint.name())); } } diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/reference/ServiceRefAggregationWorker.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/ServiceReferenceAggregationWorker.java similarity index 72% rename from apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/reference/ServiceRefAggregationWorker.java rename to apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/ServiceReferenceAggregationWorker.java index ef37e0537388..d02620f7b1b8 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/reference/ServiceRefAggregationWorker.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/ServiceReferenceAggregationWorker.java @@ -1,6 +1,6 @@ -package org.skywalking.apm.collector.agentstream.worker.serviceref.reference; +package org.skywalking.apm.collector.agentstream.worker.serviceref; -import org.skywalking.apm.collector.storage.define.serviceref.ServiceRefDataDefine; +import org.skywalking.apm.collector.storage.define.serviceref.ServiceReferenceDataDefine; import org.skywalking.apm.collector.stream.worker.AbstractLocalAsyncWorkerProvider; import org.skywalking.apm.collector.stream.worker.ClusterWorkerContext; import org.skywalking.apm.collector.stream.worker.ProviderNotFoundException; @@ -15,9 +15,9 @@ /** * @author pengys5 */ -public class ServiceRefAggregationWorker extends AggregationWorker { +public class ServiceReferenceAggregationWorker extends AggregationWorker { - public ServiceRefAggregationWorker(Role role, ClusterWorkerContext clusterContext) { + public ServiceReferenceAggregationWorker(Role role, ClusterWorkerContext clusterContext) { super(role, clusterContext); } @@ -26,18 +26,18 @@ public ServiceRefAggregationWorker(Role role, ClusterWorkerContext clusterContex } @Override protected WorkerRefs nextWorkRef(String id) throws WorkerNotFoundException { - return getClusterContext().lookup(ServiceRefRemoteWorker.WorkerRole.INSTANCE); + return getClusterContext().lookup(ServiceReferenceRemoteWorker.WorkerRole.INSTANCE); } - public static class Factory extends AbstractLocalAsyncWorkerProvider { + public static class Factory extends AbstractLocalAsyncWorkerProvider { @Override public Role role() { return WorkerRole.INSTANCE; } @Override - public ServiceRefAggregationWorker workerInstance(ClusterWorkerContext clusterContext) { - return new ServiceRefAggregationWorker(role(), clusterContext); + public ServiceReferenceAggregationWorker workerInstance(ClusterWorkerContext clusterContext) { + return new ServiceReferenceAggregationWorker(role(), clusterContext); } @Override @@ -51,7 +51,7 @@ public enum WorkerRole implements Role { @Override public String roleName() { - return ServiceRefAggregationWorker.class.getSimpleName(); + return ServiceReferenceAggregationWorker.class.getSimpleName(); } @Override @@ -60,7 +60,7 @@ public WorkerSelector workerSelector() { } @Override public DataDefine dataDefine() { - return new ServiceRefDataDefine(); + return new ServiceReferenceDataDefine(); } } } diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/reference/ServiceRefPersistenceWorker.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/ServiceReferencePersistenceWorker.java similarity index 75% rename from apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/reference/ServiceRefPersistenceWorker.java rename to apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/ServiceReferencePersistenceWorker.java index 2dfe6c8cf2e7..c071e6067b15 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/reference/ServiceRefPersistenceWorker.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/ServiceReferencePersistenceWorker.java @@ -1,7 +1,7 @@ -package org.skywalking.apm.collector.agentstream.worker.serviceref.reference; +package org.skywalking.apm.collector.agentstream.worker.serviceref; -import org.skywalking.apm.collector.agentstream.worker.serviceref.reference.dao.IServiceRefDAO; -import org.skywalking.apm.collector.storage.define.serviceref.ServiceRefDataDefine; +import org.skywalking.apm.collector.agentstream.worker.serviceref.dao.IServiceReferenceDAO; +import org.skywalking.apm.collector.storage.define.serviceref.ServiceReferenceDataDefine; import org.skywalking.apm.collector.storage.dao.DAOContainer; import org.skywalking.apm.collector.stream.worker.AbstractLocalAsyncWorkerProvider; import org.skywalking.apm.collector.stream.worker.ClusterWorkerContext; @@ -16,9 +16,9 @@ /** * @author pengys5 */ -public class ServiceRefPersistenceWorker extends PersistenceWorker { +public class ServiceReferencePersistenceWorker extends PersistenceWorker { - public ServiceRefPersistenceWorker(Role role, ClusterWorkerContext clusterContext) { + public ServiceReferencePersistenceWorker(Role role, ClusterWorkerContext clusterContext) { super(role, clusterContext); } @@ -31,18 +31,18 @@ public ServiceRefPersistenceWorker(Role role, ClusterWorkerContext clusterContex } @Override protected IPersistenceDAO persistenceDAO() { - return (IPersistenceDAO)DAOContainer.INSTANCE.get(IServiceRefDAO.class.getName()); + return (IPersistenceDAO)DAOContainer.INSTANCE.get(IServiceReferenceDAO.class.getName()); } - public static class Factory extends AbstractLocalAsyncWorkerProvider { + public static class Factory extends AbstractLocalAsyncWorkerProvider { @Override public Role role() { return WorkerRole.INSTANCE; } @Override - public ServiceRefPersistenceWorker workerInstance(ClusterWorkerContext clusterContext) { - return new ServiceRefPersistenceWorker(role(), clusterContext); + public ServiceReferencePersistenceWorker workerInstance(ClusterWorkerContext clusterContext) { + return new ServiceReferencePersistenceWorker(role(), clusterContext); } @Override @@ -56,7 +56,7 @@ public enum WorkerRole implements Role { @Override public String roleName() { - return ServiceRefPersistenceWorker.class.getSimpleName(); + return ServiceReferencePersistenceWorker.class.getSimpleName(); } @Override @@ -65,7 +65,7 @@ public WorkerSelector workerSelector() { } @Override public DataDefine dataDefine() { - return new ServiceRefDataDefine(); + return new ServiceReferenceDataDefine(); } } } diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/reference/ServiceRefRemoteWorker.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/ServiceReferenceRemoteWorker.java similarity index 70% rename from apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/reference/ServiceRefRemoteWorker.java rename to apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/ServiceReferenceRemoteWorker.java index db173b96cdc4..9a73eb030b86 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/reference/ServiceRefRemoteWorker.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/ServiceReferenceRemoteWorker.java @@ -1,6 +1,6 @@ -package org.skywalking.apm.collector.agentstream.worker.serviceref.reference; +package org.skywalking.apm.collector.agentstream.worker.serviceref; -import org.skywalking.apm.collector.storage.define.serviceref.ServiceRefDataDefine; +import org.skywalking.apm.collector.storage.define.serviceref.ServiceReferenceDataDefine; import org.skywalking.apm.collector.stream.worker.AbstractRemoteWorker; import org.skywalking.apm.collector.stream.worker.AbstractRemoteWorkerProvider; import org.skywalking.apm.collector.stream.worker.ClusterWorkerContext; @@ -14,9 +14,9 @@ /** * @author pengys5 */ -public class ServiceRefRemoteWorker extends AbstractRemoteWorker { +public class ServiceReferenceRemoteWorker extends AbstractRemoteWorker { - protected ServiceRefRemoteWorker(Role role, ClusterWorkerContext clusterContext) { + protected ServiceReferenceRemoteWorker(Role role, ClusterWorkerContext clusterContext) { super(role, clusterContext); } @@ -25,18 +25,18 @@ protected ServiceRefRemoteWorker(Role role, ClusterWorkerContext clusterContext) } @Override protected void onWork(Object message) throws WorkerException { - getClusterContext().lookup(ServiceRefPersistenceWorker.WorkerRole.INSTANCE).tell(message); + getClusterContext().lookup(ServiceReferencePersistenceWorker.WorkerRole.INSTANCE).tell(message); } - public static class Factory extends AbstractRemoteWorkerProvider { + public static class Factory extends AbstractRemoteWorkerProvider { @Override public Role role() { return WorkerRole.INSTANCE; } @Override - public ServiceRefRemoteWorker workerInstance(ClusterWorkerContext clusterContext) { - return new ServiceRefRemoteWorker(role(), clusterContext); + public ServiceReferenceRemoteWorker workerInstance(ClusterWorkerContext clusterContext) { + return new ServiceReferenceRemoteWorker(role(), clusterContext); } } @@ -45,7 +45,7 @@ public enum WorkerRole implements Role { @Override public String roleName() { - return ServiceRefRemoteWorker.class.getSimpleName(); + return ServiceReferenceRemoteWorker.class.getSimpleName(); } @Override @@ -54,7 +54,7 @@ public WorkerSelector workerSelector() { } @Override public DataDefine dataDefine() { - return new ServiceRefDataDefine(); + return new ServiceReferenceDataDefine(); } } } 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 new file mode 100644 index 000000000000..634fa7589d50 --- /dev/null +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/ServiceReferenceSpanListener.java @@ -0,0 +1,214 @@ +package org.skywalking.apm.collector.agentstream.worker.serviceref; + +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; +import org.skywalking.apm.collector.core.util.Const; +import org.skywalking.apm.collector.core.util.TimeBucketUtils; +import org.skywalking.apm.collector.storage.define.serviceref.ServiceReferenceDataDefine; +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; +import org.slf4j.LoggerFactory; + +/** + * @author pengys5 + */ +public class ServiceReferenceSpanListener implements FirstSpanListener, EntrySpanListener, ExitSpanListener, 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 = ""; + private long startTime = 0; + private long endTime = 0; + private boolean isError = false; + private long timeBucket; + + @Override + public void parseFirst(SpanObject spanObject, int applicationId, int applicationInstanceId, String segmentId) { + timeBucket = TimeBucketUtils.INSTANCE.getMinuteTimeBucket(spanObject.getStartTime()); + } + + @Override public void parseRef(TraceSegmentReference reference, int applicationId, int applicationInstanceId, + String segmentId) { + referenceServices.add(reference); + } + + @Override + public void parseEntry(SpanObject spanObject, int applicationId, int applicationInstanceId, String segmentId) { + serviceId = spanObject.getOperationNameId(); + if (spanObject.getOperationNameId() == 0) { + serviceName = String.valueOf(applicationId) + Const.ID_SPLIT + spanObject.getOperationName(); + } else { + serviceName = Const.EMPTY_STRING; + } + startTime = spanObject.getStartTime(); + endTime = spanObject.getEndTime(); + isError = spanObject.getIsError(); + } + + @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) { + long cost = endTime - startTime; + if (cost <= 1000 && !isError) { + serviceReference.setS1Lte(1); + } else if (1000 < cost && cost <= 3000 && !isError) { + serviceReference.setS3Lte(1); + } else if (3000 < cost && cost <= 5000 && !isError) { + serviceReference.setS5Lte(1); + } else if (5000 < cost && !isError) { + serviceReference.setS5Gt(1); + } else { + serviceReference.setError(1); + } + serviceReference.setSummary(1); + serviceReference.setCostSummary(cost); + } + + @Override public void build() { + logger.debug("service reference listener build"); + 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 -> { + 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, + ServiceReferenceDataDefine.ServiceReference serviceReference, int entryServiceId, String entryServiceName, + int frontServiceId, String frontServiceName, int behindServiceId, String behindServiceName) { + + StringBuilder idBuilder = new StringBuilder(); + idBuilder.append(timeBucket).append(Const.ID_SPLIT); + if (entryServiceId == 0) { + idBuilder.append(entryServiceName).append(Const.ID_SPLIT); + serviceReference.setEntryServiceId(0); + serviceReference.setEntryServiceName(entryServiceName); + } else { + idBuilder.append(entryServiceId).append(Const.ID_SPLIT); + serviceReference.setEntryServiceId(entryServiceId); + serviceReference.setEntryServiceName(Const.EMPTY_STRING); + } + + if (frontServiceId == 0) { + idBuilder.append(frontServiceName).append(Const.ID_SPLIT); + serviceReference.setFrontServiceId(0); + serviceReference.setFrontServiceName(frontServiceName); + } else { + idBuilder.append(frontServiceId).append(Const.ID_SPLIT); + serviceReference.setFrontServiceId(frontServiceId); + serviceReference.setFrontServiceName(Const.EMPTY_STRING); + } + + if (behindServiceId == 0) { + idBuilder.append(behindServiceName); + serviceReference.setBehindServiceId(0); + serviceReference.setBehindServiceName(behindServiceName); + } else { + idBuilder.append(behindServiceId); + serviceReference.setBehindServiceId(behindServiceId); + serviceReference.setBehindServiceName(Const.EMPTY_STRING); + } + + serviceReference.setId(idBuilder.toString()); + serviceReference.setTimeBucket(timeBucket); + try { + logger.debug("send to service reference aggregation worker, id: {}", serviceReference.getId()); + context.getClusterWorkerContext().lookup(ServiceReferenceAggregationWorker.WorkerRole.INSTANCE).tell(serviceReference.toData()); + } catch (WorkerInvokeException | WorkerNotFoundException e) { + logger.error(e.getMessage(), e); + } + } + + private String buildServiceName(int instanceId, int serviceId, String serviceName) { + if (serviceId == 0) { + int applicationId = InstanceCache.get(instanceId); + return String.valueOf(applicationId) + Const.ID_SPLIT + serviceName; + } else { + return Const.EMPTY_STRING; + } + } +} diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/reference/dao/IServiceRefDAO.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/dao/IServiceReferenceDAO.java similarity index 64% rename from apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/reference/dao/IServiceRefDAO.java rename to apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/dao/IServiceReferenceDAO.java index a3ae8b47aa61..7dd4ad065864 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/reference/dao/IServiceRefDAO.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/dao/IServiceReferenceDAO.java @@ -1,7 +1,7 @@ -package org.skywalking.apm.collector.agentstream.worker.serviceref.reference.dao; +package org.skywalking.apm.collector.agentstream.worker.serviceref.dao; /** * @author pengys5 */ -public interface IServiceRefDAO { +public interface IServiceReferenceDAO { } diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/dao/ServiceReferenceEsDAO.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/dao/ServiceReferenceEsDAO.java new file mode 100644 index 000000000000..e20910e0431c --- /dev/null +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/dao/ServiceReferenceEsDAO.java @@ -0,0 +1,87 @@ +package org.skywalking.apm.collector.agentstream.worker.serviceref.dao; + +import java.util.HashMap; +import java.util.Map; +import org.elasticsearch.action.get.GetResponse; +import org.elasticsearch.action.index.IndexRequestBuilder; +import org.elasticsearch.action.update.UpdateRequestBuilder; +import org.skywalking.apm.collector.core.stream.Data; +import org.skywalking.apm.collector.storage.define.DataDefine; +import org.skywalking.apm.collector.storage.define.serviceref.ServiceReferenceTable; +import org.skywalking.apm.collector.storage.elasticsearch.dao.EsDAO; +import org.skywalking.apm.collector.stream.worker.impl.dao.IPersistenceDAO; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @author pengys5 + */ +public class ServiceReferenceEsDAO extends EsDAO implements IServiceReferenceDAO, IPersistenceDAO { + + private final Logger logger = LoggerFactory.getLogger(ServiceReferenceEsDAO.class); + + @Override public Data get(String id, DataDefine dataDefine) { + GetResponse getResponse = getClient().prepareGet(ServiceReferenceTable.TABLE, id).get(); + if (getResponse.isExists()) { + Data data = dataDefine.build(id); + Map source = getResponse.getSource(); + data.setDataInteger(0, ((Number)source.get(ServiceReferenceTable.COLUMN_ENTRY_SERVICE_ID)).intValue()); + data.setDataString(1, (String)source.get(ServiceReferenceTable.COLUMN_ENTRY_SERVICE_NAME)); + data.setDataInteger(1, ((Number)source.get(ServiceReferenceTable.COLUMN_FRONT_SERVICE_ID)).intValue()); + data.setDataString(2, (String)source.get(ServiceReferenceTable.COLUMN_FRONT_SERVICE_NAME)); + data.setDataInteger(2, ((Number)source.get(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_ID)).intValue()); + data.setDataString(3, (String)source.get(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_NAME)); + data.setDataLong(0, ((Number)source.get(ServiceReferenceTable.COLUMN_S1_LTE)).longValue()); + data.setDataLong(1, ((Number)source.get(ServiceReferenceTable.COLUMN_S3_LTE)).longValue()); + data.setDataLong(2, ((Number)source.get(ServiceReferenceTable.COLUMN_S5_LTE)).longValue()); + data.setDataLong(3, ((Number)source.get(ServiceReferenceTable.COLUMN_S5_GT)).longValue()); + data.setDataLong(4, ((Number)source.get(ServiceReferenceTable.COLUMN_SUMMARY)).longValue()); + data.setDataLong(5, ((Number)source.get(ServiceReferenceTable.COLUMN_ERROR)).longValue()); + data.setDataLong(6, ((Number)source.get(ServiceReferenceTable.COLUMN_COST_SUMMARY)).longValue()); + data.setDataLong(7, ((Number)source.get(ServiceReferenceTable.COLUMN_TIME_BUCKET)).longValue()); + return data; + } else { + return null; + } + } + + @Override public IndexRequestBuilder prepareBatchInsert(Data data) { + Map source = new HashMap<>(); + source.put(ServiceReferenceTable.COLUMN_ENTRY_SERVICE_ID, data.getDataInteger(0)); + source.put(ServiceReferenceTable.COLUMN_ENTRY_SERVICE_NAME, data.getDataString(1)); + source.put(ServiceReferenceTable.COLUMN_FRONT_SERVICE_ID, data.getDataInteger(1)); + source.put(ServiceReferenceTable.COLUMN_FRONT_SERVICE_NAME, data.getDataString(2)); + source.put(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_ID, data.getDataInteger(2)); + source.put(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_NAME, data.getDataString(3)); + source.put(ServiceReferenceTable.COLUMN_S1_LTE, data.getDataLong(0)); + source.put(ServiceReferenceTable.COLUMN_S3_LTE, data.getDataLong(1)); + source.put(ServiceReferenceTable.COLUMN_S5_LTE, data.getDataLong(2)); + source.put(ServiceReferenceTable.COLUMN_S5_GT, data.getDataLong(3)); + source.put(ServiceReferenceTable.COLUMN_SUMMARY, data.getDataLong(4)); + source.put(ServiceReferenceTable.COLUMN_ERROR, data.getDataLong(5)); + source.put(ServiceReferenceTable.COLUMN_COST_SUMMARY, data.getDataLong(6)); + source.put(ServiceReferenceTable.COLUMN_TIME_BUCKET, data.getDataLong(7)); + + return getClient().prepareIndex(ServiceReferenceTable.TABLE, data.getDataString(0)).setSource(source); + } + + @Override public UpdateRequestBuilder prepareBatchUpdate(Data data) { + Map source = new HashMap<>(); + source.put(ServiceReferenceTable.COLUMN_ENTRY_SERVICE_ID, data.getDataInteger(0)); + source.put(ServiceReferenceTable.COLUMN_ENTRY_SERVICE_NAME, data.getDataString(1)); + source.put(ServiceReferenceTable.COLUMN_FRONT_SERVICE_ID, data.getDataInteger(1)); + source.put(ServiceReferenceTable.COLUMN_FRONT_SERVICE_NAME, data.getDataString(2)); + source.put(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_ID, data.getDataInteger(2)); + source.put(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_NAME, data.getDataString(3)); + source.put(ServiceReferenceTable.COLUMN_S1_LTE, data.getDataLong(0)); + source.put(ServiceReferenceTable.COLUMN_S3_LTE, data.getDataLong(1)); + source.put(ServiceReferenceTable.COLUMN_S5_LTE, data.getDataLong(2)); + source.put(ServiceReferenceTable.COLUMN_S5_GT, data.getDataLong(3)); + source.put(ServiceReferenceTable.COLUMN_SUMMARY, data.getDataLong(4)); + source.put(ServiceReferenceTable.COLUMN_ERROR, data.getDataLong(5)); + source.put(ServiceReferenceTable.COLUMN_COST_SUMMARY, data.getDataLong(6)); + source.put(ServiceReferenceTable.COLUMN_TIME_BUCKET, data.getDataLong(7)); + + return getClient().prepareUpdate(ServiceReferenceTable.TABLE, data.getDataString(0)).setDoc(source); + } +} diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/reference/dao/ServiceRefH2DAO.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/dao/ServiceReferenceH2DAO.java similarity index 83% rename from apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/reference/dao/ServiceRefH2DAO.java rename to apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/dao/ServiceReferenceH2DAO.java index 2651771ef81a..33d2957de556 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/reference/dao/ServiceRefH2DAO.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/dao/ServiceReferenceH2DAO.java @@ -1,4 +1,4 @@ -package org.skywalking.apm.collector.agentstream.worker.serviceref.reference.dao; +package org.skywalking.apm.collector.agentstream.worker.serviceref.dao; import org.skywalking.apm.collector.storage.h2.dao.H2DAO; import org.skywalking.apm.collector.stream.worker.impl.dao.IPersistenceDAO; @@ -8,7 +8,7 @@ /** * @author pengys5 */ -public class ServiceRefH2DAO extends H2DAO implements IServiceRefDAO, IPersistenceDAO { +public class ServiceReferenceH2DAO extends H2DAO implements IServiceReferenceDAO, IPersistenceDAO { @Override public Data get(String id, DataDefine dataDefine) { return null; diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/define/ServiceReferenceEsTableDefine.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/define/ServiceReferenceEsTableDefine.java new file mode 100644 index 000000000000..efbe857c21c6 --- /dev/null +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/define/ServiceReferenceEsTableDefine.java @@ -0,0 +1,45 @@ +package org.skywalking.apm.collector.agentstream.worker.serviceref.define; + +import org.skywalking.apm.collector.storage.define.serviceref.ServiceReferenceTable; +import org.skywalking.apm.collector.storage.elasticsearch.define.ElasticSearchColumnDefine; +import org.skywalking.apm.collector.storage.elasticsearch.define.ElasticSearchTableDefine; + +/** + * @author pengys5 + */ +public class ServiceReferenceEsTableDefine extends ElasticSearchTableDefine { + + public ServiceReferenceEsTableDefine() { + super(ServiceReferenceTable.TABLE); + } + + @Override public int refreshInterval() { + return 2; + } + + @Override public int numberOfShards() { + return 2; + } + + @Override public int numberOfReplicas() { + return 0; + } + + @Override public void initialize() { + addColumn(new ElasticSearchColumnDefine(ServiceReferenceTable.COLUMN_AGG, ElasticSearchColumnDefine.Type.Keyword.name())); + addColumn(new ElasticSearchColumnDefine(ServiceReferenceTable.COLUMN_ENTRY_SERVICE_ID, ElasticSearchColumnDefine.Type.Integer.name())); + addColumn(new ElasticSearchColumnDefine(ServiceReferenceTable.COLUMN_ENTRY_SERVICE_NAME, ElasticSearchColumnDefine.Type.Keyword.name())); + addColumn(new ElasticSearchColumnDefine(ServiceReferenceTable.COLUMN_FRONT_SERVICE_ID, ElasticSearchColumnDefine.Type.Integer.name())); + addColumn(new ElasticSearchColumnDefine(ServiceReferenceTable.COLUMN_FRONT_SERVICE_NAME, ElasticSearchColumnDefine.Type.Keyword.name())); + addColumn(new ElasticSearchColumnDefine(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_ID, ElasticSearchColumnDefine.Type.Integer.name())); + addColumn(new ElasticSearchColumnDefine(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_NAME, ElasticSearchColumnDefine.Type.Keyword.name())); + addColumn(new ElasticSearchColumnDefine(ServiceReferenceTable.COLUMN_S1_LTE, ElasticSearchColumnDefine.Type.Long.name())); + addColumn(new ElasticSearchColumnDefine(ServiceReferenceTable.COLUMN_S3_LTE, ElasticSearchColumnDefine.Type.Long.name())); + addColumn(new ElasticSearchColumnDefine(ServiceReferenceTable.COLUMN_S5_LTE, ElasticSearchColumnDefine.Type.Long.name())); + addColumn(new ElasticSearchColumnDefine(ServiceReferenceTable.COLUMN_S5_GT, ElasticSearchColumnDefine.Type.Long.name())); + addColumn(new ElasticSearchColumnDefine(ServiceReferenceTable.COLUMN_SUMMARY, ElasticSearchColumnDefine.Type.Long.name())); + addColumn(new ElasticSearchColumnDefine(ServiceReferenceTable.COLUMN_ERROR, ElasticSearchColumnDefine.Type.Long.name())); + addColumn(new ElasticSearchColumnDefine(ServiceReferenceTable.COLUMN_COST_SUMMARY, ElasticSearchColumnDefine.Type.Long.name())); + addColumn(new ElasticSearchColumnDefine(ServiceReferenceTable.COLUMN_TIME_BUCKET, ElasticSearchColumnDefine.Type.Long.name())); + } +} diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/define/ServiceReferenceH2TableDefine.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/define/ServiceReferenceH2TableDefine.java new file mode 100644 index 000000000000..1ab15c0201b1 --- /dev/null +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/define/ServiceReferenceH2TableDefine.java @@ -0,0 +1,33 @@ +package org.skywalking.apm.collector.agentstream.worker.serviceref.define; + +import org.skywalking.apm.collector.storage.define.serviceref.ServiceReferenceTable; +import org.skywalking.apm.collector.storage.h2.define.H2ColumnDefine; +import org.skywalking.apm.collector.storage.h2.define.H2TableDefine; + +/** + * @author pengys5 + */ +public class ServiceReferenceH2TableDefine extends H2TableDefine { + + public ServiceReferenceH2TableDefine() { + super(ServiceReferenceTable.TABLE); + } + + @Override public void initialize() { + addColumn(new H2ColumnDefine(ServiceReferenceTable.COLUMN_ID, H2ColumnDefine.Type.Varchar.name())); + addColumn(new H2ColumnDefine(ServiceReferenceTable.COLUMN_ENTRY_SERVICE_ID, H2ColumnDefine.Type.Int.name())); + addColumn(new H2ColumnDefine(ServiceReferenceTable.COLUMN_ENTRY_SERVICE_NAME, H2ColumnDefine.Type.Varchar.name())); + addColumn(new H2ColumnDefine(ServiceReferenceTable.COLUMN_FRONT_SERVICE_ID, H2ColumnDefine.Type.Int.name())); + addColumn(new H2ColumnDefine(ServiceReferenceTable.COLUMN_FRONT_SERVICE_NAME, H2ColumnDefine.Type.Varchar.name())); + addColumn(new H2ColumnDefine(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_ID, H2ColumnDefine.Type.Int.name())); + addColumn(new H2ColumnDefine(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_NAME, H2ColumnDefine.Type.Varchar.name())); + addColumn(new H2ColumnDefine(ServiceReferenceTable.COLUMN_S1_LTE, H2ColumnDefine.Type.Bigint.name())); + addColumn(new H2ColumnDefine(ServiceReferenceTable.COLUMN_S3_LTE, H2ColumnDefine.Type.Bigint.name())); + addColumn(new H2ColumnDefine(ServiceReferenceTable.COLUMN_S5_LTE, H2ColumnDefine.Type.Bigint.name())); + addColumn(new H2ColumnDefine(ServiceReferenceTable.COLUMN_S5_GT, H2ColumnDefine.Type.Bigint.name())); + addColumn(new H2ColumnDefine(ServiceReferenceTable.COLUMN_SUMMARY, H2ColumnDefine.Type.Bigint.name())); + addColumn(new H2ColumnDefine(ServiceReferenceTable.COLUMN_ERROR, H2ColumnDefine.Type.Bigint.name())); + addColumn(new H2ColumnDefine(ServiceReferenceTable.COLUMN_COST_SUMMARY, H2ColumnDefine.Type.Bigint.name())); + addColumn(new H2ColumnDefine(ServiceReferenceTable.COLUMN_TIME_BUCKET, H2ColumnDefine.Type.Bigint.name())); + } +} diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/reference/ServiceRefSpanListener.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/reference/ServiceRefSpanListener.java deleted file mode 100644 index fa7029761f05..000000000000 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/reference/ServiceRefSpanListener.java +++ /dev/null @@ -1,136 +0,0 @@ -package org.skywalking.apm.collector.agentstream.worker.serviceref.reference; - -import java.util.ArrayList; -import java.util.List; -import org.skywalking.apm.collector.core.util.Const; -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.storage.define.serviceref.ServiceRefDataDefine; -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.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.SpanObject; -import org.skywalking.apm.network.proto.TraceSegmentReference; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * @author pengys5 - */ -public class ServiceRefSpanListener implements FirstSpanListener, EntrySpanListener, ExitSpanListener, RefsListener { - - private final Logger logger = LoggerFactory.getLogger(ServiceRefSpanListener.class); - - private List exitServiceNames = new ArrayList<>(); - private String currentServiceName; - private List referenceServices = new ArrayList<>(); - private boolean hasReference = false; - private long timeBucket; - - @Override - public void parseFirst(SpanObject spanObject, int applicationId, int applicationInstanceId, String segmentId) { - timeBucket = TimeBucketUtils.INSTANCE.getMinuteTimeBucket(spanObject.getStartTime()); - } - - @Override public void parseRef(TraceSegmentReference reference, int applicationId, int applicationInstanceId, - String segmentId) { - int entryApplicationId = InstanceCache.get(reference.getEntryApplicationInstanceId()); - String entryServiceName = reference.getEntryServiceName(); - if (reference.getEntryServiceId() != 0) { - entryServiceName = ExchangeMarkUtils.INSTANCE.buildMarkedID(reference.getEntryServiceId()); - } - entryServiceName = ExchangeMarkUtils.INSTANCE.buildMarkedID(entryApplicationId) + Const.ID_SPLIT + entryServiceName; - - int parentApplicationId = InstanceCache.get(reference.getParentApplicationInstanceId()); - String parentServiceName = ExchangeMarkUtils.INSTANCE.buildMarkedID(reference.getParentServiceId()); - if (reference.getParentServiceId() == 0) { - parentServiceName = reference.getParentServiceName(); - } - parentServiceName = ExchangeMarkUtils.INSTANCE.buildMarkedID(parentApplicationId) + Const.ID_SPLIT + parentServiceName; - - referenceServices.add(new ServiceTemp(entryServiceName, parentServiceName)); - hasReference = true; - } - - @Override - public void parseEntry(SpanObject spanObject, int applicationId, int applicationInstanceId, String segmentId) { - String serviceName = spanObject.getOperationName(); - if (spanObject.getOperationNameId() != 0) { - serviceName = ExchangeMarkUtils.INSTANCE.buildMarkedID(spanObject.getOperationNameId()); - } - - serviceName = ExchangeMarkUtils.INSTANCE.buildMarkedID(applicationId) + Const.ID_SPLIT + serviceName; - currentServiceName = serviceName; - } - - @Override - public void parseExit(SpanObject spanObject, int applicationId, int applicationInstanceId, String segmentId) { - String serviceName = ExchangeMarkUtils.INSTANCE.buildMarkedID(spanObject.getOperationNameId()); - if (spanObject.getOperationNameId() == 0) { - serviceName = spanObject.getOperationName(); - } - serviceName = ExchangeMarkUtils.INSTANCE.buildMarkedID(applicationId) + Const.ID_SPLIT + serviceName; - exitServiceNames.add(serviceName); - } - - @Override public void build() { - logger.debug("service reference listener build"); - StreamModuleContext context = (StreamModuleContext)CollectorContextHelper.INSTANCE.getContext(StreamModuleGroupDefine.GROUP_NAME); - - List serviceReferences = new ArrayList<>(); - for (ServiceTemp referenceService : referenceServices) { - String agg = referenceService.parentServiceName + Const.ID_SPLIT + currentServiceName; - ServiceRefDataDefine.ServiceReference serviceReference = new ServiceRefDataDefine.ServiceReference(); - serviceReference.setId(timeBucket + Const.ID_SPLIT + referenceService.entryServiceName + Const.ID_SPLIT + agg); - serviceReference.setEntryService(referenceService.entryServiceName); - serviceReference.setAgg(agg); - serviceReference.setTimeBucket(timeBucket); - - serviceReferences.add(serviceReference); - } - - for (String exitServiceName : exitServiceNames) { - String entryServiceName; - if (referenceServices.size() > 0) { - entryServiceName = referenceServices.get(0).entryServiceName; - } else { - entryServiceName = currentServiceName; - } - - String agg = currentServiceName + Const.ID_SPLIT + exitServiceName; - ServiceRefDataDefine.ServiceReference serviceReference = new ServiceRefDataDefine.ServiceReference(); - serviceReference.setId(timeBucket + Const.ID_SPLIT + entryServiceName + Const.ID_SPLIT + agg); - serviceReference.setEntryService(entryServiceName); - serviceReference.setAgg(agg); - serviceReference.setTimeBucket(timeBucket); - - serviceReferences.add(serviceReference); - } - - for (ServiceRefDataDefine.ServiceReference serviceReference : serviceReferences) { - try { - logger.debug("send to service reference aggregation worker, id: {}", serviceReference.getId()); - context.getClusterWorkerContext().lookup(ServiceRefAggregationWorker.WorkerRole.INSTANCE).tell(serviceReference.toData()); - } catch (WorkerInvokeException | WorkerNotFoundException e) { - logger.error(e.getMessage(), e); - } - } - } - - class ServiceTemp { - private final String entryServiceName; - private final String parentServiceName; - - public ServiceTemp(String entryServiceName, String parentServiceName) { - this.entryServiceName = entryServiceName; - this.parentServiceName = parentServiceName; - } - } -} diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/reference/dao/ServiceRefEsDAO.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/reference/dao/ServiceRefEsDAO.java deleted file mode 100644 index f84cf436fea8..000000000000 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/reference/dao/ServiceRefEsDAO.java +++ /dev/null @@ -1,54 +0,0 @@ -package org.skywalking.apm.collector.agentstream.worker.serviceref.reference.dao; - -import java.util.HashMap; -import java.util.Map; -import org.elasticsearch.action.get.GetResponse; -import org.elasticsearch.action.index.IndexRequestBuilder; -import org.elasticsearch.action.update.UpdateRequestBuilder; -import org.skywalking.apm.collector.storage.define.serviceref.ServiceRefTable; -import org.skywalking.apm.collector.storage.elasticsearch.dao.EsDAO; -import org.skywalking.apm.collector.stream.worker.impl.dao.IPersistenceDAO; -import org.skywalking.apm.collector.core.stream.Data; -import org.skywalking.apm.collector.storage.define.DataDefine; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * @author pengys5 - */ -public class ServiceRefEsDAO extends EsDAO implements IServiceRefDAO, IPersistenceDAO { - - private final Logger logger = LoggerFactory.getLogger(ServiceRefEsDAO.class); - - @Override public Data get(String id, DataDefine dataDefine) { - GetResponse getResponse = getClient().prepareGet(ServiceRefTable.TABLE, id).get(); - if (getResponse.isExists()) { - Data data = dataDefine.build(id); - Map source = getResponse.getSource(); - data.setDataString(1, (String)source.get(ServiceRefTable.COLUMN_ENTRY_SERVICE)); - data.setDataString(2, (String)source.get(ServiceRefTable.COLUMN_AGG)); - data.setDataLong(0, (Long)source.get(ServiceRefTable.COLUMN_TIME_BUCKET)); - return data; - } else { - return null; - } - } - - @Override public IndexRequestBuilder prepareBatchInsert(Data data) { - Map source = new HashMap<>(); - source.put(ServiceRefTable.COLUMN_ENTRY_SERVICE, data.getDataString(1)); - source.put(ServiceRefTable.COLUMN_AGG, data.getDataString(2)); - source.put(ServiceRefTable.COLUMN_TIME_BUCKET, data.getDataLong(0)); - - return getClient().prepareIndex(ServiceRefTable.TABLE, data.getDataString(0)).setSource(source); - } - - @Override public UpdateRequestBuilder prepareBatchUpdate(Data data) { - Map source = new HashMap<>(); - source.put(ServiceRefTable.COLUMN_ENTRY_SERVICE, data.getDataString(1)); - source.put(ServiceRefTable.COLUMN_AGG, data.getDataString(2)); - source.put(ServiceRefTable.COLUMN_TIME_BUCKET, data.getDataLong(0)); - - return getClient().prepareUpdate(ServiceRefTable.TABLE, data.getDataString(0)).setDoc(source); - } -} diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/reference/define/ServiceRefEsTableDefine.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/reference/define/ServiceRefEsTableDefine.java deleted file mode 100644 index e8766a225f2e..000000000000 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/reference/define/ServiceRefEsTableDefine.java +++ /dev/null @@ -1,33 +0,0 @@ -package org.skywalking.apm.collector.agentstream.worker.serviceref.reference.define; - -import org.skywalking.apm.collector.storage.define.serviceref.ServiceRefTable; -import org.skywalking.apm.collector.storage.elasticsearch.define.ElasticSearchColumnDefine; -import org.skywalking.apm.collector.storage.elasticsearch.define.ElasticSearchTableDefine; - -/** - * @author pengys5 - */ -public class ServiceRefEsTableDefine extends ElasticSearchTableDefine { - - public ServiceRefEsTableDefine() { - super(ServiceRefTable.TABLE); - } - - @Override public int refreshInterval() { - return 2; - } - - @Override public int numberOfShards() { - return 2; - } - - @Override public int numberOfReplicas() { - return 0; - } - - @Override public void initialize() { - addColumn(new ElasticSearchColumnDefine(ServiceRefTable.COLUMN_AGG, ElasticSearchColumnDefine.Type.Keyword.name())); - addColumn(new ElasticSearchColumnDefine(ServiceRefTable.COLUMN_ENTRY_SERVICE, ElasticSearchColumnDefine.Type.Keyword.name())); - addColumn(new ElasticSearchColumnDefine(ServiceRefTable.COLUMN_TIME_BUCKET, ElasticSearchColumnDefine.Type.Long.name())); - } -} diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/reference/define/ServiceRefH2TableDefine.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/reference/define/ServiceRefH2TableDefine.java deleted file mode 100644 index 8c6045c5e508..000000000000 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/reference/define/ServiceRefH2TableDefine.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.skywalking.apm.collector.agentstream.worker.serviceref.reference.define; - -import org.skywalking.apm.collector.storage.define.serviceref.ServiceRefTable; -import org.skywalking.apm.collector.storage.h2.define.H2ColumnDefine; -import org.skywalking.apm.collector.storage.h2.define.H2TableDefine; - -/** - * @author pengys5 - */ -public class ServiceRefH2TableDefine extends H2TableDefine { - - public ServiceRefH2TableDefine() { - super(ServiceRefTable.TABLE); - } - - @Override public void initialize() { - addColumn(new H2ColumnDefine(ServiceRefTable.COLUMN_AGG, H2ColumnDefine.Type.Varchar.name())); - addColumn(new H2ColumnDefine(ServiceRefTable.COLUMN_ENTRY_SERVICE, H2ColumnDefine.Type.Varchar.name())); - addColumn(new H2ColumnDefine(ServiceRefTable.COLUMN_TIME_BUCKET, H2ColumnDefine.Type.Bigint.name())); - } -} diff --git a/apm-collector/apm-collector-agentstream/src/main/resources/META-INF/defines/es_dao.define b/apm-collector/apm-collector-agentstream/src/main/resources/META-INF/defines/es_dao.define index 98ec500d2f47..57e7f95ddf0b 100644 --- a/apm-collector/apm-collector-agentstream/src/main/resources/META-INF/defines/es_dao.define +++ b/apm-collector/apm-collector-agentstream/src/main/resources/META-INF/defines/es_dao.define @@ -3,11 +3,10 @@ org.skywalking.apm.collector.agentstream.worker.register.instance.dao.InstanceEs org.skywalking.apm.collector.agentstream.worker.register.servicename.dao.ServiceNameEsDAO org.skywalking.apm.collector.agentstream.worker.node.component.dao.NodeComponentEsDAO org.skywalking.apm.collector.agentstream.worker.node.mapping.dao.NodeMappingEsDAO -org.skywalking.apm.collector.agentstream.worker.noderef.reference.dao.NodeReferenceEsDAO +org.skywalking.apm.collector.agentstream.worker.noderef.dao.NodeReferenceEsDAO org.skywalking.apm.collector.agentstream.worker.segment.origin.dao.SegmentEsDAO -org.skywalking.apm.collector.agentstream.worker.noderef.summary.dao.NodeRefSumEsDAO org.skywalking.apm.collector.agentstream.worker.segment.cost.dao.SegmentCostEsDAO org.skywalking.apm.collector.agentstream.worker.global.dao.GlobalTraceEsDAO org.skywalking.apm.collector.agentstream.worker.service.entry.dao.ServiceEntryEsDAO -org.skywalking.apm.collector.agentstream.worker.serviceref.reference.dao.ServiceRefEsDAO +org.skywalking.apm.collector.agentstream.worker.serviceref.dao.ServiceReferenceEsDAO org.skywalking.apm.collector.agentstream.worker.instance.performance.dao.InstPerformanceEsDAO \ No newline at end of file diff --git a/apm-collector/apm-collector-agentstream/src/main/resources/META-INF/defines/h2_dao.define b/apm-collector/apm-collector-agentstream/src/main/resources/META-INF/defines/h2_dao.define index d8170fa440de..5d8eea1f28fa 100644 --- a/apm-collector/apm-collector-agentstream/src/main/resources/META-INF/defines/h2_dao.define +++ b/apm-collector/apm-collector-agentstream/src/main/resources/META-INF/defines/h2_dao.define @@ -3,11 +3,10 @@ org.skywalking.apm.collector.agentstream.worker.register.instance.dao.InstanceH2 org.skywalking.apm.collector.agentstream.worker.register.servicename.dao.ServiceNameH2DAO org.skywalking.apm.collector.agentstream.worker.node.component.dao.NodeComponentH2DAO org.skywalking.apm.collector.agentstream.worker.node.mapping.dao.NodeMappingH2DAO -org.skywalking.apm.collector.agentstream.worker.noderef.reference.dao.NodeReferenceH2DAO +org.skywalking.apm.collector.agentstream.worker.noderef.dao.NodeReferenceH2DAO org.skywalking.apm.collector.agentstream.worker.segment.origin.dao.SegmentH2DAO -org.skywalking.apm.collector.agentstream.worker.noderef.summary.dao.NodeRefSumH2DAO org.skywalking.apm.collector.agentstream.worker.segment.cost.dao.SegmentCostH2DAO org.skywalking.apm.collector.agentstream.worker.global.dao.GlobalTraceH2DAO org.skywalking.apm.collector.agentstream.worker.service.entry.dao.ServiceEntryH2DAO -org.skywalking.apm.collector.agentstream.worker.serviceref.reference.dao.ServiceRefH2DAO +org.skywalking.apm.collector.agentstream.worker.serviceref.dao.ServiceReferenceH2DAO org.skywalking.apm.collector.agentstream.worker.instance.performance.dao.InstPerformanceH2DAO \ No newline at end of file diff --git a/apm-collector/apm-collector-agentstream/src/main/resources/META-INF/defines/local_worker_provider.define b/apm-collector/apm-collector-agentstream/src/main/resources/META-INF/defines/local_worker_provider.define index 45ea31146889..472b02738b11 100644 --- a/apm-collector/apm-collector-agentstream/src/main/resources/META-INF/defines/local_worker_provider.define +++ b/apm-collector/apm-collector-agentstream/src/main/resources/META-INF/defines/local_worker_provider.define @@ -4,17 +4,14 @@ org.skywalking.apm.collector.agentstream.worker.node.component.NodeComponentPers org.skywalking.apm.collector.agentstream.worker.node.mapping.NodeMappingAggregationWorker$Factory org.skywalking.apm.collector.agentstream.worker.node.mapping.NodeMappingPersistenceWorker$Factory -org.skywalking.apm.collector.agentstream.worker.noderef.reference.NodeRefAggregationWorker$Factory -org.skywalking.apm.collector.agentstream.worker.noderef.reference.NodeRefPersistenceWorker$Factory - -org.skywalking.apm.collector.agentstream.worker.noderef.summary.NodeRefSumAggregationWorker$Factory -org.skywalking.apm.collector.agentstream.worker.noderef.summary.NodeRefSumPersistenceWorker$Factory +org.skywalking.apm.collector.agentstream.worker.noderef.NodeReferenceAggregationWorker$Factory +org.skywalking.apm.collector.agentstream.worker.noderef.NodeReferencePersistenceWorker$Factory org.skywalking.apm.collector.agentstream.worker.service.entry.ServiceEntryAggregationWorker$Factory org.skywalking.apm.collector.agentstream.worker.service.entry.ServiceEntryPersistenceWorker$Factory -org.skywalking.apm.collector.agentstream.worker.serviceref.reference.ServiceRefAggregationWorker$Factory -org.skywalking.apm.collector.agentstream.worker.serviceref.reference.ServiceRefPersistenceWorker$Factory +org.skywalking.apm.collector.agentstream.worker.serviceref.ServiceReferenceAggregationWorker$Factory +org.skywalking.apm.collector.agentstream.worker.serviceref.ServiceReferencePersistenceWorker$Factory org.skywalking.apm.collector.agentstream.worker.segment.origin.SegmentPersistenceWorker$Factory org.skywalking.apm.collector.agentstream.worker.segment.cost.SegmentCostPersistenceWorker$Factory diff --git a/apm-collector/apm-collector-agentstream/src/main/resources/META-INF/defines/remote_worker_provider.define b/apm-collector/apm-collector-agentstream/src/main/resources/META-INF/defines/remote_worker_provider.define index 5d59347a7525..da980634fb31 100644 --- a/apm-collector/apm-collector-agentstream/src/main/resources/META-INF/defines/remote_worker_provider.define +++ b/apm-collector/apm-collector-agentstream/src/main/resources/META-INF/defines/remote_worker_provider.define @@ -4,8 +4,7 @@ org.skywalking.apm.collector.agentstream.worker.register.servicename.ServiceName org.skywalking.apm.collector.agentstream.worker.node.component.NodeComponentRemoteWorker$Factory org.skywalking.apm.collector.agentstream.worker.node.mapping.NodeMappingRemoteWorker$Factory -org.skywalking.apm.collector.agentstream.worker.noderef.reference.NodeRefRemoteWorker$Factory -org.skywalking.apm.collector.agentstream.worker.noderef.summary.NodeRefSumRemoteWorker$Factory +org.skywalking.apm.collector.agentstream.worker.noderef.NodeReferenceRemoteWorker$Factory org.skywalking.apm.collector.agentstream.worker.service.entry.ServiceEntryRemoteWorker$Factory -org.skywalking.apm.collector.agentstream.worker.serviceref.reference.ServiceRefRemoteWorker$Factory \ No newline at end of file +org.skywalking.apm.collector.agentstream.worker.serviceref.ServiceReferenceRemoteWorker$Factory \ No newline at end of file diff --git a/apm-collector/apm-collector-agentstream/src/main/resources/META-INF/defines/storage.define b/apm-collector/apm-collector-agentstream/src/main/resources/META-INF/defines/storage.define index 6caafb6b7a24..3b03aea6102d 100644 --- a/apm-collector/apm-collector-agentstream/src/main/resources/META-INF/defines/storage.define +++ b/apm-collector/apm-collector-agentstream/src/main/resources/META-INF/defines/storage.define @@ -4,11 +4,8 @@ org.skywalking.apm.collector.agentstream.worker.node.component.define.NodeCompon org.skywalking.apm.collector.agentstream.worker.node.mapping.define.NodeMappingEsTableDefine org.skywalking.apm.collector.agentstream.worker.node.mapping.define.NodeMappingH2TableDefine -org.skywalking.apm.collector.agentstream.worker.noderef.reference.define.NodeRefEsTableDefine -org.skywalking.apm.collector.agentstream.worker.noderef.reference.define.NodeRefH2TableDefine - -org.skywalking.apm.collector.agentstream.worker.noderef.summary.define.NodeRefSumEsTableDefine -org.skywalking.apm.collector.agentstream.worker.noderef.summary.define.NodeRefSumH2TableDefine +org.skywalking.apm.collector.agentstream.worker.noderef.define.NodeReferenceEsTableDefine +org.skywalking.apm.collector.agentstream.worker.noderef.define.NodeReferenceH2TableDefine org.skywalking.apm.collector.agentstream.worker.register.application.ApplicationEsTableDefine org.skywalking.apm.collector.agentstream.worker.register.application.ApplicationH2TableDefine @@ -31,8 +28,8 @@ org.skywalking.apm.collector.agentstream.worker.global.define.GlobalTraceH2Table org.skywalking.apm.collector.agentstream.worker.service.entry.define.ServiceEntryEsTableDefine org.skywalking.apm.collector.agentstream.worker.service.entry.define.ServiceEntryH2TableDefine -org.skywalking.apm.collector.agentstream.worker.serviceref.reference.define.ServiceRefEsTableDefine -org.skywalking.apm.collector.agentstream.worker.serviceref.reference.define.ServiceRefH2TableDefine +org.skywalking.apm.collector.agentstream.worker.serviceref.define.ServiceReferenceEsTableDefine +org.skywalking.apm.collector.agentstream.worker.serviceref.define.ServiceReferenceH2TableDefine org.skywalking.apm.collector.agentstream.worker.instance.performance.define.InstPerformanceEsTableDefine org.skywalking.apm.collector.agentstream.worker.instance.performance.define.InstPerformanceH2TableDefine \ No newline at end of file diff --git a/apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/mock/SegmentPost.java b/apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/mock/SegmentPost.java index 506b0d0eec45..26dd7ce04ed4 100644 --- a/apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/mock/SegmentPost.java +++ b/apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/mock/SegmentPost.java @@ -7,10 +7,13 @@ import org.skywalking.apm.collector.agentstream.HttpClientTools; import org.skywalking.apm.collector.agentstream.worker.register.application.dao.ApplicationEsDAO; import org.skywalking.apm.collector.agentstream.worker.register.instance.dao.InstanceEsDAO; +import org.skywalking.apm.collector.agentstream.worker.register.servicename.dao.ServiceNameEsDAO; import org.skywalking.apm.collector.client.elasticsearch.ElasticSearchClient; import org.skywalking.apm.collector.core.CollectorException; +import org.skywalking.apm.collector.core.util.TimeBucketUtils; import org.skywalking.apm.collector.storage.define.register.ApplicationDataDefine; import org.skywalking.apm.collector.storage.define.register.InstanceDataDefine; +import org.skywalking.apm.collector.storage.define.register.ServiceNameDataDefine; /** * @author pengys5 @@ -20,23 +23,38 @@ public class SegmentPost { public static void main(String[] args) throws IOException, InterruptedException, CollectorException { ElasticSearchClient client = new ElasticSearchClient("CollectorDBCluster", true, "127.0.0.1:9300"); client.initialize(); + long now = TimeBucketUtils.INSTANCE.getSecondTimeBucket(System.currentTimeMillis()); InstanceEsDAO instanceEsDAO = new InstanceEsDAO(); instanceEsDAO.setClient(client); - InstanceDataDefine.Instance consumerInstance = new InstanceDataDefine.Instance("2", 2, "dubbox-consumer", 1501858094526L, 2, 1501858094526L, ""); + InstanceDataDefine.Instance consumerInstance = new InstanceDataDefine.Instance("2", 2, "dubbox-consumer", now, 2, now, ""); instanceEsDAO.save(consumerInstance); - InstanceDataDefine.Instance providerInstance = new InstanceDataDefine.Instance("3", 3, "dubbox-provider", 1501858094526L, 3, 1501858094526L, ""); + InstanceDataDefine.Instance providerInstance = new InstanceDataDefine.Instance("3", 3, "dubbox-provider", now, 3, now, ""); instanceEsDAO.save(providerInstance); ApplicationEsDAO applicationEsDAO = new ApplicationEsDAO(); applicationEsDAO.setClient(client); + ApplicationDataDefine.Application userApplication = new ApplicationDataDefine.Application("1", "User", 1); + applicationEsDAO.save(userApplication); ApplicationDataDefine.Application consumerApplication = new ApplicationDataDefine.Application("2", "dubbox-consumer", 2); applicationEsDAO.save(consumerApplication); ApplicationDataDefine.Application providerApplication = new ApplicationDataDefine.Application("3", "dubbox-provider", 3); applicationEsDAO.save(providerApplication); + ServiceNameEsDAO serviceNameEsDAO = new ServiceNameEsDAO(); + serviceNameEsDAO.setClient(client); + + ServiceNameDataDefine.ServiceName serviceName_1 = new ServiceNameDataDefine.ServiceName("1", "", 0, 1); + serviceNameEsDAO.save(serviceName_1); + ServiceNameDataDefine.ServiceName serviceName_2 = new ServiceNameDataDefine.ServiceName("2", "org.skywaking.apm.testcase.dubbo.services.GreetService.doBusiness()", 2, 2); + serviceNameEsDAO.save(serviceName_2); + ServiceNameDataDefine.ServiceName serviceName_3 = new ServiceNameDataDefine.ServiceName("3", "/dubbox-case/case/dubbox-rest", 2, 3); + serviceNameEsDAO.save(serviceName_3); + ServiceNameDataDefine.ServiceName serviceName_4 = new ServiceNameDataDefine.ServiceName("4", "org.skywaking.apm.testcase.dubbo.services.GreetService.doBusiness()", 3, 4); + serviceNameEsDAO.save(serviceName_4); + while (true) { JsonElement consumer = JsonFileReader.INSTANCE.read("json/segment/normal/dubbox-consumer.json"); modifyTime(consumer); @@ -46,7 +64,7 @@ public static void main(String[] args) throws IOException, InterruptedException, modifyTime(provider); HttpClientTools.INSTANCE.post("http://localhost:12800/segments", provider.toString()); - Thread.sleep(200); + Thread.sleep(1000); } } diff --git a/apm-collector/apm-collector-agentstream/src/test/resources/json/segment/normal/dubbox-provider.json b/apm-collector/apm-collector-agentstream/src/test/resources/json/segment/normal/dubbox-provider.json index 19b69ecaf52a..6da99d6f7938 100644 --- a/apm-collector/apm-collector-agentstream/src/test/resources/json/segment/normal/dubbox-provider.json +++ b/apm-collector/apm-collector-agentstream/src/test/resources/json/segment/normal/dubbox-provider.json @@ -25,7 +25,7 @@ "ai": 2, "si": 1, "vi": 0, - "vn": "org.skywaking.apm.testcase.dubbo.services.GreetService.doBusiness()", + "vn": "/dubbox-case/case/dubbox-rest", "ni": 0, "nn": "172.25.0.4:20880", "ea": 2, @@ -38,7 +38,7 @@ { "si": 0, "tv": 0, - "lv": 1, + "lv": 2, "ps": -1, "st": 1501858094883, "et": 1501858096950, diff --git a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/stream/Data.java b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/stream/Data.java index 6789e26e212f..2a82c75d577b 100644 --- a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/stream/Data.java +++ b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/stream/Data.java @@ -86,4 +86,29 @@ public byte[] getDataBytes(int position) { public String id() { return dataStrings[0]; } + + @Override public String toString() { + StringBuilder dataStr = new StringBuilder(); + dataStr.append("string: ["); + for (int i = 0; i < dataStrings.length; i++) { + dataStr.append(dataStrings[i]).append(","); + } + dataStr.append("], longs: ["); + for (int i = 0; i < dataLongs.length; i++) { + dataStr.append(dataLongs[i]).append(","); + } + dataStr.append("], double: ["); + for (int i = 0; i < dataDoubles.length; i++) { + dataStr.append(dataDoubles[i]).append(","); + } + dataStr.append("], integer: ["); + for (int i = 0; i < dataIntegers.length; i++) { + dataStr.append(dataIntegers[i]).append(","); + } + dataStr.append("], boolean: ["); + for (int i = 0; i < dataBooleans.length; i++) { + dataStr.append(dataBooleans[i]).append(","); + } + return dataStr.toString(); + } } diff --git a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/util/ColumnNameUtils.java b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/util/ColumnNameUtils.java new file mode 100644 index 000000000000..9dca8a809d40 --- /dev/null +++ b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/util/ColumnNameUtils.java @@ -0,0 +1,26 @@ +package org.skywalking.apm.collector.core.util; + +/** + * @author pengys5 + */ +public enum ColumnNameUtils { + INSTANCE; + + public String rename(String columnName) { + StringBuilder renamedColumnName = new StringBuilder(); + char[] chars = columnName.toLowerCase().toCharArray(); + + boolean findUnderline = false; + for (char character : chars) { + if (character == '_') { + findUnderline = true; + } else if (findUnderline) { + renamedColumnName.append(String.valueOf(character).toUpperCase()); + findUnderline = false; + } else { + renamedColumnName.append(character); + } + } + return renamedColumnName.toString(); + } +} 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 942ef9f3b30c..70af1e7adde6 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 @@ -4,11 +4,12 @@ * @author pengys5 */ public class Const { - public static final String ID_SPLIT = "..-.."; - public static final String IDS_SPLIT = "\\.\\.-\\.\\."; + 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 USER_CODE = "User"; public static final String SEGMENT_SPAN_SPLIT = "S"; public static final String UNKNOWN = "Unknown"; public static final String EXCEPTION = "Exception"; + public static final String EMPTY_STRING = ""; } 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 7d2728ae5579..7178e79ff3a2 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 @@ -3,6 +3,7 @@ import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.TimeZone; +import org.skywalking.apm.collector.core.framework.UnexpectedException; /** * @author pengys5 @@ -43,6 +44,29 @@ public long getDayTimeBucket(long time) { return Long.valueOf(timeStr); } + public long changeTimeBucket2TimeStamp(String timeBucketType, long timeBucket) { + if (TimeBucketType.SECOND.name().toLowerCase().equals(timeBucketType.toLowerCase())) { + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.YEAR, Integer.valueOf(String.valueOf(timeBucket).substring(0, 4))); + calendar.set(Calendar.MONTH, Integer.valueOf(String.valueOf(timeBucket).substring(4, 6)) - 1); + calendar.set(Calendar.DAY_OF_MONTH, Integer.valueOf(String.valueOf(timeBucket).substring(6, 8))); + calendar.set(Calendar.HOUR_OF_DAY, Integer.valueOf(String.valueOf(timeBucket).substring(8, 10))); + calendar.set(Calendar.MINUTE, Integer.valueOf(String.valueOf(timeBucket).substring(10, 12))); + calendar.set(Calendar.SECOND, Integer.valueOf(String.valueOf(timeBucket).substring(12, 14))); + return calendar.getTimeInMillis(); + } else if (TimeBucketType.MINUTE.name().toLowerCase().equals(timeBucketType.toLowerCase())) { + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.YEAR, Integer.valueOf(String.valueOf(timeBucket).substring(0, 4))); + calendar.set(Calendar.MONTH, Integer.valueOf(String.valueOf(timeBucket).substring(4, 6)) - 1); + calendar.set(Calendar.DAY_OF_MONTH, Integer.valueOf(String.valueOf(timeBucket).substring(6, 8))); + calendar.set(Calendar.HOUR_OF_DAY, Integer.valueOf(String.valueOf(timeBucket).substring(8, 10))); + calendar.set(Calendar.MINUTE, Integer.valueOf(String.valueOf(timeBucket).substring(10, 12))); + return calendar.getTimeInMillis(); + } else { + throw new UnexpectedException("time bucket type must be second or minute"); + } + } + public long getFiveSecondTimeBucket(long secondTimeBucket) { long mantissa = secondTimeBucket % 10; if (mantissa < 5) { @@ -63,4 +87,8 @@ public long changeToUTCTimeBucket(long timeBucket) { return timeBucket - 800; } } + + public enum TimeBucketType { + SECOND, MINUTE, HOUR, DAY + } } diff --git a/apm-collector/apm-collector-core/src/test/java/org/skywalking/apm/collector/core/utils/ColumnNameUtilsTestCase.java b/apm-collector/apm-collector-core/src/test/java/org/skywalking/apm/collector/core/utils/ColumnNameUtilsTestCase.java new file mode 100644 index 000000000000..becc4aecb6d2 --- /dev/null +++ b/apm-collector/apm-collector-core/src/test/java/org/skywalking/apm/collector/core/utils/ColumnNameUtilsTestCase.java @@ -0,0 +1,17 @@ +package org.skywalking.apm.collector.core.utils; + +import org.junit.Assert; +import org.junit.Test; +import org.skywalking.apm.collector.core.util.ColumnNameUtils; + +/** + * @author pengys5 + */ +public class ColumnNameUtilsTestCase { + + @Test + public void testRename() { + String columnName = ColumnNameUtils.INSTANCE.rename("aaa_bbb_ccc"); + Assert.assertEquals("aaaBbbCcc", columnName); + } +} 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 43e7b70dd39b..a7cc822cdec8 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 @@ -20,4 +20,11 @@ public void testGetFiveSecondTimeBucket() { fiveSecondTimeBucket = TimeBucketUtils.INSTANCE.getFiveSecondTimeBucket(20170804224815L); Assert.assertEquals(20170804224815L, fiveSecondTimeBucket); } + + @Test + public void testChangeTimeBucket2TimeStamp() { + long timeStamp = TimeBucketUtils.INSTANCE.changeTimeBucket2TimeStamp(TimeBucketUtils.TimeBucketType.MINUTE.name(), 201708120810L); + long minute = TimeBucketUtils.INSTANCE.getMinuteTimeBucket(timeStamp); + Assert.assertEquals(201708120810L, minute); + } } diff --git a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/node/NodeComponentDataDefine.java b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/node/NodeComponentDataDefine.java index 3cc9bd5fb3aa..fad5a335ae1b 100644 --- a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/node/NodeComponentDataDefine.java +++ b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/node/NodeComponentDataDefine.java @@ -1,13 +1,13 @@ package org.skywalking.apm.collector.storage.define.node; -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.core.stream.Data; -import org.skywalking.apm.collector.storage.define.DataDefine; import org.skywalking.apm.collector.core.stream.Transform; 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; /** * @author pengys5 @@ -15,13 +15,16 @@ public class NodeComponentDataDefine extends DataDefine { @Override protected int initialCapacity() { - return 3; + return 6; } @Override protected void attributeDefine() { addAttribute(0, new Attribute(NodeComponentTable.COLUMN_ID, AttributeType.STRING, new NonOperation())); - addAttribute(1, new Attribute(NodeComponentTable.COLUMN_AGG, AttributeType.STRING, new CoverOperation())); - addAttribute(2, new Attribute(NodeComponentTable.COLUMN_TIME_BUCKET, AttributeType.LONG, new CoverOperation())); + addAttribute(1, new Attribute(NodeComponentTable.COLUMN_COMPONENT_ID, AttributeType.INTEGER, new CoverOperation())); + addAttribute(2, new Attribute(NodeComponentTable.COLUMN_COMPONENT_NAME, AttributeType.STRING, new CoverOperation())); + addAttribute(3, new Attribute(NodeComponentTable.COLUMN_PEER_ID, AttributeType.INTEGER, new CoverOperation())); + addAttribute(4, new Attribute(NodeComponentTable.COLUMN_PEER, AttributeType.STRING, new CoverOperation())); + addAttribute(5, new Attribute(NodeComponentTable.COLUMN_TIME_BUCKET, AttributeType.LONG, new CoverOperation())); } @Override public Object deserialize(RemoteData remoteData) { @@ -34,12 +37,19 @@ public class NodeComponentDataDefine extends DataDefine { public static class NodeComponent implements Transform { private String id; - private String agg; + private Integer componentId; + private String componentName; + private Integer peerId; + private String peer; private long timeBucket; - NodeComponent(String id, String agg, long timeBucket) { + public NodeComponent(String id, Integer componentId, String componentName, Integer peerId, String peer, + long timeBucket) { this.id = id; - this.agg = agg; + this.componentId = componentId; + this.componentName = componentName; + this.peerId = peerId; + this.peer = peer; this.timeBucket = timeBucket; } @@ -50,14 +60,20 @@ public NodeComponent() { NodeComponentDataDefine define = new NodeComponentDataDefine(); Data data = define.build(id); data.setDataString(0, this.id); - data.setDataString(1, this.agg); + data.setDataInteger(0, this.componentId); + data.setDataString(1, this.componentName); + data.setDataInteger(1, this.peerId); + data.setDataString(2, this.peer); data.setDataLong(0, this.timeBucket); return data; } @Override public NodeComponent toSelf(Data data) { this.id = data.getDataString(0); - this.agg = data.getDataString(1); + this.componentId = data.getDataInteger(0); + this.componentName = data.getDataString(1); + this.peerId = data.getDataInteger(1); + this.peer = data.getDataString(2); this.timeBucket = data.getDataLong(0); return this; } @@ -66,10 +82,6 @@ public String getId() { return id; } - public String getAgg() { - return agg; - } - public long getTimeBucket() { return timeBucket; } @@ -78,12 +90,40 @@ public void setId(String id) { this.id = id; } - public void setAgg(String agg) { - this.agg = agg; - } - public void setTimeBucket(long timeBucket) { this.timeBucket = timeBucket; } + + public Integer getComponentId() { + return componentId; + } + + public void setComponentId(Integer componentId) { + this.componentId = componentId; + } + + public String getComponentName() { + return componentName; + } + + public void setComponentName(String componentName) { + this.componentName = componentName; + } + + public Integer getPeerId() { + return peerId; + } + + public void setPeerId(Integer peerId) { + this.peerId = peerId; + } + + public String getPeer() { + return peer; + } + + public void setPeer(String peer) { + this.peer = peer; + } } } diff --git a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/node/NodeComponentTable.java b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/node/NodeComponentTable.java index 0354e194b700..e4ab078926f0 100644 --- a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/node/NodeComponentTable.java +++ b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/node/NodeComponentTable.java @@ -7,4 +7,8 @@ */ public class NodeComponentTable extends CommonTable { public static final String TABLE = "node_component"; + public static final String COLUMN_COMPONENT_ID = "component_id"; + public static final String COLUMN_COMPONENT_NAME = "component_name"; + public static final String COLUMN_PEER = "peer"; + public static final String COLUMN_PEER_ID = "peer_id"; } diff --git a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/node/NodeMappingDataDefine.java b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/node/NodeMappingDataDefine.java index a978fe51cdcd..aea8a7d403d1 100644 --- a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/node/NodeMappingDataDefine.java +++ b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/node/NodeMappingDataDefine.java @@ -1,13 +1,13 @@ package org.skywalking.apm.collector.storage.define.node; -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.core.stream.Data; -import org.skywalking.apm.collector.storage.define.DataDefine; import org.skywalking.apm.collector.core.stream.Transform; 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; /** * @author pengys5 @@ -15,13 +15,15 @@ public class NodeMappingDataDefine extends DataDefine { @Override protected int initialCapacity() { - return 3; + return 5; } @Override protected void attributeDefine() { addAttribute(0, new Attribute(NodeMappingTable.COLUMN_ID, AttributeType.STRING, new NonOperation())); - addAttribute(1, new Attribute(NodeMappingTable.COLUMN_AGG, AttributeType.STRING, new CoverOperation())); - addAttribute(2, new Attribute(NodeMappingTable.COLUMN_TIME_BUCKET, AttributeType.LONG, new CoverOperation())); + addAttribute(1, new Attribute(NodeMappingTable.COLUMN_APPLICATION_ID, AttributeType.INTEGER, new CoverOperation())); + addAttribute(2, new Attribute(NodeMappingTable.COLUMN_ADDRESS_ID, AttributeType.INTEGER, new CoverOperation())); + addAttribute(3, new Attribute(NodeMappingTable.COLUMN_ADDRESS, AttributeType.STRING, new CoverOperation())); + addAttribute(4, new Attribute(NodeMappingTable.COLUMN_TIME_BUCKET, AttributeType.LONG, new CoverOperation())); } @Override public Object deserialize(RemoteData remoteData) { @@ -34,12 +36,16 @@ public class NodeMappingDataDefine extends DataDefine { public static class NodeMapping implements Transform { private String id; - private String agg; + private int applicationId; + private int addressId; + private String address; private long timeBucket; - NodeMapping(String id, String agg, long timeBucket) { + public NodeMapping(String id, int applicationId, int addressId, String address, long timeBucket) { this.id = id; - this.agg = agg; + this.applicationId = applicationId; + this.addressId = addressId; + this.address = address; this.timeBucket = timeBucket; } @@ -50,14 +56,18 @@ public NodeMapping() { NodeMappingDataDefine define = new NodeMappingDataDefine(); Data data = define.build(id); data.setDataString(0, this.id); - data.setDataString(1, this.agg); + data.setDataInteger(0, this.applicationId); + data.setDataInteger(1, this.addressId); + data.setDataString(1, this.address); data.setDataLong(0, this.timeBucket); return data; } @Override public NodeMapping toSelf(Data data) { this.id = data.getDataString(0); - this.agg = data.getDataString(1); + this.applicationId = data.getDataInteger(0); + this.addressId = data.getDataInteger(1); + this.address = data.getDataString(1); this.timeBucket = data.getDataLong(0); return this; } @@ -66,10 +76,6 @@ public String getId() { return id; } - public String getAgg() { - return agg; - } - public long getTimeBucket() { return timeBucket; } @@ -78,12 +84,32 @@ public void setId(String id) { this.id = id; } - public void setAgg(String agg) { - this.agg = agg; - } - public void setTimeBucket(long timeBucket) { this.timeBucket = timeBucket; } + + public int getApplicationId() { + return applicationId; + } + + public void setApplicationId(int applicationId) { + this.applicationId = applicationId; + } + + public int getAddressId() { + return addressId; + } + + public void setAddressId(int addressId) { + this.addressId = addressId; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } } } diff --git a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/node/NodeMappingTable.java b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/node/NodeMappingTable.java index 53fbd98e6250..3c775989f363 100644 --- a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/node/NodeMappingTable.java +++ b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/node/NodeMappingTable.java @@ -7,4 +7,7 @@ */ public class NodeMappingTable extends CommonTable { public static final String TABLE = "node_mapping"; + public static final String COLUMN_APPLICATION_ID = "application_id"; + public static final String COLUMN_ADDRESS_ID = "address_id"; + public static final String COLUMN_ADDRESS = "address"; } diff --git a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/noderef/NodeRefDataDefine.java b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/noderef/NodeRefDataDefine.java deleted file mode 100644 index e55efe0c994d..000000000000 --- a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/noderef/NodeRefDataDefine.java +++ /dev/null @@ -1,97 +0,0 @@ -package org.skywalking.apm.collector.storage.define.noderef; - -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.core.stream.Data; -import org.skywalking.apm.collector.storage.define.DataDefine; -import org.skywalking.apm.collector.core.stream.Transform; -import org.skywalking.apm.collector.core.stream.operate.CoverOperation; -import org.skywalking.apm.collector.core.stream.operate.NonOperation; - -/** - * @author pengys5 - */ -public class NodeRefDataDefine extends DataDefine { - - @Override protected int initialCapacity() { - return 3; - } - - @Override protected void attributeDefine() { - addAttribute(0, new Attribute(NodeRefTable.COLUMN_ID, AttributeType.STRING, new NonOperation())); - addAttribute(1, new Attribute(NodeRefTable.COLUMN_AGG, AttributeType.STRING, new CoverOperation())); - addAttribute(2, new Attribute(NodeRefTable.COLUMN_TIME_BUCKET, AttributeType.LONG, new CoverOperation())); - } - - @Override public Object deserialize(RemoteData remoteData) { - String id = remoteData.getDataStrings(0); - String agg = remoteData.getDataStrings(1); - long timeBucket = remoteData.getDataLongs(0); - return new NodeReference(id, agg, timeBucket); - } - - @Override public RemoteData serialize(Object object) { - NodeReference nodeReference = (NodeReference)object; - RemoteData.Builder builder = RemoteData.newBuilder(); - builder.addDataStrings(nodeReference.getId()); - builder.addDataStrings(nodeReference.getAgg()); - builder.addDataLongs(nodeReference.getTimeBucket()); - return builder.build(); - } - - public static class NodeReference implements Transform { - private String id; - private String agg; - private long timeBucket; - - NodeReference(String id, String agg, long timeBucket) { - this.id = id; - this.agg = agg; - this.timeBucket = timeBucket; - } - - public NodeReference() { - } - - @Override public Data toData() { - NodeRefDataDefine define = new NodeRefDataDefine(); - Data data = define.build(id); - data.setDataString(0, this.id); - data.setDataString(1, this.agg); - data.setDataLong(0, this.timeBucket); - return data; - } - - @Override public Object toSelf(Data data) { - this.id = data.getDataString(0); - this.agg = data.getDataString(1); - this.timeBucket = data.getDataLong(0); - return this; - } - - public String getId() { - return id; - } - - public String getAgg() { - return agg; - } - - public long getTimeBucket() { - return timeBucket; - } - - public void setId(String id) { - this.id = id; - } - - public void setAgg(String agg) { - this.agg = agg; - } - - public void setTimeBucket(long timeBucket) { - this.timeBucket = timeBucket; - } - } -} diff --git a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/noderef/NodeRefSumDataDefine.java b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/noderef/NodeRefSumDataDefine.java deleted file mode 100644 index 9190d724d802..000000000000 --- a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/noderef/NodeRefSumDataDefine.java +++ /dev/null @@ -1,179 +0,0 @@ -package org.skywalking.apm.collector.storage.define.noderef; - -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.core.stream.Data; -import org.skywalking.apm.collector.storage.define.DataDefine; -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.NonOperation; - -/** - * @author pengys5 - */ -public class NodeRefSumDataDefine extends DataDefine { - - @Override protected int initialCapacity() { - return 9; - } - - @Override protected void attributeDefine() { - addAttribute(0, new Attribute(NodeRefSumTable.COLUMN_ID, AttributeType.STRING, new NonOperation())); - addAttribute(1, new Attribute(NodeRefSumTable.COLUMN_ONE_SECOND_LESS, AttributeType.LONG, new AddOperation())); - addAttribute(2, new Attribute(NodeRefSumTable.COLUMN_THREE_SECOND_LESS, AttributeType.LONG, new AddOperation())); - addAttribute(3, new Attribute(NodeRefSumTable.COLUMN_FIVE_SECOND_LESS, AttributeType.LONG, new AddOperation())); - addAttribute(4, new Attribute(NodeRefSumTable.COLUMN_FIVE_SECOND_GREATER, AttributeType.LONG, new AddOperation())); - addAttribute(5, new Attribute(NodeRefSumTable.COLUMN_ERROR, AttributeType.LONG, new AddOperation())); - addAttribute(6, new Attribute(NodeRefSumTable.COLUMN_SUMMARY, AttributeType.LONG, new AddOperation())); - addAttribute(7, new Attribute(NodeRefSumTable.COLUMN_AGG, AttributeType.STRING, new NonOperation())); - addAttribute(8, new Attribute(NodeRefSumTable.COLUMN_TIME_BUCKET, AttributeType.LONG, new NonOperation())); - } - - @Override public Object deserialize(RemoteData remoteData) { - String id = remoteData.getDataStrings(0); - String agg = remoteData.getDataStrings(1); - Long oneSecondLess = remoteData.getDataLongs(0); - Long threeSecondLess = remoteData.getDataLongs(1); - Long fiveSecondLess = remoteData.getDataLongs(2); - Long fiveSecondGreater = remoteData.getDataLongs(3); - Long error = remoteData.getDataLongs(4); - Long summary = remoteData.getDataLongs(5); - long timeBucket = remoteData.getDataLongs(6); - return new NodeReferenceSum(id, oneSecondLess, threeSecondLess, fiveSecondLess, fiveSecondGreater, error, summary, agg, timeBucket); - } - - @Override public RemoteData serialize(Object object) { - NodeReferenceSum nodeReferenceSum = (NodeReferenceSum)object; - RemoteData.Builder builder = RemoteData.newBuilder(); - builder.addDataStrings(nodeReferenceSum.getId()); - builder.addDataStrings(nodeReferenceSum.getAgg()); - builder.addDataLongs(nodeReferenceSum.getOneSecondLess()); - builder.addDataLongs(nodeReferenceSum.getThreeSecondLess()); - builder.addDataLongs(nodeReferenceSum.getFiveSecondLess()); - builder.addDataLongs(nodeReferenceSum.getFiveSecondGreater()); - builder.addDataLongs(nodeReferenceSum.getError()); - builder.addDataLongs(nodeReferenceSum.getSummary()); - builder.addDataLongs(nodeReferenceSum.getTimeBucket()); - return builder.build(); - } - - public static class NodeReferenceSum implements Transform { - private String id; - private Long oneSecondLess = 0L; - private Long threeSecondLess = 0L; - private Long fiveSecondLess = 0L; - private Long fiveSecondGreater = 0L; - private Long error = 0L; - private Long summary = 0L; - private String agg; - private long timeBucket; - - public NodeReferenceSum(String id, Long oneSecondLess, Long threeSecondLess, Long fiveSecondLess, - Long fiveSecondGreater, Long error, Long summary, String agg, long timeBucket) { - this.id = id; - this.oneSecondLess = oneSecondLess; - this.threeSecondLess = threeSecondLess; - this.fiveSecondLess = fiveSecondLess; - this.fiveSecondGreater = fiveSecondGreater; - this.error = error; - this.summary = summary; - this.agg = agg; - this.timeBucket = timeBucket; - } - - public NodeReferenceSum() { - } - - @Override public Data toData() { - NodeRefSumDataDefine define = new NodeRefSumDataDefine(); - Data data = define.build(id); - data.setDataString(0, this.id); - data.setDataString(1, this.agg); - data.setDataLong(0, this.oneSecondLess); - data.setDataLong(1, this.threeSecondLess); - data.setDataLong(2, this.fiveSecondLess); - data.setDataLong(3, this.fiveSecondGreater); - data.setDataLong(4, this.error); - data.setDataLong(5, this.summary); - data.setDataLong(6, this.timeBucket); - return data; - } - - @Override public Object toSelf(Data data) { - return null; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public Long getOneSecondLess() { - return oneSecondLess; - } - - public void setOneSecondLess(Long oneSecondLess) { - this.oneSecondLess = oneSecondLess; - } - - public Long getThreeSecondLess() { - return threeSecondLess; - } - - public void setThreeSecondLess(Long threeSecondLess) { - this.threeSecondLess = threeSecondLess; - } - - public Long getFiveSecondLess() { - return fiveSecondLess; - } - - public void setFiveSecondLess(Long fiveSecondLess) { - this.fiveSecondLess = fiveSecondLess; - } - - public Long getFiveSecondGreater() { - return fiveSecondGreater; - } - - public void setFiveSecondGreater(Long fiveSecondGreater) { - this.fiveSecondGreater = fiveSecondGreater; - } - - public Long getError() { - return error; - } - - public void setError(Long error) { - this.error = error; - } - - public Long getSummary() { - return summary; - } - - public void setSummary(Long summary) { - this.summary = summary; - } - - public String getAgg() { - return agg; - } - - public void setAgg(String agg) { - this.agg = agg; - } - - public long getTimeBucket() { - return timeBucket; - } - - public void setTimeBucket(long timeBucket) { - this.timeBucket = timeBucket; - } - } -} diff --git a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/noderef/NodeRefSumTable.java b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/noderef/NodeRefSumTable.java deleted file mode 100644 index de9cedb1d32c..000000000000 --- a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/noderef/NodeRefSumTable.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.skywalking.apm.collector.storage.define.noderef; - -import org.skywalking.apm.collector.storage.define.CommonTable; - -/** - * @author pengys5 - */ -public class NodeRefSumTable extends CommonTable { - public static final String TABLE = "node_reference_sum"; - public static final String COLUMN_ONE_SECOND_LESS = "one_second_less"; - public static final String COLUMN_THREE_SECOND_LESS = "three_second_less"; - public static final String COLUMN_FIVE_SECOND_LESS = "five_second_less"; - public static final String COLUMN_FIVE_SECOND_GREATER = "five_second_greater"; - public static final String COLUMN_ERROR = "error"; - public static final String COLUMN_SUMMARY = "summary"; -} diff --git a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/noderef/NodeRefTable.java b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/noderef/NodeRefTable.java deleted file mode 100644 index 873d55e0d38f..000000000000 --- a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/noderef/NodeRefTable.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.skywalking.apm.collector.storage.define.noderef; - -import org.skywalking.apm.collector.storage.define.CommonTable; - -/** - * @author pengys5 - */ -public class NodeRefTable extends CommonTable { - public static final String TABLE = "node_reference"; -} 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 new file mode 100644 index 000000000000..fe0a074bf764 --- /dev/null +++ b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/noderef/NodeReferenceDataDefine.java @@ -0,0 +1,208 @@ +package org.skywalking.apm.collector.storage.define.noderef; + +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.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; + +/** + * @author pengys5 + */ +public class NodeReferenceDataDefine extends DataDefine { + + @Override protected int initialCapacity() { + return 11; + } + + @Override protected void attributeDefine() { + addAttribute(0, new Attribute(NodeReferenceTable.COLUMN_ID, AttributeType.STRING, new NonOperation())); + addAttribute(1, new Attribute(NodeReferenceTable.COLUMN_FRONT_APPLICATION_ID, AttributeType.INTEGER, new NonOperation())); + addAttribute(2, new Attribute(NodeReferenceTable.COLUMN_BEHIND_APPLICATION_ID, AttributeType.INTEGER, new NonOperation())); + addAttribute(3, new Attribute(NodeReferenceTable.COLUMN_BEHIND_PEER, AttributeType.STRING, new NonOperation())); + addAttribute(4, new Attribute(NodeReferenceTable.COLUMN_S1_LTE, AttributeType.INTEGER, new AddOperation())); + addAttribute(5, new Attribute(NodeReferenceTable.COLUMN_S3_LTE, AttributeType.INTEGER, new AddOperation())); + addAttribute(6, new Attribute(NodeReferenceTable.COLUMN_S5_LTE, AttributeType.INTEGER, new AddOperation())); + addAttribute(7, new Attribute(NodeReferenceTable.COLUMN_S5_GT, AttributeType.INTEGER, new AddOperation())); + addAttribute(8, new Attribute(NodeReferenceTable.COLUMN_SUMMARY, AttributeType.INTEGER, new AddOperation())); + addAttribute(9, new Attribute(NodeReferenceTable.COLUMN_ERROR, AttributeType.INTEGER, new AddOperation())); + addAttribute(10, new Attribute(NodeReferenceTable.COLUMN_TIME_BUCKET, AttributeType.LONG, new NonOperation())); + } + + @Override public Object deserialize(RemoteData remoteData) { + String id = remoteData.getDataStrings(0); + int applicationId = remoteData.getDataIntegers(0); + int behindApplicationId = remoteData.getDataIntegers(1); + String behindPeer = remoteData.getDataStrings(1); + int s1LTE = remoteData.getDataIntegers(2); + int s3LTE = remoteData.getDataIntegers(3); + int s5LTE = remoteData.getDataIntegers(4); + int s5GT = remoteData.getDataIntegers(5); + 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); + } + + @Override public RemoteData serialize(Object object) { + NodeReferenceSum nodeReferenceSum = (NodeReferenceSum)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()); + return builder.build(); + } + + public static class NodeReferenceSum implements Transform { + private String id; + private int applicationId; + private int behindApplicationId; + private String behindPeer; + private int s1LTE = 0; + private int s3LTE = 0; + private int s5LTE = 0; + private int s5GT = 0; + private int summary = 0; + private int error = 0; + private long timeBucket; + + public NodeReferenceSum(String id, int applicationId, 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.behindApplicationId = behindApplicationId; + this.behindPeer = behindPeer; + this.s1LTE = s1LTE; + this.s3LTE = s3LTE; + this.s5LTE = s5LTE; + this.s5GT = s5GT; + this.summary = summary; + this.error = error; + this.timeBucket = timeBucket; + } + + public NodeReferenceSum() { + } + + @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(1, this.behindApplicationId); + data.setDataString(1, this.behindPeer); + data.setDataInteger(2, this.s1LTE); + data.setDataInteger(3, this.s3LTE); + data.setDataInteger(4, this.s5LTE); + data.setDataInteger(5, this.s5GT); + data.setDataInteger(6, this.summary); + data.setDataInteger(7, this.error); + data.setDataLong(0, this.timeBucket); + return data; + } + + @Override public Object toSelf(Data data) { + return null; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public int getApplicationId() { + return applicationId; + } + + public void setApplicationId(int applicationId) { + this.applicationId = applicationId; + } + + public int getBehindApplicationId() { + return behindApplicationId; + } + + public void setBehindApplicationId(int behindApplicationId) { + this.behindApplicationId = behindApplicationId; + } + + public String getBehindPeer() { + return behindPeer; + } + + public void setBehindPeer(String behindPeer) { + this.behindPeer = behindPeer; + } + + public int getS1LTE() { + return s1LTE; + } + + public void setS1LTE(int s1LTE) { + this.s1LTE = s1LTE; + } + + public int getS3LTE() { + return s3LTE; + } + + public void setS3LTE(int s3LTE) { + this.s3LTE = s3LTE; + } + + public int getS5LTE() { + return s5LTE; + } + + public void setS5LTE(int s5LTE) { + this.s5LTE = s5LTE; + } + + public int getS5GT() { + return s5GT; + } + + public void setS5GT(int s5GT) { + this.s5GT = s5GT; + } + + public int getError() { + return error; + } + + public void setError(int error) { + this.error = error; + } + + public int getSummary() { + return summary; + } + + public void setSummary(int summary) { + this.summary = summary; + } + + public long getTimeBucket() { + return timeBucket; + } + + public void setTimeBucket(long timeBucket) { + this.timeBucket = timeBucket; + } + } +} diff --git a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/noderef/NodeReferenceTable.java b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/noderef/NodeReferenceTable.java new file mode 100644 index 000000000000..e8a4295d8d63 --- /dev/null +++ b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/noderef/NodeReferenceTable.java @@ -0,0 +1,19 @@ +package org.skywalking.apm.collector.storage.define.noderef; + +import org.skywalking.apm.collector.storage.define.CommonTable; + +/** + * @author pengys5 + */ +public class NodeReferenceTable extends CommonTable { + public static final String TABLE = "node_reference"; + public static final String COLUMN_FRONT_APPLICATION_ID = "front_application_id"; + public static final String COLUMN_BEHIND_APPLICATION_ID = "behind_application_id"; + public static final String COLUMN_BEHIND_PEER = "behind_peer"; + public static final String COLUMN_S1_LTE = "s1_lte"; + public static final String COLUMN_S3_LTE = "s3_lte"; + public static final String COLUMN_S5_LTE = "s5_lte"; + public static final String COLUMN_S5_GT = "s5_gt"; + public static final String COLUMN_SUMMARY = "summary"; + public static final String COLUMN_ERROR = "error"; +} 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 3b89a338139f..0ae79d695ab2 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 @@ -1,13 +1,13 @@ package org.skywalking.apm.collector.storage.define.service; -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.core.stream.Data; -import org.skywalking.apm.collector.storage.define.DataDefine; import org.skywalking.apm.collector.core.stream.Transform; 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; /** * @author pengys5 @@ -15,14 +15,16 @@ public class ServiceEntryDataDefine extends DataDefine { @Override protected int initialCapacity() { - return 4; + return 6; } @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_AGG, AttributeType.STRING, new CoverOperation())); - addAttribute(3, new Attribute(ServiceEntryTable.COLUMN_TIME_BUCKET, AttributeType.LONG, new CoverOperation())); + addAttribute(2, new Attribute(ServiceEntryTable.COLUMN_ENTRY_SERVICE_ID, AttributeType.INTEGER, new NonOperation())); + 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())); } @Override public Object deserialize(RemoteData remoteData) { @@ -36,14 +38,20 @@ public class ServiceEntryDataDefine extends DataDefine { public static class ServiceEntry implements Transform { private String id; private int applicationId; - private String agg; - private long timeBucket; - - ServiceEntry(String id, int applicationId, String agg, long timeBucket) { + private int entryServiceId; + private String entryServiceName; + private long registerTime; + private long newestTime; + + public ServiceEntry(String id, int applicationId, int entryServiceId, String entryServiceName, + long registerTime, + long newestTime) { this.id = id; this.applicationId = applicationId; - this.agg = agg; - this.timeBucket = timeBucket; + this.entryServiceId = entryServiceId; + this.entryServiceName = entryServiceName; + this.registerTime = registerTime; + this.newestTime = newestTime; } public ServiceEntry() { @@ -54,16 +62,20 @@ public ServiceEntry() { Data data = define.build(id); data.setDataString(0, this.id); data.setDataInteger(0, this.applicationId); - data.setDataString(1, this.agg); - data.setDataLong(0, this.timeBucket); + data.setDataInteger(1, this.entryServiceId); + data.setDataString(1, this.entryServiceName); + data.setDataLong(0, this.registerTime); + data.setDataLong(1, this.newestTime); return data; } @Override public ServiceEntry toSelf(Data data) { this.id = data.getDataString(0); this.applicationId = data.getDataInteger(0); - this.agg = data.getDataString(1); - this.timeBucket = data.getDataLong(0); + this.entryServiceId = data.getDataInteger(1); + this.entryServiceName = data.getDataString(1); + this.registerTime = data.getDataLong(0); + this.newestTime = data.getDataLong(1); return this; } @@ -71,24 +83,24 @@ public String getId() { return id; } - public String getAgg() { - return agg; + public void setId(String id) { + this.id = id; } - public long getTimeBucket() { - return timeBucket; + public int getEntryServiceId() { + return entryServiceId; } - public void setId(String id) { - this.id = id; + public void setEntryServiceId(int entryServiceId) { + this.entryServiceId = entryServiceId; } - public void setAgg(String agg) { - this.agg = agg; + public String getEntryServiceName() { + return entryServiceName; } - public void setTimeBucket(long timeBucket) { - this.timeBucket = timeBucket; + public void setEntryServiceName(String entryServiceName) { + this.entryServiceName = entryServiceName; } public int getApplicationId() { @@ -98,5 +110,21 @@ public int getApplicationId() { public void setApplicationId(int applicationId) { this.applicationId = applicationId; } + + public long getRegisterTime() { + return registerTime; + } + + public void setRegisterTime(long registerTime) { + this.registerTime = registerTime; + } + + public long getNewestTime() { + return newestTime; + } + + public void setNewestTime(long newestTime) { + this.newestTime = newestTime; + } } } diff --git a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/service/ServiceEntryTable.java b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/service/ServiceEntryTable.java index 925848fa5b0a..e8e6e914bb5d 100644 --- a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/service/ServiceEntryTable.java +++ b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/service/ServiceEntryTable.java @@ -8,4 +8,8 @@ public class ServiceEntryTable extends CommonTable { public static final String TABLE = "service_entry"; public static final String COLUMN_APPLICATION_ID = "application_id"; + public static final String COLUMN_ENTRY_SERVICE_ID = "entry_service_id"; + public static final String COLUMN_ENTRY_SERVICE_NAME = "entry_service_name"; + public static final String COLUMN_REGISTER_TIME = "register_time"; + public static final String COLUMN_NEWEST_TIME = "newest_time"; } diff --git a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/serviceref/ServiceRefDataDefine.java b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/serviceref/ServiceRefDataDefine.java deleted file mode 100644 index 914494eb0eaa..000000000000 --- a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/serviceref/ServiceRefDataDefine.java +++ /dev/null @@ -1,112 +0,0 @@ -package org.skywalking.apm.collector.storage.define.serviceref; - -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.core.stream.Data; -import org.skywalking.apm.collector.storage.define.DataDefine; -import org.skywalking.apm.collector.core.stream.Transform; -import org.skywalking.apm.collector.core.stream.operate.CoverOperation; -import org.skywalking.apm.collector.core.stream.operate.NonOperation; - -/** - * @author pengys5 - */ -public class ServiceRefDataDefine extends DataDefine { - - @Override protected int initialCapacity() { - return 4; - } - - @Override protected void attributeDefine() { - addAttribute(0, new Attribute(ServiceRefTable.COLUMN_ID, AttributeType.STRING, new NonOperation())); - addAttribute(1, new Attribute(ServiceRefTable.COLUMN_ENTRY_SERVICE, AttributeType.STRING, new NonOperation())); - addAttribute(2, new Attribute(ServiceRefTable.COLUMN_AGG, AttributeType.STRING, new CoverOperation())); - addAttribute(3, new Attribute(ServiceRefTable.COLUMN_TIME_BUCKET, AttributeType.LONG, new CoverOperation())); - } - - @Override public Object deserialize(RemoteData remoteData) { - String id = remoteData.getDataStrings(0); - String entryService = remoteData.getDataStrings(1); - String agg = remoteData.getDataStrings(2); - long timeBucket = remoteData.getDataLongs(0); - return new ServiceReference(id, entryService, agg, timeBucket); - } - - @Override public RemoteData serialize(Object object) { - ServiceReference serviceReference = (ServiceReference)object; - RemoteData.Builder builder = RemoteData.newBuilder(); - builder.addDataStrings(serviceReference.getId()); - builder.addDataStrings(serviceReference.getEntryService()); - builder.addDataStrings(serviceReference.getAgg()); - builder.addDataLongs(serviceReference.getTimeBucket()); - return builder.build(); - } - - public static class ServiceReference implements Transform { - private String id; - private String entryService; - private String agg; - private long timeBucket; - - public ServiceReference(String id, String entryService, String agg, long timeBucket) { - this.id = id; - this.entryService = entryService; - this.agg = agg; - this.timeBucket = timeBucket; - } - - public ServiceReference() { - } - - @Override public Data toData() { - ServiceRefDataDefine define = new ServiceRefDataDefine(); - Data data = define.build(id); - data.setDataString(0, this.id); - data.setDataString(1, this.entryService); - data.setDataString(2, this.agg); - data.setDataLong(0, this.timeBucket); - return data; - } - - @Override public Object toSelf(Data data) { - this.id = data.getDataString(0); - this.entryService = data.getDataString(1); - this.agg = data.getDataString(2); - this.timeBucket = data.getDataLong(0); - return this; - } - - public String getId() { - return id; - } - - public String getAgg() { - return agg; - } - - public long getTimeBucket() { - return timeBucket; - } - - public void setId(String id) { - this.id = id; - } - - public void setAgg(String agg) { - this.agg = agg; - } - - public void setTimeBucket(long timeBucket) { - this.timeBucket = timeBucket; - } - - public String getEntryService() { - return entryService; - } - - public void setEntryService(String entryService) { - this.entryService = entryService; - } - } -} diff --git a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/serviceref/ServiceRefTable.java b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/serviceref/ServiceRefTable.java deleted file mode 100644 index 5fa9d0bfa2e5..000000000000 --- a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/serviceref/ServiceRefTable.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.skywalking.apm.collector.storage.define.serviceref; - -import org.skywalking.apm.collector.storage.define.CommonTable; - -/** - * @author pengys5 - */ -public class ServiceRefTable extends CommonTable { - public static final String TABLE = "service_reference"; - public static final String COLUMN_ENTRY_SERVICE = "entry_service"; -} diff --git a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/serviceref/ServiceReferenceDataDefine.java b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/serviceref/ServiceReferenceDataDefine.java new file mode 100644 index 000000000000..e0ad40e9f7ba --- /dev/null +++ b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/serviceref/ServiceReferenceDataDefine.java @@ -0,0 +1,280 @@ +package org.skywalking.apm.collector.storage.define.serviceref; + +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.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; + +/** + * @author pengys5 + */ +public class ServiceReferenceDataDefine extends DataDefine { + + @Override protected int initialCapacity() { + return 15; + } + + @Override protected void attributeDefine() { + addAttribute(0, new Attribute(ServiceReferenceTable.COLUMN_ID, AttributeType.STRING, new NonOperation())); + addAttribute(1, new Attribute(ServiceReferenceTable.COLUMN_ENTRY_SERVICE_ID, AttributeType.INTEGER, new NonOperation())); + addAttribute(2, new Attribute(ServiceReferenceTable.COLUMN_ENTRY_SERVICE_NAME, AttributeType.STRING, new NonOperation())); + addAttribute(3, new Attribute(ServiceReferenceTable.COLUMN_FRONT_SERVICE_ID, AttributeType.INTEGER, new NonOperation())); + addAttribute(4, new Attribute(ServiceReferenceTable.COLUMN_FRONT_SERVICE_NAME, AttributeType.STRING, new NonOperation())); + addAttribute(5, new Attribute(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_ID, AttributeType.INTEGER, new NonOperation())); + addAttribute(6, new Attribute(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_NAME, AttributeType.STRING, new NonOperation())); + addAttribute(7, new Attribute(ServiceReferenceTable.COLUMN_S1_LTE, AttributeType.LONG, new AddOperation())); + addAttribute(8, new Attribute(ServiceReferenceTable.COLUMN_S3_LTE, AttributeType.LONG, new AddOperation())); + addAttribute(9, new Attribute(ServiceReferenceTable.COLUMN_S5_LTE, AttributeType.LONG, new AddOperation())); + addAttribute(10, new Attribute(ServiceReferenceTable.COLUMN_S5_GT, AttributeType.LONG, new AddOperation())); + addAttribute(11, new Attribute(ServiceReferenceTable.COLUMN_SUMMARY, AttributeType.LONG, new AddOperation())); + addAttribute(12, new Attribute(ServiceReferenceTable.COLUMN_ERROR, AttributeType.LONG, new AddOperation())); + addAttribute(13, new Attribute(ServiceReferenceTable.COLUMN_COST_SUMMARY, AttributeType.LONG, new AddOperation())); + addAttribute(14, new Attribute(ServiceReferenceTable.COLUMN_TIME_BUCKET, AttributeType.LONG, new NonOperation())); + } + + @Override public Object deserialize(RemoteData remoteData) { + String id = remoteData.getDataStrings(0); + int entryServiceId = remoteData.getDataIntegers(0); + String entryServiceName = remoteData.getDataStrings(1); + int frontServiceId = remoteData.getDataIntegers(1); + String frontServiceName = remoteData.getDataStrings(2); + int behindServiceId = remoteData.getDataIntegers(2); + String behindServiceName = remoteData.getDataStrings(3); + long s1Lte = remoteData.getDataLongs(0); + long s3Lte = remoteData.getDataLongs(1); + long s5Lte = remoteData.getDataLongs(2); + long s5Gt = remoteData.getDataLongs(3); + long summary = remoteData.getDataLongs(4); + long error = remoteData.getDataLongs(5); + long costSummary = remoteData.getDataLongs(6); + long timeBucket = remoteData.getDataLongs(7); + return new ServiceReference(id, entryServiceId, entryServiceName, frontServiceId, frontServiceName, + behindServiceId, behindServiceName, s1Lte, s3Lte, s5Lte, s5Gt, summary, error, costSummary, timeBucket); + } + + @Override public RemoteData serialize(Object object) { + ServiceReference serviceReference = (ServiceReference)object; + RemoteData.Builder builder = RemoteData.newBuilder(); + builder.addDataStrings(serviceReference.getId()); + builder.addDataIntegers(serviceReference.getEntryServiceId()); + builder.addDataStrings(serviceReference.getEntryServiceName()); + builder.addDataIntegers(serviceReference.getFrontServiceId()); + builder.addDataStrings(serviceReference.getFrontServiceName()); + builder.addDataIntegers(serviceReference.getBehindServiceId()); + builder.addDataStrings(serviceReference.getBehindServiceName()); + builder.addDataLongs(serviceReference.getS1Lte()); + builder.addDataLongs(serviceReference.getS3Lte()); + builder.addDataLongs(serviceReference.getS5Lte()); + builder.addDataLongs(serviceReference.getS5Gt()); + builder.addDataLongs(serviceReference.getSummary()); + builder.addDataLongs(serviceReference.getError()); + builder.addDataLongs(serviceReference.getCostSummary()); + builder.addDataLongs(serviceReference.getTimeBucket()); + return builder.build(); + } + + public static class ServiceReference implements Transform { + private String id; + private int entryServiceId; + private String entryServiceName; + private int frontServiceId; + private String frontServiceName; + private int behindServiceId; + private String behindServiceName; + private long s1Lte; + private long s3Lte; + private long s5Lte; + private long s5Gt; + private long summary; + private long error; + private long costSummary; + private long timeBucket; + + public ServiceReference(String id, int entryServiceId, String entryServiceName, int frontServiceId, + String frontServiceName, int behindServiceId, String behindServiceName, long s1Lte, long s3Lte, long s5Lte, + long s5Gt, long summary, long error, long costSummary, long timeBucket) { + this.id = id; + this.entryServiceId = entryServiceId; + this.entryServiceName = entryServiceName; + this.frontServiceId = frontServiceId; + this.frontServiceName = frontServiceName; + this.behindServiceId = behindServiceId; + this.behindServiceName = behindServiceName; + this.s1Lte = s1Lte; + this.s3Lte = s3Lte; + this.s5Lte = s5Lte; + this.s5Gt = s5Gt; + this.summary = summary; + this.error = error; + this.costSummary = costSummary; + this.timeBucket = timeBucket; + } + + public ServiceReference() { + } + + @Override public Data toData() { + ServiceReferenceDataDefine define = new ServiceReferenceDataDefine(); + Data data = define.build(id); + data.setDataString(0, this.id); + data.setDataInteger(0, this.entryServiceId); + data.setDataString(1, this.entryServiceName); + data.setDataInteger(1, this.frontServiceId); + data.setDataString(2, this.frontServiceName); + data.setDataInteger(2, this.behindServiceId); + data.setDataString(3, this.behindServiceName); + data.setDataLong(0, this.s1Lte); + data.setDataLong(1, this.s3Lte); + data.setDataLong(2, this.s5Lte); + data.setDataLong(3, this.s5Gt); + data.setDataLong(4, this.summary); + data.setDataLong(5, this.error); + data.setDataLong(6, this.costSummary); + data.setDataLong(7, this.timeBucket); + return data; + } + + @Override public Object toSelf(Data data) { + this.id = data.getDataString(0); + this.entryServiceId = data.getDataInteger(0); + this.entryServiceName = data.getDataString(1); + this.frontServiceId = data.getDataInteger(1); + this.frontServiceName = data.getDataString(2); + this.behindServiceId = data.getDataInteger(2); + this.behindServiceName = data.getDataString(3); + this.s1Lte = data.getDataLong(0); + this.s3Lte = data.getDataLong(1); + this.s5Lte = data.getDataLong(2); + this.s5Gt = data.getDataLong(3); + this.summary = data.getDataLong(4); + this.error = data.getDataLong(5); + this.costSummary = data.getDataLong(6); + this.timeBucket = data.getDataLong(7); + return this; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public int getEntryServiceId() { + return entryServiceId; + } + + public void setEntryServiceId(int entryServiceId) { + this.entryServiceId = entryServiceId; + } + + public String getEntryServiceName() { + return entryServiceName; + } + + public void setEntryServiceName(String entryServiceName) { + this.entryServiceName = entryServiceName; + } + + public int getFrontServiceId() { + return frontServiceId; + } + + public void setFrontServiceId(int frontServiceId) { + this.frontServiceId = frontServiceId; + } + + public String getFrontServiceName() { + return frontServiceName; + } + + public void setFrontServiceName(String frontServiceName) { + this.frontServiceName = frontServiceName; + } + + public int getBehindServiceId() { + return behindServiceId; + } + + public void setBehindServiceId(int behindServiceId) { + this.behindServiceId = behindServiceId; + } + + public String getBehindServiceName() { + return behindServiceName; + } + + public void setBehindServiceName(String behindServiceName) { + this.behindServiceName = behindServiceName; + } + + public long getS1Lte() { + return s1Lte; + } + + public void setS1Lte(long s1Lte) { + this.s1Lte = s1Lte; + } + + public long getS3Lte() { + return s3Lte; + } + + public void setS3Lte(long s3Lte) { + this.s3Lte = s3Lte; + } + + public long getS5Lte() { + return s5Lte; + } + + public void setS5Lte(long s5Lte) { + this.s5Lte = s5Lte; + } + + public long getS5Gt() { + return s5Gt; + } + + public void setS5Gt(long s5Gt) { + this.s5Gt = s5Gt; + } + + public long getSummary() { + return summary; + } + + public void setSummary(long summary) { + this.summary = summary; + } + + public long getError() { + return error; + } + + public void setError(long error) { + this.error = error; + } + + public long getCostSummary() { + return costSummary; + } + + public void setCostSummary(long costSummary) { + this.costSummary = costSummary; + } + + public long getTimeBucket() { + return timeBucket; + } + + public void setTimeBucket(long timeBucket) { + this.timeBucket = timeBucket; + } + } +} diff --git a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/serviceref/ServiceReferenceTable.java b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/serviceref/ServiceReferenceTable.java new file mode 100644 index 000000000000..4c85cbbf9886 --- /dev/null +++ b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/define/serviceref/ServiceReferenceTable.java @@ -0,0 +1,23 @@ +package org.skywalking.apm.collector.storage.define.serviceref; + +import org.skywalking.apm.collector.storage.define.CommonTable; + +/** + * @author pengys5 + */ +public class ServiceReferenceTable extends CommonTable { + public static final String TABLE = "service_reference"; + public static final String COLUMN_ENTRY_SERVICE_ID = "entry_service_id"; + public static final String COLUMN_ENTRY_SERVICE_NAME = "entry_service_name"; + public static final String COLUMN_FRONT_SERVICE_ID = "front_service_id"; + public static final String COLUMN_FRONT_SERVICE_NAME = "front_service_name"; + public static final String COLUMN_BEHIND_SERVICE_ID = "behind_service_id"; + public static final String COLUMN_BEHIND_SERVICE_NAME = "behind_service_name"; + public static final String COLUMN_S1_LTE = "s1_lte"; + public static final String COLUMN_S3_LTE = "s3_lte"; + public static final String COLUMN_S5_LTE = "s5_lte"; + public static final String COLUMN_S5_GT = "s5_gt"; + public static final String COLUMN_SUMMARY = "summary"; + public static final String COLUMN_COST_SUMMARY = "cost_summary"; + public static final String COLUMN_ERROR = "error"; +} diff --git a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/elasticsearch/define/ElasticSearchColumnDefine.java b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/elasticsearch/define/ElasticSearchColumnDefine.java index 2d7d3859556b..0a8b880a0d0a 100644 --- a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/elasticsearch/define/ElasticSearchColumnDefine.java +++ b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/elasticsearch/define/ElasticSearchColumnDefine.java @@ -11,6 +11,6 @@ public ElasticSearchColumnDefine(String name, String type) { } public enum Type { - Binary, Boolean, Keyword, Long, Integer, Double + Binary, Boolean, Keyword, Long, Integer, Double, Text } } diff --git a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/elasticsearch/define/ElasticSearchStorageInstaller.java b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/elasticsearch/define/ElasticSearchStorageInstaller.java index 26c618f13ed3..04034974221a 100644 --- a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/elasticsearch/define/ElasticSearchStorageInstaller.java +++ b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/elasticsearch/define/ElasticSearchStorageInstaller.java @@ -33,32 +33,27 @@ public class ElasticSearchStorageInstaller extends StorageInstaller { @Override protected boolean createTable(Client client, TableDefine tableDefine) { ElasticSearchClient esClient = (ElasticSearchClient)client; ElasticSearchTableDefine esTableDefine = (ElasticSearchTableDefine)tableDefine; - // settings - String settingSource = ""; // mapping XContentBuilder mappingBuilder = null; + + Settings settings = createSettingBuilder(esTableDefine); try { - XContentBuilder settingsBuilder = createSettingBuilder(esTableDefine); - settingSource = settingsBuilder.string(); mappingBuilder = createMappingBuilder(esTableDefine); logger.info("mapping builder str: {}", mappingBuilder.string()); } catch (Exception e) { logger.error("create {} index mapping builder error", esTableDefine.getName()); } - Settings settings = Settings.builder().loadFromSource(settingSource).build(); boolean isAcknowledged = esClient.createIndex(esTableDefine.getName(), esTableDefine.type(), settings, mappingBuilder); logger.info("create {} index with type of {} finished, isAcknowledged: {}", esTableDefine.getName(), esTableDefine.type(), isAcknowledged); return isAcknowledged; } - private XContentBuilder createSettingBuilder(ElasticSearchTableDefine tableDefine) throws IOException { - return XContentFactory.jsonBuilder() - .startObject() - .field("index.number_of_shards", tableDefine.numberOfShards()) - .field("index.number_of_replicas", tableDefine.numberOfReplicas()) - .field("index.refresh_interval", String.valueOf(tableDefine.refreshInterval()) + "s") - .endObject(); + private Settings createSettingBuilder(ElasticSearchTableDefine tableDefine) { + return Settings.builder() + .put("index.number_of_shards", tableDefine.numberOfShards()) + .put("index.number_of_replicas", tableDefine.numberOfReplicas()) + .put("index.refresh_interval", String.valueOf(tableDefine.refreshInterval()) + "s").build(); } private XContentBuilder createMappingBuilder(ElasticSearchTableDefine tableDefine) throws IOException { @@ -68,10 +63,19 @@ private XContentBuilder createMappingBuilder(ElasticSearchTableDefine tableDefin for (ColumnDefine columnDefine : tableDefine.getColumnDefines()) { ElasticSearchColumnDefine elasticSearchColumnDefine = (ElasticSearchColumnDefine)columnDefine; - mappingBuilder - .startObject(elasticSearchColumnDefine.getName()) - .field("type", elasticSearchColumnDefine.getType().toLowerCase()) - .endObject(); + + if (ElasticSearchColumnDefine.Type.Text.name().toLowerCase().equals(elasticSearchColumnDefine.getType().toLowerCase())) { + mappingBuilder + .startObject(elasticSearchColumnDefine.getName()) + .field("type", elasticSearchColumnDefine.getType().toLowerCase()) + .field("fielddata", true) + .endObject(); + } else { + mappingBuilder + .startObject(elasticSearchColumnDefine.getName()) + .field("type", elasticSearchColumnDefine.getType().toLowerCase()) + .endObject(); + } } mappingBuilder diff --git a/apm-collector/apm-collector-stream/src/main/java/org/skywalking/apm/collector/stream/worker/impl/AggregationWorker.java b/apm-collector/apm-collector-stream/src/main/java/org/skywalking/apm/collector/stream/worker/impl/AggregationWorker.java index 08498bc98bf6..4cc4676d6ab7 100644 --- a/apm-collector/apm-collector-stream/src/main/java/org/skywalking/apm/collector/stream/worker/impl/AggregationWorker.java +++ b/apm-collector/apm-collector-stream/src/main/java/org/skywalking/apm/collector/stream/worker/impl/AggregationWorker.java @@ -60,11 +60,13 @@ private void sendToNext() throws WorkerException { } dataCache.getLast().asMap().forEach((id, data) -> { try { + logger.debug(data.toString()); nextWorkRef(id).tell(data); } catch (WorkerNotFoundException | WorkerInvokeException e) { logger.error(e.getMessage(), e); } }); + dataCache.releaseLast(); } protected final void aggregate(Object message) { diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/cache/ServiceIdCache.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/cache/ServiceIdCache.java new file mode 100644 index 000000000000..8f9a7fb2a757 --- /dev/null +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/cache/ServiceIdCache.java @@ -0,0 +1,37 @@ +package org.skywalking.apm.collector.ui.cache; + +import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; +import org.skywalking.apm.collector.core.util.Const; +import org.skywalking.apm.collector.storage.dao.DAOContainer; +import org.skywalking.apm.collector.ui.dao.IServiceNameDAO; + +/** + * @author pengys5 + */ +public class ServiceIdCache { + + //TODO size configuration + private static Cache CACHE = CacheBuilder.newBuilder().maximumSize(1000).build(); + + public static int get(int applicationId, String serviceName) { + try { + return CACHE.get(applicationId + Const.ID_SPLIT + serviceName, () -> { + IServiceNameDAO dao = (IServiceNameDAO)DAOContainer.INSTANCE.get(IServiceNameDAO.class.getName()); + return dao.getServiceId(applicationId, serviceName); + }); + } catch (Throwable e) { + return 0; + } + } + + public static int getForUI(int applicationId, String serviceName) { + int serviceId = get(applicationId, serviceName); + if (serviceId == 0) { + IServiceNameDAO dao = (IServiceNameDAO)DAOContainer.INSTANCE.get(IServiceNameDAO.class.getName()); + serviceId = dao.getServiceId(applicationId, serviceName); + CACHE.put(applicationId + Const.ID_SPLIT + serviceName, serviceId); + } + return serviceId; + } +} 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 252c79d20506..8235b01a6f8b 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 @@ -24,4 +24,14 @@ public static String get(int serviceId) { return Const.EXCEPTION; } } + + public static String getForUI(int serviceId) { + String serviceName = get(serviceId); + if (serviceName.equals("Unknown")) { + IServiceNameDAO dao = (IServiceNameDAO)DAOContainer.INSTANCE.get(IServiceNameDAO.class.getName()); + serviceName = dao.getServiceName(serviceId); + CACHE.put(serviceId, serviceName); + } + return serviceName; + } } 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 c90ab98d95f1..039a45d9517c 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,6 @@ package org.skywalking.apm.collector.ui.dao; -import java.util.List; +import com.google.gson.JsonArray; import org.skywalking.apm.collector.storage.define.register.InstanceDataDefine; /** @@ -11,7 +11,7 @@ public interface IInstanceDAO { Long instanceLastHeartBeatTime(long applicationInstanceId); - List getApplications(long time); + JsonArray getApplications(long startTime, long endTime); InstanceDataDefine.Instance getInstance(int instanceId); diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/IServiceEntryDAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/IServiceEntryDAO.java new file mode 100644 index 000000000000..d8fcc61148f9 --- /dev/null +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/IServiceEntryDAO.java @@ -0,0 +1,10 @@ +package org.skywalking.apm.collector.ui.dao; + +import com.google.gson.JsonObject; + +/** + * @author pengys5 + */ +public interface IServiceEntryDAO { + JsonObject load(int applicationId, String entryServiceName, long startTime, long endTime, int from, int size); +} diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/IServiceNameDAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/IServiceNameDAO.java index 354e875fd59e..3b385a36445d 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/IServiceNameDAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/IServiceNameDAO.java @@ -5,4 +5,6 @@ */ public interface IServiceNameDAO { String getServiceName(int serviceId); + + int getServiceId(int applicationId, String serviceName); } diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/INodeRefSumDAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/IServiceReferenceDAO.java similarity index 50% rename from apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/INodeRefSumDAO.java rename to apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/IServiceReferenceDAO.java index 26a6e6239fc5..d92e53960eb7 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/INodeRefSumDAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/IServiceReferenceDAO.java @@ -5,6 +5,6 @@ /** * @author pengys5 */ -public interface INodeRefSumDAO { - JsonArray load(long startTime, long endTime); +public interface IServiceReferenceDAO { + JsonArray load(int entryServiceId, long startTime, long endTime); } 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 6725798f942e..e79a8874a039 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 @@ -1,7 +1,7 @@ package org.skywalking.apm.collector.ui.dao; -import java.util.LinkedList; -import java.util.List; +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; import org.elasticsearch.action.get.GetRequestBuilder; import org.elasticsearch.action.get.GetResponse; import org.elasticsearch.action.search.SearchRequestBuilder; @@ -15,11 +15,13 @@ import org.elasticsearch.search.SearchHit; import org.elasticsearch.search.aggregations.AggregationBuilders; 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.storage.define.register.InstanceDataDefine; import org.skywalking.apm.collector.storage.define.register.InstanceTable; import org.skywalking.apm.collector.storage.elasticsearch.dao.EsDAO; +import org.skywalking.apm.collector.ui.cache.ApplicationCache; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -67,32 +69,31 @@ private Long heartBeatTime(AbstractQueryBuilder queryBuilder) { return heartBeatTime; } - @Override public List getApplications(long time) { - logger.debug("application list get, time: {}", time); + @Override public JsonArray getApplications(long startTime, long endTime) { + logger.debug("application list get, start time: {}, end time: {}", startTime, endTime); SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(InstanceTable.TABLE); searchRequestBuilder.setTypes(InstanceTable.TABLE_TYPE); searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH); - - BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); - RangeQueryBuilder heartBeatRangeQueryBuilder = QueryBuilders.rangeQuery(InstanceTable.COLUMN_HEARTBEAT_TIME).gte(time); - RangeQueryBuilder registerRangeQueryBuilder = QueryBuilders.rangeQuery(InstanceTable.COLUMN_REGISTER_TIME).lte(time); - - boolQueryBuilder.must().add(registerRangeQueryBuilder); - boolQueryBuilder.must().add(heartBeatRangeQueryBuilder); - - searchRequestBuilder.setQuery(boolQueryBuilder); + searchRequestBuilder.setQuery(QueryBuilders.rangeQuery(InstanceTable.COLUMN_HEARTBEAT_TIME).gte(startTime)); searchRequestBuilder.setSize(0); - searchRequestBuilder.addAggregation(AggregationBuilders.terms(InstanceTable.COLUMN_APPLICATION_ID).field(InstanceTable.COLUMN_APPLICATION_ID).size(100)); + searchRequestBuilder.addAggregation(AggregationBuilders.terms(InstanceTable.COLUMN_APPLICATION_ID).field(InstanceTable.COLUMN_APPLICATION_ID).size(100) + .subAggregation(AggregationBuilders.count(InstanceTable.COLUMN_INSTANCE_ID).field(InstanceTable.COLUMN_INSTANCE_ID))); SearchResponse searchResponse = searchRequestBuilder.execute().actionGet(); Terms genders = searchResponse.getAggregations().get(InstanceTable.COLUMN_APPLICATION_ID); - List applications = new LinkedList<>(); - for (Terms.Bucket entry : genders.getBuckets()) { - Integer applicationId = entry.getKeyAsNumber().intValue(); + JsonArray applications = new JsonArray(); + for (Terms.Bucket applicationsBucket : genders.getBuckets()) { + Integer applicationId = applicationsBucket.getKeyAsNumber().intValue(); logger.debug("applicationId: {}", applicationId); - long instanceCount = entry.getDocCount(); - applications.add(new Application(applicationId, instanceCount)); + + ValueCount instanceCount = applicationsBucket.getAggregations().get(InstanceTable.COLUMN_INSTANCE_ID); + + JsonObject application = new JsonObject(); + application.addProperty("applicationId", applicationId); + application.addProperty("applicationCode", ApplicationCache.getForUI(applicationId)); + application.addProperty("instanceCount", instanceCount.getValue()); + applications.add(application); } return applications; } 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 2a7413de0063..db9945135fe0 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,6 @@ package org.skywalking.apm.collector.ui.dao; -import java.util.List; +import com.google.gson.JsonArray; import org.skywalking.apm.collector.storage.define.register.InstanceDataDefine; import org.skywalking.apm.collector.storage.h2.dao.H2DAO; @@ -16,7 +16,7 @@ public class InstanceH2DAO extends H2DAO implements IInstanceDAO { return null; } - @Override public List getApplications(long time) { + @Override public JsonArray getApplications(long startTime, long endTime) { return null; } diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/NodeComponentEsDAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/NodeComponentEsDAO.java index 8d6b1f238c35..a35192f7d356 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/NodeComponentEsDAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/NodeComponentEsDAO.java @@ -8,9 +8,11 @@ import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.aggregations.AggregationBuilders; import org.elasticsearch.search.aggregations.bucket.terms.Terms; -import org.skywalking.apm.collector.core.util.Const; -import org.skywalking.apm.collector.storage.elasticsearch.dao.EsDAO; +import org.skywalking.apm.collector.core.util.StringUtils; import org.skywalking.apm.collector.storage.define.node.NodeComponentTable; +import org.skywalking.apm.collector.storage.elasticsearch.dao.EsDAO; +import org.skywalking.apm.collector.ui.cache.ApplicationCache; +import org.skywalking.apm.network.trace.component.ComponentsDefine; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -22,30 +24,89 @@ public class NodeComponentEsDAO extends EsDAO implements INodeComponentDAO { private final Logger logger = LoggerFactory.getLogger(NodeComponentEsDAO.class); @Override public JsonArray load(long startTime, long endTime) { + logger.debug("node component load, start time: {}, end time: {}", startTime, endTime); + JsonArray nodeComponentArray = new JsonArray(); + nodeComponentArray.addAll(aggregationByComponentId(startTime, endTime)); + nodeComponentArray.addAll(aggregationByComponentName(startTime, endTime)); + return nodeComponentArray; + } + + private JsonArray aggregationByComponentId(long startTime, long endTime) { SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(NodeComponentTable.TABLE); searchRequestBuilder.setTypes(NodeComponentTable.TABLE_TYPE); searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH); searchRequestBuilder.setQuery(QueryBuilders.rangeQuery(NodeComponentTable.COLUMN_TIME_BUCKET).gte(startTime).lte(endTime)); searchRequestBuilder.setSize(0); - searchRequestBuilder.addAggregation(AggregationBuilders.terms(NodeComponentTable.COLUMN_AGG).field(NodeComponentTable.COLUMN_AGG).size(100)); + searchRequestBuilder.addAggregation(AggregationBuilders.terms(NodeComponentTable.COLUMN_COMPONENT_ID).field(NodeComponentTable.COLUMN_COMPONENT_ID).size(100) + .subAggregation(AggregationBuilders.terms(NodeComponentTable.COLUMN_PEER).field(NodeComponentTable.COLUMN_PEER).size(100)) + .subAggregation(AggregationBuilders.terms(NodeComponentTable.COLUMN_PEER_ID).field(NodeComponentTable.COLUMN_PEER_ID).size(100))); + SearchResponse searchResponse = searchRequestBuilder.execute().actionGet(); - Terms genders = searchResponse.getAggregations().get(NodeComponentTable.COLUMN_AGG); + Terms componentIdTerms = searchResponse.getAggregations().get(NodeComponentTable.COLUMN_COMPONENT_ID); + JsonArray nodeComponentArray = new JsonArray(); + for (Terms.Bucket componentIdBucket : componentIdTerms.getBuckets()) { + int componentId = componentIdBucket.getKeyAsNumber().intValue(); + String componentName = ComponentsDefine.getInstance().getComponentName(componentId); + if (componentId != 0) { + buildComponentArray(componentIdBucket, componentName, nodeComponentArray); + } + } + + return nodeComponentArray; + } + + private JsonArray aggregationByComponentName(long startTime, long endTime) { + SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(NodeComponentTable.TABLE); + searchRequestBuilder.setTypes(NodeComponentTable.TABLE_TYPE); + searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH); + searchRequestBuilder.setQuery(QueryBuilders.rangeQuery(NodeComponentTable.COLUMN_TIME_BUCKET).gte(startTime).lte(endTime)); + searchRequestBuilder.setSize(0); + + searchRequestBuilder.addAggregation(AggregationBuilders.terms(NodeComponentTable.COLUMN_COMPONENT_NAME).field(NodeComponentTable.COLUMN_COMPONENT_NAME).size(100) + .subAggregation(AggregationBuilders.terms(NodeComponentTable.COLUMN_PEER).field(NodeComponentTable.COLUMN_PEER).size(100)) + .subAggregation(AggregationBuilders.terms(NodeComponentTable.COLUMN_PEER_ID).field(NodeComponentTable.COLUMN_PEER_ID).size(100))); + SearchResponse searchResponse = searchRequestBuilder.execute().actionGet(); + + Terms componentNameTerms = searchResponse.getAggregations().get(NodeComponentTable.COLUMN_COMPONENT_NAME); JsonArray nodeComponentArray = new JsonArray(); - for (Terms.Bucket entry : genders.getBuckets()) { - String aggId = entry.getKeyAsString(); - String[] aggIds = aggId.split(Const.IDS_SPLIT); - String code = aggIds[0]; - String peers = aggIds[1]; - - JsonObject nodeComponentObj = new JsonObject(); - nodeComponentObj.addProperty("name", code); - nodeComponentObj.addProperty("peers", peers); - nodeComponentArray.add(nodeComponentObj); + for (Terms.Bucket componentNameBucket : componentNameTerms.getBuckets()) { + String componentName = componentNameBucket.getKeyAsString(); + if (StringUtils.isNotEmpty(componentName)) { + buildComponentArray(componentNameBucket, componentName, nodeComponentArray); + } } - logger.debug("node component data: {}", nodeComponentArray.toString()); + return nodeComponentArray; } + + private void buildComponentArray(Terms.Bucket componentBucket, String componentName, JsonArray nodeComponentArray) { + Terms peerIdTerms = componentBucket.getAggregations().get(NodeComponentTable.COLUMN_PEER_ID); + for (Terms.Bucket peerIdBucket : peerIdTerms.getBuckets()) { + int peerId = peerIdBucket.getKeyAsNumber().intValue(); + + if (peerId != 0) { + String peer = ApplicationCache.getForUI(peerId); + + JsonObject nodeComponentObj = new JsonObject(); + nodeComponentObj.addProperty("componentName", componentName); + nodeComponentObj.addProperty("peer", peer); + nodeComponentArray.add(nodeComponentObj); + } + } + + Terms peerTerms = componentBucket.getAggregations().get(NodeComponentTable.COLUMN_PEER); + for (Terms.Bucket peerBucket : peerTerms.getBuckets()) { + String peer = peerBucket.getKeyAsString(); + + if (StringUtils.isNotEmpty(peer)) { + JsonObject nodeComponentObj = new JsonObject(); + nodeComponentObj.addProperty("componentName", componentName); + nodeComponentObj.addProperty("peer", peer); + nodeComponentArray.add(nodeComponentObj); + } + } + } } diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/NodeMappingEsDAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/NodeMappingEsDAO.java index 55d07837d446..fafb6a448f43 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/NodeMappingEsDAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/NodeMappingEsDAO.java @@ -8,9 +8,10 @@ import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.aggregations.AggregationBuilders; import org.elasticsearch.search.aggregations.bucket.terms.Terms; -import org.skywalking.apm.collector.core.util.Const; -import org.skywalking.apm.collector.storage.elasticsearch.dao.EsDAO; +import org.skywalking.apm.collector.core.util.StringUtils; import org.skywalking.apm.collector.storage.define.node.NodeMappingTable; +import org.skywalking.apm.collector.storage.elasticsearch.dao.EsDAO; +import org.skywalking.apm.collector.ui.cache.ApplicationCache; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -28,22 +29,42 @@ public class NodeMappingEsDAO extends EsDAO implements INodeMappingDAO { searchRequestBuilder.setQuery(QueryBuilders.rangeQuery(NodeMappingTable.COLUMN_TIME_BUCKET).gte(startTime).lte(endTime)); searchRequestBuilder.setSize(0); - searchRequestBuilder.addAggregation(AggregationBuilders.terms(NodeMappingTable.COLUMN_AGG).field(NodeMappingTable.COLUMN_AGG).size(100)); + searchRequestBuilder.addAggregation( + AggregationBuilders.terms(NodeMappingTable.COLUMN_APPLICATION_ID).field(NodeMappingTable.COLUMN_APPLICATION_ID).size(100) + .subAggregation(AggregationBuilders.terms(NodeMappingTable.COLUMN_ADDRESS_ID).field(NodeMappingTable.COLUMN_ADDRESS_ID).size(100)) + .subAggregation(AggregationBuilders.terms(NodeMappingTable.COLUMN_ADDRESS).field(NodeMappingTable.COLUMN_ADDRESS).size(100))); SearchResponse searchResponse = searchRequestBuilder.execute().actionGet(); - Terms genders = searchResponse.getAggregations().get(NodeMappingTable.COLUMN_AGG); + Terms applicationIdTerms = searchResponse.getAggregations().get(NodeMappingTable.COLUMN_APPLICATION_ID); JsonArray nodeMappingArray = new JsonArray(); - for (Terms.Bucket entry : genders.getBuckets()) { - String aggId = entry.getKeyAsString(); - String[] aggIds = aggId.split(Const.IDS_SPLIT); - String code = aggIds[0]; - String peers = aggIds[1]; - - JsonObject nodeMappingObj = new JsonObject(); - nodeMappingObj.addProperty("code", code); - nodeMappingObj.addProperty("peers", peers); - nodeMappingArray.add(nodeMappingObj); + for (Terms.Bucket applicationIdBucket : applicationIdTerms.getBuckets()) { + int applicationId = applicationIdBucket.getKeyAsNumber().intValue(); + String applicationCode = ApplicationCache.getForUI(applicationId); + Terms addressIdTerms = applicationIdBucket.getAggregations().get(NodeMappingTable.COLUMN_ADDRESS_ID); + for (Terms.Bucket addressIdBucket : addressIdTerms.getBuckets()) { + int addressId = addressIdBucket.getKeyAsNumber().intValue(); + String address = ApplicationCache.getForUI(addressId); + + if (addressId != 0) { + JsonObject nodeMappingObj = new JsonObject(); + nodeMappingObj.addProperty("applicationCode", applicationCode); + nodeMappingObj.addProperty("address", address); + nodeMappingArray.add(nodeMappingObj); + } + } + + Terms addressTerms = applicationIdBucket.getAggregations().get(NodeMappingTable.COLUMN_ADDRESS); + for (Terms.Bucket addressBucket : addressTerms.getBuckets()) { + String address = addressBucket.getKeyAsString(); + + if (StringUtils.isNotEmpty(address)) { + JsonObject nodeMappingObj = new JsonObject(); + nodeMappingObj.addProperty("applicationCode", applicationCode); + nodeMappingObj.addProperty("address", address); + nodeMappingArray.add(nodeMappingObj); + } + } } logger.debug("node mapping data: {}", nodeMappingArray.toString()); return nodeMappingArray; diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/NodeRefSumEsDAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/NodeRefSumEsDAO.java deleted file mode 100644 index 520c306189c9..000000000000 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/NodeRefSumEsDAO.java +++ /dev/null @@ -1,77 +0,0 @@ -package org.skywalking.apm.collector.ui.dao; - -import com.google.gson.JsonArray; -import com.google.gson.JsonObject; -import org.elasticsearch.action.search.SearchRequestBuilder; -import org.elasticsearch.action.search.SearchResponse; -import org.elasticsearch.action.search.SearchType; -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.bucket.terms.TermsAggregationBuilder; -import org.elasticsearch.search.aggregations.metrics.sum.Sum; -import org.skywalking.apm.collector.core.util.Const; -import org.skywalking.apm.collector.storage.elasticsearch.dao.EsDAO; -import org.skywalking.apm.collector.storage.define.noderef.NodeRefSumTable; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * @author pengys5 - */ -public class NodeRefSumEsDAO extends EsDAO implements INodeRefSumDAO { - - private final Logger logger = LoggerFactory.getLogger(NodeRefSumEsDAO.class); - - @Override public JsonArray load(long startTime, long endTime) { - SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(NodeRefSumTable.TABLE); - searchRequestBuilder.setTypes(NodeRefSumTable.TABLE_TYPE); - searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH); - searchRequestBuilder.setQuery(QueryBuilders.rangeQuery(NodeRefSumTable.COLUMN_TIME_BUCKET).gte(startTime).lte(endTime)); - searchRequestBuilder.setSize(0); - - TermsAggregationBuilder aggregationBuilder = AggregationBuilders.terms(NodeRefSumTable.COLUMN_AGG).field(NodeRefSumTable.COLUMN_AGG); - aggregationBuilder.subAggregation(AggregationBuilders.sum(NodeRefSumTable.COLUMN_ONE_SECOND_LESS).field(NodeRefSumTable.COLUMN_ONE_SECOND_LESS)); - aggregationBuilder.subAggregation(AggregationBuilders.sum(NodeRefSumTable.COLUMN_THREE_SECOND_LESS).field(NodeRefSumTable.COLUMN_THREE_SECOND_LESS)); - aggregationBuilder.subAggregation(AggregationBuilders.sum(NodeRefSumTable.COLUMN_FIVE_SECOND_LESS).field(NodeRefSumTable.COLUMN_FIVE_SECOND_LESS)); - aggregationBuilder.subAggregation(AggregationBuilders.sum(NodeRefSumTable.COLUMN_FIVE_SECOND_GREATER).field(NodeRefSumTable.COLUMN_FIVE_SECOND_GREATER)); - aggregationBuilder.subAggregation(AggregationBuilders.sum(NodeRefSumTable.COLUMN_ERROR).field(NodeRefSumTable.COLUMN_ERROR)); - aggregationBuilder.subAggregation(AggregationBuilders.sum(NodeRefSumTable.COLUMN_SUMMARY).field(NodeRefSumTable.COLUMN_SUMMARY)); - - searchRequestBuilder.addAggregation(aggregationBuilder); - - SearchResponse searchResponse = searchRequestBuilder.execute().actionGet(); - - JsonArray nodeRefResSumArray = new JsonArray(); - Terms aggTerms = searchResponse.getAggregations().get(NodeRefSumTable.COLUMN_AGG); - for (Terms.Bucket bucket : aggTerms.getBuckets()) { - String aggId = String.valueOf(bucket.getKey()); - Sum oneSecondLess = bucket.getAggregations().get(NodeRefSumTable.COLUMN_ONE_SECOND_LESS); - Sum threeSecondLess = bucket.getAggregations().get(NodeRefSumTable.COLUMN_THREE_SECOND_LESS); - Sum fiveSecondLess = bucket.getAggregations().get(NodeRefSumTable.COLUMN_FIVE_SECOND_LESS); - Sum fiveSecondGreater = bucket.getAggregations().get(NodeRefSumTable.COLUMN_FIVE_SECOND_GREATER); - Sum error = bucket.getAggregations().get(NodeRefSumTable.COLUMN_ERROR); - Sum summary = bucket.getAggregations().get(NodeRefSumTable.COLUMN_SUMMARY); - logger.debug("aggId: {}, oneSecondLess: {}, threeSecondLess: {}, fiveSecondLess: {}, fiveSecondGreater: {}, error: {}, summary: {}", aggId, - oneSecondLess.getValue(), threeSecondLess.getValue(), fiveSecondLess.getValue(), fiveSecondGreater.getValue(), error.getValue(), summary.getValue()); - - JsonObject nodeRefResSumObj = new JsonObject(); - String[] ids = aggId.split(Const.IDS_SPLIT); - String front = ids[0]; - String behind = ids[1]; - - nodeRefResSumObj.addProperty("front", front); - nodeRefResSumObj.addProperty("behind", behind); - - nodeRefResSumObj.addProperty(NodeRefSumTable.COLUMN_ONE_SECOND_LESS, oneSecondLess.getValue()); - nodeRefResSumObj.addProperty(NodeRefSumTable.COLUMN_THREE_SECOND_LESS, threeSecondLess.getValue()); - nodeRefResSumObj.addProperty(NodeRefSumTable.COLUMN_FIVE_SECOND_LESS, fiveSecondLess.getValue()); - nodeRefResSumObj.addProperty(NodeRefSumTable.COLUMN_FIVE_SECOND_GREATER, fiveSecondGreater.getValue()); - nodeRefResSumObj.addProperty(NodeRefSumTable.COLUMN_ERROR, error.getValue()); - nodeRefResSumObj.addProperty(NodeRefSumTable.COLUMN_SUMMARY, summary.getValue()); - nodeRefResSumArray.add(nodeRefResSumObj); - } - - return nodeRefResSumArray; - } -} diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/NodeReferenceEsDAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/NodeReferenceEsDAO.java index b189c339b5bb..a21de57afaef 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/NodeReferenceEsDAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/NodeReferenceEsDAO.java @@ -8,9 +8,12 @@ import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.aggregations.AggregationBuilders; import org.elasticsearch.search.aggregations.bucket.terms.Terms; -import org.skywalking.apm.collector.core.util.Const; +import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; +import org.elasticsearch.search.aggregations.metrics.sum.Sum; +import org.skywalking.apm.collector.core.util.StringUtils; +import org.skywalking.apm.collector.storage.define.noderef.NodeReferenceTable; import org.skywalking.apm.collector.storage.elasticsearch.dao.EsDAO; -import org.skywalking.apm.collector.storage.define.noderef.NodeRefTable; +import org.skywalking.apm.collector.ui.cache.ApplicationCache; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -22,31 +25,93 @@ public class NodeReferenceEsDAO extends EsDAO implements INodeReferenceDAO { private final Logger logger = LoggerFactory.getLogger(NodeReferenceEsDAO.class); @Override public JsonArray load(long startTime, long endTime) { - SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(NodeRefTable.TABLE); - searchRequestBuilder.setTypes(NodeRefTable.TABLE_TYPE); + SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(NodeReferenceTable.TABLE); + searchRequestBuilder.setTypes(NodeReferenceTable.TABLE_TYPE); searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH); - searchRequestBuilder.setQuery(QueryBuilders.rangeQuery(NodeRefTable.COLUMN_TIME_BUCKET).gte(startTime).lte(endTime)); + searchRequestBuilder.setQuery(QueryBuilders.rangeQuery(NodeReferenceTable.COLUMN_TIME_BUCKET).gte(startTime).lte(endTime)); searchRequestBuilder.setSize(0); - searchRequestBuilder.addAggregation(AggregationBuilders.terms(NodeRefTable.COLUMN_AGG).field(NodeRefTable.COLUMN_AGG).size(100)); + TermsAggregationBuilder aggregationBuilder = AggregationBuilders.terms(NodeReferenceTable.COLUMN_FRONT_APPLICATION_ID).field(NodeReferenceTable.COLUMN_FRONT_APPLICATION_ID).size(100); + aggregationBuilder.subAggregation(AggregationBuilders.terms(NodeReferenceTable.COLUMN_BEHIND_APPLICATION_ID).field(NodeReferenceTable.COLUMN_BEHIND_APPLICATION_ID).size(100) + .subAggregation(AggregationBuilders.sum(NodeReferenceTable.COLUMN_S1_LTE).field(NodeReferenceTable.COLUMN_S1_LTE)) + .subAggregation(AggregationBuilders.sum(NodeReferenceTable.COLUMN_S3_LTE).field(NodeReferenceTable.COLUMN_S3_LTE)) + .subAggregation(AggregationBuilders.sum(NodeReferenceTable.COLUMN_S5_LTE).field(NodeReferenceTable.COLUMN_S5_LTE)) + .subAggregation(AggregationBuilders.sum(NodeReferenceTable.COLUMN_S5_GT).field(NodeReferenceTable.COLUMN_S5_GT)) + .subAggregation(AggregationBuilders.sum(NodeReferenceTable.COLUMN_SUMMARY).field(NodeReferenceTable.COLUMN_SUMMARY)) + .subAggregation(AggregationBuilders.sum(NodeReferenceTable.COLUMN_ERROR).field(NodeReferenceTable.COLUMN_ERROR))); + aggregationBuilder.subAggregation(AggregationBuilders.terms(NodeReferenceTable.COLUMN_BEHIND_PEER).field(NodeReferenceTable.COLUMN_BEHIND_PEER).size(100) + .subAggregation(AggregationBuilders.sum(NodeReferenceTable.COLUMN_S1_LTE).field(NodeReferenceTable.COLUMN_S1_LTE)) + .subAggregation(AggregationBuilders.sum(NodeReferenceTable.COLUMN_S3_LTE).field(NodeReferenceTable.COLUMN_S3_LTE)) + .subAggregation(AggregationBuilders.sum(NodeReferenceTable.COLUMN_S5_LTE).field(NodeReferenceTable.COLUMN_S5_LTE)) + .subAggregation(AggregationBuilders.sum(NodeReferenceTable.COLUMN_S5_GT).field(NodeReferenceTable.COLUMN_S5_GT)) + .subAggregation(AggregationBuilders.sum(NodeReferenceTable.COLUMN_SUMMARY).field(NodeReferenceTable.COLUMN_SUMMARY)) + .subAggregation(AggregationBuilders.sum(NodeReferenceTable.COLUMN_ERROR).field(NodeReferenceTable.COLUMN_ERROR))); + searchRequestBuilder.addAggregation(aggregationBuilder); SearchResponse searchResponse = searchRequestBuilder.execute().actionGet(); - Terms genders = searchResponse.getAggregations().get(NodeRefTable.COLUMN_AGG); + JsonArray nodeRefResSumArray = new JsonArray(); + Terms frontApplicationIdTerms = searchResponse.getAggregations().get(NodeReferenceTable.COLUMN_FRONT_APPLICATION_ID); + for (Terms.Bucket frontApplicationIdBucket : frontApplicationIdTerms.getBuckets()) { + int applicationId = frontApplicationIdBucket.getKeyAsNumber().intValue(); + String applicationCode = ApplicationCache.getForUI(applicationId); + Terms behindApplicationIdTerms = frontApplicationIdBucket.getAggregations().get(NodeReferenceTable.COLUMN_BEHIND_APPLICATION_ID); + for (Terms.Bucket behindApplicationIdBucket : behindApplicationIdTerms.getBuckets()) { + int behindApplicationId = behindApplicationIdBucket.getKeyAsNumber().intValue(); - JsonArray nodeRefArray = new JsonArray(); - for (Terms.Bucket entry : genders.getBuckets()) { - String aggId = entry.getKeyAsString(); - String[] aggIds = aggId.split(Const.IDS_SPLIT); - String front = aggIds[0]; - String behind = aggIds[1]; + if (behindApplicationId != 0) { + String behindApplicationCode = ApplicationCache.getForUI(behindApplicationId); - JsonObject nodeRefObj = new JsonObject(); - nodeRefObj.addProperty("front", front); - nodeRefObj.addProperty("behind", behind); - nodeRefArray.add(nodeRefObj); + Sum s1LTE = behindApplicationIdBucket.getAggregations().get(NodeReferenceTable.COLUMN_S1_LTE); + Sum s3LTE = behindApplicationIdBucket.getAggregations().get(NodeReferenceTable.COLUMN_S3_LTE); + Sum s5LTE = behindApplicationIdBucket.getAggregations().get(NodeReferenceTable.COLUMN_S5_LTE); + Sum s5GT = behindApplicationIdBucket.getAggregations().get(NodeReferenceTable.COLUMN_S5_GT); + Sum summary = behindApplicationIdBucket.getAggregations().get(NodeReferenceTable.COLUMN_SUMMARY); + Sum error = behindApplicationIdBucket.getAggregations().get(NodeReferenceTable.COLUMN_ERROR); + logger.debug("applicationId: {}, behindApplicationId: {}, s1LTE: {}, s3LTE: {}, s5LTE: {}, s5GT: {}, error: {}, summary: {}", applicationId, + behindApplicationId, s1LTE.getValue(), s3LTE.getValue(), s5LTE.getValue(), s5GT.getValue(), error.getValue(), summary.getValue()); + + JsonObject nodeRefResSumObj = new JsonObject(); + nodeRefResSumObj.addProperty("front", applicationCode); + nodeRefResSumObj.addProperty("behind", behindApplicationCode); + nodeRefResSumObj.addProperty(NodeReferenceTable.COLUMN_S1_LTE, s1LTE.getValue()); + nodeRefResSumObj.addProperty(NodeReferenceTable.COLUMN_S3_LTE, s3LTE.getValue()); + nodeRefResSumObj.addProperty(NodeReferenceTable.COLUMN_S5_LTE, s5LTE.getValue()); + nodeRefResSumObj.addProperty(NodeReferenceTable.COLUMN_S5_GT, s5GT.getValue()); + nodeRefResSumObj.addProperty(NodeReferenceTable.COLUMN_ERROR, error.getValue()); + nodeRefResSumObj.addProperty(NodeReferenceTable.COLUMN_SUMMARY, summary.getValue()); + nodeRefResSumArray.add(nodeRefResSumObj); + } + } + + Terms behindPeerTerms = frontApplicationIdBucket.getAggregations().get(NodeReferenceTable.COLUMN_BEHIND_PEER); + for (Terms.Bucket behindPeerBucket : behindPeerTerms.getBuckets()) { + String behindPeer = behindPeerBucket.getKeyAsString(); + + if (StringUtils.isNotEmpty(behindPeer)) { + Sum s1LTE = behindPeerBucket.getAggregations().get(NodeReferenceTable.COLUMN_S1_LTE); + Sum s3LTE = behindPeerBucket.getAggregations().get(NodeReferenceTable.COLUMN_S3_LTE); + Sum s5LTE = behindPeerBucket.getAggregations().get(NodeReferenceTable.COLUMN_S5_LTE); + Sum s5GT = behindPeerBucket.getAggregations().get(NodeReferenceTable.COLUMN_S5_GT); + Sum summary = behindPeerBucket.getAggregations().get(NodeReferenceTable.COLUMN_SUMMARY); + Sum error = behindPeerBucket.getAggregations().get(NodeReferenceTable.COLUMN_ERROR); + logger.debug("applicationId: {}, behindPeer: {}, s1LTE: {}, s3LTE: {}, s5LTE: {}, s5GT: {}, error: {}, summary: {}", applicationId, + behindPeer, s1LTE.getValue(), s3LTE.getValue(), s5LTE.getValue(), s5GT.getValue(), error.getValue(), summary.getValue()); + + JsonObject nodeRefResSumObj = new JsonObject(); + nodeRefResSumObj.addProperty("front", applicationCode); + nodeRefResSumObj.addProperty("behind", behindPeer); + nodeRefResSumObj.addProperty(NodeReferenceTable.COLUMN_S1_LTE, s1LTE.getValue()); + nodeRefResSumObj.addProperty(NodeReferenceTable.COLUMN_S3_LTE, s3LTE.getValue()); + nodeRefResSumObj.addProperty(NodeReferenceTable.COLUMN_S5_LTE, s5LTE.getValue()); + nodeRefResSumObj.addProperty(NodeReferenceTable.COLUMN_S5_GT, s5GT.getValue()); + nodeRefResSumObj.addProperty(NodeReferenceTable.COLUMN_ERROR, error.getValue()); + nodeRefResSumObj.addProperty(NodeReferenceTable.COLUMN_SUMMARY, summary.getValue()); + nodeRefResSumArray.add(nodeRefResSumObj); + } + } } - logger.debug("node ref data: {}", nodeRefArray.toString()); - return nodeRefArray; + + return nodeRefResSumArray; } } diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceEntryEsDAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceEntryEsDAO.java new file mode 100644 index 000000000000..299c4ae467ad --- /dev/null +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceEntryEsDAO.java @@ -0,0 +1,77 @@ +package org.skywalking.apm.collector.ui.dao; + +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; +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.QueryBuilders; +import org.elasticsearch.search.SearchHit; +import org.elasticsearch.search.SearchHits; +import org.elasticsearch.search.sort.SortBuilders; +import org.elasticsearch.search.sort.SortOrder; +import org.skywalking.apm.collector.core.util.ColumnNameUtils; +import org.skywalking.apm.collector.core.util.StringUtils; +import org.skywalking.apm.collector.storage.define.service.ServiceEntryTable; +import org.skywalking.apm.collector.storage.elasticsearch.dao.EsDAO; +import org.skywalking.apm.collector.ui.cache.ApplicationCache; + +/** + * @author pengys5 + */ +public class ServiceEntryEsDAO extends EsDAO implements IServiceEntryDAO { + + @Override + public JsonObject load(int applicationId, String entryServiceName, long startTime, long endTime, int from, + int size) { + SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(ServiceEntryTable.TABLE); + searchRequestBuilder.setTypes(ServiceEntryTable.TABLE_TYPE); + searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH); + + BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); + boolQueryBuilder.must().add(QueryBuilders.rangeQuery(ServiceEntryTable.COLUMN_REGISTER_TIME).lte(endTime)); + boolQueryBuilder.must().add(QueryBuilders.rangeQuery(ServiceEntryTable.COLUMN_NEWEST_TIME).gte(startTime)); + + if (applicationId != 0) { + boolQueryBuilder.must().add(QueryBuilders.matchQuery(ServiceEntryTable.COLUMN_APPLICATION_ID, applicationId)); + } + if (StringUtils.isNotEmpty(entryServiceName)) { + boolQueryBuilder.must().add(QueryBuilders.termQuery(ServiceEntryTable.COLUMN_ENTRY_SERVICE_NAME, entryServiceName)); + } + + searchRequestBuilder.setQuery(boolQueryBuilder); + searchRequestBuilder.setSize(size); + searchRequestBuilder.setFrom(from); + searchRequestBuilder.addSort(SortBuilders.fieldSort(ServiceEntryTable.COLUMN_ENTRY_SERVICE_NAME).order(SortOrder.ASC)); + + SearchResponse searchResponse = searchRequestBuilder.execute().actionGet(); + + return parseResponse(searchResponse); + } + + private JsonObject parseResponse(SearchResponse searchResponse) { + SearchHits searchHits = searchResponse.getHits(); + + JsonArray serviceArray = new JsonArray(); + for (SearchHit searchHit : searchHits.getHits()) { + int applicationId = ((Number)searchHit.getSource().get(ServiceEntryTable.COLUMN_APPLICATION_ID)).intValue(); + int entryServiceId = ((Number)searchHit.getSource().get(ServiceEntryTable.COLUMN_ENTRY_SERVICE_ID)).intValue(); + String applicationCode = ApplicationCache.getForUI(applicationId); + String entryServiceName = (String)searchHit.getSource().get(ServiceEntryTable.COLUMN_ENTRY_SERVICE_NAME); + + JsonObject row = new JsonObject(); + row.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceEntryTable.COLUMN_ENTRY_SERVICE_ID), entryServiceId); + row.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceEntryTable.COLUMN_ENTRY_SERVICE_NAME), entryServiceName); + row.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceEntryTable.COLUMN_APPLICATION_ID), applicationId); + row.addProperty("applicationCode", applicationCode); + serviceArray.add(row); + } + + JsonObject response = new JsonObject(); + response.addProperty("total", searchHits.totalHits); + response.add("array", serviceArray); + + return response; + } +} diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceEntryH2DAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceEntryH2DAO.java new file mode 100644 index 000000000000..da811365d482 --- /dev/null +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceEntryH2DAO.java @@ -0,0 +1,14 @@ +package org.skywalking.apm.collector.ui.dao; + +import com.google.gson.JsonObject; +import org.skywalking.apm.collector.storage.h2.dao.H2DAO; + +/** + * @author pengys5 + */ +public class ServiceEntryH2DAO extends H2DAO implements IServiceEntryDAO { + @Override public JsonObject load(int applicationId, String entryServiceName, long startTime, long endTime, int from, + int size) { + return null; + } +} 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 07a4ca387eb8..f8a177e9d544 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 @@ -2,10 +2,15 @@ import org.elasticsearch.action.get.GetRequestBuilder; import org.elasticsearch.action.get.GetResponse; -import org.skywalking.apm.collector.client.elasticsearch.ElasticSearchClient; +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.QueryBuilders; +import org.elasticsearch.search.SearchHit; import org.skywalking.apm.collector.core.util.Const; -import org.skywalking.apm.collector.storage.elasticsearch.dao.EsDAO; import org.skywalking.apm.collector.storage.define.register.ServiceNameTable; +import org.skywalking.apm.collector.storage.elasticsearch.dao.EsDAO; /** * @author pengys5 @@ -13,8 +18,7 @@ public class ServiceNameEsDAO extends EsDAO implements IServiceNameDAO { @Override public String getServiceName(int serviceId) { - ElasticSearchClient client = getClient(); - GetRequestBuilder getRequestBuilder = client.prepareGet(ServiceNameTable.TABLE, String.valueOf(serviceId)); + GetRequestBuilder getRequestBuilder = getClient().prepareGet(ServiceNameTable.TABLE, String.valueOf(serviceId)); GetResponse getResponse = getRequestBuilder.get(); if (getResponse.isExists()) { @@ -22,4 +26,24 @@ public class ServiceNameEsDAO extends EsDAO implements IServiceNameDAO { } return Const.UNKNOWN; } + + @Override public int getServiceId(int applicationId, String serviceName) { + SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(ServiceNameTable.TABLE); + searchRequestBuilder.setTypes(ServiceNameTable.TABLE_TYPE); + searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH); + + BoolQueryBuilder boolQuery = QueryBuilders.boolQuery(); + boolQuery.must().add(QueryBuilders.matchQuery(ServiceNameTable.COLUMN_APPLICATION_ID, applicationId)); + boolQuery.must().add(QueryBuilders.matchQuery(ServiceNameTable.COLUMN_SERVICE_NAME, serviceName)); + searchRequestBuilder.setQuery(boolQuery); + searchRequestBuilder.setSize(1); + + SearchResponse searchResponse = searchRequestBuilder.get(); + if (searchResponse.getHits().totalHits > 0) { + SearchHit searchHit = searchResponse.getHits().iterator().next(); + int serviceId = (int)searchHit.getSource().get(ServiceNameTable.COLUMN_SERVICE_ID); + return serviceId; + } + return 0; + } } diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceNameH2DAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceNameH2DAO.java index e96f8adf5710..f0f585651bac 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceNameH2DAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceNameH2DAO.java @@ -10,4 +10,8 @@ public class ServiceNameH2DAO extends H2DAO implements IServiceNameDAO { @Override public String getServiceName(int serviceId) { return null; } + + @Override public int getServiceId(int applicationId, String serviceName) { + return 0; + } } 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 new file mode 100644 index 000000000000..69519543704f --- /dev/null +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceReferenceEsDAO.java @@ -0,0 +1,154 @@ +package org.skywalking.apm.collector.ui.dao; + +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; +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.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.ColumnNameUtils; +import org.skywalking.apm.collector.core.util.Const; +import org.skywalking.apm.collector.core.util.StringUtils; +import org.skywalking.apm.collector.storage.define.serviceref.ServiceReferenceTable; +import org.skywalking.apm.collector.storage.elasticsearch.dao.EsDAO; +import org.skywalking.apm.collector.ui.cache.ServiceIdCache; +import org.skywalking.apm.collector.ui.cache.ServiceNameCache; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @author pengys5 + */ +public class ServiceReferenceEsDAO extends EsDAO implements IServiceReferenceDAO { + + private final Logger logger = LoggerFactory.getLogger(ServiceReferenceEsDAO.class); + + @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)); + searchRequestBuilder.setQuery(boolQuery); + searchRequestBuilder.setSize(0); + + 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.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)) + .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)))); + + 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.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)) + .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)))); + + JsonArray serviceReferenceArray = new JsonArray(); + SearchResponse searchResponse = searchRequestBuilder.get(); + Terms frontServiceIdTerms = searchResponse.getAggregations().get(ServiceReferenceTable.COLUMN_FRONT_SERVICE_ID); + for (Terms.Bucket frontServiceBucket : frontServiceIdTerms.getBuckets()) { + int frontServiceId = frontServiceBucket.getKeyAsNumber().intValue(); + if (frontServiceId != 0) { + parseSubAggregate(serviceReferenceArray, frontServiceBucket, frontServiceId); + } + } + + Terms frontServiceNameTerms = searchResponse.getAggregations().get(ServiceReferenceTable.COLUMN_FRONT_SERVICE_NAME); + for (Terms.Bucket frontServiceBucket : frontServiceNameTerms.getBuckets()) { + String frontServiceName = frontServiceBucket.getKeyAsString(); + if (StringUtils.isNotEmpty(frontServiceName)) { + String[] serviceNames = frontServiceName.split(Const.ID_SPLIT); + int frontServiceId = ServiceIdCache.getForUI(Integer.parseInt(serviceNames[0]), serviceNames[1]); + parseSubAggregate(serviceReferenceArray, frontServiceBucket, frontServiceId); + } + } + return serviceReferenceArray; + } + + private void parseSubAggregate(JsonArray serviceReferenceArray, Terms.Bucket frontServiceBucket, + int frontServiceId) { + Terms behindServiceIdTerms = frontServiceBucket.getAggregations().get(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_ID); + for (Terms.Bucket behindServiceIdBucket : behindServiceIdTerms.getBuckets()) { + int behindServiceId = behindServiceIdBucket.getKeyAsNumber().intValue(); + if (behindServiceId != 0) { + Sum s1LteSum = behindServiceIdBucket.getAggregations().get(ServiceReferenceTable.COLUMN_S1_LTE); + Sum s3LteSum = behindServiceIdBucket.getAggregations().get(ServiceReferenceTable.COLUMN_S3_LTE); + Sum s5LteSum = behindServiceIdBucket.getAggregations().get(ServiceReferenceTable.COLUMN_S5_LTE); + Sum s5GtSum = behindServiceIdBucket.getAggregations().get(ServiceReferenceTable.COLUMN_S5_GT); + Sum error = behindServiceIdBucket.getAggregations().get(ServiceReferenceTable.COLUMN_ERROR); + Sum summary = behindServiceIdBucket.getAggregations().get(ServiceReferenceTable.COLUMN_SUMMARY); + Sum costSum = behindServiceIdBucket.getAggregations().get(ServiceReferenceTable.COLUMN_COST_SUMMARY); + + String frontServiceName = ServiceNameCache.getForUI(frontServiceId); + String behindServiceName = ServiceNameCache.getForUI(behindServiceId); + + JsonObject serviceReference = new JsonObject(); + serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_FRONT_SERVICE_ID), frontServiceId); + serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_FRONT_SERVICE_NAME), frontServiceName); + serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_ID), behindServiceId); + serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_NAME), behindServiceName); + serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_S1_LTE), (long)s1LteSum.getValue()); + serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_S3_LTE), (long)s3LteSum.getValue()); + serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_S5_LTE), (long)s5LteSum.getValue()); + serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_S5_GT), (long)s5GtSum.getValue()); + 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); + } + } + + Terms behindServiceNameTerms = frontServiceBucket.getAggregations().get(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_NAME); + for (Terms.Bucket behindServiceNameBucket : behindServiceNameTerms.getBuckets()) { + String behindServiceName = behindServiceNameBucket.getKeyAsString(); + if (StringUtils.isNotEmpty(behindServiceName)) { + Sum s1LteSum = behindServiceNameBucket.getAggregations().get(ServiceReferenceTable.COLUMN_S1_LTE); + Sum s3LteSum = behindServiceNameBucket.getAggregations().get(ServiceReferenceTable.COLUMN_S3_LTE); + Sum s5LteSum = behindServiceNameBucket.getAggregations().get(ServiceReferenceTable.COLUMN_S5_LTE); + Sum s5GtSum = behindServiceNameBucket.getAggregations().get(ServiceReferenceTable.COLUMN_S5_GT); + Sum error = behindServiceNameBucket.getAggregations().get(ServiceReferenceTable.COLUMN_ERROR); + Sum summary = behindServiceNameBucket.getAggregations().get(ServiceReferenceTable.COLUMN_SUMMARY); + Sum costSum = behindServiceNameBucket.getAggregations().get(ServiceReferenceTable.COLUMN_COST_SUMMARY); + + String frontServiceName = ServiceNameCache.getForUI(frontServiceId); + String[] serviceNames = behindServiceName.split(Const.ID_SPLIT); + int behindServiceId = ServiceIdCache.getForUI(Integer.parseInt(serviceNames[0]), serviceNames[1]); + behindServiceName = serviceNames[1]; + + JsonObject serviceReference = new JsonObject(); + serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_FRONT_SERVICE_ID), frontServiceId); + serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_FRONT_SERVICE_NAME), frontServiceName); + serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_ID), behindServiceId); + serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_NAME), behindServiceName); + serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_S1_LTE), (long)s1LteSum.getValue()); + serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_S3_LTE), (long)s3LteSum.getValue()); + serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_S5_LTE), (long)s5LteSum.getValue()); + serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_S5_GT), (long)s5GtSum.getValue()); + 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); + } + } + } +} diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/NodeRefSumH2DAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceReferenceH2DAO.java similarity index 53% rename from apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/NodeRefSumH2DAO.java rename to apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceReferenceH2DAO.java index 8e4c0fab0923..716204ffb779 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/NodeRefSumH2DAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceReferenceH2DAO.java @@ -6,8 +6,9 @@ /** * @author pengys5 */ -public class NodeRefSumH2DAO extends H2DAO implements INodeRefSumDAO { - @Override public JsonArray load(long startTime, long endTime) { +public class ServiceReferenceH2DAO extends H2DAO implements IServiceReferenceDAO { + + @Override public JsonArray load(int entryServiceId, 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 cfad93a70cc6..b78deae2e78c 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 @@ -15,10 +15,12 @@ import org.skywalking.apm.collector.ui.jetty.handler.TraceDagGetHandler; import org.skywalking.apm.collector.ui.jetty.handler.TraceStackGetHandler; import org.skywalking.apm.collector.ui.jetty.handler.UIJettyServerHandler; -import org.skywalking.apm.collector.ui.jetty.handler.instancehealth.ApplicationsGetHandler; +import org.skywalking.apm.collector.ui.jetty.handler.application.ApplicationsGetHandler; import org.skywalking.apm.collector.ui.jetty.handler.instancehealth.InstanceHealthGetHandler; +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.time.AllInstanceLastTimeGetHandler; -import org.skywalking.apm.collector.ui.jetty.handler.time.InstanceLastTimeGetHandler; +import org.skywalking.apm.collector.ui.jetty.handler.time.OneInstanceLastTimeGetHandler; /** * @author pengys5 @@ -58,10 +60,12 @@ public class UIJettyModuleDefine extends UIModuleDefine { handlers.add(new SegmentTopGetHandler()); handlers.add(new TraceStackGetHandler()); handlers.add(new SpanGetHandler()); - handlers.add(new InstanceLastTimeGetHandler()); + handlers.add(new OneInstanceLastTimeGetHandler()); handlers.add(new AllInstanceLastTimeGetHandler()); - handlers.add(new ApplicationsGetHandler()); handlers.add(new InstanceHealthGetHandler()); + handlers.add(new ApplicationsGetHandler()); + handlers.add(new EntryServiceGetHandler()); + handlers.add(new ServiceTreeGetHandler()); return handlers; } } diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/TraceDagGetHandler.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/TraceDagGetHandler.java index a11540d833fb..687edd156ae9 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/TraceDagGetHandler.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/TraceDagGetHandler.java @@ -22,14 +22,29 @@ public class TraceDagGetHandler extends JettyHandler { private TraceDagService service = new TraceDagService(); @Override protected JsonElement doGet(HttpServletRequest req) throws ArgumentsParseException { + if (!req.getParameterMap().containsKey("startTime") || !req.getParameterMap().containsKey("endTime")) { + throw new ArgumentsParseException("the request parameter must contains startTime, endTime"); + } + String startTimeStr = req.getParameter("startTime"); String endTimeStr = req.getParameter("endTime"); - String timeBucketType = req.getParameter("timeBucketType"); - logger.debug("startTime: {}, endTimeStr: {}, timeBucketType: {}", startTimeStr, endTimeStr, timeBucketType); - - long startTime = Long.valueOf(startTimeStr); - long endTime = Long.valueOf(endTimeStr); - return service.load(startTime, endTime, timeBucketType); + logger.debug("startTime: {}, endTimeStr: {}", startTimeStr, endTimeStr); + + long startTime; + try { + startTime = Long.valueOf(req.getParameter("startTime")); + } catch (NumberFormatException e) { + throw new ArgumentsParseException("the request parameter startTime must be a long"); + } + + long endTime; + try { + endTime = Long.valueOf(req.getParameter("endTime")); + } catch (NumberFormatException e) { + throw new ArgumentsParseException("the request parameter endTime must be a long"); + } + + return service.load(startTime, endTime); } @Override protected JsonElement doPost(HttpServletRequest req) throws ArgumentsParseException { diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/application/ApplicationsGetHandler.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/application/ApplicationsGetHandler.java new file mode 100644 index 000000000000..d9160c4afe85 --- /dev/null +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/application/ApplicationsGetHandler.java @@ -0,0 +1,53 @@ +package org.skywalking.apm.collector.ui.jetty.handler.application; + +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.ApplicationService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @author pengys5 + */ +public class ApplicationsGetHandler extends JettyHandler { + + private final Logger logger = LoggerFactory.getLogger(ApplicationsGetHandler.class); + + @Override public String pathSpec() { + return "/applications"; + } + + private ApplicationService service = new ApplicationService(); + + @Override protected JsonElement doGet(HttpServletRequest req) throws ArgumentsParseException { + if (!req.getParameterMap().containsKey("startTime") || !req.getParameterMap().containsKey("endTime")) { + throw new ArgumentsParseException("must contains startTime. endTime parameter"); + } + + String startTimeStr = req.getParameter("startTime"); + String endTimeStr = req.getParameter("endTime"); + logger.debug("applications get start time: {}, end time: {}", startTimeStr, endTimeStr); + + 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.getApplications(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/jetty/handler/instancehealth/ApplicationsGetHandler.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/instancehealth/ApplicationsGetHandler.java deleted file mode 100644 index ba50ccccf905..000000000000 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/instancehealth/ApplicationsGetHandler.java +++ /dev/null @@ -1,41 +0,0 @@ -package org.skywalking.apm.collector.ui.jetty.handler.instancehealth; - -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.InstanceHealthService; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * @author pengys5 - */ -public class ApplicationsGetHandler extends JettyHandler { - - private final Logger logger = LoggerFactory.getLogger(ApplicationsGetHandler.class); - - @Override public String pathSpec() { - return "/instance/health/applications"; - } - - private InstanceHealthService service = new InstanceHealthService(); - - @Override protected JsonElement doGet(HttpServletRequest req) throws ArgumentsParseException { - String timestampStr = req.getParameter("timestamp"); - logger.debug("instance health applications get time: {}", timestampStr); - - long timestamp; - try { - timestamp = Long.parseLong(timestampStr); - } catch (NumberFormatException e) { - throw new ArgumentsParseException("time must be long"); - } - - return service.getApplications(timestamp); - } - - @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/jetty/handler/servicetree/EntryServiceGetHandler.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/servicetree/EntryServiceGetHandler.java new file mode 100644 index 000000000000..92bb80ad9411 --- /dev/null +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/servicetree/EntryServiceGetHandler.java @@ -0,0 +1,80 @@ +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 EntryServiceGetHandler extends JettyHandler { + + private final Logger logger = LoggerFactory.getLogger(EntryServiceGetHandler.class); + + @Override public String pathSpec() { + return "/service/entry"; + } + + private ServiceTreeService service = new ServiceTreeService(); + + @Override protected JsonElement doGet(HttpServletRequest req) throws ArgumentsParseException { + if (!req.getParameterMap().containsKey("applicationId") || !req.getParameterMap().containsKey("entryServiceName") + || !req.getParameterMap().containsKey("startTime") || !req.getParameterMap().containsKey("endTime") + || !req.getParameterMap().containsKey("from") || !req.getParameterMap().containsKey("size")) { + throw new ArgumentsParseException("must contains parameters: applicationId, entryServiceName, startTime, endTime, from, size"); + } + + String applicationIdStr = req.getParameter("applicationId"); + String entryServiceName = req.getParameter("entryServiceName"); + String startTimeStr = req.getParameter("startTime"); + String endTimeStr = req.getParameter("endTime"); + String fromStr = req.getParameter("from"); + String sizeStr = req.getParameter("size"); + logger.debug("service entry get applicationId: {}, entryServiceName: {}, startTime: {}, endTime: {}, from: {}, size: {}", applicationIdStr, entryServiceName, startTimeStr, endTimeStr, fromStr, sizeStr); + + int applicationId; + try { + applicationId = Integer.parseInt(applicationIdStr); + } catch (NumberFormatException e) { + throw new ArgumentsParseException("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"); + } + + int from; + try { + from = Integer.parseInt(fromStr); + } catch (NumberFormatException e) { + throw new ArgumentsParseException("from must be integer"); + } + + int size; + try { + size = Integer.parseInt(sizeStr); + } catch (NumberFormatException e) { + throw new ArgumentsParseException("size must be integer"); + } + + return service.loadEntryService(applicationId, entryServiceName, startTime, endTime, from, size); + } + + @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/jetty/handler/servicetree/ServiceTreeGetHandler.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/servicetree/ServiceTreeGetHandler.java new file mode 100644 index 000000000000..1461b496c39c --- /dev/null +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/servicetree/ServiceTreeGetHandler.java @@ -0,0 +1,61 @@ +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 ServiceTreeGetHandler extends JettyHandler { + + private final Logger logger = LoggerFactory.getLogger(ServiceTreeGetHandler.class); + + @Override public String pathSpec() { + return "/service/tree"; + } + + private ServiceTreeService service = new ServiceTreeService(); + + @Override protected JsonElement doGet(HttpServletRequest req) throws ArgumentsParseException { + if (!req.getParameterMap().containsKey("entryServiceId") || !req.getParameterMap().containsKey("startTime") || !req.getParameterMap().containsKey("endTime")) { + throw new ArgumentsParseException("must contains parameters: entryServiceId, startTime, endTime"); + } + + String entryServiceIdStr = req.getParameter("entryServiceId"); + String startTimeStr = req.getParameter("startTime"); + String endTimeStr = req.getParameter("endTime"); + logger.debug("service entry get entryServiceId: {}, startTime: {}, endTime: {}", entryServiceIdStr, startTimeStr, endTimeStr); + + int entryServiceId; + try { + entryServiceId = Integer.parseInt(entryServiceIdStr); + } catch (NumberFormatException e) { + throw new ArgumentsParseException("entry service 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(entryServiceId, 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/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 96b56b81c97b..ed4f430469f5 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 @@ -4,6 +4,7 @@ import com.google.gson.JsonObject; import java.util.Calendar; import javax.servlet.http.HttpServletRequest; +import org.skywalking.apm.collector.core.util.TimeBucketUtils; import org.skywalking.apm.collector.server.jetty.ArgumentsParseException; import org.skywalking.apm.collector.server.jetty.JettyHandler; import org.skywalking.apm.collector.ui.service.TimeSynchronousService; @@ -24,17 +25,15 @@ public class AllInstanceLastTimeGetHandler extends JettyHandler { private TimeSynchronousService service = new TimeSynchronousService(); @Override protected JsonElement doGet(HttpServletRequest req) throws ArgumentsParseException { - Long time = service.allInstanceLastTime(); - logger.debug("all instance last time: {}", time); - Calendar calendar = Calendar.getInstance(); - calendar.setTimeInMillis(time); + Long timeBucket = service.allInstanceLastTime(); + logger.debug("all instance last time: {}", timeBucket); - int second = calendar.get(Calendar.SECOND); - second = (second % 5) * 5; - calendar.set(Calendar.SECOND, second); + Calendar calendar = Calendar.getInstance(); + calendar.setTimeInMillis(TimeBucketUtils.INSTANCE.changeTimeBucket2TimeStamp(TimeBucketUtils.TimeBucketType.SECOND.name(), timeBucket)); + calendar.add(Calendar.SECOND, -5); JsonObject timeJson = new JsonObject(); - timeJson.addProperty("time", calendar.getTimeInMillis()); + timeJson.addProperty("timeBucket", TimeBucketUtils.INSTANCE.getSecondTimeBucket(calendar.getTimeInMillis())); return timeJson; } diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/time/InstanceLastTimeGetHandler.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/time/OneInstanceLastTimeGetHandler.java similarity index 86% rename from apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/time/InstanceLastTimeGetHandler.java rename to apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/time/OneInstanceLastTimeGetHandler.java index 8e6dcc3dbf2c..3e29f4c083e6 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/time/InstanceLastTimeGetHandler.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/time/OneInstanceLastTimeGetHandler.java @@ -12,12 +12,12 @@ /** * @author pengys5 */ -public class InstanceLastTimeGetHandler extends JettyHandler { +public class OneInstanceLastTimeGetHandler extends JettyHandler { - private final Logger logger = LoggerFactory.getLogger(InstanceLastTimeGetHandler.class); + private final Logger logger = LoggerFactory.getLogger(OneInstanceLastTimeGetHandler.class); @Override public String pathSpec() { - return "/time/instanceId"; + return "/time/oneInstance"; } private TimeSynchronousService service = new TimeSynchronousService(); @@ -36,7 +36,7 @@ public class InstanceLastTimeGetHandler extends JettyHandler { Long time = service.instanceLastTime(applicationInstanceId); logger.debug("application instance id: {}, instance last time: {}", applicationInstanceId, time); JsonObject timeJson = new JsonObject(); - timeJson.addProperty("time", time); + timeJson.addProperty("timeBucket", time); return timeJson; } diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/ApplicationService.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/ApplicationService.java new file mode 100644 index 000000000000..3ca96e4fe1be --- /dev/null +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/ApplicationService.java @@ -0,0 +1,16 @@ +package org.skywalking.apm.collector.ui.service; + +import com.google.gson.JsonArray; +import org.skywalking.apm.collector.storage.dao.DAOContainer; +import org.skywalking.apm.collector.ui.dao.IInstanceDAO; + +/** + * @author pengys5 + */ +public class ApplicationService { + + public JsonArray getApplications(long startTime, long endTime) { + IInstanceDAO instanceDAO = (IInstanceDAO)DAOContainer.INSTANCE.get(IInstanceDAO.class.getName()); + return instanceDAO.getApplications(startTime, endTime); + } +} 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 73321386aa63..2b380df53fc2 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 @@ -8,7 +8,6 @@ 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; @@ -19,28 +18,6 @@ public class InstanceHealthService { private final Logger logger = LoggerFactory.getLogger(InstanceHealthService.class); - public JsonObject getApplications(long timeBucket) { - IInstanceDAO instanceDAO = (IInstanceDAO)DAOContainer.INSTANCE.get(IInstanceDAO.class.getName()); - List applications = instanceDAO.getApplications(timeBucket); - - JsonObject response = new JsonObject(); - JsonArray applicationArray = new JsonArray(); - - response.addProperty("timeBucket", timeBucket); - response.add("applicationList", applicationArray); - - applications.forEach(application -> { - JsonObject applicationJson = new JsonObject(); - String applicationCode = ApplicationCache.get(application.getApplicationId()); - applicationJson.addProperty("applicationId", application.getApplicationId()); - applicationJson.addProperty("applicationCode", applicationCode); - applicationJson.addProperty("instanceCount", application.getCount()); - applicationArray.add(applicationJson); - }); - - return response; - } - public JsonObject getInstances(long timestamp, int applicationId) { JsonObject response = new JsonObject(); 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 new file mode 100644 index 000000000000..0d133fc0dc4b --- /dev/null +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/ServiceTreeService.java @@ -0,0 +1,24 @@ +package org.skywalking.apm.collector.ui.service; + +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; +import org.skywalking.apm.collector.storage.dao.DAOContainer; +import org.skywalking.apm.collector.ui.dao.IServiceEntryDAO; +import org.skywalking.apm.collector.ui.dao.IServiceReferenceDAO; + +/** + * @author pengys5 + */ +public class ServiceTreeService { + + public JsonObject loadEntryService(int applicationId, String entryServiceName, long startTime, long endTime, + int from, int size) { + IServiceEntryDAO serviceEntryDAO = (IServiceEntryDAO)DAOContainer.INSTANCE.get(IServiceEntryDAO.class.getName()); + return serviceEntryDAO.load(applicationId, entryServiceName, startTime, endTime, from, size); + } + + public JsonArray loadServiceTree(int entryServiceId, long startTime, long endTime) { + IServiceReferenceDAO serviceReferenceDAO = (IServiceReferenceDAO)DAOContainer.INSTANCE.get(IServiceReferenceDAO.class.getName()); + return serviceReferenceDAO.load(entryServiceId, 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/TraceDagDataBuilder.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/TraceDagDataBuilder.java index 0c9d03d5d9e7..092991334276 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 @@ -5,6 +5,7 @@ import java.util.HashMap; import java.util.Map; import org.skywalking.apm.collector.core.util.Const; +import org.skywalking.apm.collector.storage.define.noderef.NodeReferenceTable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -17,29 +18,27 @@ public class TraceDagDataBuilder { private Integer nodeId = new Integer(-1); private Map mappingMap = new HashMap<>(); private Map nodeCompMap = new HashMap<>(); - private Map resSumMap = new HashMap<>(); private Map nodeIdMap = new HashMap<>(); private JsonArray pointArray = new JsonArray(); private JsonArray lineArray = new JsonArray(); - public JsonObject build(JsonArray nodeCompArray, JsonArray nodesMappingArray, JsonArray nodeRefsArray, - JsonArray resSumArray) { - changeMapping2Map(nodesMappingArray); + public JsonObject build(JsonArray nodeCompArray, JsonArray nodesMappingArray, JsonArray resSumArray) { changeNodeComp2Map(nodeCompArray); - resSumMerge(resSumArray); + changeMapping2Map(nodesMappingArray); - for (int i = 0; i < nodeRefsArray.size(); i++) { - JsonObject nodeRefJsonObj = nodeRefsArray.get(i).getAsJsonObject(); + for (int i = 0; i < resSumArray.size(); i++) { + JsonObject nodeRefJsonObj = resSumArray.get(i).getAsJsonObject(); String front = nodeRefJsonObj.get("front").getAsString(); String behind = nodeRefJsonObj.get("behind").getAsString(); - String behindCode = findRealCode(behind); - logger.debug("behind: %s, behindCode: {}", behind, behindCode); + if (hasMapping(behind)) { + continue; + } JsonObject lineJsonObj = new JsonObject(); lineJsonObj.addProperty("from", findOrCreateNode(front)); - lineJsonObj.addProperty("to", findOrCreateNode(behindCode)); - lineJsonObj.addProperty("resSum", resSumMap.get(front + Const.ID_SPLIT + behindCode)); + lineJsonObj.addProperty("to", findOrCreateNode(behind)); + lineJsonObj.addProperty("resSum", nodeRefJsonObj.get(NodeReferenceTable.COLUMN_SUMMARY).getAsInt()); lineArray.add(lineJsonObj); logger.debug("line: {}", lineJsonObj); @@ -75,9 +74,9 @@ private Integer findOrCreateNode(String peers) { private void changeMapping2Map(JsonArray nodesMappingArray) { for (int i = 0; i < nodesMappingArray.size(); i++) { JsonObject nodesMappingJsonObj = nodesMappingArray.get(i).getAsJsonObject(); - String code = nodesMappingJsonObj.get("code").getAsString(); - String peers = nodesMappingJsonObj.get("peers").getAsString(); - mappingMap.put(peers, code); + String applicationCode = nodesMappingJsonObj.get("applicationCode").getAsString(); + String address = nodesMappingJsonObj.get("address").getAsString(); + mappingMap.put(address, applicationCode); } } @@ -85,37 +84,13 @@ private void changeNodeComp2Map(JsonArray nodeCompArray) { for (int i = 0; i < nodeCompArray.size(); i++) { JsonObject nodesJsonObj = nodeCompArray.get(i).getAsJsonObject(); logger.debug(nodesJsonObj.toString()); - String component = nodesJsonObj.get("name").getAsString(); - String peers = nodesJsonObj.get("peers").getAsString(); - nodeCompMap.put(peers, component); - } - } - - private String findRealCode(String peers) { - if (mappingMap.containsKey(peers)) { - return mappingMap.get(peers); - } else { - return peers; + String componentName = nodesJsonObj.get("componentName").getAsString(); + String peer = nodesJsonObj.get("peer").getAsString(); + nodeCompMap.put(peer, componentName); } } - private void resSumMerge(JsonArray resSumArray) { - for (int i = 0; i < resSumArray.size(); i++) { - JsonObject resSumJsonObj = resSumArray.get(i).getAsJsonObject(); - String front = resSumJsonObj.get("front").getAsString(); - String behind = resSumJsonObj.get("behind").getAsString(); - Long summary = resSumJsonObj.get("summary").getAsLong(); - - if (mappingMap.containsKey(behind)) { - behind = mappingMap.get(behind); - } - - String id = front + Const.ID_SPLIT + behind; - if (resSumMap.containsKey(id)) { - resSumMap.put(id, summary + resSumMap.get(id)); - } else { - resSumMap.put(id, summary); - } - } + private boolean hasMapping(String peers) { + return mappingMap.containsKey(peers); } } diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/TraceDagService.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/TraceDagService.java index 1dbc43fff30a..10a404794718 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/TraceDagService.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/TraceDagService.java @@ -5,7 +5,6 @@ import org.skywalking.apm.collector.storage.dao.DAOContainer; import org.skywalking.apm.collector.ui.dao.INodeComponentDAO; import org.skywalking.apm.collector.ui.dao.INodeMappingDAO; -import org.skywalking.apm.collector.ui.dao.INodeRefSumDAO; import org.skywalking.apm.collector.ui.dao.INodeReferenceDAO; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -17,22 +16,19 @@ public class TraceDagService { private final Logger logger = LoggerFactory.getLogger(TraceDagService.class); - public JsonObject load(long startTime, long endTime, String timeBucketType) { - logger.debug("startTime: {}, endTime: {}, timeSliceType: {}", startTime, endTime, timeBucketType); + public JsonObject load(long startTime, long endTime) { + logger.debug("startTime: {}, endTime: {}", startTime, endTime); INodeComponentDAO nodeComponentDAO = (INodeComponentDAO)DAOContainer.INSTANCE.get(INodeComponentDAO.class.getName()); JsonArray nodeComponentArray = nodeComponentDAO.load(startTime, endTime); INodeMappingDAO nodeMappingDAO = (INodeMappingDAO)DAOContainer.INSTANCE.get(INodeMappingDAO.class.getName()); JsonArray nodeMappingArray = nodeMappingDAO.load(startTime, endTime); - INodeReferenceDAO nodeReferenceDAO = (INodeReferenceDAO)DAOContainer.INSTANCE.get(INodeReferenceDAO.class.getName()); - JsonArray nodeRefArray = nodeReferenceDAO.load(startTime, endTime); - - INodeRefSumDAO nodeRefSumDAO = (INodeRefSumDAO)DAOContainer.INSTANCE.get(INodeRefSumDAO.class.getName()); + INodeReferenceDAO nodeRefSumDAO = (INodeReferenceDAO)DAOContainer.INSTANCE.get(INodeReferenceDAO.class.getName()); JsonArray nodeRefSumArray = nodeRefSumDAO.load(startTime, endTime); TraceDagDataBuilder builder = new TraceDagDataBuilder(); - JsonObject traceDag = builder.build(nodeComponentArray, nodeMappingArray, nodeRefArray, nodeRefSumArray); + JsonObject traceDag = builder.build(nodeComponentArray, nodeMappingArray, nodeRefSumArray); return traceDag; } diff --git a/apm-collector/apm-collector-ui/src/main/resources/META-INF/defines/es_dao.define b/apm-collector/apm-collector-ui/src/main/resources/META-INF/defines/es_dao.define index 8cbfd212aff8..6d5f760ce05a 100644 --- a/apm-collector/apm-collector-ui/src/main/resources/META-INF/defines/es_dao.define +++ b/apm-collector/apm-collector-ui/src/main/resources/META-INF/defines/es_dao.define @@ -1,7 +1,6 @@ org.skywalking.apm.collector.ui.dao.NodeComponentEsDAO org.skywalking.apm.collector.ui.dao.NodeMappingEsDAO org.skywalking.apm.collector.ui.dao.NodeReferenceEsDAO -org.skywalking.apm.collector.ui.dao.NodeRefSumEsDAO org.skywalking.apm.collector.ui.dao.SegmentCostEsDAO org.skywalking.apm.collector.ui.dao.GlobalTraceEsDAO org.skywalking.apm.collector.ui.dao.SegmentEsDAO @@ -9,4 +8,6 @@ org.skywalking.apm.collector.ui.dao.ApplicationEsDAO org.skywalking.apm.collector.ui.dao.ServiceNameEsDAO org.skywalking.apm.collector.ui.dao.InstanceEsDAO org.skywalking.apm.collector.ui.dao.InstPerformanceEsDAO -org.skywalking.apm.collector.ui.dao.GCMetricEsDAO \ No newline at end of file +org.skywalking.apm.collector.ui.dao.GCMetricEsDAO +org.skywalking.apm.collector.ui.dao.ServiceEntryEsDAO +org.skywalking.apm.collector.ui.dao.ServiceReferenceEsDAO \ No newline at end of file diff --git a/apm-collector/apm-collector-ui/src/main/resources/META-INF/defines/h2_dao.define b/apm-collector/apm-collector-ui/src/main/resources/META-INF/defines/h2_dao.define index f45bcb397375..d110e3684bf5 100644 --- a/apm-collector/apm-collector-ui/src/main/resources/META-INF/defines/h2_dao.define +++ b/apm-collector/apm-collector-ui/src/main/resources/META-INF/defines/h2_dao.define @@ -1,7 +1,6 @@ org.skywalking.apm.collector.ui.dao.NodeComponentH2DAO org.skywalking.apm.collector.ui.dao.NodeMappingH2DAO org.skywalking.apm.collector.ui.dao.NodeReferenceH2DAO -org.skywalking.apm.collector.ui.dao.NodeRefSumH2DAO org.skywalking.apm.collector.ui.dao.SegmentCostH2DAO org.skywalking.apm.collector.ui.dao.GlobalTraceH2DAO org.skywalking.apm.collector.ui.dao.SegmentH2DAO @@ -9,4 +8,6 @@ org.skywalking.apm.collector.ui.dao.ApplicationH2DAO org.skywalking.apm.collector.ui.dao.ServiceNameH2DAO org.skywalking.apm.collector.ui.dao.InstanceH2DAO org.skywalking.apm.collector.ui.dao.InstPerformanceH2DAO -org.skywalking.apm.collector.ui.dao.GCMetricH2DAO \ No newline at end of file +org.skywalking.apm.collector.ui.dao.GCMetricH2DAO +org.skywalking.apm.collector.ui.dao.ServiceEntryH2DAO +org.skywalking.apm.collector.ui.dao.ServiceReferenceH2DAO \ No newline at end of file diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/conf/Config.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/conf/Config.java index 6584eea352db..fb9d401834fb 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/conf/Config.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/conf/Config.java @@ -30,7 +30,7 @@ public static class Agent { * If the operation name of the first span is included in this set, * this segment should be ignored. */ - public static String IGNORE_SUFFIX = ".jpg,.jpeg,.js,.css,.png,.bmp,.gif,.ico,.mp3,.mp4,.html"; + public static String IGNORE_SUFFIX = ".jpg,.jpeg,.js,.css,.png,.bmp,.gif,.ico,.mp3,.mp4,.html,.svg"; } public static class Collector { diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/util/KeyValuePair.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/util/KeyValuePair.java index 76f4227dfe9c..4e6b93d417b7 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/util/KeyValuePair.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/util/KeyValuePair.java @@ -27,7 +27,9 @@ public String getValue() { public KeyWithStringValue transform() { KeyWithStringValue.Builder keyValueBuilder = KeyWithStringValue.newBuilder(); keyValueBuilder.setKey(key); - keyValueBuilder.setValue(value); + if (value != null) { + keyValueBuilder.setValue(value); + } return keyValueBuilder.build(); } } diff --git a/apm-sniffer/apm-agent/pom.xml b/apm-sniffer/apm-agent/pom.xml index b9d1845b1e72..388873e7b70c 100644 --- a/apm-sniffer/apm-agent/pom.xml +++ b/apm-sniffer/apm-agent/pom.xml @@ -95,6 +95,11 @@ apm-springmvc-annotation-4.x-plugin ${project.version} + + org.skywalking + apm-spring-cloud-feign-1.x-plugin + ${project.version} + diff --git a/apm-sniffer/apm-sdk-plugin/feign-default-http-9.x-plugin/src/main/java/org/skywalking/apm/plugin/feign/http/v9/DefaultHttpClientInterceptor.java b/apm-sniffer/apm-sdk-plugin/feign-default-http-9.x-plugin/src/main/java/org/skywalking/apm/plugin/feign/http/v9/DefaultHttpClientInterceptor.java index a9b0271e9a09..89219cbacf44 100644 --- a/apm-sniffer/apm-sdk-plugin/feign-default-http-9.x-plugin/src/main/java/org/skywalking/apm/plugin/feign/http/v9/DefaultHttpClientInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/feign-default-http-9.x-plugin/src/main/java/org/skywalking/apm/plugin/feign/http/v9/DefaultHttpClientInterceptor.java @@ -85,12 +85,14 @@ public class DefaultHttpClientInterceptor implements InstanceMethodsAroundInterc @Override public Object afterMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class[] argumentsTypes, Object ret) throws Throwable { Response response = (Response)ret; - int statusCode = response.status(); + if (response != null) { + int statusCode = response.status(); - AbstractSpan span = ContextManager.activeSpan(); - if (statusCode >= 400) { - span.errorOccurred(); - Tags.STATUS_CODE.set(span, statusCode + ""); + AbstractSpan span = ContextManager.activeSpan(); + if (statusCode >= 400) { + span.errorOccurred(); + Tags.STATUS_CODE.set(span, statusCode + ""); + } } ContextManager.stopSpan(); diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/pom.xml b/apm-sniffer/apm-sdk-plugin/spring-plugins/pom.xml index 0a91d88902ec..819b31547017 100644 --- a/apm-sniffer/apm-sdk-plugin/spring-plugins/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/pom.xml @@ -14,6 +14,7 @@ concurrent-util-4.x-plugin resttemplate-4.x-plugin mvc-annotation-4.x-plugin + spring-cloud pom diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-cloud/netflix-plugins/pom.xml b/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-cloud/netflix-plugins/pom.xml new file mode 100644 index 000000000000..dc3d3a38a947 --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-cloud/netflix-plugins/pom.xml @@ -0,0 +1,25 @@ + + + 4.0.0 + + + org.skywalking + spring-cloud + 3.2-2017 + + + netflix-plugins + + spring-cloud-feign-1.x-plugin + + pom + + netflix-plugins + http://maven.apache.org + + + UTF-8 + + + diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-cloud/netflix-plugins/spring-cloud-feign-1.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-cloud/netflix-plugins/spring-cloud-feign-1.x-plugin/pom.xml new file mode 100644 index 000000000000..ceedb86a9649 --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-cloud/netflix-plugins/spring-cloud-feign-1.x-plugin/pom.xml @@ -0,0 +1,34 @@ + + + 4.0.0 + + + org.skywalking + netflix-plugins + 3.2-2017 + + + apm-spring-cloud-feign-1.x-plugin + jar + + + spring-cloud-feign-1.x-plugin + http://maven.apache.org + + + + org.springframework.cloud + spring-cloud-starter-feign + 1.1.0.RELEASE + provided + + + org.skywalking + apm-feign-default-http-9.x-plugin + ${project.version} + provided + + + + diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-cloud/netflix-plugins/spring-cloud-feign-1.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/cloud/netflix/feign/v11/define/NetflixFeignInstrumentation.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-cloud/netflix-plugins/spring-cloud-feign-1.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/cloud/netflix/feign/v11/define/NetflixFeignInstrumentation.java new file mode 100644 index 000000000000..50a84a0ce978 --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-cloud/netflix-plugins/spring-cloud-feign-1.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/cloud/netflix/feign/v11/define/NetflixFeignInstrumentation.java @@ -0,0 +1,55 @@ +package org.skywalking.apm.plugin.spring.cloud.netflix.feign.v11.define; + +import net.bytebuddy.description.method.MethodDescription; +import net.bytebuddy.matcher.ElementMatcher; +import org.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint; +import org.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint; +import org.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine; +import org.skywalking.apm.agent.core.plugin.match.ClassMatch; + +import static net.bytebuddy.matcher.ElementMatchers.named; +import static org.skywalking.apm.agent.core.plugin.match.NameMatch.byName; + +/** + * {@link NetflixFeignInstrumentation} presents that skywalking intercepts {@link org.springframework.cloud.netflix.feign.ribbon.LoadBalancerFeignClient#execute(feign.Request, + * feign.Request.Options)} by using {@link org.skywalking.apm.plugin.feign.http.v9.DefaultHttpClientInterceptor}. + * + * @author zhangxin + */ +public class NetflixFeignInstrumentation extends ClassInstanceMethodsEnhancePluginDefine { + /** + * Enhance class. + */ + private static final String ENHANCE_CLASS = "org.springframework.cloud.netflix.feign.ribbon.LoadBalancerFeignClient"; + + /** + * Intercept class. + */ + private static final String INTERCEPT_CLASS = "org.skywalking.apm.plugin.feign.http.v9.DefaultHttpClientInterceptor"; + + @Override protected ClassMatch enhanceClass() { + return byName(ENHANCE_CLASS); + } + + @Override protected ConstructorInterceptPoint[] getConstructorsInterceptPoints() { + return new ConstructorInterceptPoint[0]; + } + + @Override protected InstanceMethodsInterceptPoint[] getInstanceMethodsInterceptPoints() { + return new InstanceMethodsInterceptPoint[] { + new InstanceMethodsInterceptPoint() { + @Override public ElementMatcher getMethodsMatcher() { + return named("execute"); + } + + @Override public String getMethodsInterceptor() { + return INTERCEPT_CLASS; + } + + @Override public boolean isOverrideArgs() { + return false; + } + } + }; + } +} diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-cloud/netflix-plugins/spring-cloud-feign-1.x-plugin/src/main/resources/skywalking-plugin.def b/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-cloud/netflix-plugins/spring-cloud-feign-1.x-plugin/src/main/resources/skywalking-plugin.def new file mode 100644 index 000000000000..80e07cebdc26 --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-cloud/netflix-plugins/spring-cloud-feign-1.x-plugin/src/main/resources/skywalking-plugin.def @@ -0,0 +1 @@ +spring-cloud-feign-1.x=org.skywalking.apm.plugin.spring.cloud.netflix.feign.v11.define.NetflixFeignInstrumentation diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-cloud/pom.xml b/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-cloud/pom.xml new file mode 100644 index 000000000000..02a6d44c2066 --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-cloud/pom.xml @@ -0,0 +1,25 @@ + + + 4.0.0 + + + org.skywalking + spring-plugins + 3.2-2017 + + + spring-cloud + + netflix-plugins + + pom + + spring-cloud + http://maven.apache.org + + + UTF-8 + + + diff --git a/apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/src/main/java/org/skywalking/apm/plugin/tomcat78x/TomcatExceptionInterceptor.java b/apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/src/main/java/org/skywalking/apm/plugin/tomcat78x/TomcatExceptionInterceptor.java new file mode 100644 index 000000000000..7d4bcef417d4 --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/src/main/java/org/skywalking/apm/plugin/tomcat78x/TomcatExceptionInterceptor.java @@ -0,0 +1,26 @@ +package org.skywalking.apm.plugin.tomcat78x; + +import java.lang.reflect.Method; +import org.skywalking.apm.agent.core.context.ContextManager; +import org.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance; +import org.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor; +import org.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult; + +public class TomcatExceptionInterceptor implements InstanceMethodsAroundInterceptor { + @Override + public void beforeMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class[] argumentsTypes, + MethodInterceptResult result) throws Throwable { + ContextManager.activeSpan().errorOccurred().log((Throwable)allArguments[2]); + } + + @Override + public Object afterMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class[] argumentsTypes, + Object ret) throws Throwable { + return ret; + } + + @Override public void handleMethodException(EnhancedInstance objInst, Method method, Object[] allArguments, + Class[] argumentsTypes, Throwable t) { + + } +} diff --git a/apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/src/main/java/org/skywalking/apm/plugin/tomcat78x/TomcatInterceptor.java b/apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/src/main/java/org/skywalking/apm/plugin/tomcat78x/TomcatInvokeInterceptor.java similarity index 93% rename from apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/src/main/java/org/skywalking/apm/plugin/tomcat78x/TomcatInterceptor.java rename to apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/src/main/java/org/skywalking/apm/plugin/tomcat78x/TomcatInvokeInterceptor.java index fed1f7f1c18d..90348dd3e56f 100644 --- a/apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/src/main/java/org/skywalking/apm/plugin/tomcat78x/TomcatInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/src/main/java/org/skywalking/apm/plugin/tomcat78x/TomcatInvokeInterceptor.java @@ -16,11 +16,11 @@ import org.skywalking.apm.network.trace.component.ComponentsDefine; /** - * {@link TomcatInterceptor} fetch the serialized context data by using {@link HttpServletRequest#getHeader(String)}. + * {@link TomcatInvokeInterceptor} fetch the serialized context data by using {@link HttpServletRequest#getHeader(String)}. * The {@link TraceSegment#refs} of current trace segment will reference to the trace * segment id of the previous level if the serialized context is not null. */ -public class TomcatInterceptor implements InstanceMethodsAroundInterceptor { +public class TomcatInvokeInterceptor implements InstanceMethodsAroundInterceptor { /** * * The {@link TraceSegment#refs} of current trace segment will reference to the diff --git a/apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/src/main/java/org/skywalking/apm/plugin/tomcat78x/define/TomcatInstrumentation.java b/apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/src/main/java/org/skywalking/apm/plugin/tomcat78x/define/TomcatInstrumentation.java index 971aa51262ab..c8119c52b128 100644 --- a/apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/src/main/java/org/skywalking/apm/plugin/tomcat78x/define/TomcatInstrumentation.java +++ b/apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/src/main/java/org/skywalking/apm/plugin/tomcat78x/define/TomcatInstrumentation.java @@ -8,14 +8,16 @@ import org.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint; import org.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine; import org.skywalking.apm.agent.core.plugin.match.ClassMatch; -import org.skywalking.apm.plugin.tomcat78x.TomcatInterceptor; +import org.skywalking.apm.plugin.tomcat78x.TomcatInvokeInterceptor; import static net.bytebuddy.matcher.ElementMatchers.named; import static org.skywalking.apm.agent.core.plugin.match.NameMatch.byName; /** - * {@link TomcatInstrumentation} presents that skywalking using class {@link TomcatInterceptor} to - * intercept {@link org.apache.catalina.core.StandardEngineValve#invoke(Request, Response)}. + * {@link TomcatInstrumentation} presents that skywalking using class {@link TomcatInvokeInterceptor} to intercept + * {@link org.apache.catalina.core.StandardWrapperValve#invoke(Request, Response)} and using class {@link + * org.skywalking.apm.plugin.tomcat78x.TomcatExceptionInterceptor} to intercept {@link + * org.apache.catalina.core.StandardWrapperValve#exception(Request, Response, Throwable)}. * * @author zhangxin */ @@ -24,12 +26,17 @@ public class TomcatInstrumentation extends ClassInstanceMethodsEnhancePluginDefi /** * Enhance class. */ - private static final String ENHANCE_CLASS = "org.apache.catalina.core.StandardEngineValve"; + private static final String ENHANCE_CLASS = "org.apache.catalina.core.StandardWrapperValve"; /** - * Intercept class. + * The intercept class for "invoke" method in the class "org.apache.catalina.core.StandardWrapperValve" */ - private static final String INTERCEPT_CLASS = "org.skywalking.apm.plugin.tomcat78x.TomcatInterceptor"; + private static final String INVOKE_INTERCEPT_CLASS = "org.skywalking.apm.plugin.tomcat78x.TomcatInvokeInterceptor"; + + /** + * The intercept class for "exception" method in the class "org.apache.catalina.core.StandardWrapperValve" + */ + private static final String EXCEPTION_INTERCEPT_CLASS = "org.skywalking.apm.plugin.tomcat78x.TomcatExceptionInterceptor"; @Override protected ClassMatch enhanceClass() { @@ -52,13 +59,26 @@ public ElementMatcher getMethodsMatcher() { @Override public String getMethodsInterceptor() { - return INTERCEPT_CLASS; + return INVOKE_INTERCEPT_CLASS; } @Override public boolean isOverrideArgs() { return false; } + }, + new InstanceMethodsInterceptPoint() { + @Override public ElementMatcher getMethodsMatcher() { + return named("exception"); + } + + @Override public String getMethodsInterceptor() { + return EXCEPTION_INTERCEPT_CLASS; + } + + @Override public boolean isOverrideArgs() { + return false; + } } }; } diff --git a/apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/src/test/java/org/skywalking/apm/plugin/tomcat78x/TomcatInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/src/test/java/org/skywalking/apm/plugin/tomcat78x/TomcatInvokeInterceptorTest.java similarity index 68% rename from apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/src/test/java/org/skywalking/apm/plugin/tomcat78x/TomcatInterceptorTest.java rename to apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/src/test/java/org/skywalking/apm/plugin/tomcat78x/TomcatInvokeInterceptorTest.java index f834140425fb..8a995d6e5503 100644 --- a/apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/src/test/java/org/skywalking/apm/plugin/tomcat78x/TomcatInterceptorTest.java +++ b/apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/src/test/java/org/skywalking/apm/plugin/tomcat78x/TomcatInvokeInterceptorTest.java @@ -37,9 +37,10 @@ @RunWith(PowerMockRunner.class) @PowerMockRunnerDelegate(TracingSegmentRunner.class) -public class TomcatInterceptorTest { +public class TomcatInvokeInterceptorTest { - private TomcatInterceptor tomcatInterceptor; + private TomcatInvokeInterceptor tomcatInvokeInterceptor; + private TomcatExceptionInterceptor tomcatExceptionInterceptor; @SegmentStoragePoint private SegmentStorage segmentStorage; @@ -59,20 +60,27 @@ public class TomcatInterceptorTest { private Object[] arguments; private Class[] argumentType; + private Object[] exceptionArguments; + private Class[] exceptionArgumentType; + @Before public void setUp() throws Exception { - tomcatInterceptor = new TomcatInterceptor(); + tomcatInvokeInterceptor = new TomcatInvokeInterceptor(); + tomcatExceptionInterceptor = new TomcatExceptionInterceptor(); when(request.getRequestURI()).thenReturn("/test/testRequestURL"); when(request.getRequestURL()).thenReturn(new StringBuffer("http://localhost:8080/test/testRequestURL")); when(response.getStatus()).thenReturn(200); arguments = new Object[] {request, response}; argumentType = new Class[] {request.getClass(), response.getClass()}; + + exceptionArguments = new Object[] {request, response, new RuntimeException()}; + exceptionArgumentType = new Class[] {request.getClass(), response.getClass(), new RuntimeException().getClass()}; } @Test public void testWithoutSerializedContextData() throws Throwable { - tomcatInterceptor.beforeMethod(enhancedInstance, null, arguments, argumentType, methodInterceptResult); - tomcatInterceptor.afterMethod(enhancedInstance, null, arguments, argumentType, null); + tomcatInvokeInterceptor.beforeMethod(enhancedInstance, null, arguments, argumentType, methodInterceptResult); + tomcatInvokeInterceptor.afterMethod(enhancedInstance, null, arguments, argumentType, null); assertThat(segmentStorage.getTraceSegments().size(), is(1)); TraceSegment traceSegment = segmentStorage.getTraceSegments().get(0); @@ -84,8 +92,8 @@ public void testWithoutSerializedContextData() throws Throwable { public void testWithSerializedContextData() throws Throwable { when(request.getHeader(Config.Plugin.Propagation.HEADER_NAME)).thenReturn("#AQA*#AQA*4WcWe0tQNQA*|3|1|1|#192.168.1.8:18002|#/portal/|#/testEntrySpan|#AQA*#AQA*Et0We0tQNQA*"); - tomcatInterceptor.beforeMethod(enhancedInstance, null, arguments, argumentType, methodInterceptResult); - tomcatInterceptor.afterMethod(enhancedInstance, null, arguments, argumentType, null); + tomcatInvokeInterceptor.beforeMethod(enhancedInstance, null, arguments, argumentType, methodInterceptResult); + tomcatInvokeInterceptor.afterMethod(enhancedInstance, null, arguments, argumentType, null); assertThat(segmentStorage.getTraceSegments().size(), is(1)); TraceSegment traceSegment = segmentStorage.getTraceSegments().get(0); @@ -97,9 +105,25 @@ public void testWithSerializedContextData() throws Throwable { @Test public void testWithOccurException() throws Throwable { - tomcatInterceptor.beforeMethod(enhancedInstance, null, arguments, argumentType, methodInterceptResult); - tomcatInterceptor.handleMethodException(enhancedInstance, null, arguments, argumentType, new RuntimeException()); - tomcatInterceptor.afterMethod(enhancedInstance, null, arguments, argumentType, null); + tomcatInvokeInterceptor.beforeMethod(enhancedInstance, null, arguments, argumentType, methodInterceptResult); + tomcatInvokeInterceptor.handleMethodException(enhancedInstance, null, arguments, argumentType, new RuntimeException()); + tomcatInvokeInterceptor.afterMethod(enhancedInstance, null, arguments, argumentType, null); + + assertThat(segmentStorage.getTraceSegments().size(), is(1)); + TraceSegment traceSegment = segmentStorage.getTraceSegments().get(0); + List spans = SegmentHelper.getSpans(traceSegment); + + assertHttpSpan(spans.get(0)); + List logDataEntities = SpanHelper.getLogs(spans.get(0)); + assertThat(logDataEntities.size(), is(1)); + assertException(logDataEntities.get(0), RuntimeException.class); + } + + @Test + public void testWithTomcatException() throws Throwable { + tomcatInvokeInterceptor.beforeMethod(enhancedInstance, null, arguments, argumentType, methodInterceptResult); + tomcatExceptionInterceptor.beforeMethod(enhancedInstance, null, exceptionArguments, exceptionArgumentType, null); + tomcatInvokeInterceptor.afterMethod(enhancedInstance, null, arguments, argumentType, null); assertThat(segmentStorage.getTraceSegments().size(), is(1)); TraceSegment traceSegment = segmentStorage.getTraceSegments().get(0);