diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/Const.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/Const.java index 306a898e7..337aa3ccc 100644 --- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/Const.java +++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/Const.java @@ -9,4 +9,5 @@ public class Const { public static final String PEERS_FRONT_SPLIT = "["; public static final String PEERS_BEHIND_SPLIT = "]"; public static final String USER_CODE = "User"; + public static final String RESULT = "result"; } diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/RecordPersistenceMember.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/RecordPersistenceMember.java index 6a69bd073..1f9828c8b 100644 --- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/RecordPersistenceMember.java +++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/RecordPersistenceMember.java @@ -22,18 +22,24 @@ public abstract class RecordPersistenceMember extends PersistenceMember { private Logger logger = LogManager.getFormatterLogger(RecordPersistenceMember.class); - private RecordPersistenceData persistenceData = new RecordPersistenceData(); + private RecordPersistenceData persistenceData; public RecordPersistenceMember(Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) { super(role, clusterContext, selfContext); + persistenceData = new RecordPersistenceData(); + } + + private RecordPersistenceData getPersistenceData() { + return this.persistenceData; } @Override public void analyse(Object message) throws Exception { if (message instanceof RecordData) { RecordData recordData = (RecordData) message; - persistenceData.getElseCreate(recordData.getId()).setRecord(recordData.getRecord()); - if (persistenceData.size() >= WorkerConfig.Persistence.Data.size) { + logger.debug("setRecord: id: %s, data: %s", recordData.getId(), recordData.getRecord()); + getPersistenceData().getElseCreate(recordData.getId()).setRecord(recordData.getRecord()); + if (getPersistenceData().size() >= WorkerConfig.Persistence.Data.size) { persistence(); } } else { @@ -44,23 +50,27 @@ public abstract class RecordPersistenceMember extends PersistenceMember { protected void persistence() { boolean success = saveToEs(); if (success) { - persistenceData.clear(); + getPersistenceData().clear(); } } private boolean saveToEs() { Client client = EsClient.getClient(); BulkRequestBuilder bulkRequest = client.prepareBulk(); - logger.debug("persistenceData size: %s", persistenceData.size()); + logger.debug("persistenceData size: %s", getPersistenceData().size()); - Iterator> iterator = persistenceData.iterator(); + Iterator> iterator = getPersistenceData().iterator(); while (iterator.hasNext()) { Map.Entry recordData = iterator.next(); + logger.debug("saveToEs: key: %s, data: %s", recordData.getKey(), recordData.getValue().getRecord().toString()); bulkRequest.add(client.prepareIndex(esIndex(), esType(), recordData.getKey()).setSource(recordData.getValue().getRecord().toString())); } BulkResponse bulkResponse = bulkRequest.execute().actionGet(); + if (bulkResponse.hasFailures()) { + logger.error(bulkResponse.buildFailureMessage()); + } return !bulkResponse.hasFailures(); } } diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/WorkerConfig.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/WorkerConfig.java index d92ba1340..9a4be2eee 100644 --- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/WorkerConfig.java +++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/WorkerConfig.java @@ -45,7 +45,88 @@ public class WorkerConfig extends ClusterConfig { } } + public static class WorkerNum { + public static class Node { + public static class NodeDayAgg { + public static int Size = 1024; + } + + public static class NodeHourAgg { + public static int Size = 1024; + } + + public static class NodeMinuteAgg { + public static int Size = 1024; + } + + public static class NodeMappingDayAgg { + public static int Size = 1024; + } + + public static class NodeMappingHourAgg { + public static int Size = 1024; + } + + public static class NodeMappingMinuteAgg { + public static int Size = 1024; + } + } + } + public static class Queue { + public static class Segment { + public static class SegmentCostSave { + public static int Size = 1024; + } + + public static class SegmentSave { + public static int Size = 1024; + } + + public static class SegmentExceptionSave { + public static int Size = 1024; + } + } + + public static class Node { + public static class NodeDayAnalysis { + public static int Size = 1024; + } + + public static class NodeHourAnalysis { + public static int Size = 1024; + } + + public static class NodeMinuteAnalysis { + public static int Size = 1024; + } + + public static class NodeRefDayAnalysis { + public static int Size = 1024; + } + + public static class NodeRefHourAnalysis { + public static int Size = 1024; + } + + public static class NodeRefMinuteAnalysis { + public static int Size = 1024; + } + + public static class NodeMappingDayAnalysis { + public static int Size = 1024; + } + + public static class NodeMappingHourAnalysis { + public static int Size = 1024; + } + + public static class NodeMappingMinuteAnalysis { + public static int Size = 1024; + } + } + + public static class Persistence { public static class DAGNodePersistence { public static int Size = 1024; diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/globaltrace/GlobalTraceGetWithGlobalId.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/globaltrace/GlobalTraceGetWithGlobalId.java index da48921fb..38eee9fa5 100644 --- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/globaltrace/GlobalTraceGetWithGlobalId.java +++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/globaltrace/GlobalTraceGetWithGlobalId.java @@ -40,7 +40,7 @@ public class GlobalTraceGetWithGlobalId extends AbstractGet { } logger.debug("globalId: %s", Arrays.toString(request.get("globalId"))); - String globalId = ParameterTools.toString(request, "globalId"); + String globalId = ParameterTools.INSTANCE.toString(request, "globalId"); getSelfContext().lookup(GlobalTraceSearchWithGlobalId.WorkerRole.INSTANCE).ask(globalId, response); } diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/NodeInstIndex.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/NodeCompIndex.java similarity index 54% rename from skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/NodeInstIndex.java rename to skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/NodeCompIndex.java index da3353bfc..9d96cece5 100644 --- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/NodeInstIndex.java +++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/NodeCompIndex.java @@ -1,4 +1,4 @@ -package com.a.eye.skywalking.collector.worker.nodeinst; +package com.a.eye.skywalking.collector.worker.node; import com.a.eye.skywalking.collector.worker.storage.AbstractIndex; import org.elasticsearch.common.xcontent.XContentBuilder; @@ -9,14 +9,12 @@ import java.io.IOException; /** * @author pengys5 */ -public class NodeInstIndex extends AbstractIndex { +public class NodeCompIndex extends AbstractIndex { - public static final String Index = "node_inst_idx"; + public static final String Index = "node_comp_idx"; - public static final String Code = "code"; - public static final String Kind = "kind"; - public static final String Component = "component"; - public static final String Address = "address"; + public static final String Name = "name"; + public static final String Peers = "peers"; @Override public String index() { @@ -33,19 +31,11 @@ public class NodeInstIndex extends AbstractIndex { XContentBuilder mappingBuilder = XContentFactory.jsonBuilder() .startObject() .startObject("properties") - .startObject(Code) + .startObject(Name) .field("type", "string") .field("index", "not_analyzed") .endObject() - .startObject(Kind) - .field("type", "string") - .field("index", "not_analyzed") - .endObject() - .startObject(Component) - .field("type", "string") - .field("index", "not_analyzed") - .endObject() - .startObject(Address) + .startObject(Peers) .field("type", "string") .field("index", "not_analyzed") .endObject() @@ -53,10 +43,6 @@ public class NodeInstIndex extends AbstractIndex { .field("type", "string") .field("index", "not_analyzed") .endObject() - .startObject(Time_Slice) - .field("type", "long") - .field("index", "not_analyzed") - .endObject() .endObject() .endObject(); return mappingBuilder; diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/NodeGetWithTimeSlice.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/NodeGetWithTimeSlice.java deleted file mode 100644 index dc724919d..000000000 --- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/NodeGetWithTimeSlice.java +++ /dev/null @@ -1,94 +0,0 @@ -package com.a.eye.skywalking.collector.worker.node; - -import com.a.eye.skywalking.collector.actor.ClusterWorkerContext; -import com.a.eye.skywalking.collector.actor.LocalWorkerContext; -import com.a.eye.skywalking.collector.actor.ProviderNotFoundException; -import com.a.eye.skywalking.collector.actor.Role; -import com.a.eye.skywalking.collector.actor.selector.RollingSelector; -import com.a.eye.skywalking.collector.actor.selector.WorkerSelector; -import com.a.eye.skywalking.collector.worker.httpserver.AbstractGet; -import com.a.eye.skywalking.collector.worker.httpserver.AbstractGetProvider; -import com.a.eye.skywalking.collector.worker.node.persistence.NodeSearchWithTimeSlice; -import com.a.eye.skywalking.collector.worker.tools.ParameterTools; -import com.google.gson.JsonObject; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - -import java.util.Arrays; -import java.util.Map; - -/** - * @author pengys5 - */ -public class NodeGetWithTimeSlice extends AbstractGet { - - private Logger logger = LogManager.getFormatterLogger(NodeGetWithTimeSlice.class); - - private NodeGetWithTimeSlice(Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) { - super(role, clusterContext, selfContext); - } - - @Override - public void preStart() throws ProviderNotFoundException { - getClusterContext().findProvider(NodeSearchWithTimeSlice.WorkerRole.INSTANCE).create(this); - } - - @Override - protected void onSearch(Map request, JsonObject response) throws Exception { - if (!request.containsKey("startTime") || !request.containsKey("endTime") || !request.containsKey("timeSliceType")) { - throw new IllegalArgumentException("the request parameter must contains startTime,endTime,timeSliceType"); - } - logger.debug("startTime: %s, endTime: %s, timeSliceType: %s", Arrays.toString(request.get("startTime")), - Arrays.toString(request.get("endTime")), Arrays.toString(request.get("timeSliceType"))); - - long startTime; - try { - startTime = Long.valueOf(ParameterTools.toString(request, "startTime")); - } catch (NumberFormatException e) { - throw new IllegalArgumentException("the request parameter startTime must numeric with long type"); - } - - long endTime; - try { - endTime = Long.valueOf(ParameterTools.toString(request, "endTime")); - } catch (NumberFormatException e) { - throw new IllegalArgumentException("the request parameter endTime must numeric with long type"); - } - - NodeSearchWithTimeSlice.RequestEntity requestEntity; - requestEntity = new NodeSearchWithTimeSlice.RequestEntity(ParameterTools.toString(request, "timeSliceType"), startTime, endTime); - getSelfContext().lookup(NodeSearchWithTimeSlice.WorkerRole.INSTANCE).ask(requestEntity, response); - } - - public static class Factory extends AbstractGetProvider { - - @Override - public Role role() { - return WorkerRole.INSTANCE; - } - - @Override - public NodeGetWithTimeSlice workerInstance(ClusterWorkerContext clusterContext) { - return new NodeGetWithTimeSlice(role(), clusterContext, new LocalWorkerContext()); - } - - @Override - public String servletPath() { - return "/node/timeSlice"; - } - } - - public enum WorkerRole implements Role { - INSTANCE; - - @Override - public String roleName() { - return NodeGetWithTimeSlice.class.getSimpleName(); - } - - @Override - public WorkerSelector workerSelector() { - return new RollingSelector(); - } - } -} diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/NodeIndex.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/NodeMappingIndex.java similarity index 77% rename from skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/NodeIndex.java rename to skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/NodeMappingIndex.java index 5da6c798a..498899b10 100644 --- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/NodeIndex.java +++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/NodeMappingIndex.java @@ -9,13 +9,12 @@ import java.io.IOException; /** * @author pengys5 */ -public class NodeIndex extends AbstractIndex { +public class NodeMappingIndex extends AbstractIndex { - public static final String Index = "node_idx"; + public static final String Index = "node_mapping_idx"; public static final String Code = "code"; - public static final String NickName = "nickName"; - public static final String Component = "component"; + public static final String Peers = "peers"; @Override public String index() { @@ -36,11 +35,7 @@ public class NodeIndex extends AbstractIndex { .field("type", "string") .field("index", "not_analyzed") .endObject() - .startObject(NickName) - .field("type", "string") - .field("index", "not_analyzed") - .endObject() - .startObject(Component) + .startObject(Peers) .field("type", "string") .field("index", "not_analyzed") .endObject() diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/analysis/AbstractNodeAnalysis.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/analysis/AbstractNodeAnalysis.java deleted file mode 100644 index fd654951f..000000000 --- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/analysis/AbstractNodeAnalysis.java +++ /dev/null @@ -1,97 +0,0 @@ -package com.a.eye.skywalking.collector.worker.node.analysis; - -import com.a.eye.skywalking.collector.actor.ClusterWorkerContext; -import com.a.eye.skywalking.collector.actor.LocalWorkerContext; -import com.a.eye.skywalking.collector.worker.Const; -import com.a.eye.skywalking.collector.worker.RecordAnalysisMember; -import com.a.eye.skywalking.collector.worker.node.NodeIndex; -import com.a.eye.skywalking.collector.worker.tools.ClientSpanIsLeafTools; -import com.a.eye.skywalking.collector.worker.tools.CollectionTools; -import com.a.eye.skywalking.collector.worker.tools.SpanPeersTools; -import com.a.eye.skywalking.trace.Span; -import com.a.eye.skywalking.trace.TraceSegment; -import com.a.eye.skywalking.trace.TraceSegmentRef; -import com.a.eye.skywalking.trace.tag.Tags; -import com.google.gson.JsonObject; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - -import java.util.List; - -/** - * @author pengys5 - */ -abstract class AbstractNodeAnalysis extends RecordAnalysisMember { - - private Logger logger = LogManager.getFormatterLogger(AbstractNodeAnalysis.class); - - AbstractNodeAnalysis(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) { - super(role, clusterContext, selfContext); - } - - void analyseSpans(TraceSegment segment, long timeSlice) throws Exception { - List spanList = segment.getSpans(); - logger.debug("node analysis span isNotEmpty %s", CollectionTools.isNotEmpty(spanList)); - - if (CollectionTools.isNotEmpty(spanList)) { - logger.debug("node analysis span list size: %s", spanList.size()); - String id = timeSlice + Const.ID_SPLIT + segment.getApplicationCode(); - JsonObject appDataJsonObj = new JsonObject(); - appDataJsonObj.addProperty(NodeIndex.Code, segment.getApplicationCode()); - appDataJsonObj.addProperty(NodeIndex.NickName, segment.getApplicationCode()); - appDataJsonObj.addProperty(NodeIndex.Time_Slice, timeSlice); - setRecord(id, appDataJsonObj); - - for (Span span : spanList) { - JsonObject dataJsonObj = new JsonObject(); - String kind = Tags.SPAN_KIND.get(span); - String component = Tags.COMPONENT.get(span); - dataJsonObj.addProperty(NodeIndex.Component, component); - - String code = segment.getApplicationCode(); - dataJsonObj.addProperty(NodeIndex.Code, code); - - dataJsonObj.addProperty(NodeIndex.Time_Slice, timeSlice); - logger.debug("span id=%s, kind=%s, component=%s, code=%s", span.getSpanId(), kind, component, code); - - if (Tags.SPAN_KIND_CLIENT.equals(kind) && ClientSpanIsLeafTools.isLeaf(span.getSpanId(), spanList)) { - logger.debug("The span id %s which kind is client and is a leaf span", span.getSpanId()); - code = SpanPeersTools.getPeers(span); - dataJsonObj.addProperty(NodeIndex.Code, code); - dataJsonObj.addProperty(NodeIndex.NickName, code); - - id = timeSlice + Const.ID_SPLIT + code; - logger.debug("leaf client node: %s", dataJsonObj.toString()); - setRecord(id, dataJsonObj); - } else if (Tags.SPAN_KIND_SERVER.equals(kind) && span.getParentSpanId() == -1) { - logger.debug("The span id %s which kind is server and is top span", span.getSpanId()); - if (CollectionTools.isEmpty(segment.getRefs())) { - JsonObject userDataJsonObj = new JsonObject(); - userDataJsonObj.addProperty(NodeIndex.Code, Const.USER_CODE); - userDataJsonObj.addProperty(NodeIndex.Component, Const.USER_CODE); - userDataJsonObj.addProperty(NodeIndex.NickName, Const.USER_CODE); - userDataJsonObj.addProperty(NodeIndex.Time_Slice, timeSlice); - String userId = timeSlice + Const.ID_SPLIT + Const.USER_CODE; - logger.debug("user node: %s", userDataJsonObj.toString()); - setRecord(userId, userDataJsonObj); - - id = timeSlice + Const.ID_SPLIT + code; - dataJsonObj.addProperty(NodeIndex.NickName, code); - logger.debug("refs node: %s", dataJsonObj.toString()); - setRecord(id, dataJsonObj); - } else { - for (TraceSegmentRef segmentRef : segment.getRefs()) { - String nickName = Const.PEERS_FRONT_SPLIT + segmentRef.getPeerHost() + Const.PEERS_BEHIND_SPLIT; - dataJsonObj.addProperty(NodeIndex.NickName, nickName); - id = timeSlice + Const.ID_SPLIT + code; - logger.debug("refs node: %s", dataJsonObj.toString()); - setRecord(id, dataJsonObj); - } - } - } else { - logger.error("The span kind value is incorrect which segment record id is %s, the value must client or server", segment.getTraceSegmentId()); - } - } - } - } -} \ No newline at end of file diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/analysis/AbstractNodeCompAnalysis.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/analysis/AbstractNodeCompAnalysis.java new file mode 100644 index 000000000..ea783c1eb --- /dev/null +++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/analysis/AbstractNodeCompAnalysis.java @@ -0,0 +1,60 @@ +package com.a.eye.skywalking.collector.worker.node.analysis; + +import com.a.eye.skywalking.collector.actor.ClusterWorkerContext; +import com.a.eye.skywalking.collector.actor.LocalWorkerContext; +import com.a.eye.skywalking.collector.worker.RecordAnalysisMember; +import com.a.eye.skywalking.collector.worker.node.NodeCompIndex; +import com.a.eye.skywalking.collector.worker.tools.ClientSpanIsLeafTools; +import com.a.eye.skywalking.collector.worker.tools.CollectionTools; +import com.a.eye.skywalking.collector.worker.tools.SpanPeersTools; +import com.a.eye.skywalking.trace.Span; +import com.a.eye.skywalking.trace.TraceSegment; +import com.a.eye.skywalking.trace.tag.Tags; +import com.google.gson.JsonObject; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import java.util.List; + +/** + * @author pengys5 + */ +abstract class AbstractNodeCompAnalysis extends RecordAnalysisMember { + + private Logger logger = LogManager.getFormatterLogger(AbstractNodeCompAnalysis.class); + + AbstractNodeCompAnalysis(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) { + super(role, clusterContext, selfContext); + } + + void analyseSpans(TraceSegment segment) throws Exception { + List spanList = segment.getSpans(); + logger.debug("node analysis span isNotEmpty %s", CollectionTools.isNotEmpty(spanList)); + + if (CollectionTools.isNotEmpty(spanList)) { + logger.debug("node analysis span list size: %s", spanList.size()); + for (Span span : spanList) { + String kind = Tags.SPAN_KIND.get(span); + if (Tags.SPAN_KIND_CLIENT.equals(kind) && ClientSpanIsLeafTools.isLeaf(span.getSpanId(), spanList)) { + String peers = SpanPeersTools.getPeers(span); + + JsonObject compJsonObj = new JsonObject(); + compJsonObj.addProperty(NodeCompIndex.Peers, peers); + compJsonObj.addProperty(NodeCompIndex.Name, Tags.COMPONENT.get(span)); + + setRecord(peers, compJsonObj); + } else if (Tags.SPAN_KIND_SERVER.equals(kind) && span.getParentSpanId() == -1) { + String peers = segment.getApplicationCode(); + + JsonObject compJsonObj = new JsonObject(); + compJsonObj.addProperty(NodeCompIndex.Peers, peers); + compJsonObj.addProperty(NodeCompIndex.Name, Tags.COMPONENT.get(span)); + + setRecord(peers, compJsonObj); + } else { + logger.error("The span kind value is incorrect which segment record id is %s, the value must client or server", segment.getTraceSegmentId()); + } + } + } + } +} \ No newline at end of file diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/analysis/AbstractNodeMappingAnalysis.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/analysis/AbstractNodeMappingAnalysis.java new file mode 100644 index 000000000..2ec8ceeb7 --- /dev/null +++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/analysis/AbstractNodeMappingAnalysis.java @@ -0,0 +1,48 @@ +package com.a.eye.skywalking.collector.worker.node.analysis; + +import com.a.eye.skywalking.collector.actor.ClusterWorkerContext; +import com.a.eye.skywalking.collector.actor.LocalWorkerContext; +import com.a.eye.skywalking.collector.worker.Const; +import com.a.eye.skywalking.collector.worker.RecordAnalysisMember; +import com.a.eye.skywalking.collector.worker.node.NodeMappingIndex; +import com.a.eye.skywalking.collector.worker.tools.CollectionTools; +import com.a.eye.skywalking.trace.TraceSegment; +import com.a.eye.skywalking.trace.TraceSegmentRef; +import com.google.gson.JsonObject; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import java.util.List; + +/** + * @author pengys5 + */ +abstract class AbstractNodeMappingAnalysis extends RecordAnalysisMember { + + private Logger logger = LogManager.getFormatterLogger(AbstractNodeMappingAnalysis.class); + + AbstractNodeMappingAnalysis(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) { + super(role, clusterContext, selfContext); + } + + void analyseRefs(TraceSegment segment, long timeSlice) throws Exception { + List segmentRefList = segment.getRefs(); + logger.debug("node mapping analysis refs isNotEmpty %s", CollectionTools.isNotEmpty(segmentRefList)); + + if (CollectionTools.isNotEmpty(segmentRefList)) { + logger.debug("node mapping analysis refs list size: %s", segmentRefList.size()); + for (TraceSegmentRef segmentRef : segmentRefList) { + String peers = Const.PEERS_FRONT_SPLIT + segmentRef.getPeerHost() + Const.PEERS_BEHIND_SPLIT; + String code = segment.getApplicationCode(); + + JsonObject nodeMappingJsonObj = new JsonObject(); + nodeMappingJsonObj.addProperty(NodeMappingIndex.Code, code); + nodeMappingJsonObj.addProperty(NodeMappingIndex.Peers, peers); + nodeMappingJsonObj.addProperty(NodeMappingIndex.Time_Slice, timeSlice); + + String id = timeSlice + Const.ID_SPLIT + code + Const.ID_SPLIT + peers; + setRecord(id, nodeMappingJsonObj); + } + } + } +} \ No newline at end of file diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/analysis/NodeInstDayAnalysis.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/analysis/NodeCompAnalysis.java similarity index 51% rename from skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/analysis/NodeInstDayAnalysis.java rename to skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/analysis/NodeCompAnalysis.java index cf2d33118..e7827f69d 100644 --- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/analysis/NodeInstDayAnalysis.java +++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/analysis/NodeCompAnalysis.java @@ -1,4 +1,4 @@ -package com.a.eye.skywalking.collector.worker.nodeinst.analysis; +package com.a.eye.skywalking.collector.worker.node.analysis; import com.a.eye.skywalking.collector.actor.AbstractLocalAsyncWorkerProvider; import com.a.eye.skywalking.collector.actor.ClusterWorkerContext; @@ -6,30 +6,24 @@ import com.a.eye.skywalking.collector.actor.LocalWorkerContext; import com.a.eye.skywalking.collector.actor.selector.RollingSelector; import com.a.eye.skywalking.collector.actor.selector.WorkerSelector; import com.a.eye.skywalking.collector.worker.WorkerConfig; -import com.a.eye.skywalking.collector.worker.nodeinst.persistence.NodeInstDayAgg; -import com.a.eye.skywalking.collector.worker.segment.SegmentPost; +import com.a.eye.skywalking.collector.worker.node.persistence.NodeCompAgg; import com.a.eye.skywalking.collector.worker.storage.RecordData; import com.a.eye.skywalking.trace.TraceSegment; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; /** * @author pengys5 */ -public class NodeInstDayAnalysis extends AbstractNodeInstAnalysis { +public class NodeCompAnalysis extends AbstractNodeCompAnalysis { - private Logger logger = LogManager.getFormatterLogger(NodeInstDayAnalysis.class); - - public NodeInstDayAnalysis(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) { + NodeCompAnalysis(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) { super(role, clusterContext, selfContext); } @Override public void analyse(Object message) throws Exception { - if (message instanceof SegmentPost.SegmentWithTimeSlice) { - SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice = (SegmentPost.SegmentWithTimeSlice) message; - TraceSegment segment = segmentWithTimeSlice.getTraceSegment(); - analyseSpans(segment, segmentWithTimeSlice.getDay()); + if (message instanceof TraceSegment) { + TraceSegment segment = (TraceSegment) message; + analyseSpans(segment); } } @@ -37,11 +31,11 @@ public class NodeInstDayAnalysis extends AbstractNodeInstAnalysis { protected void aggregation() throws Exception { RecordData oneRecord; while ((oneRecord = pushOne()) != null) { - getClusterContext().lookup(NodeInstDayAgg.Role.INSTANCE).tell(oneRecord); + getClusterContext().lookup(NodeCompAgg.Role.INSTANCE).tell(oneRecord); } } - public static class Factory extends AbstractLocalAsyncWorkerProvider { + public static class Factory extends AbstractLocalAsyncWorkerProvider { public static Factory INSTANCE = new Factory(); @Override @@ -50,13 +44,13 @@ public class NodeInstDayAnalysis extends AbstractNodeInstAnalysis { } @Override - public NodeInstDayAnalysis workerInstance(ClusterWorkerContext clusterContext) { - return new NodeInstDayAnalysis(role(), clusterContext, new LocalWorkerContext()); + public NodeCompAnalysis workerInstance(ClusterWorkerContext clusterContext) { + return new NodeCompAnalysis(role(), clusterContext, new LocalWorkerContext()); } @Override public int queueSize() { - return WorkerConfig.Queue.NodeInstanceAnalysis.Size; + return WorkerConfig.Queue.Node.NodeDayAnalysis.Size; } } @@ -65,7 +59,7 @@ public class NodeInstDayAnalysis extends AbstractNodeInstAnalysis { @Override public String roleName() { - return NodeInstDayAnalysis.class.getSimpleName(); + return NodeCompAnalysis.class.getSimpleName(); } @Override diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/analysis/NodeHourAnalysis.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/analysis/NodeMappingDayAnalysis.java similarity index 69% rename from skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/analysis/NodeHourAnalysis.java rename to skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/analysis/NodeMappingDayAnalysis.java index fece26e0f..4b83c8db9 100644 --- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/analysis/NodeHourAnalysis.java +++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/analysis/NodeMappingDayAnalysis.java @@ -5,7 +5,8 @@ import com.a.eye.skywalking.collector.actor.ClusterWorkerContext; import com.a.eye.skywalking.collector.actor.LocalWorkerContext; import com.a.eye.skywalking.collector.actor.selector.RollingSelector; import com.a.eye.skywalking.collector.actor.selector.WorkerSelector; -import com.a.eye.skywalking.collector.worker.node.persistence.NodeHourAgg; +import com.a.eye.skywalking.collector.worker.WorkerConfig; +import com.a.eye.skywalking.collector.worker.node.persistence.NodeMappingDayAgg; import com.a.eye.skywalking.collector.worker.segment.SegmentPost; import com.a.eye.skywalking.collector.worker.storage.RecordData; import com.a.eye.skywalking.trace.TraceSegment; @@ -13,9 +14,9 @@ import com.a.eye.skywalking.trace.TraceSegment; /** * @author pengys5 */ -public class NodeHourAnalysis extends AbstractNodeAnalysis { +public class NodeMappingDayAnalysis extends AbstractNodeMappingAnalysis { - public NodeHourAnalysis(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) { + public NodeMappingDayAnalysis(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) { super(role, clusterContext, selfContext); } @@ -24,7 +25,7 @@ public class NodeHourAnalysis extends AbstractNodeAnalysis { if (message instanceof SegmentPost.SegmentWithTimeSlice) { SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice = (SegmentPost.SegmentWithTimeSlice) message; TraceSegment segment = segmentWithTimeSlice.getTraceSegment(); - analyseSpans(segment, segmentWithTimeSlice.getHour()); + analyseRefs(segment, segmentWithTimeSlice.getDay()); } } @@ -32,11 +33,11 @@ public class NodeHourAnalysis extends AbstractNodeAnalysis { protected void aggregation() throws Exception { RecordData oneRecord; while ((oneRecord = pushOne()) != null) { - getClusterContext().lookup(NodeHourAgg.Role.INSTANCE).tell(oneRecord); + getClusterContext().lookup(NodeMappingDayAgg.Role.INSTANCE).tell(oneRecord); } } - public static class Factory extends AbstractLocalAsyncWorkerProvider { + public static class Factory extends AbstractLocalAsyncWorkerProvider { public static Factory INSTANCE = new Factory(); @Override @@ -45,13 +46,13 @@ public class NodeHourAnalysis extends AbstractNodeAnalysis { } @Override - public NodeHourAnalysis workerInstance(ClusterWorkerContext clusterContext) { - return new NodeHourAnalysis(role(), clusterContext, new LocalWorkerContext()); + public NodeMappingDayAnalysis workerInstance(ClusterWorkerContext clusterContext) { + return new NodeMappingDayAnalysis(role(), clusterContext, new LocalWorkerContext()); } @Override public int queueSize() { - return 1024; + return WorkerConfig.Queue.Node.NodeMappingDayAnalysis.Size; } } @@ -60,7 +61,7 @@ public class NodeHourAnalysis extends AbstractNodeAnalysis { @Override public String roleName() { - return NodeHourAnalysis.class.getSimpleName(); + return NodeMappingDayAnalysis.class.getSimpleName(); } @Override diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/analysis/NodeDayAnalysis.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/analysis/NodeMappingHourAnalysis.java similarity index 69% rename from skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/analysis/NodeDayAnalysis.java rename to skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/analysis/NodeMappingHourAnalysis.java index 99b0e22c1..539efd783 100644 --- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/analysis/NodeDayAnalysis.java +++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/analysis/NodeMappingHourAnalysis.java @@ -5,7 +5,8 @@ import com.a.eye.skywalking.collector.actor.ClusterWorkerContext; import com.a.eye.skywalking.collector.actor.LocalWorkerContext; import com.a.eye.skywalking.collector.actor.selector.RollingSelector; import com.a.eye.skywalking.collector.actor.selector.WorkerSelector; -import com.a.eye.skywalking.collector.worker.node.persistence.NodeDayAgg; +import com.a.eye.skywalking.collector.worker.WorkerConfig; +import com.a.eye.skywalking.collector.worker.node.persistence.NodeMappingHourAgg; import com.a.eye.skywalking.collector.worker.segment.SegmentPost; import com.a.eye.skywalking.collector.worker.storage.RecordData; import com.a.eye.skywalking.trace.TraceSegment; @@ -13,9 +14,9 @@ import com.a.eye.skywalking.trace.TraceSegment; /** * @author pengys5 */ -public class NodeDayAnalysis extends AbstractNodeAnalysis { +public class NodeMappingHourAnalysis extends AbstractNodeMappingAnalysis { - public NodeDayAnalysis(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) { + public NodeMappingHourAnalysis(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) { super(role, clusterContext, selfContext); } @@ -24,7 +25,7 @@ public class NodeDayAnalysis extends AbstractNodeAnalysis { if (message instanceof SegmentPost.SegmentWithTimeSlice) { SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice = (SegmentPost.SegmentWithTimeSlice) message; TraceSegment segment = segmentWithTimeSlice.getTraceSegment(); - analyseSpans(segment, segmentWithTimeSlice.getDay()); + analyseRefs(segment, segmentWithTimeSlice.getHour()); } } @@ -32,11 +33,11 @@ public class NodeDayAnalysis extends AbstractNodeAnalysis { protected void aggregation() throws Exception { RecordData oneRecord; while ((oneRecord = pushOne()) != null) { - getClusterContext().lookup(NodeDayAgg.Role.INSTANCE).tell(oneRecord); + getClusterContext().lookup(NodeMappingHourAgg.Role.INSTANCE).tell(oneRecord); } } - public static class Factory extends AbstractLocalAsyncWorkerProvider { + public static class Factory extends AbstractLocalAsyncWorkerProvider { public static Factory INSTANCE = new Factory(); @Override @@ -45,13 +46,13 @@ public class NodeDayAnalysis extends AbstractNodeAnalysis { } @Override - public NodeDayAnalysis workerInstance(ClusterWorkerContext clusterContext) { - return new NodeDayAnalysis(role(), clusterContext, new LocalWorkerContext()); + public NodeMappingHourAnalysis workerInstance(ClusterWorkerContext clusterContext) { + return new NodeMappingHourAnalysis(role(), clusterContext, new LocalWorkerContext()); } @Override public int queueSize() { - return 1024; + return WorkerConfig.Queue.Node.NodeMappingHourAnalysis.Size; } } @@ -60,7 +61,7 @@ public class NodeDayAnalysis extends AbstractNodeAnalysis { @Override public String roleName() { - return NodeDayAnalysis.class.getSimpleName(); + return NodeMappingHourAnalysis.class.getSimpleName(); } @Override diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/analysis/NodeMinuteAnalysis.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/analysis/NodeMappingMinuteAnalysis.java similarity index 68% rename from skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/analysis/NodeMinuteAnalysis.java rename to skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/analysis/NodeMappingMinuteAnalysis.java index 4031e1551..bd9975521 100644 --- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/analysis/NodeMinuteAnalysis.java +++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/analysis/NodeMappingMinuteAnalysis.java @@ -5,7 +5,8 @@ import com.a.eye.skywalking.collector.actor.ClusterWorkerContext; import com.a.eye.skywalking.collector.actor.LocalWorkerContext; import com.a.eye.skywalking.collector.actor.selector.RollingSelector; import com.a.eye.skywalking.collector.actor.selector.WorkerSelector; -import com.a.eye.skywalking.collector.worker.node.persistence.NodeMinuteAgg; +import com.a.eye.skywalking.collector.worker.WorkerConfig; +import com.a.eye.skywalking.collector.worker.node.persistence.NodeMappingMinuteAgg; import com.a.eye.skywalking.collector.worker.segment.SegmentPost; import com.a.eye.skywalking.collector.worker.storage.RecordData; import com.a.eye.skywalking.trace.TraceSegment; @@ -13,9 +14,9 @@ import com.a.eye.skywalking.trace.TraceSegment; /** * @author pengys5 */ -public class NodeMinuteAnalysis extends AbstractNodeAnalysis { +public class NodeMappingMinuteAnalysis extends AbstractNodeMappingAnalysis { - public NodeMinuteAnalysis(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) { + public NodeMappingMinuteAnalysis(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) { super(role, clusterContext, selfContext); } @@ -24,7 +25,7 @@ public class NodeMinuteAnalysis extends AbstractNodeAnalysis { if (message instanceof SegmentPost.SegmentWithTimeSlice) { SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice = (SegmentPost.SegmentWithTimeSlice) message; TraceSegment segment = segmentWithTimeSlice.getTraceSegment(); - analyseSpans(segment, segmentWithTimeSlice.getMinute()); + analyseRefs(segment, segmentWithTimeSlice.getMinute()); } } @@ -32,11 +33,11 @@ public class NodeMinuteAnalysis extends AbstractNodeAnalysis { protected void aggregation() throws Exception { RecordData oneRecord; while ((oneRecord = pushOne()) != null) { - getClusterContext().lookup(NodeMinuteAgg.Role.INSTANCE).tell(oneRecord); + getClusterContext().lookup(NodeMappingMinuteAgg.Role.INSTANCE).tell(oneRecord); } } - public static class Factory extends AbstractLocalAsyncWorkerProvider { + public static class Factory extends AbstractLocalAsyncWorkerProvider { public static Factory INSTANCE = new Factory(); @Override @@ -45,13 +46,13 @@ public class NodeMinuteAnalysis extends AbstractNodeAnalysis { } @Override - public NodeMinuteAnalysis workerInstance(ClusterWorkerContext clusterContext) { - return new NodeMinuteAnalysis(role(), clusterContext, new LocalWorkerContext()); + public NodeMappingMinuteAnalysis workerInstance(ClusterWorkerContext clusterContext) { + return new NodeMappingMinuteAnalysis(role(), clusterContext, new LocalWorkerContext()); } @Override public int queueSize() { - return 1024; + return WorkerConfig.Queue.Node.NodeMappingMinuteAnalysis.Size; } } @@ -60,7 +61,7 @@ public class NodeMinuteAnalysis extends AbstractNodeAnalysis { @Override public String roleName() { - return NodeMinuteAnalysis.class.getSimpleName(); + return NodeMappingMinuteAnalysis.class.getSimpleName(); } @Override diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeHourAgg.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeCompAgg.java similarity index 66% rename from skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeHourAgg.java rename to skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeCompAgg.java index a1cab73bc..62131e0ae 100644 --- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeHourAgg.java +++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeCompAgg.java @@ -5,35 +5,31 @@ import com.a.eye.skywalking.collector.actor.selector.HashCodeSelector; import com.a.eye.skywalking.collector.actor.selector.WorkerSelector; import com.a.eye.skywalking.collector.worker.WorkerConfig; import com.a.eye.skywalking.collector.worker.storage.RecordData; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; /** * @author pengys5 */ -public class NodeHourAgg extends AbstractClusterWorker { +public class NodeCompAgg extends AbstractClusterWorker { - private Logger logger = LogManager.getFormatterLogger(NodeHourAgg.class); - - public NodeHourAgg(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) { + public NodeCompAgg(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) { super(role, clusterContext, selfContext); } @Override public void preStart() throws ProviderNotFoundException { - getClusterContext().findProvider(NodeHourSave.Role.INSTANCE).create(this); + getClusterContext().findProvider(NodeCompSave.Role.INSTANCE).create(this); } @Override protected void onWork(Object message) throws Exception { if (message instanceof RecordData) { - getSelfContext().lookup(NodeHourSave.Role.INSTANCE).tell(message); + getSelfContext().lookup(NodeCompSave.Role.INSTANCE).tell(message); } else { - logger.error("message unhandled"); + throw new IllegalArgumentException("message instance must RecordData"); } } - public static class Factory extends AbstractClusterWorkerProvider { + public static class Factory extends AbstractClusterWorkerProvider { public static Factory INSTANCE = new Factory(); @Override @@ -42,13 +38,13 @@ public class NodeHourAgg extends AbstractClusterWorker { } @Override - public NodeHourAgg workerInstance(ClusterWorkerContext clusterContext) { - return new NodeHourAgg(role(), clusterContext, new LocalWorkerContext()); + public NodeCompAgg workerInstance(ClusterWorkerContext clusterContext) { + return new NodeCompAgg(role(), clusterContext, new LocalWorkerContext()); } @Override public int workerNum() { - return WorkerConfig.Worker.DAGNodeReceiver.Num; + return WorkerConfig.WorkerNum.Node.NodeDayAgg.Size; } } @@ -57,7 +53,7 @@ public class NodeHourAgg extends AbstractClusterWorker { @Override public String roleName() { - return NodeHourAgg.class.getSimpleName(); + return NodeCompAgg.class.getSimpleName(); } @Override diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeCompLoad.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeCompLoad.java new file mode 100644 index 000000000..098cfe6b5 --- /dev/null +++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeCompLoad.java @@ -0,0 +1,78 @@ +package com.a.eye.skywalking.collector.worker.node.persistence; + +import com.a.eye.skywalking.collector.actor.*; +import com.a.eye.skywalking.collector.actor.selector.RollingSelector; +import com.a.eye.skywalking.collector.actor.selector.WorkerSelector; +import com.a.eye.skywalking.collector.worker.node.NodeCompIndex; +import com.a.eye.skywalking.collector.worker.storage.EsClient; +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.elasticsearch.action.search.SearchRequestBuilder; +import org.elasticsearch.action.search.SearchResponse; +import org.elasticsearch.action.search.SearchType; +import org.elasticsearch.search.SearchHit; + +/** + * @author pengys5 + */ +public class NodeCompLoad extends AbstractLocalSyncWorker { + + private Logger logger = LogManager.getFormatterLogger(NodeCompLoad.class); + + NodeCompLoad(Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) { + super(role, clusterContext, selfContext); + } + + @Override + public void onWork(Object request, Object response) throws Exception { + SearchRequestBuilder searchRequestBuilder = EsClient.getClient().prepareSearch(NodeCompIndex.Index); + searchRequestBuilder.setTypes(NodeCompIndex.Type_Record); + searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH); + searchRequestBuilder.setSize(100); + SearchResponse searchResponse = searchRequestBuilder.execute().actionGet(); + + SearchHit[] searchHits = searchResponse.getHits().getHits(); + + JsonArray nodeCompArray = new JsonArray(); + for (SearchHit searchHit : searchHits) { + JsonObject nodeCompObj = new JsonObject(); + nodeCompObj.addProperty(NodeCompIndex.Name, (String) searchHit.getSource().get(NodeCompIndex.Name)); + nodeCompObj.addProperty(NodeCompIndex.Peers, (String) searchHit.getSource().get(NodeCompIndex.Peers)); + nodeCompArray.add(nodeCompObj); + logger.debug("node: %s", nodeCompObj.toString()); + } + + JsonObject resJsonObj = (JsonObject) response; + resJsonObj.add("result", nodeCompArray); + } + + public static class Factory extends AbstractLocalSyncWorkerProvider { + public static Factory INSTANCE = new Factory(); + + @Override + public Role role() { + return WorkerRole.INSTANCE; + } + + @Override + public NodeCompLoad workerInstance(ClusterWorkerContext clusterContext) { + return new NodeCompLoad(role(), clusterContext, new LocalWorkerContext()); + } + } + + public enum WorkerRole implements Role { + INSTANCE; + + @Override + public String roleName() { + return NodeCompLoad.class.getSimpleName(); + } + + @Override + public WorkerSelector workerSelector() { + return new RollingSelector(); + } + } +} diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeHourSave.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeCompSave.java similarity index 72% rename from skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeHourSave.java rename to skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeCompSave.java index d76dc8509..c89f6eb3b 100644 --- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeHourSave.java +++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeCompSave.java @@ -7,28 +7,28 @@ import com.a.eye.skywalking.collector.actor.selector.HashCodeSelector; import com.a.eye.skywalking.collector.actor.selector.WorkerSelector; import com.a.eye.skywalking.collector.worker.RecordPersistenceMember; import com.a.eye.skywalking.collector.worker.WorkerConfig; -import com.a.eye.skywalking.collector.worker.node.NodeIndex; +import com.a.eye.skywalking.collector.worker.node.NodeCompIndex; /** * @author pengys5 */ -public class NodeHourSave extends RecordPersistenceMember { +public class NodeCompSave extends RecordPersistenceMember { - public NodeHourSave(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) { + NodeCompSave(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) { super(role, clusterContext, selfContext); } @Override public String esIndex() { - return NodeIndex.Index; + return NodeCompIndex.Index; } @Override public String esType() { - return NodeIndex.Type_Hour; + return NodeCompIndex.Type_Record; } - public static class Factory extends AbstractLocalAsyncWorkerProvider { + public static class Factory extends AbstractLocalAsyncWorkerProvider { public static Factory INSTANCE = new Factory(); @Override @@ -37,8 +37,8 @@ public class NodeHourSave extends RecordPersistenceMember { } @Override - public NodeHourSave workerInstance(ClusterWorkerContext clusterContext) { - return new NodeHourSave(role(), clusterContext, new LocalWorkerContext()); + public NodeCompSave workerInstance(ClusterWorkerContext clusterContext) { + return new NodeCompSave(role(), clusterContext, new LocalWorkerContext()); } @Override @@ -52,7 +52,7 @@ public class NodeHourSave extends RecordPersistenceMember { @Override public String roleName() { - return NodeHourSave.class.getSimpleName(); + return NodeCompSave.class.getSimpleName(); } @Override diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/persistence/NodeInstMinuteAgg.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeMappingDayAgg.java similarity index 63% rename from skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/persistence/NodeInstMinuteAgg.java rename to skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeMappingDayAgg.java index c74ea4201..4904ead3c 100644 --- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/persistence/NodeInstMinuteAgg.java +++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeMappingDayAgg.java @@ -1,39 +1,35 @@ -package com.a.eye.skywalking.collector.worker.nodeinst.persistence; +package com.a.eye.skywalking.collector.worker.node.persistence; import com.a.eye.skywalking.collector.actor.*; import com.a.eye.skywalking.collector.actor.selector.HashCodeSelector; import com.a.eye.skywalking.collector.actor.selector.WorkerSelector; import com.a.eye.skywalking.collector.worker.WorkerConfig; import com.a.eye.skywalking.collector.worker.storage.RecordData; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; /** * @author pengys5 */ -public class NodeInstMinuteAgg extends AbstractClusterWorker { +public class NodeMappingDayAgg extends AbstractClusterWorker { - private Logger logger = LogManager.getFormatterLogger(NodeInstMinuteAgg.class); - - public NodeInstMinuteAgg(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) { + public NodeMappingDayAgg(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) { super(role, clusterContext, selfContext); } @Override public void preStart() throws ProviderNotFoundException { - getClusterContext().findProvider(NodeInstMinuteSave.Role.INSTANCE).create(this); + getClusterContext().findProvider(NodeMappingDaySave.Role.INSTANCE).create(this); } @Override protected void onWork(Object message) throws Exception { if (message instanceof RecordData) { - getSelfContext().lookup(NodeInstMinuteSave.Role.INSTANCE).tell(message); + getSelfContext().lookup(NodeMappingDaySave.Role.INSTANCE).tell(message); } else { - logger.error("message unhandled"); + throw new IllegalArgumentException("message instance must RecordData"); } } - public static class Factory extends AbstractClusterWorkerProvider { + public static class Factory extends AbstractClusterWorkerProvider { public static Factory INSTANCE = new Factory(); @Override @@ -42,13 +38,13 @@ public class NodeInstMinuteAgg extends AbstractClusterWorker { } @Override - public NodeInstMinuteAgg workerInstance(ClusterWorkerContext clusterContext) { - return new NodeInstMinuteAgg(role(), clusterContext, new LocalWorkerContext()); + public NodeMappingDayAgg workerInstance(ClusterWorkerContext clusterContext) { + return new NodeMappingDayAgg(role(), clusterContext, new LocalWorkerContext()); } @Override public int workerNum() { - return WorkerConfig.Worker.NodeInstanceReceiver.Num; + return WorkerConfig.WorkerNum.Node.NodeMappingDayAgg.Size; } } @@ -57,7 +53,7 @@ public class NodeInstMinuteAgg extends AbstractClusterWorker { @Override public String roleName() { - return NodeInstMinuteAgg.class.getSimpleName(); + return NodeMappingDayAgg.class.getSimpleName(); } @Override diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeMinuteSave.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeMappingDaySave.java similarity index 68% rename from skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeMinuteSave.java rename to skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeMappingDaySave.java index c3512df95..c54393183 100644 --- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeMinuteSave.java +++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeMappingDaySave.java @@ -7,28 +7,28 @@ import com.a.eye.skywalking.collector.actor.selector.HashCodeSelector; import com.a.eye.skywalking.collector.actor.selector.WorkerSelector; import com.a.eye.skywalking.collector.worker.RecordPersistenceMember; import com.a.eye.skywalking.collector.worker.WorkerConfig; -import com.a.eye.skywalking.collector.worker.node.NodeIndex; +import com.a.eye.skywalking.collector.worker.node.NodeMappingIndex; /** * @author pengys5 */ -public class NodeMinuteSave extends RecordPersistenceMember { +public class NodeMappingDaySave extends RecordPersistenceMember { - public NodeMinuteSave(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) { + public NodeMappingDaySave(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) { super(role, clusterContext, selfContext); } @Override public String esIndex() { - return NodeIndex.Index; + return NodeMappingIndex.Index; } @Override public String esType() { - return NodeIndex.Type_Minute; + return NodeMappingIndex.Type_Day; } - public static class Factory extends AbstractLocalAsyncWorkerProvider { + public static class Factory extends AbstractLocalAsyncWorkerProvider { public static Factory INSTANCE = new Factory(); @Override @@ -37,8 +37,8 @@ public class NodeMinuteSave extends RecordPersistenceMember { } @Override - public NodeMinuteSave workerInstance(ClusterWorkerContext clusterContext) { - return new NodeMinuteSave(role(), clusterContext, new LocalWorkerContext()); + public NodeMappingDaySave workerInstance(ClusterWorkerContext clusterContext) { + return new NodeMappingDaySave(role(), clusterContext, new LocalWorkerContext()); } @Override @@ -52,7 +52,7 @@ public class NodeMinuteSave extends RecordPersistenceMember { @Override public String roleName() { - return NodeMinuteSave.class.getSimpleName(); + return NodeMappingDaySave.class.getSimpleName(); } @Override diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeDayAgg.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeMappingHourAgg.java similarity index 60% rename from skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeDayAgg.java rename to skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeMappingHourAgg.java index d780cb432..e92d91cec 100644 --- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeDayAgg.java +++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeMappingHourAgg.java @@ -5,35 +5,31 @@ import com.a.eye.skywalking.collector.actor.selector.HashCodeSelector; import com.a.eye.skywalking.collector.actor.selector.WorkerSelector; import com.a.eye.skywalking.collector.worker.WorkerConfig; import com.a.eye.skywalking.collector.worker.storage.RecordData; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; /** * @author pengys5 */ -public class NodeDayAgg extends AbstractClusterWorker { +public class NodeMappingHourAgg extends AbstractClusterWorker { - private Logger logger = LogManager.getFormatterLogger(NodeDayAgg.class); - - public NodeDayAgg(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) { + NodeMappingHourAgg(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) { super(role, clusterContext, selfContext); } @Override public void preStart() throws ProviderNotFoundException { - getClusterContext().findProvider(NodeDaySave.Role.INSTANCE).create(this); + getClusterContext().findProvider(NodeMappingHourSave.Role.INSTANCE).create(this); } @Override protected void onWork(Object message) throws Exception { if (message instanceof RecordData) { - getSelfContext().lookup(NodeDaySave.Role.INSTANCE).tell(message); + getSelfContext().lookup(NodeMappingHourSave.Role.INSTANCE).tell(message); } else { - logger.error("message unhandled"); + throw new IllegalArgumentException("message instance must RecordData"); } } - public static class Factory extends AbstractClusterWorkerProvider { + public static class Factory extends AbstractClusterWorkerProvider { public static Factory INSTANCE = new Factory(); @Override @@ -42,13 +38,13 @@ public class NodeDayAgg extends AbstractClusterWorker { } @Override - public NodeDayAgg workerInstance(ClusterWorkerContext clusterContext) { - return new NodeDayAgg(role(), clusterContext, new LocalWorkerContext()); + public NodeMappingHourAgg workerInstance(ClusterWorkerContext clusterContext) { + return new NodeMappingHourAgg(role(), clusterContext, new LocalWorkerContext()); } @Override public int workerNum() { - return WorkerConfig.Worker.DAGNodeReceiver.Num; + return WorkerConfig.WorkerNum.Node.NodeMappingHourAgg.Size; } } @@ -57,7 +53,7 @@ public class NodeDayAgg extends AbstractClusterWorker { @Override public String roleName() { - return NodeDayAgg.class.getSimpleName(); + return NodeMappingHourAgg.class.getSimpleName(); } @Override diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeDaySave.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeMappingHourSave.java similarity index 68% rename from skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeDaySave.java rename to skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeMappingHourSave.java index 698a9249b..2ca6a6563 100644 --- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeDaySave.java +++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeMappingHourSave.java @@ -7,28 +7,28 @@ import com.a.eye.skywalking.collector.actor.selector.HashCodeSelector; import com.a.eye.skywalking.collector.actor.selector.WorkerSelector; import com.a.eye.skywalking.collector.worker.RecordPersistenceMember; import com.a.eye.skywalking.collector.worker.WorkerConfig; -import com.a.eye.skywalking.collector.worker.node.NodeIndex; +import com.a.eye.skywalking.collector.worker.node.NodeMappingIndex; /** * @author pengys5 */ -public class NodeDaySave extends RecordPersistenceMember { +public class NodeMappingHourSave extends RecordPersistenceMember { - public NodeDaySave(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) { + public NodeMappingHourSave(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) { super(role, clusterContext, selfContext); } @Override public String esIndex() { - return NodeIndex.Index; + return NodeMappingIndex.Index; } @Override public String esType() { - return NodeIndex.Type_Day; + return NodeMappingIndex.Type_Hour; } - public static class Factory extends AbstractLocalAsyncWorkerProvider { + public static class Factory extends AbstractLocalAsyncWorkerProvider { public static Factory INSTANCE = new Factory(); @Override @@ -37,8 +37,8 @@ public class NodeDaySave extends RecordPersistenceMember { } @Override - public NodeDaySave workerInstance(ClusterWorkerContext clusterContext) { - return new NodeDaySave(role(), clusterContext, new LocalWorkerContext()); + public NodeMappingHourSave workerInstance(ClusterWorkerContext clusterContext) { + return new NodeMappingHourSave(role(), clusterContext, new LocalWorkerContext()); } @Override @@ -52,7 +52,7 @@ public class NodeDaySave extends RecordPersistenceMember { @Override public String roleName() { - return NodeDaySave.class.getSimpleName(); + return NodeMappingHourSave.class.getSimpleName(); } @Override diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeMinuteAgg.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeMappingMinuteAgg.java similarity index 62% rename from skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeMinuteAgg.java rename to skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeMappingMinuteAgg.java index ba2dbb7b6..bad32d26a 100644 --- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeMinuteAgg.java +++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeMappingMinuteAgg.java @@ -5,35 +5,31 @@ import com.a.eye.skywalking.collector.actor.selector.HashCodeSelector; import com.a.eye.skywalking.collector.actor.selector.WorkerSelector; import com.a.eye.skywalking.collector.worker.WorkerConfig; import com.a.eye.skywalking.collector.worker.storage.RecordData; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; /** * @author pengys5 */ -public class NodeMinuteAgg extends AbstractClusterWorker { +public class NodeMappingMinuteAgg extends AbstractClusterWorker { - private Logger logger = LogManager.getFormatterLogger(NodeMinuteAgg.class); - - public NodeMinuteAgg(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) { + NodeMappingMinuteAgg(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) { super(role, clusterContext, selfContext); } @Override public void preStart() throws ProviderNotFoundException { - getClusterContext().findProvider(NodeMinuteSave.Role.INSTANCE).create(this); + getClusterContext().findProvider(NodeMappingMinuteSave.Role.INSTANCE).create(this); } @Override protected void onWork(Object message) throws Exception { if (message instanceof RecordData) { - getSelfContext().lookup(NodeMinuteSave.Role.INSTANCE).tell(message); + getSelfContext().lookup(NodeMappingMinuteSave.Role.INSTANCE).tell(message); } else { - logger.error("message unhandled"); + throw new IllegalArgumentException("message instance must RecordData"); } } - public static class Factory extends AbstractClusterWorkerProvider { + public static class Factory extends AbstractClusterWorkerProvider { public static Factory INSTANCE = new Factory(); @Override @@ -42,13 +38,13 @@ public class NodeMinuteAgg extends AbstractClusterWorker { } @Override - public NodeMinuteAgg workerInstance(ClusterWorkerContext clusterContext) { - return new NodeMinuteAgg(role(), clusterContext, new LocalWorkerContext()); + public NodeMappingMinuteAgg workerInstance(ClusterWorkerContext clusterContext) { + return new NodeMappingMinuteAgg(role(), clusterContext, new LocalWorkerContext()); } @Override public int workerNum() { - return WorkerConfig.Worker.DAGNodeReceiver.Num; + return WorkerConfig.WorkerNum.Node.NodeMappingMinuteAgg.Size; } } @@ -57,7 +53,7 @@ public class NodeMinuteAgg extends AbstractClusterWorker { @Override public String roleName() { - return NodeMinuteAgg.class.getSimpleName(); + return NodeMappingMinuteAgg.class.getSimpleName(); } @Override diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/persistence/NodeInstDaySave.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeMappingMinuteSave.java similarity index 61% rename from skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/persistence/NodeInstDaySave.java rename to skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeMappingMinuteSave.java index 2f00a4d57..e8bde5824 100644 --- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/persistence/NodeInstDaySave.java +++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeMappingMinuteSave.java @@ -1,4 +1,4 @@ -package com.a.eye.skywalking.collector.worker.nodeinst.persistence; +package com.a.eye.skywalking.collector.worker.node.persistence; import com.a.eye.skywalking.collector.actor.AbstractLocalAsyncWorkerProvider; import com.a.eye.skywalking.collector.actor.ClusterWorkerContext; @@ -7,28 +7,28 @@ import com.a.eye.skywalking.collector.actor.selector.HashCodeSelector; import com.a.eye.skywalking.collector.actor.selector.WorkerSelector; import com.a.eye.skywalking.collector.worker.RecordPersistenceMember; import com.a.eye.skywalking.collector.worker.WorkerConfig; -import com.a.eye.skywalking.collector.worker.nodeinst.NodeInstIndex; +import com.a.eye.skywalking.collector.worker.node.NodeMappingIndex; /** * @author pengys5 */ -public class NodeInstDaySave extends RecordPersistenceMember { +public class NodeMappingMinuteSave extends RecordPersistenceMember { - public NodeInstDaySave(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) { + public NodeMappingMinuteSave(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) { super(role, clusterContext, selfContext); } @Override public String esIndex() { - return NodeInstIndex.Index; + return NodeMappingIndex.Index; } @Override public String esType() { - return NodeInstIndex.Type_Day; + return NodeMappingIndex.Type_Minute; } - public static class Factory extends AbstractLocalAsyncWorkerProvider { + public static class Factory extends AbstractLocalAsyncWorkerProvider { public static Factory INSTANCE = new Factory(); @Override @@ -37,13 +37,13 @@ public class NodeInstDaySave extends RecordPersistenceMember { } @Override - public NodeInstDaySave workerInstance(ClusterWorkerContext clusterContext) { - return new NodeInstDaySave(role(), clusterContext, new LocalWorkerContext()); + public NodeMappingMinuteSave workerInstance(ClusterWorkerContext clusterContext) { + return new NodeMappingMinuteSave(role(), clusterContext, new LocalWorkerContext()); } @Override public int queueSize() { - return WorkerConfig.Queue.Persistence.NodeInstancePersistence.Size; + return WorkerConfig.Queue.Persistence.DAGNodePersistence.Size; } } @@ -52,7 +52,7 @@ public class NodeInstDaySave extends RecordPersistenceMember { @Override public String roleName() { - return NodeInstDaySave.class.getSimpleName(); + return NodeMappingMinuteSave.class.getSimpleName(); } @Override diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/persistence/NodeInstSummarySearchWithTimeSlice.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeMappingSearchWithTimeSlice.java similarity index 57% rename from skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/persistence/NodeInstSummarySearchWithTimeSlice.java rename to skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeMappingSearchWithTimeSlice.java index 6f68c15b5..292254153 100644 --- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/persistence/NodeInstSummarySearchWithTimeSlice.java +++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeMappingSearchWithTimeSlice.java @@ -1,10 +1,11 @@ -package com.a.eye.skywalking.collector.worker.nodeinst.persistence; +package com.a.eye.skywalking.collector.worker.node.persistence; import com.a.eye.skywalking.collector.actor.*; import com.a.eye.skywalking.collector.actor.selector.RollingSelector; import com.a.eye.skywalking.collector.actor.selector.WorkerSelector; +import com.a.eye.skywalking.collector.worker.Const; import com.a.eye.skywalking.collector.worker.TimeSlice; -import com.a.eye.skywalking.collector.worker.nodeinst.NodeInstIndex; +import com.a.eye.skywalking.collector.worker.node.NodeMappingIndex; import com.a.eye.skywalking.collector.worker.storage.EsClient; import com.google.gson.JsonArray; import com.google.gson.JsonObject; @@ -20,11 +21,11 @@ import org.elasticsearch.search.aggregations.bucket.terms.Terms; /** * @author pengys5 */ -public class NodeInstSummarySearchWithTimeSlice extends AbstractLocalSyncWorker { +public class NodeMappingSearchWithTimeSlice extends AbstractLocalSyncWorker { - private Logger logger = LogManager.getFormatterLogger(NodeInstSummarySearchWithTimeSlice.class); + private Logger logger = LogManager.getFormatterLogger(NodeMappingSearchWithTimeSlice.class); - public NodeInstSummarySearchWithTimeSlice(Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) { + NodeMappingSearchWithTimeSlice(Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) { super(role, clusterContext, selfContext); } @@ -33,30 +34,33 @@ public class NodeInstSummarySearchWithTimeSlice extends AbstractLocalSyncWorker if (request instanceof RequestEntity) { RequestEntity search = (RequestEntity) request; - SearchRequestBuilder searchRequestBuilder = EsClient.getClient().prepareSearch(NodeInstIndex.Index); + SearchRequestBuilder searchRequestBuilder = EsClient.getClient().prepareSearch(NodeMappingIndex.Index); searchRequestBuilder.setTypes(search.getSliceType()); searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH); - searchRequestBuilder.setQuery(QueryBuilders.rangeQuery(NodeInstIndex.Time_Slice).gte(search.getStartTime()).lte(search.getEndTime())); - searchRequestBuilder.addAggregation(AggregationBuilders.terms("codes").field("code")); + searchRequestBuilder.setQuery(QueryBuilders.rangeQuery(NodeMappingIndex.Time_Slice).gte(search.getStartTime()).lte(search.getEndTime())); searchRequestBuilder.setSize(0); + searchRequestBuilder.addAggregation(AggregationBuilders.terms(NodeMappingIndex.AGG_COLUMN).field(NodeMappingIndex.AGG_COLUMN).size(100)); SearchResponse searchResponse = searchRequestBuilder.execute().actionGet(); - Terms agg = searchResponse.getAggregations().get("codes"); + Terms genders = searchResponse.getAggregations().get(NodeMappingIndex.AGG_COLUMN); - JsonArray nodeInstCountArray = new JsonArray(); - for (Terms.Bucket entry : agg.getBuckets()) { - JsonObject nodeInstCountObj = new JsonObject(); - String code = String.valueOf(entry.getKey()); - long count = entry.getDocCount(); - nodeInstCountObj.addProperty("code", code); - nodeInstCountObj.addProperty("count", count); - nodeInstCountArray.add(nodeInstCountObj); - logger.info("code %s, count %s", code, count); + 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(NodeMappingIndex.Code, code); + nodeMappingObj.addProperty(NodeMappingIndex.Peers, peers); + nodeMappingArray.add(nodeMappingObj); } + logger.debug("node mapping data: %s", nodeMappingArray.toString()); JsonObject resJsonObj = (JsonObject) response; - resJsonObj.add("result", nodeInstCountArray); + resJsonObj.add(Const.RESULT, nodeMappingArray); } else { throw new IllegalArgumentException("message instance must be RequestEntity"); } @@ -68,7 +72,7 @@ public class NodeInstSummarySearchWithTimeSlice extends AbstractLocalSyncWorker } } - public static class Factory extends AbstractLocalSyncWorkerProvider { + public static class Factory extends AbstractLocalSyncWorkerProvider { public static Factory INSTANCE = new Factory(); @Override @@ -77,8 +81,8 @@ public class NodeInstSummarySearchWithTimeSlice extends AbstractLocalSyncWorker } @Override - public NodeInstSummarySearchWithTimeSlice workerInstance(ClusterWorkerContext clusterContext) { - return new NodeInstSummarySearchWithTimeSlice(role(), clusterContext, new LocalWorkerContext()); + public NodeMappingSearchWithTimeSlice workerInstance(ClusterWorkerContext clusterContext) { + return new NodeMappingSearchWithTimeSlice(role(), clusterContext, new LocalWorkerContext()); } } @@ -87,7 +91,7 @@ public class NodeInstSummarySearchWithTimeSlice extends AbstractLocalSyncWorker @Override public String roleName() { - return NodeInstSummarySearchWithTimeSlice.class.getSimpleName(); + return NodeMappingSearchWithTimeSlice.class.getSimpleName(); } @Override diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeSearchWithTimeSlice.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeSearchWithTimeSlice.java deleted file mode 100644 index 23b22eaab..000000000 --- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeSearchWithTimeSlice.java +++ /dev/null @@ -1,109 +0,0 @@ -package com.a.eye.skywalking.collector.worker.node.persistence; - -import com.a.eye.skywalking.collector.actor.*; -import com.a.eye.skywalking.collector.actor.selector.RollingSelector; -import com.a.eye.skywalking.collector.actor.selector.WorkerSelector; -import com.a.eye.skywalking.collector.worker.TimeSlice; -import com.a.eye.skywalking.collector.worker.node.NodeIndex; -import com.a.eye.skywalking.collector.worker.storage.EsClient; -import com.google.gson.JsonArray; -import com.google.gson.JsonObject; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -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.SearchHit; -import org.elasticsearch.search.aggregations.AggregationBuilder; -import org.elasticsearch.search.aggregations.AggregationBuilders; -import org.elasticsearch.search.aggregations.bucket.terms.Terms; -import org.elasticsearch.search.aggregations.metrics.tophits.TopHits; - -/** - * @author pengys5 - */ -public class NodeSearchWithTimeSlice extends AbstractLocalSyncWorker { - - private Logger logger = LogManager.getFormatterLogger(NodeSearchWithTimeSlice.class); - - private NodeSearchWithTimeSlice(Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) { - super(role, clusterContext, selfContext); - } - - @Override - public void onWork(Object request, Object response) throws Exception { - if (request instanceof RequestEntity) { - RequestEntity search = (RequestEntity) request; - - SearchRequestBuilder searchRequestBuilder = EsClient.getClient().prepareSearch(NodeIndex.Index); - searchRequestBuilder.setTypes(search.getSliceType()); - searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH); - searchRequestBuilder.setQuery(QueryBuilders.rangeQuery(NodeIndex.Time_Slice).gte(search.getStartTime()).lte(search.getEndTime())); - searchRequestBuilder.setSize(0); - - AggregationBuilder aggregation = AggregationBuilders.terms(NodeIndex.AGG_COLUMN).field(NodeIndex.AGG_COLUMN); - aggregation.subAggregation(AggregationBuilders.topHits(NodeIndex.Top_One).size(1)); - searchRequestBuilder.addAggregation(aggregation); - - SearchResponse searchResponse = searchRequestBuilder.execute().actionGet(); - - JsonArray nodeArray = new JsonArray(); - Terms agg = searchResponse.getAggregations().get(NodeIndex.AGG_COLUMN); - for (Terms.Bucket entry : agg.getBuckets()) { - TopHits topHits = entry.getAggregations().get(NodeIndex.Top_One); - for (SearchHit hit : topHits.getHits().getHits()) { - logger.debug(" -> id [{%s}], _source [{%s}]", hit.getId(), hit.getSourceAsString()); - - JsonObject nodeObj = new JsonObject(); - nodeObj.addProperty(NodeIndex.Code, (String) hit.getSource().get(NodeIndex.Code)); - if (hit.getSource().containsKey(NodeIndex.Component)) { - nodeObj.addProperty(NodeIndex.Component, (String) hit.getSource().get(NodeIndex.Component)); - } - nodeObj.addProperty(NodeIndex.NickName, (String) hit.getSource().get(NodeIndex.NickName)); - nodeObj.addProperty(NodeIndex.Time_Slice, (Long) hit.getSource().get(NodeIndex.Time_Slice)); - nodeArray.add(nodeObj); - } - } - - JsonObject resJsonObj = (JsonObject) response; - resJsonObj.add("result", nodeArray); - } else { - throw new IllegalArgumentException("message instance must be RequestEntity"); - } - } - - public static class RequestEntity extends TimeSlice { - public RequestEntity(String sliceType, long startTime, long endTime) { - super(sliceType, startTime, endTime); - } - } - - public static class Factory extends AbstractLocalSyncWorkerProvider { - public static Factory INSTANCE = new Factory(); - - @Override - public Role role() { - return WorkerRole.INSTANCE; - } - - @Override - public NodeSearchWithTimeSlice workerInstance(ClusterWorkerContext clusterContext) { - return new NodeSearchWithTimeSlice(role(), clusterContext, new LocalWorkerContext()); - } - } - - public enum WorkerRole implements Role { - INSTANCE; - - @Override - public String roleName() { - return NodeSearchWithTimeSlice.class.getSimpleName(); - } - - @Override - public WorkerSelector workerSelector() { - return new RollingSelector(); - } - } -} diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/NodeInstGetWithTimeSlice.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/NodeInstGetWithTimeSlice.java deleted file mode 100644 index 1539e6ec2..000000000 --- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/NodeInstGetWithTimeSlice.java +++ /dev/null @@ -1,94 +0,0 @@ -package com.a.eye.skywalking.collector.worker.nodeinst; - -import com.a.eye.skywalking.collector.actor.ClusterWorkerContext; -import com.a.eye.skywalking.collector.actor.LocalWorkerContext; -import com.a.eye.skywalking.collector.actor.ProviderNotFoundException; -import com.a.eye.skywalking.collector.actor.Role; -import com.a.eye.skywalking.collector.actor.selector.RollingSelector; -import com.a.eye.skywalking.collector.actor.selector.WorkerSelector; -import com.a.eye.skywalking.collector.worker.httpserver.AbstractGet; -import com.a.eye.skywalking.collector.worker.httpserver.AbstractGetProvider; -import com.a.eye.skywalking.collector.worker.nodeinst.persistence.NodeInstSearchWithTimeSlice; -import com.a.eye.skywalking.collector.worker.tools.ParameterTools; -import com.google.gson.JsonObject; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - -import java.util.Arrays; -import java.util.Map; - -/** - * @author pengys5 - */ -public class NodeInstGetWithTimeSlice extends AbstractGet { - - private Logger logger = LogManager.getFormatterLogger(NodeInstGetWithTimeSlice.class); - - private NodeInstGetWithTimeSlice(Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) { - super(role, clusterContext, selfContext); - } - - @Override - public void preStart() throws ProviderNotFoundException { - getClusterContext().findProvider(NodeInstSearchWithTimeSlice.WorkerRole.INSTANCE).create(this); - } - - @Override - protected void onSearch(Map request, JsonObject response) throws Exception { - if (!request.containsKey("startTime") || !request.containsKey("endTime") || !request.containsKey("timeSliceType")) { - throw new IllegalArgumentException("the request parameter must contains startTime,endTime,timeSliceType"); - } - logger.debug("startTime: %s, endTime: %s, timeSliceType: %s", Arrays.toString(request.get("startTime")), - Arrays.toString(request.get("endTime")), Arrays.toString(request.get("timeSliceType"))); - - long startTime; - try { - startTime = Long.valueOf(ParameterTools.toString(request, "startTime")); - } catch (NumberFormatException e) { - throw new IllegalArgumentException("the request parameter startTime must numeric with long type"); - } - - long endTime; - try { - endTime = Long.valueOf(ParameterTools.toString(request, "endTime")); - } catch (NumberFormatException e) { - throw new IllegalArgumentException("the request parameter endTime must numeric with long type"); - } - - NodeInstSearchWithTimeSlice.RequestEntity requestEntity; - requestEntity = new NodeInstSearchWithTimeSlice.RequestEntity(ParameterTools.toString(request, "timeSliceType"), startTime, endTime); - getSelfContext().lookup(NodeInstSearchWithTimeSlice.WorkerRole.INSTANCE).ask(requestEntity, response); - } - - public static class Factory extends AbstractGetProvider { - - @Override - public Role role() { - return WorkerRole.INSTANCE; - } - - @Override - public NodeInstGetWithTimeSlice workerInstance(ClusterWorkerContext clusterContext) { - return new NodeInstGetWithTimeSlice(role(), clusterContext, new LocalWorkerContext()); - } - - @Override - public String servletPath() { - return "/nodeInst/timeSlice"; - } - } - - public enum WorkerRole implements Role { - INSTANCE; - - @Override - public String roleName() { - return NodeInstGetWithTimeSlice.class.getSimpleName(); - } - - @Override - public WorkerSelector workerSelector() { - return new RollingSelector(); - } - } -} diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/NodeInstSummaryGetWithTimeSlice.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/NodeInstSummaryGetWithTimeSlice.java deleted file mode 100644 index 5534723af..000000000 --- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/NodeInstSummaryGetWithTimeSlice.java +++ /dev/null @@ -1,94 +0,0 @@ -package com.a.eye.skywalking.collector.worker.nodeinst; - -import com.a.eye.skywalking.collector.actor.ClusterWorkerContext; -import com.a.eye.skywalking.collector.actor.LocalWorkerContext; -import com.a.eye.skywalking.collector.actor.ProviderNotFoundException; -import com.a.eye.skywalking.collector.actor.Role; -import com.a.eye.skywalking.collector.actor.selector.RollingSelector; -import com.a.eye.skywalking.collector.actor.selector.WorkerSelector; -import com.a.eye.skywalking.collector.worker.httpserver.AbstractGet; -import com.a.eye.skywalking.collector.worker.httpserver.AbstractGetProvider; -import com.a.eye.skywalking.collector.worker.nodeinst.persistence.NodeInstSummarySearchWithTimeSlice; -import com.a.eye.skywalking.collector.worker.tools.ParameterTools; -import com.google.gson.JsonObject; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - -import java.util.Arrays; -import java.util.Map; - -/** - * @author pengys5 - */ -public class NodeInstSummaryGetWithTimeSlice extends AbstractGet { - - private Logger logger = LogManager.getFormatterLogger(NodeInstSummaryGetWithTimeSlice.class); - - private NodeInstSummaryGetWithTimeSlice(Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) { - super(role, clusterContext, selfContext); - } - - @Override - public void preStart() throws ProviderNotFoundException { - getClusterContext().findProvider(NodeInstSummarySearchWithTimeSlice.WorkerRole.INSTANCE).create(this); - } - - @Override - protected void onSearch(Map request, JsonObject response) throws Exception { - if (!request.containsKey("startTime") || !request.containsKey("endTime") || !request.containsKey("timeSliceType")) { - throw new IllegalArgumentException("the request parameter must contains startTime,endTime,timeSliceType"); - } - logger.debug("startTime: %s, endTime: %s, timeSliceType: %s", Arrays.toString(request.get("startTime")), - Arrays.toString(request.get("endTime")), Arrays.toString(request.get("timeSliceType"))); - - long startTime; - try { - startTime = Long.valueOf(ParameterTools.toString(request, "startTime")); - } catch (NumberFormatException e) { - throw new IllegalArgumentException("the request parameter startTime must numeric with long type"); - } - - long endTime; - try { - endTime = Long.valueOf(ParameterTools.toString(request, "endTime")); - } catch (NumberFormatException e) { - throw new IllegalArgumentException("the request parameter endTime must numeric with long type"); - } - - NodeInstSummarySearchWithTimeSlice.RequestEntity requestEntity; - requestEntity = new NodeInstSummarySearchWithTimeSlice.RequestEntity(ParameterTools.toString(request, "timeSliceType"), startTime, endTime); - getSelfContext().lookup(NodeInstSummarySearchWithTimeSlice.WorkerRole.INSTANCE).ask(requestEntity, response); - } - - public static class Factory extends AbstractGetProvider { - - @Override - public Role role() { - return WorkerRole.INSTANCE; - } - - @Override - public NodeInstSummaryGetWithTimeSlice workerInstance(ClusterWorkerContext clusterContext) { - return new NodeInstSummaryGetWithTimeSlice(role(), clusterContext, new LocalWorkerContext()); - } - - @Override - public String servletPath() { - return "/nodeInst/summary/timeSlice"; - } - } - - public enum WorkerRole implements Role { - INSTANCE; - - @Override - public String roleName() { - return NodeInstSummaryGetWithTimeSlice.class.getSimpleName(); - } - - @Override - public WorkerSelector workerSelector() { - return new RollingSelector(); - } - } -} diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/analysis/AbstractNodeInstAnalysis.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/analysis/AbstractNodeInstAnalysis.java deleted file mode 100644 index ce5ab2b94..000000000 --- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/analysis/AbstractNodeInstAnalysis.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.a.eye.skywalking.collector.worker.nodeinst.analysis; - -import com.a.eye.skywalking.collector.actor.ClusterWorkerContext; -import com.a.eye.skywalking.collector.actor.LocalWorkerContext; -import com.a.eye.skywalking.collector.worker.Const; -import com.a.eye.skywalking.collector.worker.RecordAnalysisMember; -import com.a.eye.skywalking.collector.worker.nodeinst.NodeInstIndex; -import com.a.eye.skywalking.trace.Span; -import com.a.eye.skywalking.trace.TraceSegment; -import com.a.eye.skywalking.trace.tag.Tags; -import com.google.gson.JsonObject; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - -import java.util.List; - -/** - * @author pengys5 - */ -abstract class AbstractNodeInstAnalysis extends RecordAnalysisMember { - - private Logger logger = LogManager.getFormatterLogger(AbstractNodeInstAnalysis.class); - - AbstractNodeInstAnalysis(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) { - super(role, clusterContext, selfContext); - } - - void analyseSpans(TraceSegment segment, long timeSlice) throws Exception { - List spanList = segment.getSpans(); - if (spanList != null && spanList.size() > 0) { - for (Span span : spanList) { - if (span.getParentSpanId() == -1) { - String code = segment.getApplicationCode(); - String kind = Tags.SPAN_KIND.get(span); - String component = Tags.COMPONENT.get(span); - String url = Tags.URL.get(span); -// url = UrlTools.parse(url, component); - - JsonObject dataJsonObj = new JsonObject(); - dataJsonObj.addProperty(NodeInstIndex.Code, code); - dataJsonObj.addProperty(NodeInstIndex.Kind, kind); - dataJsonObj.addProperty(NodeInstIndex.Component, component); - dataJsonObj.addProperty(NodeInstIndex.Address, url); - dataJsonObj.addProperty(NodeInstIndex.Time_Slice, timeSlice); - - String id = timeSlice + Const.ID_SPLIT + url; - setRecord(id, dataJsonObj); - logger.debug("node instance: %s", dataJsonObj.toString()); - - break; - } - } - } - } -} diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/analysis/NodeInstHourAnalysis.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/analysis/NodeInstHourAnalysis.java deleted file mode 100644 index 4f2a4ddd7..000000000 --- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/analysis/NodeInstHourAnalysis.java +++ /dev/null @@ -1,76 +0,0 @@ -package com.a.eye.skywalking.collector.worker.nodeinst.analysis; - -import com.a.eye.skywalking.collector.actor.AbstractLocalAsyncWorkerProvider; -import com.a.eye.skywalking.collector.actor.ClusterWorkerContext; -import com.a.eye.skywalking.collector.actor.LocalWorkerContext; -import com.a.eye.skywalking.collector.actor.selector.RollingSelector; -import com.a.eye.skywalking.collector.actor.selector.WorkerSelector; -import com.a.eye.skywalking.collector.worker.WorkerConfig; -import com.a.eye.skywalking.collector.worker.nodeinst.persistence.NodeInstHourAgg; -import com.a.eye.skywalking.collector.worker.segment.SegmentPost; -import com.a.eye.skywalking.collector.worker.storage.RecordData; -import com.a.eye.skywalking.trace.TraceSegment; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - -/** - * @author pengys5 - */ -public class NodeInstHourAnalysis extends AbstractNodeInstAnalysis { - - private Logger logger = LogManager.getFormatterLogger(NodeInstHourAnalysis.class); - - public NodeInstHourAnalysis(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) { - super(role, clusterContext, selfContext); - } - - @Override - public void analyse(Object message) throws Exception { - if (message instanceof SegmentPost.SegmentWithTimeSlice) { - SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice = (SegmentPost.SegmentWithTimeSlice) message; - TraceSegment segment = segmentWithTimeSlice.getTraceSegment(); - analyseSpans(segment, segmentWithTimeSlice.getHour()); - } - } - - @Override - protected void aggregation() throws Exception { - RecordData oneRecord; - while ((oneRecord = pushOne()) != null) { - getClusterContext().lookup(NodeInstHourAgg.Role.INSTANCE).tell(oneRecord); - } - } - - public static class Factory extends AbstractLocalAsyncWorkerProvider { - public static Factory INSTANCE = new Factory(); - - @Override - public Role role() { - return Role.INSTANCE; - } - - @Override - public NodeInstHourAnalysis workerInstance(ClusterWorkerContext clusterContext) { - return new NodeInstHourAnalysis(role(), clusterContext, new LocalWorkerContext()); - } - - @Override - public int queueSize() { - return WorkerConfig.Queue.NodeInstanceAnalysis.Size; - } - } - - public enum Role implements com.a.eye.skywalking.collector.actor.Role { - INSTANCE; - - @Override - public String roleName() { - return NodeInstHourAnalysis.class.getSimpleName(); - } - - @Override - public WorkerSelector workerSelector() { - return new RollingSelector(); - } - } -} diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/analysis/NodeInstMinuteAnalysis.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/analysis/NodeInstMinuteAnalysis.java deleted file mode 100644 index 128150e58..000000000 --- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/analysis/NodeInstMinuteAnalysis.java +++ /dev/null @@ -1,76 +0,0 @@ -package com.a.eye.skywalking.collector.worker.nodeinst.analysis; - -import com.a.eye.skywalking.collector.actor.AbstractLocalAsyncWorkerProvider; -import com.a.eye.skywalking.collector.actor.ClusterWorkerContext; -import com.a.eye.skywalking.collector.actor.LocalWorkerContext; -import com.a.eye.skywalking.collector.actor.selector.RollingSelector; -import com.a.eye.skywalking.collector.actor.selector.WorkerSelector; -import com.a.eye.skywalking.collector.worker.WorkerConfig; -import com.a.eye.skywalking.collector.worker.nodeinst.persistence.NodeInstMinuteAgg; -import com.a.eye.skywalking.collector.worker.segment.SegmentPost; -import com.a.eye.skywalking.collector.worker.storage.RecordData; -import com.a.eye.skywalking.trace.TraceSegment; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - -/** - * @author pengys5 - */ -public class NodeInstMinuteAnalysis extends AbstractNodeInstAnalysis { - - private Logger logger = LogManager.getFormatterLogger(NodeInstMinuteAnalysis.class); - - public NodeInstMinuteAnalysis(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) { - super(role, clusterContext, selfContext); - } - - @Override - public void analyse(Object message) throws Exception { - if (message instanceof SegmentPost.SegmentWithTimeSlice) { - SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice = (SegmentPost.SegmentWithTimeSlice) message; - TraceSegment segment = segmentWithTimeSlice.getTraceSegment(); - analyseSpans(segment, segmentWithTimeSlice.getMinute()); - } - } - - @Override - protected void aggregation() throws Exception { - RecordData oneRecord; - while ((oneRecord = pushOne()) != null) { - getClusterContext().lookup(NodeInstMinuteAgg.Role.INSTANCE).tell(oneRecord); - } - } - - public static class Factory extends AbstractLocalAsyncWorkerProvider { - public static Factory INSTANCE = new Factory(); - - @Override - public Role role() { - return Role.INSTANCE; - } - - @Override - public NodeInstMinuteAnalysis workerInstance(ClusterWorkerContext clusterContext) { - return new NodeInstMinuteAnalysis(role(), clusterContext, new LocalWorkerContext()); - } - - @Override - public int queueSize() { - return WorkerConfig.Queue.NodeInstanceAnalysis.Size; - } - } - - public enum Role implements com.a.eye.skywalking.collector.actor.Role { - INSTANCE; - - @Override - public String roleName() { - return NodeInstMinuteAnalysis.class.getSimpleName(); - } - - @Override - public WorkerSelector workerSelector() { - return new RollingSelector(); - } - } -} diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/persistence/NodeInstDayAgg.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/persistence/NodeInstDayAgg.java deleted file mode 100644 index 7c270e830..000000000 --- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/persistence/NodeInstDayAgg.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.a.eye.skywalking.collector.worker.nodeinst.persistence; - -import com.a.eye.skywalking.collector.actor.*; -import com.a.eye.skywalking.collector.actor.selector.HashCodeSelector; -import com.a.eye.skywalking.collector.actor.selector.WorkerSelector; -import com.a.eye.skywalking.collector.worker.WorkerConfig; -import com.a.eye.skywalking.collector.worker.storage.RecordData; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - -/** - * @author pengys5 - */ -public class NodeInstDayAgg extends AbstractClusterWorker { - - private Logger logger = LogManager.getFormatterLogger(NodeInstDayAgg.class); - - public NodeInstDayAgg(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) { - super(role, clusterContext, selfContext); - } - - @Override - public void preStart() throws ProviderNotFoundException { - getClusterContext().findProvider(NodeInstDaySave.Role.INSTANCE).create(this); - } - - @Override - protected void onWork(Object message) throws Exception { - if (message instanceof RecordData) { - getSelfContext().lookup(NodeInstDaySave.Role.INSTANCE).tell(message); - } else { - logger.error("message unhandled"); - } - } - - public static class Factory extends AbstractClusterWorkerProvider { - public static Factory INSTANCE = new Factory(); - - @Override - public Role role() { - return Role.INSTANCE; - } - - @Override - public NodeInstDayAgg workerInstance(ClusterWorkerContext clusterContext) { - return new NodeInstDayAgg(role(), clusterContext, new LocalWorkerContext()); - } - - @Override - public int workerNum() { - return WorkerConfig.Worker.NodeInstanceReceiver.Num; - } - } - - public enum Role implements com.a.eye.skywalking.collector.actor.Role { - INSTANCE; - - @Override - public String roleName() { - return NodeInstDayAgg.class.getSimpleName(); - } - - @Override - public WorkerSelector workerSelector() { - return new HashCodeSelector(); - } - } -} diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/persistence/NodeInstHourAgg.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/persistence/NodeInstHourAgg.java deleted file mode 100644 index 005b42c87..000000000 --- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/persistence/NodeInstHourAgg.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.a.eye.skywalking.collector.worker.nodeinst.persistence; - -import com.a.eye.skywalking.collector.actor.*; -import com.a.eye.skywalking.collector.actor.selector.HashCodeSelector; -import com.a.eye.skywalking.collector.actor.selector.WorkerSelector; -import com.a.eye.skywalking.collector.worker.WorkerConfig; -import com.a.eye.skywalking.collector.worker.storage.RecordData; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - -/** - * @author pengys5 - */ -public class NodeInstHourAgg extends AbstractClusterWorker { - - private Logger logger = LogManager.getFormatterLogger(NodeInstHourAgg.class); - - public NodeInstHourAgg(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) { - super(role, clusterContext, selfContext); - } - - @Override - public void preStart() throws ProviderNotFoundException { - getClusterContext().findProvider(NodeInstHourSave.Role.INSTANCE).create(this); - } - - @Override - protected void onWork(Object message) throws Exception { - if (message instanceof RecordData) { - getSelfContext().lookup(NodeInstHourSave.Role.INSTANCE).tell(message); - } else { - logger.error("message unhandled"); - } - } - - public static class Factory extends AbstractClusterWorkerProvider { - public static Factory INSTANCE = new Factory(); - - @Override - public Role role() { - return Role.INSTANCE; - } - - @Override - public NodeInstHourAgg workerInstance(ClusterWorkerContext clusterContext) { - return new NodeInstHourAgg(role(), clusterContext, new LocalWorkerContext()); - } - - @Override - public int workerNum() { - return WorkerConfig.Worker.NodeInstanceReceiver.Num; - } - } - - public enum Role implements com.a.eye.skywalking.collector.actor.Role { - INSTANCE; - - @Override - public String roleName() { - return NodeInstHourAgg.class.getSimpleName(); - } - - @Override - public WorkerSelector workerSelector() { - return new HashCodeSelector(); - } - } -} diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/persistence/NodeInstHourSave.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/persistence/NodeInstHourSave.java deleted file mode 100644 index c9de5e5f2..000000000 --- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/persistence/NodeInstHourSave.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.a.eye.skywalking.collector.worker.nodeinst.persistence; - -import com.a.eye.skywalking.collector.actor.AbstractLocalAsyncWorkerProvider; -import com.a.eye.skywalking.collector.actor.ClusterWorkerContext; -import com.a.eye.skywalking.collector.actor.LocalWorkerContext; -import com.a.eye.skywalking.collector.actor.selector.HashCodeSelector; -import com.a.eye.skywalking.collector.actor.selector.WorkerSelector; -import com.a.eye.skywalking.collector.worker.RecordPersistenceMember; -import com.a.eye.skywalking.collector.worker.WorkerConfig; -import com.a.eye.skywalking.collector.worker.nodeinst.NodeInstIndex; - -/** - * @author pengys5 - */ -public class NodeInstHourSave extends RecordPersistenceMember { - - public NodeInstHourSave(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) { - super(role, clusterContext, selfContext); - } - - @Override - public String esIndex() { - return NodeInstIndex.Index; - } - - @Override - public String esType() { - return NodeInstIndex.Type_Hour; - } - - public static class Factory extends AbstractLocalAsyncWorkerProvider { - public static Factory INSTANCE = new Factory(); - - @Override - public Role role() { - return Role.INSTANCE; - } - - @Override - public NodeInstHourSave workerInstance(ClusterWorkerContext clusterContext) { - return new NodeInstHourSave(role(), clusterContext, new LocalWorkerContext()); - } - - @Override - public int queueSize() { - return WorkerConfig.Queue.Persistence.NodeInstancePersistence.Size; - } - } - - public enum Role implements com.a.eye.skywalking.collector.actor.Role { - INSTANCE; - - @Override - public String roleName() { - return NodeInstHourSave.class.getSimpleName(); - } - - @Override - public WorkerSelector workerSelector() { - return new HashCodeSelector(); - } - } -} diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/persistence/NodeInstMinuteSave.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/persistence/NodeInstMinuteSave.java deleted file mode 100644 index 9084aa28e..000000000 --- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/persistence/NodeInstMinuteSave.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.a.eye.skywalking.collector.worker.nodeinst.persistence; - -import com.a.eye.skywalking.collector.actor.AbstractLocalAsyncWorkerProvider; -import com.a.eye.skywalking.collector.actor.ClusterWorkerContext; -import com.a.eye.skywalking.collector.actor.LocalWorkerContext; -import com.a.eye.skywalking.collector.actor.selector.HashCodeSelector; -import com.a.eye.skywalking.collector.actor.selector.WorkerSelector; -import com.a.eye.skywalking.collector.worker.RecordPersistenceMember; -import com.a.eye.skywalking.collector.worker.WorkerConfig; -import com.a.eye.skywalking.collector.worker.nodeinst.NodeInstIndex; - -/** - * @author pengys5 - */ -public class NodeInstMinuteSave extends RecordPersistenceMember { - - public NodeInstMinuteSave(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) { - super(role, clusterContext, selfContext); - } - - @Override - public String esIndex() { - return NodeInstIndex.Index; - } - - @Override - public String esType() { - return NodeInstIndex.Type_Minute; - } - - public static class Factory extends AbstractLocalAsyncWorkerProvider { - public static Factory INSTANCE = new Factory(); - - @Override - public Role role() { - return Role.INSTANCE; - } - - @Override - public NodeInstMinuteSave workerInstance(ClusterWorkerContext clusterContext) { - return new NodeInstMinuteSave(role(), clusterContext, new LocalWorkerContext()); - } - - @Override - public int queueSize() { - return WorkerConfig.Queue.Persistence.NodeInstancePersistence.Size; - } - } - - public enum Role implements com.a.eye.skywalking.collector.actor.Role { - INSTANCE; - - @Override - public String roleName() { - return NodeInstMinuteSave.class.getSimpleName(); - } - - @Override - public WorkerSelector workerSelector() { - return new HashCodeSelector(); - } - } -} diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/persistence/NodeInstSearchWithTimeSlice.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/persistence/NodeInstSearchWithTimeSlice.java deleted file mode 100644 index 99523e227..000000000 --- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/persistence/NodeInstSearchWithTimeSlice.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.a.eye.skywalking.collector.worker.nodeinst.persistence; - -import com.a.eye.skywalking.collector.actor.*; -import com.a.eye.skywalking.collector.actor.selector.RollingSelector; -import com.a.eye.skywalking.collector.actor.selector.WorkerSelector; -import com.a.eye.skywalking.collector.worker.TimeSlice; -import com.a.eye.skywalking.collector.worker.nodeinst.NodeInstIndex; -import com.a.eye.skywalking.collector.worker.storage.EsClient; -import com.google.gson.JsonArray; -import com.google.gson.JsonObject; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -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.SearchHit; - -/** - * @author pengys5 - */ -public class NodeInstSearchWithTimeSlice extends AbstractLocalSyncWorker { - - private Logger logger = LogManager.getFormatterLogger(NodeInstSearchWithTimeSlice.class); - - public NodeInstSearchWithTimeSlice(Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) { - super(role, clusterContext, selfContext); - } - - @Override - public void onWork(Object request, Object response) throws Exception { - if (request instanceof RequestEntity) { - RequestEntity search = (RequestEntity) request; - SearchRequestBuilder searchRequestBuilder = EsClient.getClient().prepareSearch(NodeInstIndex.Index); - searchRequestBuilder.setTypes(search.getSliceType()); - searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH); - searchRequestBuilder.setQuery(QueryBuilders.rangeQuery(NodeInstIndex.Time_Slice).gte(search.getStartTime()).lte(search.getEndTime())); - SearchResponse searchResponse = searchRequestBuilder.execute().actionGet(); - - SearchHit[] hits = searchResponse.getHits().getHits(); - logger.debug("dag node list size: %s", hits.length); - - JsonArray nodeInstArray = new JsonArray(); - for (SearchHit hit : searchResponse.getHits().getHits()) { - JsonObject nodeInstObj = new JsonObject(); - nodeInstObj.addProperty("code", (String) hit.getSource().get("code")); - nodeInstObj.addProperty("clientCode", (String) hit.getSource().get("clientCode")); - nodeInstObj.addProperty("kind", (String) hit.getSource().get("kind")); - nodeInstObj.addProperty("component", (String) hit.getSource().get("component")); - nodeInstObj.addProperty("address", (String) hit.getSource().get("address")); - nodeInstObj.addProperty("timeSlice", (Long) hit.getSource().get("timeSlice")); - nodeInstArray.add(nodeInstObj); - } - - JsonObject resJsonObj = (JsonObject) response; - resJsonObj.add("result", nodeInstArray); - } else { - throw new IllegalArgumentException("message instance must be RequestEntity"); - } - } - - public static class RequestEntity extends TimeSlice { - public RequestEntity(String sliceType, long startTime, long endTime) { - super(sliceType, startTime, endTime); - } - } - - public static class Factory extends AbstractLocalSyncWorkerProvider { - public static Factory INSTANCE = new Factory(); - - @Override - public Role role() { - return WorkerRole.INSTANCE; - } - - @Override - public NodeInstSearchWithTimeSlice workerInstance(ClusterWorkerContext clusterContext) { - return new NodeInstSearchWithTimeSlice(role(), clusterContext, new LocalWorkerContext()); - } - } - - public enum WorkerRole implements Role { - INSTANCE; - - @Override - public String roleName() { - return NodeInstSearchWithTimeSlice.class.getSimpleName(); - } - - @Override - public WorkerSelector workerSelector() { - return new RollingSelector(); - } - } -} diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/NodeRefGetWithTimeSlice.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/NodeRefGetWithTimeSlice.java index d7ef9d57d..d02326b7a 100644 --- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/NodeRefGetWithTimeSlice.java +++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/NodeRefGetWithTimeSlice.java @@ -43,20 +43,20 @@ public class NodeRefGetWithTimeSlice extends AbstractGet { long startTime; try { - startTime = Long.valueOf(ParameterTools.toString(request, "startTime")); + startTime = Long.valueOf(ParameterTools.INSTANCE.toString(request, "startTime")); } catch (NumberFormatException e) { throw new IllegalArgumentException("the request parameter startTime must numeric with long type"); } long endTime; try { - endTime = Long.valueOf(ParameterTools.toString(request, "endTime")); + endTime = Long.valueOf(ParameterTools.INSTANCE.toString(request, "endTime")); } catch (NumberFormatException e) { throw new IllegalArgumentException("the request parameter endTime must numeric with long type"); } NodeRefSearchWithTimeSlice.RequestEntity requestEntity; - requestEntity = new NodeRefSearchWithTimeSlice.RequestEntity(ParameterTools.toString(request, "timeSliceType"), startTime, endTime); + requestEntity = new NodeRefSearchWithTimeSlice.RequestEntity(ParameterTools.INSTANCE.toString(request, "timeSliceType"), startTime, endTime); getSelfContext().lookup(NodeRefSearchWithTimeSlice.WorkerRole.INSTANCE).ask(requestEntity, response); } diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/NodeRefResSumGetGroupWithTimeSlice.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/NodeRefResSumGetGroupWithTimeSlice.java index 3268b7b18..734005b2c 100644 --- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/NodeRefResSumGetGroupWithTimeSlice.java +++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/NodeRefResSumGetGroupWithTimeSlice.java @@ -43,20 +43,20 @@ public class NodeRefResSumGetGroupWithTimeSlice extends AbstractGet { long startTime; try { - startTime = Long.valueOf(ParameterTools.toString(request, "startTime")); + startTime = Long.valueOf(ParameterTools.INSTANCE.toString(request, "startTime")); } catch (NumberFormatException e) { throw new IllegalArgumentException("the request parameter startTime must numeric with long type"); } long endTime; try { - endTime = Long.valueOf(ParameterTools.toString(request, "endTime")); + endTime = Long.valueOf(ParameterTools.INSTANCE.toString(request, "endTime")); } catch (NumberFormatException e) { throw new IllegalArgumentException("the request parameter endTime must numeric with long type"); } NodeRefResSumGroupWithTimeSlice.RequestEntity requestEntity; - requestEntity = new NodeRefResSumGroupWithTimeSlice.RequestEntity(ParameterTools.toString(request, "timeSliceType"), startTime, endTime); + requestEntity = new NodeRefResSumGroupWithTimeSlice.RequestEntity(ParameterTools.INSTANCE.toString(request, "timeSliceType"), startTime, endTime); getSelfContext().lookup(NodeRefResSumGroupWithTimeSlice.WorkerRole.INSTANCE).ask(requestEntity, response); } diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/NodeRefResSumGetWithTimeSlice.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/NodeRefResSumGetWithTimeSlice.java index de025741d..758ddda51 100644 --- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/NodeRefResSumGetWithTimeSlice.java +++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/NodeRefResSumGetWithTimeSlice.java @@ -43,20 +43,20 @@ public class NodeRefResSumGetWithTimeSlice extends AbstractGet { long startTime; try { - startTime = Long.valueOf(ParameterTools.toString(request, "startTime")); + startTime = Long.valueOf(ParameterTools.INSTANCE.toString(request, "startTime")); } catch (NumberFormatException e) { throw new IllegalArgumentException("the request parameter startTime must numeric with long type"); } long endTime; try { - endTime = Long.valueOf(ParameterTools.toString(request, "endTime")); + endTime = Long.valueOf(ParameterTools.INSTANCE.toString(request, "endTime")); } catch (NumberFormatException e) { throw new IllegalArgumentException("the request parameter endTime must numeric with long type"); } NodeRefResSumSearchWithTimeSlice.RequestEntity requestEntity; - requestEntity = new NodeRefResSumSearchWithTimeSlice.RequestEntity(ParameterTools.toString(request, "timeSliceType"), startTime, endTime); + requestEntity = new NodeRefResSumSearchWithTimeSlice.RequestEntity(ParameterTools.INSTANCE.toString(request, "timeSliceType"), startTime, endTime); getSelfContext().lookup(NodeRefResSumSearchWithTimeSlice.WorkerRole.INSTANCE).ask(requestEntity, response); } diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/analysis/AbstractNodeRefAnalysis.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/analysis/AbstractNodeRefAnalysis.java index 180571bf8..3046c5006 100644 --- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/analysis/AbstractNodeRefAnalysis.java +++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/analysis/AbstractNodeRefAnalysis.java @@ -10,7 +10,6 @@ import com.a.eye.skywalking.collector.worker.tools.CollectionTools; import com.a.eye.skywalking.collector.worker.tools.SpanPeersTools; import com.a.eye.skywalking.trace.Span; import com.a.eye.skywalking.trace.TraceSegment; -import com.a.eye.skywalking.trace.TraceSegmentRef; import com.a.eye.skywalking.trace.tag.Tags; import com.google.gson.JsonObject; import org.apache.logging.log4j.LogManager; @@ -34,7 +33,6 @@ abstract class AbstractNodeRefAnalysis extends RecordAnalysisMember { if (CollectionTools.isNotEmpty(spanList)) { for (Span span : spanList) { JsonObject dataJsonObj = new JsonObject(); - String component = Tags.COMPONENT.get(span); dataJsonObj.addProperty(NodeRefIndex.Time_Slice, timeSlice); dataJsonObj.addProperty(NodeRefIndex.FrontIsRealCode, true); dataJsonObj.addProperty(NodeRefIndex.BehindIsRealCode, true); @@ -62,22 +60,6 @@ abstract class AbstractNodeRefAnalysis extends RecordAnalysisMember { String id = timeSlice + Const.ID_SPLIT + front + Const.ID_SPLIT + behind; setRecord(id, dataJsonObj); buildNodeRefResRecordData(id, span, minute, hour, day, second); - } else if (span.getParentSpanId() == -1 && CollectionTools.isNotEmpty(segment.getRefs())) { - for (TraceSegmentRef segmentRef : segment.getRefs()) { - String front = segmentRef.getApplicationCode(); - String behind = Const.PEERS_FRONT_SPLIT + segmentRef.getPeerHost() + Const.PEERS_BEHIND_SPLIT; - String id = timeSlice + Const.ID_SPLIT + front + Const.ID_SPLIT + behind; - - JsonObject refDataJsonObj = new JsonObject(); - refDataJsonObj.addProperty(NodeRefIndex.Front, front); - refDataJsonObj.addProperty(NodeRefIndex.FrontIsRealCode, true); - refDataJsonObj.addProperty(NodeRefIndex.Behind, behind); - refDataJsonObj.addProperty(NodeRefIndex.BehindIsRealCode, false); - refDataJsonObj.addProperty(NodeRefIndex.Time_Slice, timeSlice); - logger.debug("dag node ref: %s", refDataJsonObj.toString()); - setRecord(id, refDataJsonObj); -// buildNodeRefResRecordData(id, span, minute, hour, day, second); - } } } } diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/analysis/NodeRefDayAnalysis.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/analysis/NodeRefDayAnalysis.java index 5879efd9e..1f1658375 100644 --- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/analysis/NodeRefDayAnalysis.java +++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/analysis/NodeRefDayAnalysis.java @@ -17,7 +17,7 @@ import com.a.eye.skywalking.trace.TraceSegment; */ public class NodeRefDayAnalysis extends AbstractNodeRefAnalysis { - private NodeRefDayAnalysis(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) { + protected NodeRefDayAnalysis(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) { super(role, clusterContext, selfContext); } @@ -70,7 +70,7 @@ public class NodeRefDayAnalysis extends AbstractNodeRefAnalysis { @Override public int queueSize() { - return WorkerConfig.Queue.DAGNodeRefAnalysis.Size; + return WorkerConfig.Queue.Node.NodeRefDayAnalysis.Size; } } diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/analysis/NodeRefHourAnalysis.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/analysis/NodeRefHourAnalysis.java index cba747870..02d27ff30 100644 --- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/analysis/NodeRefHourAnalysis.java +++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/analysis/NodeRefHourAnalysis.java @@ -17,7 +17,7 @@ import com.a.eye.skywalking.trace.TraceSegment; */ public class NodeRefHourAnalysis extends AbstractNodeRefAnalysis { - private NodeRefHourAnalysis(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) { + protected NodeRefHourAnalysis(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) { super(role, clusterContext, selfContext); } @@ -70,7 +70,7 @@ public class NodeRefHourAnalysis extends AbstractNodeRefAnalysis { @Override public int queueSize() { - return WorkerConfig.Queue.DAGNodeRefAnalysis.Size; + return WorkerConfig.Queue.Node.NodeRefHourAnalysis.Size; } } diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/analysis/NodeRefMinuteAnalysis.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/analysis/NodeRefMinuteAnalysis.java index ff1dddb23..c913d58f6 100644 --- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/analysis/NodeRefMinuteAnalysis.java +++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/analysis/NodeRefMinuteAnalysis.java @@ -17,7 +17,7 @@ import com.a.eye.skywalking.trace.TraceSegment; */ public class NodeRefMinuteAnalysis extends AbstractNodeRefAnalysis { - private NodeRefMinuteAnalysis(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) { + protected NodeRefMinuteAnalysis(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) { super(role, clusterContext, selfContext); } @@ -70,7 +70,7 @@ public class NodeRefMinuteAnalysis extends AbstractNodeRefAnalysis { @Override public int queueSize() { - return WorkerConfig.Queue.DAGNodeRefAnalysis.Size; + return WorkerConfig.Queue.Node.NodeRefMinuteAnalysis.Size; } } diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/persistence/NodeRefResSumGroupWithTimeSlice.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/persistence/NodeRefResSumGroupWithTimeSlice.java index 4c703e2d1..0a14de90a 100644 --- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/persistence/NodeRefResSumGroupWithTimeSlice.java +++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/persistence/NodeRefResSumGroupWithTimeSlice.java @@ -26,7 +26,7 @@ public class NodeRefResSumGroupWithTimeSlice extends AbstractLocalSyncWorker { private Logger logger = LogManager.getFormatterLogger(NodeRefResSumGroupWithTimeSlice.class); - private NodeRefResSumGroupWithTimeSlice(Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) { + NodeRefResSumGroupWithTimeSlice(Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) { super(role, clusterContext, selfContext); } diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/persistence/NodeRefResSumSearchWithTimeSlice.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/persistence/NodeRefResSumSearchWithTimeSlice.java index 28eef12a7..a3a41f234 100644 --- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/persistence/NodeRefResSumSearchWithTimeSlice.java +++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/persistence/NodeRefResSumSearchWithTimeSlice.java @@ -27,7 +27,7 @@ public class NodeRefResSumSearchWithTimeSlice extends AbstractLocalSyncWorker { private Logger logger = LogManager.getFormatterLogger(NodeRefResSumSearchWithTimeSlice.class); - private NodeRefResSumSearchWithTimeSlice(Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) { + NodeRefResSumSearchWithTimeSlice(Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) { super(role, clusterContext, selfContext); } diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/persistence/NodeRefSearchWithTimeSlice.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/persistence/NodeRefSearchWithTimeSlice.java index 10eb7df78..eeebdd49b 100644 --- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/persistence/NodeRefSearchWithTimeSlice.java +++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/persistence/NodeRefSearchWithTimeSlice.java @@ -3,6 +3,7 @@ package com.a.eye.skywalking.collector.worker.noderef.persistence; import com.a.eye.skywalking.collector.actor.*; import com.a.eye.skywalking.collector.actor.selector.RollingSelector; import com.a.eye.skywalking.collector.actor.selector.WorkerSelector; +import com.a.eye.skywalking.collector.worker.Const; import com.a.eye.skywalking.collector.worker.TimeSlice; import com.a.eye.skywalking.collector.worker.noderef.NodeRefIndex; import com.a.eye.skywalking.collector.worker.storage.EsClient; @@ -14,11 +15,8 @@ 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.SearchHit; -import org.elasticsearch.search.aggregations.AggregationBuilder; import org.elasticsearch.search.aggregations.AggregationBuilders; import org.elasticsearch.search.aggregations.bucket.terms.Terms; -import org.elasticsearch.search.aggregations.metrics.tophits.TopHits; /** * @author pengys5 @@ -27,7 +25,7 @@ public class NodeRefSearchWithTimeSlice extends AbstractLocalSyncWorker { private Logger logger = LogManager.getFormatterLogger(NodeRefSearchWithTimeSlice.class); - private NodeRefSearchWithTimeSlice(Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) { + NodeRefSearchWithTimeSlice(Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) { super(role, clusterContext, selfContext); } @@ -42,28 +40,25 @@ public class NodeRefSearchWithTimeSlice extends AbstractLocalSyncWorker { searchRequestBuilder.setQuery(QueryBuilders.rangeQuery(NodeRefIndex.Time_Slice).gte(search.getStartTime()).lte(search.getEndTime())); searchRequestBuilder.setSize(0); - AggregationBuilder aggregation = AggregationBuilders.terms(NodeRefIndex.AGG_COLUMN).field(NodeRefIndex.AGG_COLUMN); - aggregation.subAggregation(AggregationBuilders.topHits(NodeRefIndex.Top_One).size(1)); - searchRequestBuilder.addAggregation(aggregation); + searchRequestBuilder.addAggregation(AggregationBuilders.terms(NodeRefIndex.AGG_COLUMN).field(NodeRefIndex.AGG_COLUMN).size(100)); SearchResponse searchResponse = searchRequestBuilder.execute().actionGet(); - JsonArray nodeRefArray = new JsonArray(); - Terms agg = searchResponse.getAggregations().get(NodeRefIndex.AGG_COLUMN); - for (Terms.Bucket entry : agg.getBuckets()) { - TopHits topHits = entry.getAggregations().get(NodeRefIndex.Top_One); - for (SearchHit hit : topHits.getHits().getHits()) { - logger.debug(" -> id [{%s}], _source [{%s}]", hit.getId(), hit.getSourceAsString()); + Terms genders = searchResponse.getAggregations().get(NodeRefIndex.AGG_COLUMN); - JsonObject nodeRefObj = new JsonObject(); - nodeRefObj.addProperty(NodeRefIndex.Front, (String) hit.getSource().get(NodeRefIndex.Front)); - nodeRefObj.addProperty(NodeRefIndex.FrontIsRealCode, (Boolean) hit.getSource().get(NodeRefIndex.FrontIsRealCode)); - nodeRefObj.addProperty(NodeRefIndex.Behind, (String) hit.getSource().get(NodeRefIndex.Behind)); - nodeRefObj.addProperty(NodeRefIndex.BehindIsRealCode, (Boolean) hit.getSource().get(NodeRefIndex.BehindIsRealCode)); - nodeRefObj.addProperty(NodeRefIndex.Time_Slice, (Long) hit.getSource().get(NodeRefIndex.Time_Slice)); - nodeRefArray.add(nodeRefObj); - } + 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]; + + JsonObject nodeRefObj = new JsonObject(); + nodeRefObj.addProperty(NodeRefIndex.Front, front); + nodeRefObj.addProperty(NodeRefIndex.Behind, behind); + nodeRefArray.add(nodeRefObj); } + logger.debug("node ref data: %s", nodeRefArray.toString()); JsonObject resJsonObj = (JsonObject) response; resJsonObj.add("result", nodeRefArray); diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/segment/SegmentPost.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/segment/SegmentPost.java index ad9d50227..da1317929 100644 --- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/segment/SegmentPost.java +++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/segment/SegmentPost.java @@ -10,12 +10,7 @@ import com.a.eye.skywalking.collector.actor.selector.WorkerSelector; import com.a.eye.skywalking.collector.worker.globaltrace.analysis.GlobalTraceAnalysis; import com.a.eye.skywalking.collector.worker.httpserver.AbstractPost; import com.a.eye.skywalking.collector.worker.httpserver.AbstractPostProvider; -import com.a.eye.skywalking.collector.worker.node.analysis.NodeDayAnalysis; -import com.a.eye.skywalking.collector.worker.node.analysis.NodeHourAnalysis; -import com.a.eye.skywalking.collector.worker.node.analysis.NodeMinuteAnalysis; -import com.a.eye.skywalking.collector.worker.nodeinst.analysis.NodeInstDayAnalysis; -import com.a.eye.skywalking.collector.worker.nodeinst.analysis.NodeInstHourAnalysis; -import com.a.eye.skywalking.collector.worker.nodeinst.analysis.NodeInstMinuteAnalysis; +import com.a.eye.skywalking.collector.worker.node.analysis.*; import com.a.eye.skywalking.collector.worker.noderef.analysis.NodeRefDayAnalysis; import com.a.eye.skywalking.collector.worker.noderef.analysis.NodeRefHourAnalysis; import com.a.eye.skywalking.collector.worker.noderef.analysis.NodeRefMinuteAnalysis; @@ -51,6 +46,8 @@ public class SegmentPost extends AbstractPost { public void preStart() throws ProviderNotFoundException { getClusterContext().findProvider(GlobalTraceAnalysis.Role.INSTANCE).create(this); + getClusterContext().findProvider(NodeCompAnalysis.Role.INSTANCE).create(this); + getClusterContext().findProvider(SegmentSave.Role.INSTANCE).create(this); getClusterContext().findProvider(SegmentCostSave.Role.INSTANCE).create(this); getClusterContext().findProvider(SegmentExceptionSave.Role.INSTANCE).create(this); @@ -59,13 +56,9 @@ public class SegmentPost extends AbstractPost { getClusterContext().findProvider(NodeRefHourAnalysis.Role.INSTANCE).create(this); getClusterContext().findProvider(NodeRefDayAnalysis.Role.INSTANCE).create(this); - getClusterContext().findProvider(NodeMinuteAnalysis.Role.INSTANCE).create(this); - getClusterContext().findProvider(NodeHourAnalysis.Role.INSTANCE).create(this); - getClusterContext().findProvider(NodeDayAnalysis.Role.INSTANCE).create(this); - - getClusterContext().findProvider(NodeInstMinuteAnalysis.Role.INSTANCE).create(this); - getClusterContext().findProvider(NodeInstHourAnalysis.Role.INSTANCE).create(this); - getClusterContext().findProvider(NodeInstDayAnalysis.Role.INSTANCE).create(this); + getClusterContext().findProvider(NodeMappingDayAnalysis.Role.INSTANCE).create(this); + getClusterContext().findProvider(NodeMappingHourAnalysis.Role.INSTANCE).create(this); + getClusterContext().findProvider(NodeMappingMinuteAnalysis.Role.INSTANCE).create(this); } @Override @@ -95,9 +88,10 @@ public class SegmentPost extends AbstractPost { getSelfContext().lookup(GlobalTraceAnalysis.Role.INSTANCE).tell(segmentWithTimeSlice); getSelfContext().lookup(SegmentExceptionSave.Role.INSTANCE).tell(segmentWithTimeSlice); + getSelfContext().lookup(NodeCompAnalysis.Role.INSTANCE).tell(newSegment); + tellNodeRef(segmentWithTimeSlice); - tellNode(segmentWithTimeSlice); -// tellNodeInst(segmentWithTimeSlice); + tellNodeMapping(segmentWithTimeSlice); } } @@ -115,18 +109,12 @@ public class SegmentPost extends AbstractPost { getSelfContext().lookup(NodeRefDayAnalysis.Role.INSTANCE).tell(segmentWithTimeSlice); } - private void tellNode(SegmentWithTimeSlice segmentWithTimeSlice) throws Exception { - getSelfContext().lookup(NodeMinuteAnalysis.Role.INSTANCE).tell(segmentWithTimeSlice); - getSelfContext().lookup(NodeHourAnalysis.Role.INSTANCE).tell(segmentWithTimeSlice); - getSelfContext().lookup(NodeDayAnalysis.Role.INSTANCE).tell(segmentWithTimeSlice); + private void tellNodeMapping(SegmentWithTimeSlice segmentWithTimeSlice) throws Exception { + getSelfContext().lookup(NodeMappingMinuteAnalysis.Role.INSTANCE).tell(segmentWithTimeSlice); + getSelfContext().lookup(NodeMappingHourAnalysis.Role.INSTANCE).tell(segmentWithTimeSlice); + getSelfContext().lookup(NodeMappingDayAnalysis.Role.INSTANCE).tell(segmentWithTimeSlice); } -// private void tellNodeInst(SegmentWithTimeSlice segmentWithTimeSlice) throws Exception { -// getSelfContext().lookup(NodeInstMinuteAnalysis.Role.INSTANCE).tell(segmentWithTimeSlice); -// getSelfContext().lookup(NodeInstHourAnalysis.Role.INSTANCE).tell(segmentWithTimeSlice); -// getSelfContext().lookup(NodeInstDayAnalysis.Role.INSTANCE).tell(segmentWithTimeSlice); -// } - private void validateData(TraceSegment newSegment) { if (StringUtil.isEmpty(newSegment.getTraceSegmentId())) { throw new IllegalArgumentException("traceSegmentId required"); diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/segment/SegmentTopGetWithGlobalTraceId.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/segment/SegmentTopGetWithGlobalTraceId.java index bf19a2d83..f7f0a3746 100644 --- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/segment/SegmentTopGetWithGlobalTraceId.java +++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/segment/SegmentTopGetWithGlobalTraceId.java @@ -43,19 +43,19 @@ public class SegmentTopGetWithGlobalTraceId extends AbstractGet { int from = 0; try { - from = Integer.valueOf(ParameterTools.toString(request, "from")); + from = Integer.valueOf(ParameterTools.INSTANCE.toString(request, "from")); } catch (NumberFormatException e) { throw new IllegalArgumentException("the request parameter from must numeric with int type"); } int limit = 0; try { - limit = Integer.valueOf(ParameterTools.toString(request, "limit")); + limit = Integer.valueOf(ParameterTools.INSTANCE.toString(request, "limit")); } catch (NumberFormatException e) { throw new IllegalArgumentException("the request parameter from must numeric with int type"); } - String globalTraceId = ParameterTools.toString(request, "globalTraceId"); + String globalTraceId = ParameterTools.INSTANCE.toString(request, "globalTraceId"); SegmentTopSearchWithGlobalTraceId.RequestEntity requestEntity = new SegmentTopSearchWithGlobalTraceId.RequestEntity(globalTraceId, from, limit); getSelfContext().lookup(SegmentTopSearchWithGlobalTraceId.WorkerRole.INSTANCE).ask(requestEntity, response); diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/segment/SegmentTopGetWithTimeSlice.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/segment/SegmentTopGetWithTimeSlice.java index 999685f0e..b363f0640 100644 --- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/segment/SegmentTopGetWithTimeSlice.java +++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/segment/SegmentTopGetWithTimeSlice.java @@ -43,39 +43,39 @@ public class SegmentTopGetWithTimeSlice extends AbstractGet { long startTime; try { - startTime = Long.valueOf(ParameterTools.toString(request, "startTime")); + startTime = Long.valueOf(ParameterTools.INSTANCE.toString(request, "startTime")); } catch (NumberFormatException e) { throw new IllegalArgumentException("the request parameter startTime must numeric with long type"); } long endTime; try { - endTime = Long.valueOf(ParameterTools.toString(request, "endTime")); + endTime = Long.valueOf(ParameterTools.INSTANCE.toString(request, "endTime")); } catch (NumberFormatException e) { throw new IllegalArgumentException("the request parameter endTime must numeric with long type"); } int from = 0; try { - from = Integer.valueOf(ParameterTools.toString(request, "from")); + from = Integer.valueOf(ParameterTools.INSTANCE.toString(request, "from")); } catch (NumberFormatException e) { throw new IllegalArgumentException("the request parameter from must numeric with int type"); } int limit = 0; try { - limit = Integer.valueOf(ParameterTools.toString(request, "limit")); + limit = Integer.valueOf(ParameterTools.INSTANCE.toString(request, "limit")); } catch (NumberFormatException e) { throw new IllegalArgumentException("the request parameter from must numeric with int type"); } int minCost = -1; if (request.containsKey("minCost")) { - minCost = Integer.valueOf(ParameterTools.toString(request, "minCost")); + minCost = Integer.valueOf(ParameterTools.INSTANCE.toString(request, "minCost")); } int maxCost = -1; if (request.containsKey("maxCost")) { - maxCost = Integer.valueOf(ParameterTools.toString(request, "maxCost")); + maxCost = Integer.valueOf(ParameterTools.INSTANCE.toString(request, "maxCost")); } SegmentTopSearchWithTimeSlice.RequestEntity requestEntity; diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/segment/persistence/SegmentCostSave.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/segment/persistence/SegmentCostSave.java index 880b34335..9fe2cc6c4 100644 --- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/segment/persistence/SegmentCostSave.java +++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/segment/persistence/SegmentCostSave.java @@ -10,7 +10,6 @@ import com.a.eye.skywalking.collector.worker.RecordPersistenceMember; import com.a.eye.skywalking.collector.worker.WorkerConfig; import com.a.eye.skywalking.collector.worker.segment.SegmentCostIndex; import com.a.eye.skywalking.collector.worker.segment.SegmentPost; -import com.a.eye.skywalking.collector.worker.storage.AbstractIndex; import com.a.eye.skywalking.collector.worker.storage.RecordData; import com.a.eye.skywalking.collector.worker.tools.CollectionTools; import com.a.eye.skywalking.trace.Span; @@ -33,10 +32,10 @@ public class SegmentCostSave extends RecordPersistenceMember { @Override public String esType() { - return AbstractIndex.Type_Record; + return SegmentCostIndex.Type_Record; } - private SegmentCostSave(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) { + protected SegmentCostSave(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) { super(role, clusterContext, selfContext); } @@ -85,7 +84,7 @@ public class SegmentCostSave extends RecordPersistenceMember { @Override public int queueSize() { - return WorkerConfig.Queue.TraceSegmentRecordAnalysis.Size; + return WorkerConfig.Queue.Segment.SegmentCostSave.Size; } @Override diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/segment/persistence/SegmentExceptionSave.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/segment/persistence/SegmentExceptionSave.java index c52fe15b7..6caccfa10 100644 --- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/segment/persistence/SegmentExceptionSave.java +++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/segment/persistence/SegmentExceptionSave.java @@ -41,7 +41,7 @@ public class SegmentExceptionSave extends RecordPersistenceMember { return AbstractIndex.Type_Record; } - private SegmentExceptionSave(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) { + protected SegmentExceptionSave(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) { super(role, clusterContext, selfContext); } @@ -90,7 +90,7 @@ public class SegmentExceptionSave extends RecordPersistenceMember { @Override public int queueSize() { - return WorkerConfig.Queue.TraceSegmentRecordAnalysis.Size; + return WorkerConfig.Queue.Segment.SegmentExceptionSave.Size; } @Override diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/segment/persistence/SegmentSave.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/segment/persistence/SegmentSave.java index 62c702f44..0875545ae 100644 --- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/segment/persistence/SegmentSave.java +++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/segment/persistence/SegmentSave.java @@ -58,7 +58,7 @@ public class SegmentSave extends RecordPersistenceMember { @Override public int queueSize() { - return WorkerConfig.Queue.TraceSegmentRecordAnalysis.Size; + return WorkerConfig.Queue.Segment.SegmentSave.Size; } @Override diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/span/SpanGetWithId.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/span/SpanGetWithId.java index e90f5c737..e5ff6cf99 100644 --- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/span/SpanGetWithId.java +++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/span/SpanGetWithId.java @@ -42,11 +42,11 @@ public class SpanGetWithId extends AbstractGet { int maxCost = -1; if (request.containsKey("maxCost")) { - maxCost = Integer.valueOf(ParameterTools.toString(request, "maxCost")); + maxCost = Integer.valueOf(ParameterTools.INSTANCE.toString(request, "maxCost")); } - String segId = ParameterTools.toString(request, "segId"); - String spanId = ParameterTools.toString(request, "spanId"); + String segId = ParameterTools.INSTANCE.toString(request, "segId"); + String spanId = ParameterTools.INSTANCE.toString(request, "spanId"); SpanSearchWithId.RequestEntity requestEntity = new SpanSearchWithId.RequestEntity(segId, spanId); getSelfContext().lookup(SpanSearchWithId.WorkerRole.INSTANCE).ask(requestEntity, response); diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/storage/AbstractIndex.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/storage/AbstractIndex.java index 97c473422..8f4ade7da 100644 --- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/storage/AbstractIndex.java +++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/storage/AbstractIndex.java @@ -28,7 +28,6 @@ public abstract class AbstractIndex { public static final String AGG_COLUMN = "aggId"; public static final String Time_Slice = "timeSlice"; - public static final String Top_One = "topOne"; final public XContentBuilder createSettingBuilder() throws IOException { XContentBuilder settingsBuilder = XContentFactory.jsonBuilder() diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/storage/EsClient.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/storage/EsClient.java index cbf79a0e2..27a0a8e80 100644 --- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/storage/EsClient.java +++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/storage/EsClient.java @@ -22,7 +22,8 @@ public class EsClient { public static void boot() throws UnknownHostException { Settings settings = Settings.builder() .put("cluster.name", "CollectorCluster") - .put("client.transport.sniff", true).build(); + .put("client.transport.sniff", true) + .build(); client = new PreBuiltTransportClient(settings) .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300)); diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/storage/IndexCreator.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/storage/IndexCreator.java index fc57d6a6c..b8312881f 100644 --- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/storage/IndexCreator.java +++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/storage/IndexCreator.java @@ -1,8 +1,8 @@ package com.a.eye.skywalking.collector.worker.storage; import com.a.eye.skywalking.collector.worker.globaltrace.GlobalTraceIndex; -import com.a.eye.skywalking.collector.worker.node.NodeIndex; -import com.a.eye.skywalking.collector.worker.nodeinst.NodeInstIndex; +import com.a.eye.skywalking.collector.worker.node.NodeCompIndex; +import com.a.eye.skywalking.collector.worker.node.NodeMappingIndex; import com.a.eye.skywalking.collector.worker.noderef.NodeRefIndex; import com.a.eye.skywalking.collector.worker.noderef.NodeRefResSumIndex; import com.a.eye.skywalking.collector.worker.segment.SegmentCostIndex; @@ -31,13 +31,13 @@ public enum IndexCreator { segmentExceptionIndex.deleteIndex(); segmentExceptionIndex.createIndex(); - NodeIndex nodeIndex = new NodeIndex(); - nodeIndex.deleteIndex(); - nodeIndex.createIndex(); + NodeCompIndex nodeCompIndex = new NodeCompIndex(); + nodeCompIndex.deleteIndex(); + nodeCompIndex.createIndex(); - NodeInstIndex nodeInstIndex = new NodeInstIndex(); - nodeInstIndex.deleteIndex(); - nodeInstIndex.createIndex(); + NodeMappingIndex nodeMappingIndex = new NodeMappingIndex(); + nodeMappingIndex.deleteIndex(); + nodeMappingIndex.createIndex(); NodeRefIndex nodeRefIndex = new NodeRefIndex(); nodeRefIndex.deleteIndex(); diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/tools/DateTools.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/tools/DateTools.java index fc01051e9..c5fcff2ca 100644 --- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/tools/DateTools.java +++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/tools/DateTools.java @@ -41,7 +41,9 @@ public class DateTools { } public static long changeToUTCSlice(long timeSlice) { - if (TimeZone.getDefault().getID().equals("GMT+08:00")) { + String timeSliceStr = String.valueOf(timeSlice); + + if (TimeZone.getDefault().getID().equals("GMT+08:00") || timeSliceStr.endsWith("0000")) { return timeSlice; } else { return timeSlice - 800; diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/tools/ParameterTools.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/tools/ParameterTools.java index 9301440db..d80458c4d 100644 --- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/tools/ParameterTools.java +++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/tools/ParameterTools.java @@ -5,9 +5,10 @@ import java.util.Map; /** * @author pengys5 */ -public class ParameterTools { +public enum ParameterTools { + INSTANCE; - public static String toString(Map request, String key) { + public String toString(Map request, String key) { if (request.get(key) != null) { return request.get(key)[0]; } else { diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/tracedag/TraceDagDataBuilder.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/tracedag/TraceDagDataBuilder.java new file mode 100644 index 000000000..ce7796c09 --- /dev/null +++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/tracedag/TraceDagDataBuilder.java @@ -0,0 +1,125 @@ +package com.a.eye.skywalking.collector.worker.tracedag; + +import com.a.eye.skywalking.collector.worker.Const; +import com.a.eye.skywalking.collector.worker.node.NodeCompIndex; +import com.a.eye.skywalking.collector.worker.node.NodeMappingIndex; +import com.a.eye.skywalking.collector.worker.noderef.NodeRefIndex; +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author pengys5 + */ +public class TraceDagDataBuilder { + + private Logger logger = LogManager.getFormatterLogger(TraceDagDataBuilder.class); + + 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); + changeNodeComp2Map(nodeCompArray); + resSumMerge(resSumArray); + + for (int i = 0; i < nodeRefsArray.size(); i++) { + JsonObject nodeRefJsonObj = nodeRefsArray.get(i).getAsJsonObject(); + String front = nodeRefJsonObj.get(NodeRefIndex.Front).getAsString(); + String behind = nodeRefJsonObj.get(NodeRefIndex.Behind).getAsString(); + + String behindCode = findRealCode(behind); + logger.debug("behind: %s, behindCode: %s", behind, behindCode); + + JsonObject lineJsonObj = new JsonObject(); + lineJsonObj.addProperty("from", findOrCreateNode(front)); + lineJsonObj.addProperty("to", findOrCreateNode(behindCode)); + lineJsonObj.addProperty("resSum", resSumMap.get(front + Const.ID_SPLIT + behindCode)); + + lineArray.add(lineJsonObj); + logger.debug("line: %s", lineJsonObj); + } + + JsonObject dagJsonObj = new JsonObject(); + dagJsonObj.add("nodes", pointArray); + dagJsonObj.add("nodeRefs", lineArray); + return dagJsonObj; + } + + private Integer findOrCreateNode(String peers) { + if (nodeIdMap.containsKey(peers)) { + return nodeIdMap.get(peers); + } else { + nodeId++; + JsonObject nodeJsonObj = new JsonObject(); + nodeJsonObj.addProperty("id", nodeId); + nodeJsonObj.addProperty("peer", peers); + if (peers.equals(Const.USER_CODE)) { + nodeJsonObj.addProperty("component", Const.USER_CODE); + } else { + nodeJsonObj.addProperty("component", nodeCompMap.get(peers)); + } + pointArray.add(nodeJsonObj); + + nodeIdMap.put(peers, nodeId); + logger.debug("node: %s", nodeJsonObj); + } + return nodeId; + } + + private void changeMapping2Map(JsonArray nodesMappingArray) { + for (int i = 0; i < nodesMappingArray.size(); i++) { + JsonObject nodesMappingJsonObj = nodesMappingArray.get(i).getAsJsonObject(); + String code = nodesMappingJsonObj.get(NodeMappingIndex.Code).getAsString(); + String peers = nodesMappingJsonObj.get(NodeMappingIndex.Peers).getAsString(); + mappingMap.put(peers, code); + } + } + + private void changeNodeComp2Map(JsonArray nodeCompArray) { + for (int i = 0; i < nodeCompArray.size(); i++) { + JsonObject nodesJsonObj = nodeCompArray.get(i).getAsJsonObject(); + logger.debug(nodesJsonObj); + String component = nodesJsonObj.get(NodeCompIndex.Name).getAsString(); + String peers = nodesJsonObj.get(NodeCompIndex.Peers).getAsString(); + nodeCompMap.put(peers, component); + } + } + + private String findRealCode(String peers) { + if (mappingMap.containsKey(peers)) { + return mappingMap.get(peers); + } else { + return peers; + } + } + + 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); + } + } + } +} diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/tracedag/TraceDagGetWithTimeSlice.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/tracedag/TraceDagGetWithTimeSlice.java new file mode 100644 index 000000000..28cfac4f2 --- /dev/null +++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/tracedag/TraceDagGetWithTimeSlice.java @@ -0,0 +1,120 @@ +package com.a.eye.skywalking.collector.worker.tracedag; + +import com.a.eye.skywalking.collector.actor.ClusterWorkerContext; +import com.a.eye.skywalking.collector.actor.LocalWorkerContext; +import com.a.eye.skywalking.collector.actor.ProviderNotFoundException; +import com.a.eye.skywalking.collector.actor.Role; +import com.a.eye.skywalking.collector.actor.selector.RollingSelector; +import com.a.eye.skywalking.collector.actor.selector.WorkerSelector; +import com.a.eye.skywalking.collector.worker.Const; +import com.a.eye.skywalking.collector.worker.httpserver.AbstractGet; +import com.a.eye.skywalking.collector.worker.httpserver.AbstractGetProvider; +import com.a.eye.skywalking.collector.worker.node.persistence.NodeCompLoad; +import com.a.eye.skywalking.collector.worker.node.persistence.NodeMappingSearchWithTimeSlice; +import com.a.eye.skywalking.collector.worker.noderef.persistence.NodeRefResSumSearchWithTimeSlice; +import com.a.eye.skywalking.collector.worker.noderef.persistence.NodeRefSearchWithTimeSlice; +import com.a.eye.skywalking.collector.worker.tools.ParameterTools; +import com.google.gson.JsonObject; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import java.util.Arrays; +import java.util.Map; + +/** + * @author pengys5 + */ +public class TraceDagGetWithTimeSlice extends AbstractGet { + + private Logger logger = LogManager.getFormatterLogger(TraceDagGetWithTimeSlice.class); + + TraceDagGetWithTimeSlice(Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) { + super(role, clusterContext, selfContext); + } + + @Override + public void preStart() throws ProviderNotFoundException { + getClusterContext().findProvider(NodeCompLoad.WorkerRole.INSTANCE).create(this); + getClusterContext().findProvider(NodeMappingSearchWithTimeSlice.WorkerRole.INSTANCE).create(this); + getClusterContext().findProvider(NodeRefSearchWithTimeSlice.WorkerRole.INSTANCE).create(this); + getClusterContext().findProvider(NodeRefResSumSearchWithTimeSlice.WorkerRole.INSTANCE).create(this); + } + + @Override + protected void onSearch(Map request, JsonObject response) throws Exception { + if (!request.containsKey("startTime") || !request.containsKey("endTime") || !request.containsKey("timeSliceType")) { + throw new IllegalArgumentException("the request parameter must contains startTime,endTime,timeSliceType"); + } + logger.debug("startTime: %s, endTime: %s, timeSliceType: %s", Arrays.toString(request.get("startTime")), + Arrays.toString(request.get("endTime")), Arrays.toString(request.get("timeSliceType"))); + + long startTime; + try { + startTime = Long.valueOf(ParameterTools.INSTANCE.toString(request, "startTime")); + } catch (NumberFormatException e) { + throw new IllegalArgumentException("the request parameter startTime must numeric with long type"); + } + + long endTime; + try { + endTime = Long.valueOf(ParameterTools.INSTANCE.toString(request, "endTime")); + } catch (NumberFormatException e) { + throw new IllegalArgumentException("the request parameter endTime must numeric with long type"); + } + + String timeSliceType = ParameterTools.INSTANCE.toString(request, "timeSliceType"); + + JsonObject compResponse = new JsonObject(); + getSelfContext().lookup(NodeCompLoad.WorkerRole.INSTANCE).ask(null, compResponse); + + JsonObject nodeMappingResponse = new JsonObject(); + NodeMappingSearchWithTimeSlice.RequestEntity nodeMappingEntity = new NodeMappingSearchWithTimeSlice.RequestEntity(timeSliceType, startTime, endTime); + getSelfContext().lookup(NodeMappingSearchWithTimeSlice.WorkerRole.INSTANCE).ask(nodeMappingEntity, nodeMappingResponse); + + JsonObject nodeRefResponse = new JsonObject(); + NodeRefSearchWithTimeSlice.RequestEntity nodeReftEntity = new NodeRefSearchWithTimeSlice.RequestEntity(timeSliceType, startTime, endTime); + getSelfContext().lookup(NodeRefSearchWithTimeSlice.WorkerRole.INSTANCE).ask(nodeReftEntity, nodeRefResponse); + + JsonObject resSumResponse = new JsonObject(); + NodeRefResSumSearchWithTimeSlice.RequestEntity resSumEntity = new NodeRefResSumSearchWithTimeSlice.RequestEntity(timeSliceType, startTime, endTime); + getSelfContext().lookup(NodeRefResSumSearchWithTimeSlice.WorkerRole.INSTANCE).ask(resSumEntity, resSumResponse); + + TraceDagDataBuilder builder = new TraceDagDataBuilder(); + JsonObject result = builder.build(compResponse.get(Const.RESULT).getAsJsonArray(), nodeMappingResponse.get(Const.RESULT).getAsJsonArray(), + nodeRefResponse.get(Const.RESULT).getAsJsonArray(), resSumResponse.get(Const.RESULT).getAsJsonArray()); + + response.add(Const.RESULT, result); + } + + public static class Factory extends AbstractGetProvider { + + @Override + public Role role() { + return WorkerRole.INSTANCE; + } + + @Override + public TraceDagGetWithTimeSlice workerInstance(ClusterWorkerContext clusterContext) { + return new TraceDagGetWithTimeSlice(role(), clusterContext, new LocalWorkerContext()); + } + + @Override + public String servletPath() { + return "/traceDag/timeSlice"; + } + } + + public enum WorkerRole implements Role { + INSTANCE; + + @Override + public String roleName() { + return TraceDagGetWithTimeSlice.class.getSimpleName(); + } + + @Override + public WorkerSelector workerSelector() { + return new RollingSelector(); + } + } +} diff --git a/skywalking-collector/skywalking-collector-worker/src/main/resources/META-INF/services/com.a.eye.skywalking.collector.actor.AbstractClusterWorkerProvider b/skywalking-collector/skywalking-collector-worker/src/main/resources/META-INF/services/com.a.eye.skywalking.collector.actor.AbstractClusterWorkerProvider index ad1b9bfb8..608ec478f 100644 --- a/skywalking-collector/skywalking-collector-worker/src/main/resources/META-INF/services/com.a.eye.skywalking.collector.actor.AbstractClusterWorkerProvider +++ b/skywalking-collector/skywalking-collector-worker/src/main/resources/META-INF/services/com.a.eye.skywalking.collector.actor.AbstractClusterWorkerProvider @@ -8,10 +8,8 @@ com.a.eye.skywalking.collector.worker.noderef.persistence.NodeRefResSumDayAgg$Fa com.a.eye.skywalking.collector.worker.noderef.persistence.NodeRefResSumHourAgg$Factory com.a.eye.skywalking.collector.worker.noderef.persistence.NodeRefResSumMinuteAgg$Factory -com.a.eye.skywalking.collector.worker.node.persistence.NodeDayAgg$Factory -com.a.eye.skywalking.collector.worker.node.persistence.NodeHourAgg$Factory -com.a.eye.skywalking.collector.worker.node.persistence.NodeMinuteAgg$Factory +com.a.eye.skywalking.collector.worker.node.persistence.NodeCompAgg$Factory -com.a.eye.skywalking.collector.worker.nodeinst.persistence.NodeInstDayAgg$Factory -com.a.eye.skywalking.collector.worker.nodeinst.persistence.NodeInstHourAgg$Factory -com.a.eye.skywalking.collector.worker.nodeinst.persistence.NodeInstMinuteAgg$Factory \ No newline at end of file +com.a.eye.skywalking.collector.worker.node.persistence.NodeMappingDayAgg$Factory +com.a.eye.skywalking.collector.worker.node.persistence.NodeMappingHourAgg$Factory +com.a.eye.skywalking.collector.worker.node.persistence.NodeMappingMinuteAgg$Factory \ No newline at end of file diff --git a/skywalking-collector/skywalking-collector-worker/src/main/resources/META-INF/services/com.a.eye.skywalking.collector.actor.AbstractLocalWorkerProvider b/skywalking-collector/skywalking-collector-worker/src/main/resources/META-INF/services/com.a.eye.skywalking.collector.actor.AbstractLocalWorkerProvider index ff042773f..30b0397fe 100644 --- a/skywalking-collector/skywalking-collector-worker/src/main/resources/META-INF/services/com.a.eye.skywalking.collector.actor.AbstractLocalWorkerProvider +++ b/skywalking-collector/skywalking-collector-worker/src/main/resources/META-INF/services/com.a.eye.skywalking.collector.actor.AbstractLocalWorkerProvider @@ -24,24 +24,18 @@ com.a.eye.skywalking.collector.worker.noderef.persistence.NodeRefResSumDaySave$F com.a.eye.skywalking.collector.worker.noderef.persistence.NodeRefResSumHourSave$Factory com.a.eye.skywalking.collector.worker.noderef.persistence.NodeRefResSumMinuteSave$Factory -com.a.eye.skywalking.collector.worker.node.analysis.NodeDayAnalysis$Factory -com.a.eye.skywalking.collector.worker.node.analysis.NodeHourAnalysis$Factory -com.a.eye.skywalking.collector.worker.node.analysis.NodeMinuteAnalysis$Factory +com.a.eye.skywalking.collector.worker.node.analysis.NodeCompAnalysis$Factory +com.a.eye.skywalking.collector.worker.node.persistence.NodeCompSave$Factory +com.a.eye.skywalking.collector.worker.node.persistence.NodeCompLoad$Factory -com.a.eye.skywalking.collector.worker.node.persistence.NodeDaySave$Factory -com.a.eye.skywalking.collector.worker.node.persistence.NodeHourSave$Factory -com.a.eye.skywalking.collector.worker.node.persistence.NodeMinuteSave$Factory -com.a.eye.skywalking.collector.worker.node.persistence.NodeSearchWithTimeSlice$Factory +com.a.eye.skywalking.collector.worker.node.analysis.NodeMappingDayAnalysis$Factory +com.a.eye.skywalking.collector.worker.node.analysis.NodeMappingHourAnalysis$Factory +com.a.eye.skywalking.collector.worker.node.analysis.NodeMappingMinuteAnalysis$Factory -com.a.eye.skywalking.collector.worker.nodeinst.persistence.NodeInstDaySave$Factory -com.a.eye.skywalking.collector.worker.nodeinst.persistence.NodeInstHourSave$Factory -com.a.eye.skywalking.collector.worker.nodeinst.persistence.NodeInstMinuteSave$Factory -com.a.eye.skywalking.collector.worker.nodeinst.persistence.NodeInstSearchWithTimeSlice$Factory -com.a.eye.skywalking.collector.worker.nodeinst.persistence.NodeInstSummarySearchWithTimeSlice$Factory - -com.a.eye.skywalking.collector.worker.nodeinst.analysis.NodeInstDayAnalysis$Factory -com.a.eye.skywalking.collector.worker.nodeinst.analysis.NodeInstHourAnalysis$Factory -com.a.eye.skywalking.collector.worker.nodeinst.analysis.NodeInstMinuteAnalysis$Factory +com.a.eye.skywalking.collector.worker.node.persistence.NodeMappingDaySave$Factory +com.a.eye.skywalking.collector.worker.node.persistence.NodeMappingHourSave$Factory +com.a.eye.skywalking.collector.worker.node.persistence.NodeMappingMinuteSave$Factory +com.a.eye.skywalking.collector.worker.node.persistence.NodeMappingSearchWithTimeSlice$Factory com.a.eye.skywalking.collector.worker.globaltrace.analysis.GlobalTraceAnalysis$Factory com.a.eye.skywalking.collector.worker.globaltrace.persistence.GlobalTraceSave$Factory diff --git a/skywalking-collector/skywalking-collector-worker/src/main/resources/META-INF/services/com.a.eye.skywalking.collector.worker.httpserver.AbstractGetProvider b/skywalking-collector/skywalking-collector-worker/src/main/resources/META-INF/services/com.a.eye.skywalking.collector.worker.httpserver.AbstractGetProvider index dd6dd2de0..ea63a29ac 100644 --- a/skywalking-collector/skywalking-collector-worker/src/main/resources/META-INF/services/com.a.eye.skywalking.collector.worker.httpserver.AbstractGetProvider +++ b/skywalking-collector/skywalking-collector-worker/src/main/resources/META-INF/services/com.a.eye.skywalking.collector.worker.httpserver.AbstractGetProvider @@ -1,10 +1,8 @@ -com.a.eye.skywalking.collector.worker.node.NodeGetWithTimeSlice$Factory -com.a.eye.skywalking.collector.worker.nodeinst.NodeInstGetWithTimeSlice$Factory -com.a.eye.skywalking.collector.worker.nodeinst.NodeInstSummaryGetWithTimeSlice$Factory com.a.eye.skywalking.collector.worker.noderef.NodeRefGetWithTimeSlice$Factory com.a.eye.skywalking.collector.worker.noderef.NodeRefResSumGetWithTimeSlice$Factory com.a.eye.skywalking.collector.worker.noderef.NodeRefResSumGetGroupWithTimeSlice$Factory com.a.eye.skywalking.collector.worker.segment.SegmentTopGetWithTimeSlice$Factory com.a.eye.skywalking.collector.worker.globaltrace.GlobalTraceGetWithGlobalId$Factory com.a.eye.skywalking.collector.worker.segment.SegmentTopGetWithGlobalTraceId$Factory -com.a.eye.skywalking.collector.worker.span.SpanGetWithId$Factory \ No newline at end of file +com.a.eye.skywalking.collector.worker.span.SpanGetWithId$Factory +com.a.eye.skywalking.collector.worker.tracedag.TraceDagGetWithTimeSlice$Factory \ No newline at end of file diff --git a/skywalking-collector/skywalking-collector-worker/src/main/resources/log4j2.xml b/skywalking-collector/skywalking-collector-worker/src/main/resources/log4j2.xml index ef61f4b3f..a97644db3 100644 --- a/skywalking-collector/skywalking-collector-worker/src/main/resources/log4j2.xml +++ b/skywalking-collector/skywalking-collector-worker/src/main/resources/log4j2.xml @@ -2,7 +2,7 @@ - + diff --git a/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/mock/MockEsBulkClient.java b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/mock/MockEsBulkClient.java new file mode 100644 index 000000000..1221f6624 --- /dev/null +++ b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/mock/MockEsBulkClient.java @@ -0,0 +1,42 @@ +package com.a.eye.skywalking.collector.worker.mock; + +import com.a.eye.skywalking.collector.worker.storage.EsClient; +import org.elasticsearch.action.ListenableActionFuture; +import org.elasticsearch.action.bulk.BulkRequestBuilder; +import org.elasticsearch.action.bulk.BulkResponse; +import org.elasticsearch.action.index.IndexRequestBuilder; +import org.elasticsearch.client.Client; +import org.mockito.Mockito; + +import static org.powermock.api.mockito.PowerMockito.*; + +/** + * @author pengys5 + */ +public class MockEsBulkClient { + + public IndexRequestBuilder indexRequestBuilder; + + public void createMock() { + Client client = mock(Client.class); + mockStatic(EsClient.class); + when(EsClient.getClient()).thenReturn(client); + + BulkRequestBuilder bulkRequestBuilder = mock(BulkRequestBuilder.class); + when(client.prepareBulk()).thenReturn(bulkRequestBuilder); + + ListenableActionFuture listenableActionFuture = mock(ListenableActionFuture.class); + when(bulkRequestBuilder.execute()).thenReturn(listenableActionFuture); + + BulkResponse responses = mock(BulkResponse.class); + when(listenableActionFuture.actionGet()).thenReturn(responses); + + when(responses.hasFailures()).thenReturn(true); + + indexRequestBuilder = mock(IndexRequestBuilder.class); + + when(client.prepareIndex(Mockito.anyString(), Mockito.anyString(), Mockito.anyString())).thenReturn(indexRequestBuilder); + + when(indexRequestBuilder.setSource(Mockito.anyString())).thenReturn(indexRequestBuilder); + } +} diff --git a/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/mock/RecordDataAnswer.java b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/mock/RecordDataAnswer.java new file mode 100644 index 000000000..4dc379aef --- /dev/null +++ b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/mock/RecordDataAnswer.java @@ -0,0 +1,40 @@ +package com.a.eye.skywalking.collector.worker.mock; + +import com.a.eye.skywalking.collector.worker.storage.RecordData; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.stubbing.Answer; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author pengys5 + */ +public class RecordDataAnswer implements Answer { + + public RecordObj recordObj = new RecordObj(); + + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + RecordData recordData = (RecordData) invocation.getArguments()[0]; + recordObj.setSource(recordData); + return null; + } + + public class RecordObj { + private List recordDataList; + + private RecordObj() { + recordDataList = new ArrayList<>(); + } + + public List getRecordData() { + return recordDataList; + } + + private void setSource(RecordData recordData) { + this.recordDataList.add(recordData); + System.out.printf("id: %s, data: %s \n", recordData.getId(), recordData.getRecord().toString()); + } + } +} diff --git a/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/mock/SaveToEsSourceAnswer.java b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/mock/SaveToEsSourceAnswer.java new file mode 100644 index 000000000..6fd4625ca --- /dev/null +++ b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/mock/SaveToEsSourceAnswer.java @@ -0,0 +1,46 @@ +package com.a.eye.skywalking.collector.worker.mock; + +import com.google.gson.Gson; +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.stubbing.Answer; + +/** + * @author pengys5 + */ +public class SaveToEsSourceAnswer implements Answer { + + private Logger logger = LogManager.getFormatterLogger(SaveToEsSourceAnswer.class); + + public SourceObj sourceObj = new SourceObj(); + + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + Gson gson = new Gson(); + String source = (String) invocation.getArguments()[0]; + JsonObject sourceJsonObj = gson.fromJson(source, JsonObject.class); + logger.debug("sourceJsonObj: %s", sourceJsonObj.toString()); + + sourceObj.setSource(sourceJsonObj); + return null; + } + + public class SourceObj { + private JsonArray source; + + public SourceObj() { + source = new JsonArray(); + } + + public JsonArray getSource() { + return source; + } + + public void setSource(JsonObject source) { + this.source.add(source); + } + } +} diff --git a/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/node/analysis/NodeAnalysisVerify.java b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/node/analysis/NodeAnalysisVerify.java new file mode 100644 index 000000000..6ea40d7eb --- /dev/null +++ b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/node/analysis/NodeAnalysisVerify.java @@ -0,0 +1,72 @@ +package com.a.eye.skywalking.collector.worker.node.analysis; + +import com.a.eye.skywalking.collector.worker.storage.RecordData; +import com.a.eye.skywalking.collector.worker.tools.RecordDataTool; +import org.junit.Assert; + +import java.util.List; + +/** + * @author pengys5 + */ +public enum NodeAnalysisVerify { + INSTANCE; + + public void verify(List recordDataList, long timeSlice) { + Assert.assertEquals(9, recordDataList.size()); + + RecordData data_1 = RecordDataTool.INSTANCE.getRecord(recordDataList, timeSlice + "..-..[localhost:-1]"); + Assert.assertEquals("H2", data_1.getRecord().get("component").getAsString()); + Assert.assertEquals("[localhost:-1]", data_1.getRecord().get("peers").getAsString()); + Assert.assertEquals("[localhost:-1]", data_1.getRecord().get("aggId").getAsString()); + Assert.assertEquals(timeSlice, data_1.getRecord().get("timeSlice").getAsLong()); + + RecordData data_2 = RecordDataTool.INSTANCE.getRecord(recordDataList, timeSlice + "..-..portal-service"); + Assert.assertEquals("Tomcat", data_2.getRecord().get("component").getAsString()); + Assert.assertEquals("portal-service", data_2.getRecord().get("peers").getAsString()); + Assert.assertEquals("portal-service", data_2.getRecord().get("aggId").getAsString()); + Assert.assertEquals(timeSlice, data_2.getRecord().get("timeSlice").getAsLong()); + + RecordData data_3 = RecordDataTool.INSTANCE.getRecord(recordDataList, timeSlice + "..-..persistence-service"); + Assert.assertEquals(false, data_3.getRecord().has("component")); + Assert.assertEquals("persistence-service", data_3.getRecord().get("peers").getAsString()); + Assert.assertEquals("persistence-service", data_3.getRecord().get("aggId").getAsString()); + Assert.assertEquals(timeSlice, data_3.getRecord().get("timeSlice").getAsLong()); + + RecordData data_4 = RecordDataTool.INSTANCE.getRecord(recordDataList, timeSlice + "..-..[10.128.35.80:20880]"); + Assert.assertEquals("HttpClient", data_4.getRecord().get("component").getAsString()); + Assert.assertEquals("[10.128.35.80:20880]", data_4.getRecord().get("peers").getAsString()); + Assert.assertEquals("[10.128.35.80:20880]", data_4.getRecord().get("aggId").getAsString()); + Assert.assertEquals(timeSlice, data_4.getRecord().get("timeSlice").getAsLong()); + + RecordData data_5 = RecordDataTool.INSTANCE.getRecord(recordDataList, timeSlice + "..-..[127.0.0.1:6379]"); + Assert.assertEquals("Redis", data_5.getRecord().get("component").getAsString()); + Assert.assertEquals("[127.0.0.1:6379]", data_5.getRecord().get("peers").getAsString()); + Assert.assertEquals("[127.0.0.1:6379]", data_5.getRecord().get("aggId").getAsString()); + Assert.assertEquals(timeSlice, data_5.getRecord().get("timeSlice").getAsLong()); + + RecordData data_6 = RecordDataTool.INSTANCE.getRecord(recordDataList, timeSlice + "..-..[127.0.0.1:8002]"); + Assert.assertEquals("Motan", data_6.getRecord().get("component").getAsString()); + Assert.assertEquals("[127.0.0.1:8002]", data_6.getRecord().get("peers").getAsString()); + Assert.assertEquals("[127.0.0.1:8002]", data_6.getRecord().get("aggId").getAsString()); + Assert.assertEquals(timeSlice, data_6.getRecord().get("timeSlice").getAsLong()); + + RecordData data_7 = RecordDataTool.INSTANCE.getRecord(recordDataList, timeSlice + "..-..User"); + Assert.assertEquals(false, data_7.getRecord().has("component")); + Assert.assertEquals("User", data_7.getRecord().get("peers").getAsString()); + Assert.assertEquals("User", data_7.getRecord().get("aggId").getAsString()); + Assert.assertEquals(timeSlice, data_7.getRecord().get("timeSlice").getAsLong()); + + RecordData data_8 = RecordDataTool.INSTANCE.getRecord(recordDataList, timeSlice + "..-..[127.0.0.1:3307]"); + Assert.assertEquals("Mysql", data_8.getRecord().get("component").getAsString()); + Assert.assertEquals("[127.0.0.1:3307]", data_8.getRecord().get("peers").getAsString()); + Assert.assertEquals("[127.0.0.1:3307]", data_8.getRecord().get("aggId").getAsString()); + Assert.assertEquals(timeSlice, data_8.getRecord().get("timeSlice").getAsLong()); + + RecordData data_9 = RecordDataTool.INSTANCE.getRecord(recordDataList, timeSlice + "..-..cache-service"); + Assert.assertEquals(false, data_9.getRecord().has("component")); + Assert.assertEquals("cache-service", data_9.getRecord().get("peers").getAsString()); + Assert.assertEquals("cache-service", data_9.getRecord().get("aggId").getAsString()); + Assert.assertEquals(timeSlice, data_9.getRecord().get("timeSlice").getAsLong()); + } +} diff --git a/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/node/analysis/NodeMappingAnalysisVerify.java b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/node/analysis/NodeMappingAnalysisVerify.java new file mode 100644 index 000000000..e3705ce39 --- /dev/null +++ b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/node/analysis/NodeMappingAnalysisVerify.java @@ -0,0 +1,30 @@ +package com.a.eye.skywalking.collector.worker.node.analysis; + +import com.a.eye.skywalking.collector.worker.storage.RecordData; +import com.a.eye.skywalking.collector.worker.tools.RecordDataTool; +import org.junit.Assert; + +import java.util.List; + +/** + * @author pengys5 + */ +public enum NodeMappingAnalysisVerify { + INSTANCE; + + public void verify(List recordDataList, long timeSlice) { + Assert.assertEquals(2, recordDataList.size()); + + RecordData data_1 = RecordDataTool.INSTANCE.getRecord(recordDataList, timeSlice + "..-..persistence-service..-..[10.128.35.80:20880]"); + Assert.assertEquals("persistence-service", data_1.getRecord().get("code").getAsString()); + Assert.assertEquals("[10.128.35.80:20880]", data_1.getRecord().get("peers").getAsString()); + Assert.assertEquals("persistence-service..-..[10.128.35.80:20880]", data_1.getRecord().get("aggId").getAsString()); + Assert.assertEquals(timeSlice, data_1.getRecord().get("timeSlice").getAsLong()); + + RecordData data_2 = RecordDataTool.INSTANCE.getRecord(recordDataList, timeSlice + "..-..cache-service..-..[127.0.0.1:8002]"); + Assert.assertEquals("cache-service", data_2.getRecord().get("code").getAsString()); + Assert.assertEquals("[127.0.0.1:8002]", data_2.getRecord().get("peers").getAsString()); + Assert.assertEquals("cache-service..-..[127.0.0.1:8002]", data_2.getRecord().get("aggId").getAsString()); + Assert.assertEquals(timeSlice, data_2.getRecord().get("timeSlice").getAsLong()); + } +} diff --git a/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/node/analysis/NodeMappingDayAnalysisTestCase.java b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/node/analysis/NodeMappingDayAnalysisTestCase.java new file mode 100644 index 000000000..70d5bfe3c --- /dev/null +++ b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/node/analysis/NodeMappingDayAnalysisTestCase.java @@ -0,0 +1,99 @@ +package com.a.eye.skywalking.collector.worker.node.analysis; + +import com.a.eye.skywalking.collector.actor.ClusterWorkerContext; +import com.a.eye.skywalking.collector.actor.LocalWorkerContext; +import com.a.eye.skywalking.collector.actor.WorkerRefs; +import com.a.eye.skywalking.collector.actor.selector.RollingSelector; +import com.a.eye.skywalking.collector.queue.EndOfBatchCommand; +import com.a.eye.skywalking.collector.worker.WorkerConfig; +import com.a.eye.skywalking.collector.worker.mock.RecordDataAnswer; +import com.a.eye.skywalking.collector.worker.node.persistence.NodeMappingDayAgg; +import com.a.eye.skywalking.collector.worker.segment.SegmentPost; +import com.a.eye.skywalking.collector.worker.segment.mock.SegmentMock; +import com.a.eye.skywalking.collector.worker.storage.RecordData; +import com.a.eye.skywalking.collector.worker.tools.DateTools; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.powermock.api.mockito.PowerMockito; +import org.powermock.core.classloader.annotations.PowerMockIgnore; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; + +import java.util.List; + +import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.mock; +import static org.powermock.api.mockito.PowerMockito.when; + +/** + * @author pengys5 + */ +@RunWith(PowerMockRunner.class) +@PrepareForTest({ClusterWorkerContext.class}) +@PowerMockIgnore({"javax.management.*"}) +public class NodeMappingDayAnalysisTestCase { + + private NodeMappingDayAnalysis nodeMappingDayAnalysis; + private SegmentMock segmentMock = new SegmentMock(); + private RecordDataAnswer recordDataAnswer; + + @Before + public void init() throws Exception { + ClusterWorkerContext clusterWorkerContext = PowerMockito.mock(ClusterWorkerContext.class); + WorkerRefs workerRefs = mock(WorkerRefs.class); + recordDataAnswer = new RecordDataAnswer(); + doAnswer(recordDataAnswer).when(workerRefs).tell(Mockito.any(RecordData.class)); + + when(clusterWorkerContext.lookup(NodeMappingDayAgg.Role.INSTANCE)).thenReturn(workerRefs); + + LocalWorkerContext localWorkerContext = new LocalWorkerContext(); + nodeMappingDayAnalysis = new NodeMappingDayAnalysis(NodeMappingDayAnalysis.Role.INSTANCE, clusterWorkerContext, localWorkerContext); + } + + @Test + public void testRole() { + Assert.assertEquals(NodeMappingDayAnalysis.class.getSimpleName(), NodeMappingDayAnalysis.Role.INSTANCE.roleName()); + Assert.assertEquals(RollingSelector.class.getSimpleName(), NodeMappingDayAnalysis.Role.INSTANCE.workerSelector().getClass().getSimpleName()); + } + + @Test + public void testFactory() { + Assert.assertEquals(NodeMappingDayAnalysis.class.getSimpleName(), NodeMappingDayAnalysis.Factory.INSTANCE.role().roleName()); + Assert.assertEquals(NodeMappingDayAnalysis.class.getSimpleName(), NodeMappingDayAnalysis.Factory.INSTANCE.workerInstance(null).getClass().getSimpleName()); + + int testSize = 10; + WorkerConfig.Queue.Node.NodeMappingDayAnalysis.Size = testSize; + Assert.assertEquals(testSize, NodeMappingDayAnalysis.Factory.INSTANCE.queueSize()); + } + + @Test + public void testAnalyse() throws Exception { + List cacheServiceSegment = segmentMock.mockCacheServiceSegmentSegmentTimeSlice(); + for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : cacheServiceSegment) { + nodeMappingDayAnalysis.analyse(segmentWithTimeSlice); + } + List portalService = segmentMock.mockPortalServiceSegmentSegmentTimeSlice(); + for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : portalService) { + nodeMappingDayAnalysis.analyse(segmentWithTimeSlice); + } + List persistenceService = segmentMock.mockPersistenceServiceSegmentTimeSlice(); + for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : persistenceService) { + nodeMappingDayAnalysis.analyse(segmentWithTimeSlice); + } + List cacheServiceException = segmentMock.mockCacheServiceExceptionSegmentTimeSlice(); + for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : cacheServiceException) { + nodeMappingDayAnalysis.analyse(segmentWithTimeSlice); + } + List portalServiceException = segmentMock.mockPortalServiceExceptionSegmentTimeSlice(); + for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : portalServiceException) { + nodeMappingDayAnalysis.analyse(segmentWithTimeSlice); + } + + nodeMappingDayAnalysis.onWork(new EndOfBatchCommand()); + + NodeMappingAnalysisVerify.INSTANCE.verify(recordDataAnswer.recordObj.getRecordData(), DateTools.changeToUTCSlice(201703310000L)); + } +} diff --git a/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/node/analysis/NodeMappingHourAnalysisTestCase.java b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/node/analysis/NodeMappingHourAnalysisTestCase.java new file mode 100644 index 000000000..ecc0454aa --- /dev/null +++ b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/node/analysis/NodeMappingHourAnalysisTestCase.java @@ -0,0 +1,100 @@ +package com.a.eye.skywalking.collector.worker.node.analysis; + +import com.a.eye.skywalking.collector.actor.ClusterWorkerContext; +import com.a.eye.skywalking.collector.actor.LocalWorkerContext; +import com.a.eye.skywalking.collector.actor.WorkerRefs; +import com.a.eye.skywalking.collector.actor.selector.RollingSelector; +import com.a.eye.skywalking.collector.queue.EndOfBatchCommand; +import com.a.eye.skywalking.collector.worker.WorkerConfig; +import com.a.eye.skywalking.collector.worker.mock.RecordDataAnswer; +import com.a.eye.skywalking.collector.worker.node.persistence.NodeMappingDayAgg; +import com.a.eye.skywalking.collector.worker.node.persistence.NodeMappingHourAgg; +import com.a.eye.skywalking.collector.worker.segment.SegmentPost; +import com.a.eye.skywalking.collector.worker.segment.mock.SegmentMock; +import com.a.eye.skywalking.collector.worker.storage.RecordData; +import com.a.eye.skywalking.collector.worker.tools.DateTools; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.powermock.api.mockito.PowerMockito; +import org.powermock.core.classloader.annotations.PowerMockIgnore; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; + +import java.util.List; + +import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.mock; +import static org.powermock.api.mockito.PowerMockito.when; + +/** + * @author pengys5 + */ +@RunWith(PowerMockRunner.class) +@PrepareForTest({ClusterWorkerContext.class}) +@PowerMockIgnore({"javax.management.*"}) +public class NodeMappingHourAnalysisTestCase { + + private NodeMappingHourAnalysis nodeMappingHourAnalysis; + private SegmentMock segmentMock = new SegmentMock(); + private RecordDataAnswer recordDataAnswer; + + @Before + public void init() throws Exception { + ClusterWorkerContext clusterWorkerContext = PowerMockito.mock(ClusterWorkerContext.class); + WorkerRefs workerRefs = mock(WorkerRefs.class); + recordDataAnswer = new RecordDataAnswer(); + doAnswer(recordDataAnswer).when(workerRefs).tell(Mockito.any(RecordData.class)); + + when(clusterWorkerContext.lookup(NodeMappingHourAgg.Role.INSTANCE)).thenReturn(workerRefs); + + LocalWorkerContext localWorkerContext = new LocalWorkerContext(); + nodeMappingHourAnalysis = new NodeMappingHourAnalysis(NodeMappingHourAnalysis.Role.INSTANCE, clusterWorkerContext, localWorkerContext); + } + + @Test + public void testRole() { + Assert.assertEquals(NodeMappingHourAnalysis.class.getSimpleName(), NodeMappingHourAnalysis.Role.INSTANCE.roleName()); + Assert.assertEquals(RollingSelector.class.getSimpleName(), NodeMappingHourAnalysis.Role.INSTANCE.workerSelector().getClass().getSimpleName()); + } + + @Test + public void testFactory() { + Assert.assertEquals(NodeMappingHourAnalysis.class.getSimpleName(), NodeMappingHourAnalysis.Factory.INSTANCE.role().roleName()); + Assert.assertEquals(NodeMappingHourAnalysis.class.getSimpleName(), NodeMappingHourAnalysis.Factory.INSTANCE.workerInstance(null).getClass().getSimpleName()); + + int testSize = 10; + WorkerConfig.Queue.Node.NodeMappingHourAnalysis.Size = testSize; + Assert.assertEquals(testSize, NodeMappingHourAnalysis.Factory.INSTANCE.queueSize()); + } + + @Test + public void testAnalyse() throws Exception { + List cacheServiceSegment = segmentMock.mockCacheServiceSegmentSegmentTimeSlice(); + for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : cacheServiceSegment) { + nodeMappingHourAnalysis.analyse(segmentWithTimeSlice); + } + List portalService = segmentMock.mockPortalServiceSegmentSegmentTimeSlice(); + for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : portalService) { + nodeMappingHourAnalysis.analyse(segmentWithTimeSlice); + } + List persistenceService = segmentMock.mockPersistenceServiceSegmentTimeSlice(); + for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : persistenceService) { + nodeMappingHourAnalysis.analyse(segmentWithTimeSlice); + } + List cacheServiceException = segmentMock.mockCacheServiceExceptionSegmentTimeSlice(); + for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : cacheServiceException) { + nodeMappingHourAnalysis.analyse(segmentWithTimeSlice); + } + List portalServiceException = segmentMock.mockPortalServiceExceptionSegmentTimeSlice(); + for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : portalServiceException) { + nodeMappingHourAnalysis.analyse(segmentWithTimeSlice); + } + + nodeMappingHourAnalysis.onWork(new EndOfBatchCommand()); + + NodeMappingAnalysisVerify.INSTANCE.verify(recordDataAnswer.recordObj.getRecordData(), DateTools.changeToUTCSlice(201703310900L)); + } +} diff --git a/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/node/analysis/NodeMappingMinuteAnalysisTestCase.java b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/node/analysis/NodeMappingMinuteAnalysisTestCase.java new file mode 100644 index 000000000..1e8ac9802 --- /dev/null +++ b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/node/analysis/NodeMappingMinuteAnalysisTestCase.java @@ -0,0 +1,124 @@ +package com.a.eye.skywalking.collector.worker.node.analysis; + +import com.a.eye.skywalking.collector.actor.ClusterWorkerContext; +import com.a.eye.skywalking.collector.actor.LocalWorkerContext; +import com.a.eye.skywalking.collector.actor.WorkerRefs; +import com.a.eye.skywalking.collector.actor.selector.RollingSelector; +import com.a.eye.skywalking.collector.queue.EndOfBatchCommand; +import com.a.eye.skywalking.collector.worker.WorkerConfig; +import com.a.eye.skywalking.collector.worker.mock.RecordDataAnswer; +import com.a.eye.skywalking.collector.worker.node.persistence.NodeMappingMinuteAgg; +import com.a.eye.skywalking.collector.worker.segment.SegmentPost; +import com.a.eye.skywalking.collector.worker.segment.mock.SegmentMock; +import com.a.eye.skywalking.collector.worker.storage.RecordData; +import com.a.eye.skywalking.collector.worker.tools.DateTools; +import com.a.eye.skywalking.collector.worker.tools.RecordDataTool; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.powermock.api.mockito.PowerMockito; +import org.powermock.core.classloader.annotations.PowerMockIgnore; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; + +import java.util.List; + +import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.mock; +import static org.powermock.api.mockito.PowerMockito.when; + +/** + * @author pengys5 + */ +@RunWith(PowerMockRunner.class) +@PrepareForTest({ClusterWorkerContext.class}) +@PowerMockIgnore({"javax.management.*"}) +public class NodeMappingMinuteAnalysisTestCase { + + private NodeMappingMinuteAnalysis nodeMappingMinuteAnalysis; + private SegmentMock segmentMock = new SegmentMock(); + private RecordDataAnswer recordDataAnswer; + + @Before + public void init() throws Exception { + ClusterWorkerContext clusterWorkerContext = PowerMockito.mock(ClusterWorkerContext.class); + WorkerRefs workerRefs = mock(WorkerRefs.class); + recordDataAnswer = new RecordDataAnswer(); + doAnswer(recordDataAnswer).when(workerRefs).tell(Mockito.any(RecordData.class)); + + when(clusterWorkerContext.lookup(NodeMappingMinuteAgg.Role.INSTANCE)).thenReturn(workerRefs); + + LocalWorkerContext localWorkerContext = new LocalWorkerContext(); + nodeMappingMinuteAnalysis = new NodeMappingMinuteAnalysis(NodeMappingMinuteAnalysis.Role.INSTANCE, clusterWorkerContext, localWorkerContext); + } + + @Test + public void testRole() { + Assert.assertEquals(NodeMappingMinuteAnalysis.class.getSimpleName(), NodeMappingMinuteAnalysis.Role.INSTANCE.roleName()); + Assert.assertEquals(RollingSelector.class.getSimpleName(), NodeMappingMinuteAnalysis.Role.INSTANCE.workerSelector().getClass().getSimpleName()); + } + + @Test + public void testFactory() { + Assert.assertEquals(NodeMappingMinuteAnalysis.class.getSimpleName(), NodeMappingMinuteAnalysis.Factory.INSTANCE.role().roleName()); + Assert.assertEquals(NodeMappingMinuteAnalysis.class.getSimpleName(), NodeMappingMinuteAnalysis.Factory.INSTANCE.workerInstance(null).getClass().getSimpleName()); + + int testSize = 10; + WorkerConfig.Queue.Node.NodeMappingMinuteAnalysis.Size = testSize; + Assert.assertEquals(testSize, NodeMappingMinuteAnalysis.Factory.INSTANCE.queueSize()); + } + + @Test + public void testAnalyse() throws Exception { + List cacheServiceSegment = segmentMock.mockCacheServiceSegmentSegmentTimeSlice(); + for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : cacheServiceSegment) { + nodeMappingMinuteAnalysis.analyse(segmentWithTimeSlice); + } + List portalService = segmentMock.mockPortalServiceSegmentSegmentTimeSlice(); + for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : portalService) { + nodeMappingMinuteAnalysis.analyse(segmentWithTimeSlice); + } + List persistenceService = segmentMock.mockPersistenceServiceSegmentTimeSlice(); + for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : persistenceService) { + nodeMappingMinuteAnalysis.analyse(segmentWithTimeSlice); + } + List cacheServiceException = segmentMock.mockCacheServiceExceptionSegmentTimeSlice(); + for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : cacheServiceException) { + nodeMappingMinuteAnalysis.analyse(segmentWithTimeSlice); + } + List portalServiceException = segmentMock.mockPortalServiceExceptionSegmentTimeSlice(); + for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : portalServiceException) { + nodeMappingMinuteAnalysis.analyse(segmentWithTimeSlice); + } + + nodeMappingMinuteAnalysis.onWork(new EndOfBatchCommand()); + + Assert.assertEquals(3, recordDataAnswer.recordObj.getRecordData().size()); + this.verify_1(recordDataAnswer.recordObj.getRecordData(), DateTools.changeToUTCSlice(201703310915L)); + this.verify_2(recordDataAnswer.recordObj.getRecordData(), DateTools.changeToUTCSlice(201703310916L)); + } + + public void verify_1(List recordDataList, long timeSlice) { + RecordData data_1 = RecordDataTool.INSTANCE.getRecord(recordDataList, timeSlice + "..-..persistence-service..-..[10.128.35.80:20880]"); + Assert.assertEquals("persistence-service", data_1.getRecord().get("code").getAsString()); + Assert.assertEquals("[10.128.35.80:20880]", data_1.getRecord().get("peers").getAsString()); + Assert.assertEquals("persistence-service..-..[10.128.35.80:20880]", data_1.getRecord().get("aggId").getAsString()); + Assert.assertEquals(timeSlice, data_1.getRecord().get("timeSlice").getAsLong()); + + RecordData data_2 = RecordDataTool.INSTANCE.getRecord(recordDataList, timeSlice + "..-..cache-service..-..[127.0.0.1:8002]"); + Assert.assertEquals("cache-service", data_2.getRecord().get("code").getAsString()); + Assert.assertEquals("[127.0.0.1:8002]", data_2.getRecord().get("peers").getAsString()); + Assert.assertEquals("cache-service..-..[127.0.0.1:8002]", data_2.getRecord().get("aggId").getAsString()); + Assert.assertEquals(timeSlice, data_2.getRecord().get("timeSlice").getAsLong()); + } + + public void verify_2(List recordDataList, long timeSlice) { + RecordData data_2 = RecordDataTool.INSTANCE.getRecord(recordDataList, timeSlice + "..-..cache-service..-..[127.0.0.1:8002]"); + Assert.assertEquals("cache-service", data_2.getRecord().get("code").getAsString()); + Assert.assertEquals("[127.0.0.1:8002]", data_2.getRecord().get("peers").getAsString()); + Assert.assertEquals("cache-service..-..[127.0.0.1:8002]", data_2.getRecord().get("aggId").getAsString()); + Assert.assertEquals(timeSlice, data_2.getRecord().get("timeSlice").getAsLong()); + } +} diff --git a/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeCompWithTimeSliceUseDB.java b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeCompWithTimeSliceUseDB.java new file mode 100644 index 000000000..c34c841ee --- /dev/null +++ b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeCompWithTimeSliceUseDB.java @@ -0,0 +1,33 @@ +package com.a.eye.skywalking.collector.worker.node.persistence; + +import com.a.eye.skywalking.collector.actor.ClusterWorkerContext; +import com.a.eye.skywalking.collector.actor.LocalWorkerContext; +import com.a.eye.skywalking.collector.worker.storage.EsClient; +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; + +/** + * @author pengys5 + */ +public class NodeCompWithTimeSliceUseDB { + + public static void main(String[] args) throws Exception { + EsClient.boot(); + + ClusterWorkerContext clusterWorkerContext = new ClusterWorkerContext(null); + LocalWorkerContext localWorkerContext = new LocalWorkerContext(); + NodeCompLoad nodeCompLoad = + new NodeCompLoad(NodeCompLoad.WorkerRole.INSTANCE, clusterWorkerContext, localWorkerContext); + + JsonObject response = new JsonObject(); + nodeCompLoad.onWork(null, response); + + JsonArray nodeArray = response.get("result").getAsJsonArray(); + System.out.println(nodeArray.size()); + System.out.println(nodeArray.toString()); + for (int i = 0; i < nodeArray.size(); i++) { + JsonObject nodeJsonObj = nodeArray.get(i).getAsJsonObject(); + System.out.println(nodeJsonObj); + } + } +} diff --git a/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeMappingDayAggTestCase.java b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeMappingDayAggTestCase.java new file mode 100644 index 000000000..d0a309000 --- /dev/null +++ b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeMappingDayAggTestCase.java @@ -0,0 +1,88 @@ +package com.a.eye.skywalking.collector.worker.node.persistence; + +import com.a.eye.skywalking.collector.actor.ClusterWorkerContext; +import com.a.eye.skywalking.collector.actor.LocalWorkerContext; +import com.a.eye.skywalking.collector.actor.WorkerRefs; +import com.a.eye.skywalking.collector.actor.selector.HashCodeSelector; +import com.a.eye.skywalking.collector.worker.Const; +import com.a.eye.skywalking.collector.worker.WorkerConfig; +import com.a.eye.skywalking.collector.worker.mock.RecordDataAnswer; +import com.a.eye.skywalking.collector.worker.storage.RecordData; +import com.a.eye.skywalking.collector.worker.tools.RecordDataTool; +import com.google.gson.JsonObject; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.powermock.api.mockito.PowerMockito; +import org.powermock.core.classloader.annotations.PowerMockIgnore; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; + +import java.util.List; + +import static org.mockito.Mockito.*; + +/** + * @author pengys5 + */ +@RunWith(PowerMockRunner.class) +@PrepareForTest({LocalWorkerContext.class}) +@PowerMockIgnore({"javax.management.*"}) +public class NodeMappingDayAggTestCase { + + private NodeMappingDayAgg nodeMappingDayAgg; + private RecordDataAnswer recordDataAnswer; + + @Before + public void init() throws Exception { + ClusterWorkerContext clusterWorkerContext = PowerMockito.mock(ClusterWorkerContext.class); + + LocalWorkerContext localWorkerContext = PowerMockito.mock(LocalWorkerContext.class); + WorkerRefs workerRefs = mock(WorkerRefs.class); + + recordDataAnswer = new RecordDataAnswer(); + doAnswer(recordDataAnswer).when(workerRefs).tell(Mockito.any(RecordData.class)); + + when(localWorkerContext.lookup(NodeMappingDaySave.Role.INSTANCE)).thenReturn(workerRefs); + nodeMappingDayAgg = new NodeMappingDayAgg(NodeMappingDayAgg.Role.INSTANCE, clusterWorkerContext, localWorkerContext); + } + + @Test + public void testRole() { + Assert.assertEquals(NodeMappingDayAgg.class.getSimpleName(), NodeMappingDayAgg.Role.INSTANCE.roleName()); + Assert.assertEquals(HashCodeSelector.class.getSimpleName(), NodeMappingDayAgg.Role.INSTANCE.workerSelector().getClass().getSimpleName()); + } + + @Test + public void testFactory() { + Assert.assertEquals(NodeMappingDayAgg.class.getSimpleName(), NodeMappingDayAgg.Factory.INSTANCE.role().roleName()); + Assert.assertEquals(NodeMappingDayAgg.class.getSimpleName(), NodeMappingDayAgg.Factory.INSTANCE.workerInstance(null).getClass().getSimpleName()); + + int testSize = 10; + WorkerConfig.WorkerNum.Node.NodeMappingDayAgg.Size = testSize; + Assert.assertEquals(testSize, NodeMappingDayAgg.Factory.INSTANCE.workerNum()); + } + + @Test + public void testOnWork() throws Exception { + String id = "2017" + Const.ID_SPLIT + "TestNodeMappingDayAgg"; + JsonObject record = new JsonObject(); + record.addProperty("Column", "TestData"); + + RecordData recordData = new RecordData(id); + recordData.setRecord(record); + nodeMappingDayAgg.onWork(recordData); + + List recordDataList = recordDataAnswer.recordObj.getRecordData(); + RecordData data = RecordDataTool.INSTANCE.getRecord(recordDataList, id); + Assert.assertEquals("TestNodeMappingDayAgg", data.getRecord().get("aggId").getAsString()); + Assert.assertEquals("TestData", data.getRecord().get("Column").getAsString()); + } + + @Test(expected = IllegalArgumentException.class) + public void testOnWorkError() throws Exception { + nodeMappingDayAgg.onWork(new Object()); + } +} diff --git a/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeMappingHourAggTestCase.java b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeMappingHourAggTestCase.java new file mode 100644 index 000000000..78af662cd --- /dev/null +++ b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeMappingHourAggTestCase.java @@ -0,0 +1,88 @@ +package com.a.eye.skywalking.collector.worker.node.persistence; + +import com.a.eye.skywalking.collector.actor.ClusterWorkerContext; +import com.a.eye.skywalking.collector.actor.LocalWorkerContext; +import com.a.eye.skywalking.collector.actor.WorkerRefs; +import com.a.eye.skywalking.collector.actor.selector.HashCodeSelector; +import com.a.eye.skywalking.collector.worker.Const; +import com.a.eye.skywalking.collector.worker.WorkerConfig; +import com.a.eye.skywalking.collector.worker.mock.RecordDataAnswer; +import com.a.eye.skywalking.collector.worker.storage.RecordData; +import com.a.eye.skywalking.collector.worker.tools.RecordDataTool; +import com.google.gson.JsonObject; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.powermock.api.mockito.PowerMockito; +import org.powermock.core.classloader.annotations.PowerMockIgnore; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; + +import java.util.List; + +import static org.mockito.Mockito.*; + +/** + * @author pengys5 + */ +@RunWith(PowerMockRunner.class) +@PrepareForTest({LocalWorkerContext.class}) +@PowerMockIgnore({"javax.management.*"}) +public class NodeMappingHourAggTestCase { + + private NodeMappingHourAgg nodeMappingHourAgg; + private RecordDataAnswer recordDataAnswer; + + @Before + public void init() throws Exception { + ClusterWorkerContext clusterWorkerContext = PowerMockito.mock(ClusterWorkerContext.class); + + LocalWorkerContext localWorkerContext = PowerMockito.mock(LocalWorkerContext.class); + WorkerRefs workerRefs = mock(WorkerRefs.class); + + recordDataAnswer = new RecordDataAnswer(); + doAnswer(recordDataAnswer).when(workerRefs).tell(Mockito.any(RecordData.class)); + + when(localWorkerContext.lookup(NodeMappingHourSave.Role.INSTANCE)).thenReturn(workerRefs); + nodeMappingHourAgg = new NodeMappingHourAgg(NodeMappingHourAgg.Role.INSTANCE, clusterWorkerContext, localWorkerContext); + } + + @Test + public void testRole() { + Assert.assertEquals(NodeMappingHourAgg.class.getSimpleName(), NodeMappingHourAgg.Role.INSTANCE.roleName()); + Assert.assertEquals(HashCodeSelector.class.getSimpleName(), NodeMappingHourAgg.Role.INSTANCE.workerSelector().getClass().getSimpleName()); + } + + @Test + public void testFactory() { + Assert.assertEquals(NodeMappingHourAgg.class.getSimpleName(), NodeMappingHourAgg.Factory.INSTANCE.role().roleName()); + Assert.assertEquals(NodeMappingHourAgg.class.getSimpleName(), NodeMappingHourAgg.Factory.INSTANCE.workerInstance(null).getClass().getSimpleName()); + + int testSize = 10; + WorkerConfig.WorkerNum.Node.NodeMappingHourAgg.Size = testSize; + Assert.assertEquals(testSize, NodeMappingHourAgg.Factory.INSTANCE.workerNum()); + } + + @Test + public void testOnWork() throws Exception { + String id = "2017" + Const.ID_SPLIT + "TestNodeMappingHourAgg"; + JsonObject record = new JsonObject(); + record.addProperty("Column", "TestData"); + + RecordData recordData = new RecordData(id); + recordData.setRecord(record); + nodeMappingHourAgg.onWork(recordData); + + List recordDataList = recordDataAnswer.recordObj.getRecordData(); + RecordData data = RecordDataTool.INSTANCE.getRecord(recordDataList, id); + Assert.assertEquals("TestNodeMappingHourAgg", data.getRecord().get("aggId").getAsString()); + Assert.assertEquals("TestData", data.getRecord().get("Column").getAsString()); + } + + @Test(expected = IllegalArgumentException.class) + public void testOnWorkError() throws Exception { + nodeMappingHourAgg.onWork(new Object()); + } +} diff --git a/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeMappingMinuteAggTestCase.java b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeMappingMinuteAggTestCase.java new file mode 100644 index 000000000..d65b663fa --- /dev/null +++ b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeMappingMinuteAggTestCase.java @@ -0,0 +1,88 @@ +package com.a.eye.skywalking.collector.worker.node.persistence; + +import com.a.eye.skywalking.collector.actor.ClusterWorkerContext; +import com.a.eye.skywalking.collector.actor.LocalWorkerContext; +import com.a.eye.skywalking.collector.actor.WorkerRefs; +import com.a.eye.skywalking.collector.actor.selector.HashCodeSelector; +import com.a.eye.skywalking.collector.worker.Const; +import com.a.eye.skywalking.collector.worker.WorkerConfig; +import com.a.eye.skywalking.collector.worker.mock.RecordDataAnswer; +import com.a.eye.skywalking.collector.worker.storage.RecordData; +import com.a.eye.skywalking.collector.worker.tools.RecordDataTool; +import com.google.gson.JsonObject; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.powermock.api.mockito.PowerMockito; +import org.powermock.core.classloader.annotations.PowerMockIgnore; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; + +import java.util.List; + +import static org.mockito.Mockito.*; + +/** + * @author pengys5 + */ +@RunWith(PowerMockRunner.class) +@PrepareForTest({LocalWorkerContext.class}) +@PowerMockIgnore({"javax.management.*"}) +public class NodeMappingMinuteAggTestCase { + + private NodeMappingMinuteAgg nodeMappingMinuteAgg; + private RecordDataAnswer recordDataAnswer; + + @Before + public void init() throws Exception { + ClusterWorkerContext clusterWorkerContext = PowerMockito.mock(ClusterWorkerContext.class); + + LocalWorkerContext localWorkerContext = PowerMockito.mock(LocalWorkerContext.class); + WorkerRefs workerRefs = mock(WorkerRefs.class); + + recordDataAnswer = new RecordDataAnswer(); + doAnswer(recordDataAnswer).when(workerRefs).tell(Mockito.any(RecordData.class)); + + when(localWorkerContext.lookup(NodeMappingMinuteSave.Role.INSTANCE)).thenReturn(workerRefs); + nodeMappingMinuteAgg = new NodeMappingMinuteAgg(NodeMappingMinuteAgg.Role.INSTANCE, clusterWorkerContext, localWorkerContext); + } + + @Test + public void testRole() { + Assert.assertEquals(NodeMappingMinuteAgg.class.getSimpleName(), NodeMappingMinuteAgg.Role.INSTANCE.roleName()); + Assert.assertEquals(HashCodeSelector.class.getSimpleName(), NodeMappingMinuteAgg.Role.INSTANCE.workerSelector().getClass().getSimpleName()); + } + + @Test + public void testFactory() { + Assert.assertEquals(NodeMappingMinuteAgg.class.getSimpleName(), NodeMappingMinuteAgg.Factory.INSTANCE.role().roleName()); + Assert.assertEquals(NodeMappingMinuteAgg.class.getSimpleName(), NodeMappingMinuteAgg.Factory.INSTANCE.workerInstance(null).getClass().getSimpleName()); + + int testSize = 10; + WorkerConfig.WorkerNum.Node.NodeMappingMinuteAgg.Size = testSize; + Assert.assertEquals(testSize, NodeMappingMinuteAgg.Factory.INSTANCE.workerNum()); + } + + @Test + public void testOnWork() throws Exception { + String id = "2017" + Const.ID_SPLIT + "TestNodeMappingMinuteAgg"; + JsonObject record = new JsonObject(); + record.addProperty("Column", "TestData"); + + RecordData recordData = new RecordData(id); + recordData.setRecord(record); + nodeMappingMinuteAgg.onWork(recordData); + + List recordDataList = recordDataAnswer.recordObj.getRecordData(); + RecordData data = RecordDataTool.INSTANCE.getRecord(recordDataList, id); + Assert.assertEquals("TestNodeMappingMinuteAgg", data.getRecord().get("aggId").getAsString()); + Assert.assertEquals("TestData", data.getRecord().get("Column").getAsString()); + } + + @Test(expected = IllegalArgumentException.class) + public void testOnWorkError() throws Exception { + nodeMappingMinuteAgg.onWork(new Object()); + } +} diff --git a/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeMappingSearchWithTimeSliceUseDB.java b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeMappingSearchWithTimeSliceUseDB.java new file mode 100644 index 000000000..974bfac7d --- /dev/null +++ b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeMappingSearchWithTimeSliceUseDB.java @@ -0,0 +1,38 @@ +package com.a.eye.skywalking.collector.worker.node.persistence; + +import com.a.eye.skywalking.collector.actor.ClusterWorkerContext; +import com.a.eye.skywalking.collector.actor.LocalWorkerContext; +import com.a.eye.skywalking.collector.worker.node.NodeMappingIndex; +import com.a.eye.skywalking.collector.worker.storage.EsClient; +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; + +/** + * @author pengys5 + */ +public class NodeMappingSearchWithTimeSliceUseDB { + + public static void main(String[] args) throws Exception { + EsClient.boot(); + + ClusterWorkerContext clusterWorkerContext = new ClusterWorkerContext(null); + LocalWorkerContext localWorkerContext = new LocalWorkerContext(); + NodeMappingSearchWithTimeSlice nodeMappingSearch = + new NodeMappingSearchWithTimeSlice(NodeMappingSearchWithTimeSlice.WorkerRole.INSTANCE, clusterWorkerContext, localWorkerContext); + + long startTime = 201703310910L; + long endTime = 201703310920L; + JsonObject response = new JsonObject(); + NodeMappingSearchWithTimeSlice.RequestEntity requestEntity = + new NodeMappingSearchWithTimeSlice.RequestEntity(NodeMappingIndex.Type_Minute, startTime, endTime); + nodeMappingSearch.onWork(requestEntity, response); + + JsonArray nodeArray = response.get("result").getAsJsonArray(); + System.out.println(nodeArray.size()); + System.out.println(nodeArray.toString()); + for (int i = 0; i < nodeArray.size(); i++) { + JsonObject nodeJsonObj = nodeArray.get(i).getAsJsonObject(); + System.out.println(nodeJsonObj); + } + } +} diff --git a/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/nodeinst/NodeInstSummaryTestCase.java b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/nodeinst/NodeInstSummaryTestCase.java deleted file mode 100644 index 9ff699af0..000000000 --- a/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/nodeinst/NodeInstSummaryTestCase.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.a.eye.skywalking.collector.worker.nodeinst; - -import com.a.eye.skywalking.collector.actor.AbstractWorker; -import com.a.eye.skywalking.collector.actor.LocalSyncWorkerRef; -import com.a.eye.skywalking.collector.worker.nodeinst.persistence.NodeInstSummarySearchWithTimeSlice; -import com.a.eye.skywalking.collector.worker.storage.EsClient; -import com.google.gson.JsonArray; -import com.google.gson.JsonObject; -import org.elasticsearch.action.index.IndexResponse; -import org.elasticsearch.rest.RestStatus; -import org.junit.Before; -import org.junit.Test; - -import java.net.UnknownHostException; -import java.util.HashMap; -import java.util.Map; - -/** - * @author pengys5 - */ -public class NodeInstSummaryTestCase { - -// @Before - public void initIndex() throws UnknownHostException { - EsClient.boot(); -// NodeInstIndex index = new NodeInstIndex(); -// index.deleteIndex(); -// index.createIndex(); - } - -// @Test - public void testLoadNodeInstSummary() throws Exception { - loadNodeInstSummary(201703202208l, 201703202209l, NodeInstIndex.Type_Minute); -// loadNodeInstance(201703202200l, NodeInstIndex.Type_Hour); -// loadNodeInstance(201703200000l, NodeInstIndex.Type_Day); - } - - public void loadNodeInstSummary(long startTime, long endTime, String type) throws Exception { - LocalSyncWorkerRef workerRef = (LocalSyncWorkerRef) NodeInstSummarySearchWithTimeSlice.Factory.INSTANCE.create(AbstractWorker.noOwner()); - -// insertData(timeSlice, type); -// EsClient.indexRefresh(NodeInstIndex.Index); - - NodeInstSummarySearchWithTimeSlice.RequestEntity requestEntity = new NodeInstSummarySearchWithTimeSlice.RequestEntity(type, startTime, endTime); - JsonObject resJsonObj = new JsonObject(); - workerRef.ask(requestEntity, resJsonObj); - JsonArray nodeArray = resJsonObj.get("result").getAsJsonArray(); - for (int i = 0; i < nodeArray.size(); i++) { - JsonObject node = nodeArray.get(i).getAsJsonObject(); - System.out.println(node); - } - } - - private void insertData(long timeSlice, String type) { - Map json = new HashMap(); - json.put("code", "WebApplication"); - json.put("address", "10.218.9.86:8080"); - json.put("timeSlice", timeSlice); - - String _id = timeSlice + "-WebApplication-" + "10.218.9.86:8080"; - IndexResponse response = EsClient.getClient().prepareIndex(NodeInstIndex.Index, type, _id).setSource(json).get(); - RestStatus status = response.status(); - status.getStatus(); - - json = new HashMap(); - json.put("code", "MotanServiceApplication"); - json.put("address", "10.20.3.15:3000"); - json.put("timeSlice", timeSlice); - - _id = timeSlice + "-MotanServiceApplication-" + "10.20.3.15:3000"; - response = EsClient.getClient().prepareIndex(NodeInstIndex.Index, type, _id).setSource(json).get(); - status = response.status(); - status.getStatus(); - } -} diff --git a/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/noderef/analysis/NodeRefAnalysisVerify.java b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/noderef/analysis/NodeRefAnalysisVerify.java new file mode 100644 index 000000000..50971406f --- /dev/null +++ b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/noderef/analysis/NodeRefAnalysisVerify.java @@ -0,0 +1,66 @@ +package com.a.eye.skywalking.collector.worker.noderef.analysis; + +import com.a.eye.skywalking.collector.worker.storage.RecordData; +import com.a.eye.skywalking.collector.worker.tools.RecordDataTool; +import org.junit.Assert; + +import java.util.List; + +/** + * @author pengys5 + */ +public enum NodeRefAnalysisVerify { + INSTANCE; + + public void verify(List recordDataList, long timeSlice) { + Assert.assertEquals(6, recordDataList.size()); + + RecordData data_1 = RecordDataTool.INSTANCE.getRecord(recordDataList, timeSlice + "..-..portal-service..-..[10.128.35.80:20880]"); + Assert.assertEquals(true, data_1.getRecord().get("frontIsRealCode").getAsBoolean()); + Assert.assertEquals(false, data_1.getRecord().get("behindIsRealCode").getAsBoolean()); + Assert.assertEquals("portal-service", data_1.getRecord().get("front").getAsString()); + Assert.assertEquals("[10.128.35.80:20880]", data_1.getRecord().get("behind").getAsString()); + Assert.assertEquals("portal-service..-..[10.128.35.80:20880]", data_1.getRecord().get("aggId").getAsString()); + Assert.assertEquals(timeSlice, data_1.getRecord().get("timeSlice").getAsLong()); + + RecordData data_2 = RecordDataTool.INSTANCE.getRecord(recordDataList, timeSlice + "..-..cache-service..-..[127.0.0.1:6379]"); + Assert.assertEquals(true, data_2.getRecord().get("frontIsRealCode").getAsBoolean()); + Assert.assertEquals(false, data_2.getRecord().get("behindIsRealCode").getAsBoolean()); + Assert.assertEquals("cache-service", data_2.getRecord().get("front").getAsString()); + Assert.assertEquals("[127.0.0.1:6379]", data_2.getRecord().get("behind").getAsString()); + Assert.assertEquals("cache-service..-..[127.0.0.1:6379]", data_2.getRecord().get("aggId").getAsString()); + Assert.assertEquals(timeSlice, data_2.getRecord().get("timeSlice").getAsLong()); + + RecordData data_3 = RecordDataTool.INSTANCE.getRecord(recordDataList, timeSlice + "..-..cache-service..-..[localhost:-1]"); + Assert.assertEquals(true, data_3.getRecord().get("frontIsRealCode").getAsBoolean()); + Assert.assertEquals(false, data_3.getRecord().get("behindIsRealCode").getAsBoolean()); + Assert.assertEquals("cache-service", data_3.getRecord().get("front").getAsString()); + Assert.assertEquals("[localhost:-1]", data_3.getRecord().get("behind").getAsString()); + Assert.assertEquals("cache-service..-..[localhost:-1]", data_3.getRecord().get("aggId").getAsString()); + Assert.assertEquals(timeSlice, data_3.getRecord().get("timeSlice").getAsLong()); + + RecordData data_4 = RecordDataTool.INSTANCE.getRecord(recordDataList, timeSlice + "..-..User..-..portal-service"); + Assert.assertEquals(true, data_4.getRecord().get("frontIsRealCode").getAsBoolean()); + Assert.assertEquals(true, data_4.getRecord().get("behindIsRealCode").getAsBoolean()); + Assert.assertEquals("User", data_4.getRecord().get("front").getAsString()); + Assert.assertEquals("portal-service", data_4.getRecord().get("behind").getAsString()); + Assert.assertEquals("User..-..portal-service", data_4.getRecord().get("aggId").getAsString()); + Assert.assertEquals(timeSlice, data_4.getRecord().get("timeSlice").getAsLong()); + + RecordData data_5 = RecordDataTool.INSTANCE.getRecord(recordDataList, timeSlice + "..-..portal-service..-..[127.0.0.1:8002]"); + Assert.assertEquals(true, data_5.getRecord().get("frontIsRealCode").getAsBoolean()); + Assert.assertEquals(false, data_5.getRecord().get("behindIsRealCode").getAsBoolean()); + Assert.assertEquals("portal-service", data_5.getRecord().get("front").getAsString()); + Assert.assertEquals("[127.0.0.1:8002]", data_5.getRecord().get("behind").getAsString()); + Assert.assertEquals("portal-service..-..[127.0.0.1:8002]", data_5.getRecord().get("aggId").getAsString()); + Assert.assertEquals(timeSlice, data_5.getRecord().get("timeSlice").getAsLong()); + + RecordData data_6 = RecordDataTool.INSTANCE.getRecord(recordDataList, timeSlice + "..-..persistence-service..-..[127.0.0.1:3307]"); + Assert.assertEquals(true, data_6.getRecord().get("frontIsRealCode").getAsBoolean()); + Assert.assertEquals(false, data_6.getRecord().get("behindIsRealCode").getAsBoolean()); + Assert.assertEquals("persistence-service", data_6.getRecord().get("front").getAsString()); + Assert.assertEquals("[127.0.0.1:3307]", data_6.getRecord().get("behind").getAsString()); + Assert.assertEquals("persistence-service..-..[127.0.0.1:3307]", data_6.getRecord().get("aggId").getAsString()); + Assert.assertEquals(timeSlice, data_6.getRecord().get("timeSlice").getAsLong()); + } +} diff --git a/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/noderef/analysis/NodeRefDayAnalysisTestCase.java b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/noderef/analysis/NodeRefDayAnalysisTestCase.java new file mode 100644 index 000000000..8017ba940 --- /dev/null +++ b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/noderef/analysis/NodeRefDayAnalysisTestCase.java @@ -0,0 +1,102 @@ +package com.a.eye.skywalking.collector.worker.noderef.analysis; + +import com.a.eye.skywalking.collector.actor.ClusterWorkerContext; +import com.a.eye.skywalking.collector.actor.LocalWorkerContext; +import com.a.eye.skywalking.collector.actor.WorkerRefs; +import com.a.eye.skywalking.collector.actor.selector.RollingSelector; +import com.a.eye.skywalking.collector.queue.EndOfBatchCommand; +import com.a.eye.skywalking.collector.worker.WorkerConfig; +import com.a.eye.skywalking.collector.worker.mock.RecordDataAnswer; +import com.a.eye.skywalking.collector.worker.noderef.persistence.NodeRefDayAgg; +import com.a.eye.skywalking.collector.worker.segment.SegmentPost; +import com.a.eye.skywalking.collector.worker.segment.mock.SegmentMock; +import com.a.eye.skywalking.collector.worker.storage.RecordData; +import com.a.eye.skywalking.collector.worker.tools.DateTools; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.powermock.api.mockito.PowerMockito; +import org.powermock.core.classloader.annotations.PowerMockIgnore; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; + +import java.util.List; + +import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.mock; +import static org.powermock.api.mockito.PowerMockito.when; + +/** + * @author pengys5 + */ +@RunWith(PowerMockRunner.class) +@PrepareForTest({ClusterWorkerContext.class}) +@PowerMockIgnore({"javax.management.*"}) +public class NodeRefDayAnalysisTestCase { + + private NodeRefDayAnalysis nodeRefDayAnalysis; + private SegmentMock segmentMock = new SegmentMock(); + private RecordDataAnswer recordDataAnswer; + + @Before + public void init() throws Exception { + ClusterWorkerContext clusterWorkerContext = PowerMockito.mock(ClusterWorkerContext.class); + WorkerRefs workerRefs = mock(WorkerRefs.class); + recordDataAnswer = new RecordDataAnswer(); + doAnswer(recordDataAnswer).when(workerRefs).tell(Mockito.any(RecordData.class)); + + when(clusterWorkerContext.lookup(NodeRefDayAgg.Role.INSTANCE)).thenReturn(workerRefs); + + LocalWorkerContext localWorkerContext = PowerMockito.mock(LocalWorkerContext.class); + WorkerRefs nodeRefResSumWorkerRefs = mock(WorkerRefs.class); + when(localWorkerContext.lookup(NodeRefResSumDayAnalysis.Role.INSTANCE)).thenReturn(nodeRefResSumWorkerRefs); + nodeRefDayAnalysis = new NodeRefDayAnalysis(NodeRefDayAnalysis.Role.INSTANCE, clusterWorkerContext, localWorkerContext); + } + + @Test + public void testRole() { + Assert.assertEquals(NodeRefDayAnalysis.class.getSimpleName(), NodeRefDayAnalysis.Role.INSTANCE.roleName()); + Assert.assertEquals(RollingSelector.class.getSimpleName(), NodeRefDayAnalysis.Role.INSTANCE.workerSelector().getClass().getSimpleName()); + } + + @Test + public void testFactory() { + Assert.assertEquals(NodeRefDayAnalysis.class.getSimpleName(), NodeRefDayAnalysis.Factory.INSTANCE.role().roleName()); + Assert.assertEquals(NodeRefDayAnalysis.class.getSimpleName(), NodeRefDayAnalysis.Factory.INSTANCE.workerInstance(null).getClass().getSimpleName()); + + int testSize = 10; + WorkerConfig.Queue.Node.NodeRefDayAnalysis.Size = testSize; + Assert.assertEquals(testSize, NodeRefDayAnalysis.Factory.INSTANCE.queueSize()); + } + + @Test + public void testAnalyse() throws Exception { + List cacheServiceSegment = segmentMock.mockCacheServiceSegmentSegmentTimeSlice(); + for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : cacheServiceSegment) { + nodeRefDayAnalysis.analyse(segmentWithTimeSlice); + } + List portalService = segmentMock.mockPortalServiceSegmentSegmentTimeSlice(); + for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : portalService) { + nodeRefDayAnalysis.analyse(segmentWithTimeSlice); + } + List persistenceService = segmentMock.mockPersistenceServiceSegmentTimeSlice(); + for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : persistenceService) { + nodeRefDayAnalysis.analyse(segmentWithTimeSlice); + } + List cacheServiceException = segmentMock.mockCacheServiceExceptionSegmentTimeSlice(); + for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : cacheServiceException) { + nodeRefDayAnalysis.analyse(segmentWithTimeSlice); + } + List portalServiceException = segmentMock.mockPortalServiceExceptionSegmentTimeSlice(); + for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : portalServiceException) { + nodeRefDayAnalysis.analyse(segmentWithTimeSlice); + } + + nodeRefDayAnalysis.onWork(new EndOfBatchCommand()); + + List recordDataList = recordDataAnswer.recordObj.getRecordData(); + NodeRefAnalysisVerify.INSTANCE.verify(recordDataList, DateTools.changeToUTCSlice(201703310000L)); + } +} diff --git a/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/noderef/analysis/NodeRefHourAnalysisTestCase.java b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/noderef/analysis/NodeRefHourAnalysisTestCase.java new file mode 100644 index 000000000..b40ef99f0 --- /dev/null +++ b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/noderef/analysis/NodeRefHourAnalysisTestCase.java @@ -0,0 +1,102 @@ +package com.a.eye.skywalking.collector.worker.noderef.analysis; + +import com.a.eye.skywalking.collector.actor.ClusterWorkerContext; +import com.a.eye.skywalking.collector.actor.LocalWorkerContext; +import com.a.eye.skywalking.collector.actor.WorkerRefs; +import com.a.eye.skywalking.collector.actor.selector.RollingSelector; +import com.a.eye.skywalking.collector.queue.EndOfBatchCommand; +import com.a.eye.skywalking.collector.worker.WorkerConfig; +import com.a.eye.skywalking.collector.worker.mock.RecordDataAnswer; +import com.a.eye.skywalking.collector.worker.node.analysis.NodeAnalysisVerify; +import com.a.eye.skywalking.collector.worker.noderef.persistence.NodeRefHourAgg; +import com.a.eye.skywalking.collector.worker.segment.SegmentPost; +import com.a.eye.skywalking.collector.worker.segment.mock.SegmentMock; +import com.a.eye.skywalking.collector.worker.storage.RecordData; +import com.a.eye.skywalking.collector.worker.tools.DateTools; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.powermock.api.mockito.PowerMockito; +import org.powermock.core.classloader.annotations.PowerMockIgnore; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; + +import java.util.List; + +import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.mock; +import static org.powermock.api.mockito.PowerMockito.when; + +/** + * @author pengys5 + */ +@RunWith(PowerMockRunner.class) +@PrepareForTest({ClusterWorkerContext.class}) +@PowerMockIgnore({"javax.management.*"}) +public class NodeRefHourAnalysisTestCase { + + private NodeRefHourAnalysis nodeRefHourAnalysis; + private SegmentMock segmentMock = new SegmentMock(); + private RecordDataAnswer recordDataAnswer; + + @Before + public void init() throws Exception { + ClusterWorkerContext clusterWorkerContext = PowerMockito.mock(ClusterWorkerContext.class); + WorkerRefs workerRefs = mock(WorkerRefs.class); + recordDataAnswer = new RecordDataAnswer(); + doAnswer(recordDataAnswer).when(workerRefs).tell(Mockito.any(RecordData.class)); + + when(clusterWorkerContext.lookup(NodeRefHourAgg.Role.INSTANCE)).thenReturn(workerRefs); + + LocalWorkerContext localWorkerContext = PowerMockito.mock(LocalWorkerContext.class); + WorkerRefs nodeRefResSumWorkerRefs = mock(WorkerRefs.class); + when(localWorkerContext.lookup(NodeRefResSumHourAnalysis.Role.INSTANCE)).thenReturn(nodeRefResSumWorkerRefs); + nodeRefHourAnalysis = new NodeRefHourAnalysis(NodeRefHourAnalysis.Role.INSTANCE, clusterWorkerContext, localWorkerContext); + } + + @Test + public void testRole() { + Assert.assertEquals(NodeRefHourAnalysis.class.getSimpleName(), NodeRefHourAnalysis.Role.INSTANCE.roleName()); + Assert.assertEquals(RollingSelector.class.getSimpleName(), NodeRefHourAnalysis.Role.INSTANCE.workerSelector().getClass().getSimpleName()); + } + + @Test + public void testFactory() { + Assert.assertEquals(NodeRefHourAnalysis.class.getSimpleName(), NodeRefHourAnalysis.Factory.INSTANCE.role().roleName()); + Assert.assertEquals(NodeRefHourAnalysis.class.getSimpleName(), NodeRefHourAnalysis.Factory.INSTANCE.workerInstance(null).getClass().getSimpleName()); + + int testSize = 10; + WorkerConfig.Queue.Node.NodeRefHourAnalysis.Size = testSize; + Assert.assertEquals(testSize, NodeRefHourAnalysis.Factory.INSTANCE.queueSize()); + } + + @Test + public void testAnalyse() throws Exception { + List cacheServiceSegment = segmentMock.mockCacheServiceSegmentSegmentTimeSlice(); + for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : cacheServiceSegment) { + nodeRefHourAnalysis.analyse(segmentWithTimeSlice); + } + List portalService = segmentMock.mockPortalServiceSegmentSegmentTimeSlice(); + for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : portalService) { + nodeRefHourAnalysis.analyse(segmentWithTimeSlice); + } + List persistenceService = segmentMock.mockPersistenceServiceSegmentTimeSlice(); + for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : persistenceService) { + nodeRefHourAnalysis.analyse(segmentWithTimeSlice); + } + List cacheServiceException = segmentMock.mockCacheServiceExceptionSegmentTimeSlice(); + for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : cacheServiceException) { + nodeRefHourAnalysis.analyse(segmentWithTimeSlice); + } + List portalServiceException = segmentMock.mockPortalServiceExceptionSegmentTimeSlice(); + for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : portalServiceException) { + nodeRefHourAnalysis.analyse(segmentWithTimeSlice); + } + + nodeRefHourAnalysis.onWork(new EndOfBatchCommand()); + + NodeRefAnalysisVerify.INSTANCE.verify(recordDataAnswer.recordObj.getRecordData(), DateTools.changeToUTCSlice(201703310900L)); + } +} diff --git a/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/noderef/analysis/NodeRefMinuteAnalysisTestCase.java b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/noderef/analysis/NodeRefMinuteAnalysisTestCase.java new file mode 100644 index 000000000..829abc5da --- /dev/null +++ b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/noderef/analysis/NodeRefMinuteAnalysisTestCase.java @@ -0,0 +1,174 @@ +package com.a.eye.skywalking.collector.worker.noderef.analysis; + +import com.a.eye.skywalking.collector.actor.ClusterWorkerContext; +import com.a.eye.skywalking.collector.actor.LocalWorkerContext; +import com.a.eye.skywalking.collector.actor.WorkerRefs; +import com.a.eye.skywalking.collector.actor.selector.RollingSelector; +import com.a.eye.skywalking.collector.queue.EndOfBatchCommand; +import com.a.eye.skywalking.collector.worker.WorkerConfig; +import com.a.eye.skywalking.collector.worker.mock.RecordDataAnswer; +import com.a.eye.skywalking.collector.worker.node.analysis.NodeAnalysisVerify; +import com.a.eye.skywalking.collector.worker.noderef.persistence.NodeRefMinuteAgg; +import com.a.eye.skywalking.collector.worker.segment.SegmentPost; +import com.a.eye.skywalking.collector.worker.segment.mock.SegmentMock; +import com.a.eye.skywalking.collector.worker.storage.RecordData; +import com.a.eye.skywalking.collector.worker.tools.DateTools; +import com.a.eye.skywalking.collector.worker.tools.RecordDataTool; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.powermock.api.mockito.PowerMockito; +import org.powermock.core.classloader.annotations.PowerMockIgnore; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; + +import java.util.List; +import java.util.Map; + +import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.mock; +import static org.powermock.api.mockito.PowerMockito.when; + +/** + * @author pengys5 + */ +@RunWith(PowerMockRunner.class) +@PrepareForTest({ClusterWorkerContext.class}) +@PowerMockIgnore({"javax.management.*"}) +public class NodeRefMinuteAnalysisTestCase { + + private NodeRefMinuteAnalysis nodeRefMinuteAnalysis; + private SegmentMock segmentMock = new SegmentMock(); + private RecordDataAnswer recordDataAnswer; + + @Before + public void init() throws Exception { + ClusterWorkerContext clusterWorkerContext = PowerMockito.mock(ClusterWorkerContext.class); + WorkerRefs workerRefs = mock(WorkerRefs.class); + recordDataAnswer = new RecordDataAnswer(); + doAnswer(recordDataAnswer).when(workerRefs).tell(Mockito.any(RecordData.class)); + + when(clusterWorkerContext.lookup(NodeRefMinuteAgg.Role.INSTANCE)).thenReturn(workerRefs); + + LocalWorkerContext localWorkerContext = PowerMockito.mock(LocalWorkerContext.class); + WorkerRefs nodeRefResSumWorkerRefs = mock(WorkerRefs.class); + when(localWorkerContext.lookup(NodeRefResSumMinuteAnalysis.Role.INSTANCE)).thenReturn(nodeRefResSumWorkerRefs); + nodeRefMinuteAnalysis = new NodeRefMinuteAnalysis(NodeRefMinuteAnalysis.Role.INSTANCE, clusterWorkerContext, localWorkerContext); + } + + @Test + public void testRole() { + Assert.assertEquals(NodeRefMinuteAnalysis.class.getSimpleName(), NodeRefMinuteAnalysis.Role.INSTANCE.roleName()); + Assert.assertEquals(RollingSelector.class.getSimpleName(), NodeRefMinuteAnalysis.Role.INSTANCE.workerSelector().getClass().getSimpleName()); + } + + @Test + public void testFactory() { + Assert.assertEquals(NodeRefMinuteAnalysis.class.getSimpleName(), NodeRefMinuteAnalysis.Factory.INSTANCE.role().roleName()); + Assert.assertEquals(NodeRefMinuteAnalysis.class.getSimpleName(), NodeRefMinuteAnalysis.Factory.INSTANCE.workerInstance(null).getClass().getSimpleName()); + + int testSize = 10; + WorkerConfig.Queue.Node.NodeRefMinuteAnalysis.Size = testSize; + Assert.assertEquals(testSize, NodeRefMinuteAnalysis.Factory.INSTANCE.queueSize()); + } + + @Test + public void testAnalyse() throws Exception { + List cacheServiceSegment = segmentMock.mockCacheServiceSegmentSegmentTimeSlice(); + for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : cacheServiceSegment) { + nodeRefMinuteAnalysis.analyse(segmentWithTimeSlice); + } + List portalService = segmentMock.mockPortalServiceSegmentSegmentTimeSlice(); + for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : portalService) { + nodeRefMinuteAnalysis.analyse(segmentWithTimeSlice); + } + List persistenceService = segmentMock.mockPersistenceServiceSegmentTimeSlice(); + for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : persistenceService) { + nodeRefMinuteAnalysis.analyse(segmentWithTimeSlice); + } + List cacheServiceException = segmentMock.mockCacheServiceExceptionSegmentTimeSlice(); + for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : cacheServiceException) { + nodeRefMinuteAnalysis.analyse(segmentWithTimeSlice); + } + List portalServiceException = segmentMock.mockPortalServiceExceptionSegmentTimeSlice(); + for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : portalServiceException) { + nodeRefMinuteAnalysis.analyse(segmentWithTimeSlice); + } + + nodeRefMinuteAnalysis.onWork(new EndOfBatchCommand()); + + Assert.assertEquals(8, recordDataAnswer.recordObj.getRecordData().size()); + this.verify_1(recordDataAnswer.recordObj.getRecordData(), DateTools.changeToUTCSlice(201703310915L)); + this.verify_2(recordDataAnswer.recordObj.getRecordData(), DateTools.changeToUTCSlice(201703310916L)); + } + + public void verify_1(List recordDataList, long timeSlice) { + RecordData data_5 = RecordDataTool.INSTANCE.getRecord(recordDataList, timeSlice + "..-..portal-service..-..[127.0.0.1:8002]"); + Assert.assertEquals(true, data_5.getRecord().get("frontIsRealCode").getAsBoolean()); + Assert.assertEquals(false, data_5.getRecord().get("behindIsRealCode").getAsBoolean()); + Assert.assertEquals("portal-service", data_5.getRecord().get("front").getAsString()); + Assert.assertEquals("[127.0.0.1:8002]", data_5.getRecord().get("behind").getAsString()); + Assert.assertEquals("portal-service..-..[127.0.0.1:8002]", data_5.getRecord().get("aggId").getAsString()); + Assert.assertEquals(timeSlice, data_5.getRecord().get("timeSlice").getAsLong()); + + RecordData data_3 = RecordDataTool.INSTANCE.getRecord(recordDataList, timeSlice + "..-..cache-service..-..[localhost:-1]"); + Assert.assertEquals(true, data_3.getRecord().get("frontIsRealCode").getAsBoolean()); + Assert.assertEquals(false, data_3.getRecord().get("behindIsRealCode").getAsBoolean()); + Assert.assertEquals("cache-service", data_3.getRecord().get("front").getAsString()); + Assert.assertEquals("[localhost:-1]", data_3.getRecord().get("behind").getAsString()); + Assert.assertEquals("cache-service..-..[localhost:-1]", data_3.getRecord().get("aggId").getAsString()); + Assert.assertEquals(timeSlice, data_3.getRecord().get("timeSlice").getAsLong()); + + RecordData data_4 = RecordDataTool.INSTANCE.getRecord(recordDataList, timeSlice + "..-..User..-..portal-service"); + Assert.assertEquals(true, data_4.getRecord().get("frontIsRealCode").getAsBoolean()); + Assert.assertEquals(true, data_4.getRecord().get("behindIsRealCode").getAsBoolean()); + Assert.assertEquals("User", data_4.getRecord().get("front").getAsString()); + Assert.assertEquals("portal-service", data_4.getRecord().get("behind").getAsString()); + Assert.assertEquals("User..-..portal-service", data_4.getRecord().get("aggId").getAsString()); + Assert.assertEquals(timeSlice, data_4.getRecord().get("timeSlice").getAsLong()); + + RecordData data_2 = RecordDataTool.INSTANCE.getRecord(recordDataList, timeSlice + "..-..cache-service..-..[127.0.0.1:6379]"); + Assert.assertEquals(true, data_2.getRecord().get("frontIsRealCode").getAsBoolean()); + Assert.assertEquals(false, data_2.getRecord().get("behindIsRealCode").getAsBoolean()); + Assert.assertEquals("cache-service", data_2.getRecord().get("front").getAsString()); + Assert.assertEquals("[127.0.0.1:6379]", data_2.getRecord().get("behind").getAsString()); + Assert.assertEquals("cache-service..-..[127.0.0.1:6379]", data_2.getRecord().get("aggId").getAsString()); + Assert.assertEquals(timeSlice, data_2.getRecord().get("timeSlice").getAsLong()); + + RecordData data_1 = RecordDataTool.INSTANCE.getRecord(recordDataList, timeSlice + "..-..portal-service..-..[10.128.35.80:20880]"); + Assert.assertEquals(true, data_1.getRecord().get("frontIsRealCode").getAsBoolean()); + Assert.assertEquals(false, data_1.getRecord().get("behindIsRealCode").getAsBoolean()); + Assert.assertEquals("portal-service", data_1.getRecord().get("front").getAsString()); + Assert.assertEquals("[10.128.35.80:20880]", data_1.getRecord().get("behind").getAsString()); + Assert.assertEquals("portal-service..-..[10.128.35.80:20880]", data_1.getRecord().get("aggId").getAsString()); + Assert.assertEquals(timeSlice, data_1.getRecord().get("timeSlice").getAsLong()); + + RecordData data_6 = RecordDataTool.INSTANCE.getRecord(recordDataList, timeSlice + "..-..persistence-service..-..[127.0.0.1:3307]"); + Assert.assertEquals(true, data_6.getRecord().get("frontIsRealCode").getAsBoolean()); + Assert.assertEquals(false, data_6.getRecord().get("behindIsRealCode").getAsBoolean()); + Assert.assertEquals("persistence-service", data_6.getRecord().get("front").getAsString()); + Assert.assertEquals("[127.0.0.1:3307]", data_6.getRecord().get("behind").getAsString()); + Assert.assertEquals("persistence-service..-..[127.0.0.1:3307]", data_6.getRecord().get("aggId").getAsString()); + Assert.assertEquals(timeSlice, data_6.getRecord().get("timeSlice").getAsLong()); + } + + public void verify_2(List recordDataList, long timeSlice) { + RecordData data_5 = RecordDataTool.INSTANCE.getRecord(recordDataList, timeSlice + "..-..portal-service..-..[127.0.0.1:8002]"); + Assert.assertEquals(true, data_5.getRecord().get("frontIsRealCode").getAsBoolean()); + Assert.assertEquals(false, data_5.getRecord().get("behindIsRealCode").getAsBoolean()); + Assert.assertEquals("portal-service", data_5.getRecord().get("front").getAsString()); + Assert.assertEquals("[127.0.0.1:8002]", data_5.getRecord().get("behind").getAsString()); + Assert.assertEquals("portal-service..-..[127.0.0.1:8002]", data_5.getRecord().get("aggId").getAsString()); + Assert.assertEquals(timeSlice, data_5.getRecord().get("timeSlice").getAsLong()); + + RecordData data_4 = RecordDataTool.INSTANCE.getRecord(recordDataList, timeSlice + "..-..User..-..portal-service"); + Assert.assertEquals(true, data_4.getRecord().get("frontIsRealCode").getAsBoolean()); + Assert.assertEquals(true, data_4.getRecord().get("behindIsRealCode").getAsBoolean()); + Assert.assertEquals("User", data_4.getRecord().get("front").getAsString()); + Assert.assertEquals("portal-service", data_4.getRecord().get("behind").getAsString()); + Assert.assertEquals("User..-..portal-service", data_4.getRecord().get("aggId").getAsString()); + Assert.assertEquals(timeSlice, data_4.getRecord().get("timeSlice").getAsLong()); + } +} diff --git a/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/noderef/persistence/NodeRefResSumGroupWithTimeSliceUseDB.java b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/noderef/persistence/NodeRefResSumGroupWithTimeSliceUseDB.java new file mode 100644 index 000000000..b8e9b2008 --- /dev/null +++ b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/noderef/persistence/NodeRefResSumGroupWithTimeSliceUseDB.java @@ -0,0 +1,37 @@ +package com.a.eye.skywalking.collector.worker.noderef.persistence; + +import com.a.eye.skywalking.collector.actor.ClusterWorkerContext; +import com.a.eye.skywalking.collector.actor.LocalWorkerContext; +import com.a.eye.skywalking.collector.worker.noderef.NodeRefIndex; +import com.a.eye.skywalking.collector.worker.storage.EsClient; +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; + +/** + * @author pengys5 + */ +public class NodeRefResSumGroupWithTimeSliceUseDB { + + public static void main(String[] args) throws Exception { + EsClient.boot(); + + ClusterWorkerContext clusterWorkerContext = new ClusterWorkerContext(null); + LocalWorkerContext localWorkerContext = new LocalWorkerContext(); + NodeRefResSumGroupWithTimeSlice nodeRefSearch = + new NodeRefResSumGroupWithTimeSlice(NodeRefResSumGroupWithTimeSlice.WorkerRole.INSTANCE, clusterWorkerContext, localWorkerContext); + + long startTime = 201703310910L; + long endTime = 201703310920L; + JsonObject response = new JsonObject(); + NodeRefResSumGroupWithTimeSlice.RequestEntity requestEntity = + new NodeRefResSumGroupWithTimeSlice.RequestEntity(NodeRefIndex.Type_Minute, startTime, endTime); + nodeRefSearch.onWork(requestEntity, response); + + JsonArray nodeRefArray = response.get("result").getAsJsonArray(); + System.out.println(nodeRefArray.toString()); + for (int i = 0; i < nodeRefArray.size(); i++) { + JsonObject nodeRefJsonObj = nodeRefArray.get(i).getAsJsonObject(); + System.out.println(nodeRefJsonObj); + } + } +} diff --git a/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/noderef/persistence/NodeRefResSumSearchWithTimeSliceUseDB.java b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/noderef/persistence/NodeRefResSumSearchWithTimeSliceUseDB.java new file mode 100644 index 000000000..140c9ff03 --- /dev/null +++ b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/noderef/persistence/NodeRefResSumSearchWithTimeSliceUseDB.java @@ -0,0 +1,37 @@ +package com.a.eye.skywalking.collector.worker.noderef.persistence; + +import com.a.eye.skywalking.collector.actor.ClusterWorkerContext; +import com.a.eye.skywalking.collector.actor.LocalWorkerContext; +import com.a.eye.skywalking.collector.worker.noderef.NodeRefIndex; +import com.a.eye.skywalking.collector.worker.storage.EsClient; +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; + +/** + * @author pengys5 + */ +public class NodeRefResSumSearchWithTimeSliceUseDB { + + public static void main(String[] args) throws Exception { + EsClient.boot(); + + ClusterWorkerContext clusterWorkerContext = new ClusterWorkerContext(null); + LocalWorkerContext localWorkerContext = new LocalWorkerContext(); + NodeRefResSumSearchWithTimeSlice nodeRefSearch = + new NodeRefResSumSearchWithTimeSlice(NodeRefResSumSearchWithTimeSlice.WorkerRole.INSTANCE, clusterWorkerContext, localWorkerContext); + + long startTime = 201703310910L; + long endTime = 201703310920L; + JsonObject response = new JsonObject(); + NodeRefResSumSearchWithTimeSlice.RequestEntity requestEntity = + new NodeRefResSumSearchWithTimeSlice.RequestEntity(NodeRefIndex.Type_Minute, startTime, endTime); + nodeRefSearch.onWork(requestEntity, response); + + JsonArray nodeRefArray = response.get("result").getAsJsonArray(); + System.out.println(nodeRefArray.toString()); + for (int i = 0; i < nodeRefArray.size(); i++) { + JsonObject nodeRefJsonObj = nodeRefArray.get(i).getAsJsonObject(); + System.out.println(nodeRefJsonObj); + } + } +} diff --git a/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/noderef/persistence/NodeRefSearchWithTimeSliceUseDB.java b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/noderef/persistence/NodeRefSearchWithTimeSliceUseDB.java new file mode 100644 index 000000000..5b85da58e --- /dev/null +++ b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/noderef/persistence/NodeRefSearchWithTimeSliceUseDB.java @@ -0,0 +1,37 @@ +package com.a.eye.skywalking.collector.worker.noderef.persistence; + +import com.a.eye.skywalking.collector.actor.ClusterWorkerContext; +import com.a.eye.skywalking.collector.actor.LocalWorkerContext; +import com.a.eye.skywalking.collector.worker.noderef.NodeRefIndex; +import com.a.eye.skywalking.collector.worker.storage.EsClient; +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; + +/** + * @author pengys5 + */ +public class NodeRefSearchWithTimeSliceUseDB { + + public static void main(String[] args) throws Exception { + EsClient.boot(); + + ClusterWorkerContext clusterWorkerContext = new ClusterWorkerContext(null); + LocalWorkerContext localWorkerContext = new LocalWorkerContext(); + NodeRefSearchWithTimeSlice nodeRefSearch = + new NodeRefSearchWithTimeSlice(NodeRefSearchWithTimeSlice.WorkerRole.INSTANCE, clusterWorkerContext, localWorkerContext); + + long startTime = 201703310910L; + long endTime = 201703310920L; + JsonObject response = new JsonObject(); + NodeRefSearchWithTimeSlice.RequestEntity requestEntity = + new NodeRefSearchWithTimeSlice.RequestEntity(NodeRefIndex.Type_Minute, startTime, endTime); + nodeRefSearch.onWork(requestEntity, response); + + JsonArray nodeRefArray = response.get("result").getAsJsonArray(); + System.out.println(nodeRefArray.toString()); + for (int i = 0; i < nodeRefArray.size(); i++) { + JsonObject nodeRefJsonObj = nodeRefArray.get(i).getAsJsonObject(); + System.out.println(nodeRefJsonObj); + } + } +} diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/tools/HttpClientTools.java b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/segment/HttpClientTools.java similarity index 98% rename from skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/tools/HttpClientTools.java rename to skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/segment/HttpClientTools.java index 84d0d0530..ce28e6729 100644 --- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/tools/HttpClientTools.java +++ b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/segment/HttpClientTools.java @@ -1,4 +1,4 @@ -package com.a.eye.skywalking.collector.worker.tools; +package com.a.eye.skywalking.collector.worker.segment; import org.apache.http.Consts; import org.apache.http.HttpEntity; diff --git a/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/segment/SegmentPostTestCase.java b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/segment/SegmentPostTestCase.java index 183fa7593..11bf29106 100644 --- a/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/segment/SegmentPostTestCase.java +++ b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/segment/SegmentPostTestCase.java @@ -4,9 +4,10 @@ import com.a.eye.skywalking.collector.actor.ClusterWorkerContext; import com.a.eye.skywalking.collector.actor.LocalWorkerContext; import com.a.eye.skywalking.collector.actor.WorkerRef; import com.a.eye.skywalking.collector.worker.globaltrace.analysis.GlobalTraceAnalysis; -import com.a.eye.skywalking.collector.worker.node.analysis.NodeDayAnalysis; -import com.a.eye.skywalking.collector.worker.node.analysis.NodeHourAnalysis; -import com.a.eye.skywalking.collector.worker.node.analysis.NodeMinuteAnalysis; +import com.a.eye.skywalking.collector.worker.node.analysis.NodeCompAnalysis; +import com.a.eye.skywalking.collector.worker.node.analysis.NodeMappingDayAnalysis; +import com.a.eye.skywalking.collector.worker.node.analysis.NodeMappingHourAnalysis; +import com.a.eye.skywalking.collector.worker.node.analysis.NodeMappingMinuteAnalysis; import com.a.eye.skywalking.collector.worker.noderef.analysis.NodeRefDayAnalysis; import com.a.eye.skywalking.collector.worker.noderef.analysis.NodeRefHourAnalysis; import com.a.eye.skywalking.collector.worker.noderef.analysis.NodeRefMinuteAnalysis; @@ -16,6 +17,8 @@ import com.a.eye.skywalking.collector.worker.segment.persistence.SegmentExceptio import com.a.eye.skywalking.collector.worker.segment.persistence.SegmentSave; import com.a.eye.skywalking.collector.worker.tools.DateTools; import com.google.gson.JsonObject; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.junit.Assert; import org.junit.Before; import org.junit.Test; @@ -38,6 +41,8 @@ import static org.powermock.api.mockito.PowerMockito.*; @PowerMockIgnore({"javax.management.*"}) public class SegmentPostTestCase { + private Logger logger = LogManager.getFormatterLogger(SegmentPostTestCase.class); + private SegmentMock segmentMock; private SegmentPost segmentPost; private LocalWorkerContext localWorkerContext; @@ -54,7 +59,8 @@ public class SegmentPostTestCase { initGlobalTraceAnalysis(); initSegmentExceptionSave(); initNodeRefAnalysis(); - initNodeAnalysis(); + initNodeCompAnalysis(); + initNodeNodeMappingAnalysis(); segmentPost = spy(new SegmentPost(SegmentPost.WorkerRole.INSTANCE, clusterWorkerContext, localWorkerContext)); } @@ -134,31 +140,42 @@ public class SegmentPostTestCase { doAnswer(nodeRefDayAnalysisAnswer).when(nodeRefDayAnalysis).tell(Mockito.argThat(new IsSegmentWithTimeSlice())); } - private SegmentOtherAnswer nodeMinuteAnalysisAnswer; - private SegmentOtherAnswer nodeHourAnalysisAnswer; - private SegmentOtherAnswer nodeDayAnalysisAnswer; + private SegmentOtherAnswer nodeCompAnalysisAnswer; - public void initNodeAnalysis() throws Exception { + public void initNodeCompAnalysis() throws Exception { WorkerRef nodeMinuteAnalysis = mock(WorkerRef.class); - doReturn(NodeMinuteAnalysis.Role.INSTANCE).when(nodeMinuteAnalysis, "getRole"); + doReturn(NodeCompAnalysis.Role.INSTANCE).when(nodeMinuteAnalysis, "getRole"); localWorkerContext.put(nodeMinuteAnalysis); - nodeMinuteAnalysisAnswer = new SegmentOtherAnswer(); - doAnswer(nodeMinuteAnalysisAnswer).when(nodeMinuteAnalysis).tell(Mockito.argThat(new IsSegmentWithTimeSlice())); + nodeCompAnalysisAnswer = new SegmentOtherAnswer(); + doAnswer(nodeCompAnalysisAnswer).when(nodeMinuteAnalysis).tell(Mockito.argThat(new IsSegmentWithTimeSlice())); + } - WorkerRef nodeHourAnalysis = mock(WorkerRef.class); - doReturn(NodeHourAnalysis.Role.INSTANCE).when(nodeHourAnalysis, "getRole"); - localWorkerContext.put(nodeHourAnalysis); + private SegmentOtherAnswer nodeMappingMinuteAnalysisAnswer; + private SegmentOtherAnswer nodeMappingHourAnalysisAnswer; + private SegmentOtherAnswer nodeMappingDayAnalysisAnswer; - nodeHourAnalysisAnswer = new SegmentOtherAnswer(); - doAnswer(nodeHourAnalysisAnswer).when(nodeHourAnalysis).tell(Mockito.argThat(new IsSegmentWithTimeSlice())); + public void initNodeNodeMappingAnalysis() throws Exception { + WorkerRef nodeMappingMinuteAnalysis = mock(WorkerRef.class); + doReturn(NodeMappingMinuteAnalysis.Role.INSTANCE).when(nodeMappingMinuteAnalysis, "getRole"); + localWorkerContext.put(nodeMappingMinuteAnalysis); - WorkerRef nodeDayAnalysis = mock(WorkerRef.class); - doReturn(NodeDayAnalysis.Role.INSTANCE).when(nodeDayAnalysis, "getRole"); - localWorkerContext.put(nodeDayAnalysis); + nodeMappingMinuteAnalysisAnswer = new SegmentOtherAnswer(); + doAnswer(nodeMappingMinuteAnalysisAnswer).when(nodeMappingMinuteAnalysis).tell(Mockito.argThat(new IsSegmentWithTimeSlice())); - nodeDayAnalysisAnswer = new SegmentOtherAnswer(); - doAnswer(nodeDayAnalysisAnswer).when(nodeDayAnalysis).tell(Mockito.argThat(new IsSegmentWithTimeSlice())); + WorkerRef nodeMappingHourAnalysis = mock(WorkerRef.class); + doReturn(NodeMappingHourAnalysis.Role.INSTANCE).when(nodeMappingHourAnalysis, "getRole"); + localWorkerContext.put(nodeMappingHourAnalysis); + + nodeMappingHourAnalysisAnswer = new SegmentOtherAnswer(); + doAnswer(nodeMappingHourAnalysisAnswer).when(nodeMappingHourAnalysis).tell(Mockito.argThat(new IsSegmentWithTimeSlice())); + + WorkerRef nodeMappingDayAnalysis = mock(WorkerRef.class); + doReturn(NodeMappingDayAnalysis.Role.INSTANCE).when(nodeMappingDayAnalysis, "getRole"); + localWorkerContext.put(nodeMappingDayAnalysis); + + nodeMappingDayAnalysisAnswer = new SegmentOtherAnswer(); + doAnswer(nodeMappingDayAnalysisAnswer).when(nodeMappingDayAnalysis).tell(Mockito.argThat(new IsSegmentWithTimeSlice())); } @Test @@ -198,18 +215,6 @@ public class SegmentPostTestCase { Assert.assertEquals(DateTools.changeToUTCSlice(201703310915L), nodeRefDayAnalysisAnswer.segmentWithTimeSlice.getMinute()); Assert.assertEquals(DateTools.changeToUTCSlice(201703310900L), nodeRefDayAnalysisAnswer.segmentWithTimeSlice.getHour()); Assert.assertEquals(201703310000L, nodeRefDayAnalysisAnswer.segmentWithTimeSlice.getDay()); - - Assert.assertEquals(DateTools.changeToUTCSlice(201703310915L), nodeMinuteAnalysisAnswer.segmentWithTimeSlice.getMinute()); - Assert.assertEquals(DateTools.changeToUTCSlice(201703310900L), nodeMinuteAnalysisAnswer.segmentWithTimeSlice.getHour()); - Assert.assertEquals(201703310000L, nodeMinuteAnalysisAnswer.segmentWithTimeSlice.getDay()); - - Assert.assertEquals(DateTools.changeToUTCSlice(201703310915L), nodeHourAnalysisAnswer.segmentWithTimeSlice.getMinute()); - Assert.assertEquals(DateTools.changeToUTCSlice(201703310900L), nodeHourAnalysisAnswer.segmentWithTimeSlice.getHour()); - Assert.assertEquals(201703310000L, nodeHourAnalysisAnswer.segmentWithTimeSlice.getDay()); - - Assert.assertEquals(DateTools.changeToUTCSlice(201703310915L), nodeDayAnalysisAnswer.segmentWithTimeSlice.getMinute()); - Assert.assertEquals(DateTools.changeToUTCSlice(201703310900L), nodeDayAnalysisAnswer.segmentWithTimeSlice.getHour()); - Assert.assertEquals(201703310000L, nodeDayAnalysisAnswer.segmentWithTimeSlice.getDay()); } public class SegmentOtherAnswer implements Answer { @@ -231,6 +236,7 @@ public class SegmentPostTestCase { @Override public Object answer(InvocationOnMock invocation) throws Throwable { JsonObject jsonObject = (JsonObject) invocation.getArguments()[0]; + logger.info("SegmentSave json: " + jsonObject.toString()); minute = jsonObject.get("minute").getAsLong(); hour = jsonObject.get("hour").getAsLong(); day = jsonObject.get("day").getAsLong(); diff --git a/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/segment/SegmentRealPost.java b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/segment/SegmentRealPost.java new file mode 100644 index 000000000..f0c6cfdeb --- /dev/null +++ b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/segment/SegmentRealPost.java @@ -0,0 +1,27 @@ +package com.a.eye.skywalking.collector.worker.segment; + +import com.a.eye.skywalking.collector.worker.segment.mock.SegmentMock; + +/** + * @author pengys5 + */ +public class SegmentRealPost { + + public static void main(String[] args) throws Exception { + SegmentMock mock = new SegmentMock(); +// String cacheServiceExceptionSegmentAsString = mock.mockCacheServiceExceptionSegmentAsString(); +// HttpClientTools.INSTANCE.post("http://localhost:7001/segments", cacheServiceExceptionSegmentAsString); +// +// String portalServiceExceptionSegmentAsString = mock.mockPortalServiceExceptionSegmentAsString(); +// HttpClientTools.INSTANCE.post("http://localhost:7001/segments", portalServiceExceptionSegmentAsString); + + String cacheServiceSegmentAsString = mock.mockCacheServiceSegmentAsString(); + HttpClientTools.INSTANCE.post("http://localhost:7001/segments", cacheServiceSegmentAsString); + + String persistenceServiceSegmentAsString = mock.mockPersistenceServiceSegmentAsString(); + HttpClientTools.INSTANCE.post("http://localhost:7001/segments", persistenceServiceSegmentAsString); + + String portalServiceSegmentAsString = mock.mockPortalServiceSegmentAsString(); + HttpClientTools.INSTANCE.post("http://localhost:7001/segments", portalServiceSegmentAsString); + } +} diff --git a/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/segment/SegmentSaveTestCase.java b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/segment/SegmentSaveTestCase.java deleted file mode 100644 index 2f98b1a65..000000000 --- a/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/segment/SegmentSaveTestCase.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.a.eye.skywalking.collector.worker.segment; - -import com.a.eye.skywalking.collector.worker.segment.persistence.SegmentSave; -import com.google.gson.JsonObject; -import org.junit.Test; -import org.mockito.Mockito; - -/** - * @author pengys5 - */ -public class SegmentSaveTestCase { - - @Test - public void testAnalyse() throws Exception{ - SegmentSave segmentSave = Mockito.mock(SegmentSave.class); - - JsonObject segment_1 = new JsonObject(); - segmentSave.analyse(segment_1); - } -} diff --git a/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/segment/mock/SegmentMock.java b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/segment/mock/SegmentMock.java index 6766e6719..2b31d9eb8 100644 --- a/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/segment/mock/SegmentMock.java +++ b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/segment/mock/SegmentMock.java @@ -1,20 +1,41 @@ package com.a.eye.skywalking.collector.worker.segment.mock; +import com.a.eye.skywalking.collector.worker.segment.SegmentPost; +import com.a.eye.skywalking.collector.worker.tools.DateTools; import com.a.eye.skywalking.collector.worker.tools.JsonFileReader; +import com.a.eye.skywalking.trace.SegmentsMessage; +import com.a.eye.skywalking.trace.TraceSegment; +import com.google.gson.Gson; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import java.io.FileNotFoundException; +import java.util.ArrayList; +import java.util.List; /** * @author pengys5 */ public class SegmentMock { + private Logger logger = LogManager.getFormatterLogger(SegmentMock.class); + + private Gson gson = new Gson(); private String path = this.getClass().getResource("/").getPath(); private final String CacheServiceJsonFile = path + "/json/segment/post/normal/cache-service.json"; private final String PersistenceServiceJsonFile = path + "/json/segment/post/normal/persistence-service.json"; private final String PortalServiceJsonFile = path + "/json/segment/post/normal/portal-service.json"; + private final String CacheServiceExceptionJsonFile = path + "/json/segment/post/exception/cache-service.json"; + private final String PortalServiceExceptionJsonFile = path + "/json/segment/post/exception/portal-service.json"; + + private final String SpecialJsonFile = path + "/json/segment/post/special/special.json"; + + public String mockSpecialSegmentAsString() throws FileNotFoundException { + return JsonFileReader.INSTANCE.read(SpecialJsonFile); + } + public String mockCacheServiceSegmentAsString() throws FileNotFoundException { return JsonFileReader.INSTANCE.read(CacheServiceJsonFile); } @@ -26,4 +47,70 @@ public class SegmentMock { public String mockPortalServiceSegmentAsString() throws FileNotFoundException { return JsonFileReader.INSTANCE.read(PortalServiceJsonFile); } + + public String mockCacheServiceExceptionSegmentAsString() throws FileNotFoundException { + return JsonFileReader.INSTANCE.read(CacheServiceExceptionJsonFile); + } + + public String mockPortalServiceExceptionSegmentAsString() throws FileNotFoundException { + return JsonFileReader.INSTANCE.read(PortalServiceExceptionJsonFile); + } + + public List mockSpecialSegmentTimeSlice() throws FileNotFoundException { + String specialSegmentAsString = mockSpecialSegmentAsString(); + logger.debug(specialSegmentAsString); + return createSegmentWithTimeSliceList(specialSegmentAsString); + } + + public List mockCacheServiceExceptionSegmentTimeSlice() throws FileNotFoundException { + String cacheServiceExceptionSegmentAsString = mockCacheServiceExceptionSegmentAsString(); + logger.debug(cacheServiceExceptionSegmentAsString); + return createSegmentWithTimeSliceList(cacheServiceExceptionSegmentAsString); + } + + public List mockPortalServiceExceptionSegmentTimeSlice() throws FileNotFoundException { + String portalServiceExceptionSegmentAsString = mockPortalServiceExceptionSegmentAsString(); + logger.debug(portalServiceExceptionSegmentAsString); + return createSegmentWithTimeSliceList(portalServiceExceptionSegmentAsString); + } + + public List mockCacheServiceSegmentSegmentTimeSlice() throws FileNotFoundException { + String cacheServiceSegmentAsString = mockCacheServiceSegmentAsString(); + logger.debug(cacheServiceSegmentAsString); + return createSegmentWithTimeSliceList(cacheServiceSegmentAsString); + } + + public List mockPersistenceServiceSegmentTimeSlice() throws FileNotFoundException { + String persistenceServiceSegmentAsString = mockPersistenceServiceSegmentAsString(); + logger.debug(persistenceServiceSegmentAsString); + return createSegmentWithTimeSliceList(persistenceServiceSegmentAsString); + } + + public List mockPortalServiceSegmentSegmentTimeSlice() throws FileNotFoundException { + String portalServiceSegmentAsString = mockPortalServiceSegmentAsString(); + logger.debug(portalServiceSegmentAsString); + return createSegmentWithTimeSliceList(portalServiceSegmentAsString); + } + + private List createSegmentWithTimeSliceList(String segmentJsonStr) { + SegmentsMessage segmentsMessage = gson.fromJson(segmentJsonStr, SegmentsMessage.class); + List segmentList = segmentsMessage.getSegments(); + + List segmentWithTimeSliceList = new ArrayList<>(); + for (TraceSegment newSegment : segmentList) { + SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice = createSegmentWithTimeSlice(newSegment); + segmentWithTimeSliceList.add(segmentWithTimeSlice); + } + return segmentWithTimeSliceList; + } + + private SegmentPost.SegmentWithTimeSlice createSegmentWithTimeSlice(TraceSegment newSegment) { + long minuteSlice = DateTools.getMinuteSlice(newSegment.getStartTime()); + long hourSlice = DateTools.getHourSlice(newSegment.getStartTime()); + long daySlice = DateTools.getDaySlice(newSegment.getStartTime()); + int second = DateTools.getSecond(newSegment.getStartTime()); + + SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice = new SegmentPost.SegmentWithTimeSlice(newSegment, minuteSlice, hourSlice, daySlice, second); + return segmentWithTimeSlice; + } } diff --git a/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/segment/persistence/SegmentCostSaveTestCase.java b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/segment/persistence/SegmentCostSaveTestCase.java new file mode 100644 index 000000000..71b31908b --- /dev/null +++ b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/segment/persistence/SegmentCostSaveTestCase.java @@ -0,0 +1,206 @@ +package com.a.eye.skywalking.collector.worker.segment.persistence; + +import com.a.eye.skywalking.collector.actor.ClusterWorkerContext; +import com.a.eye.skywalking.collector.actor.LocalWorkerContext; +import com.a.eye.skywalking.collector.actor.selector.RollingSelector; +import com.a.eye.skywalking.collector.worker.WorkerConfig; +import com.a.eye.skywalking.collector.worker.mock.MockEsBulkClient; +import com.a.eye.skywalking.collector.worker.mock.SaveToEsSourceAnswer; +import com.a.eye.skywalking.collector.worker.segment.SegmentCostIndex; +import com.a.eye.skywalking.collector.worker.segment.SegmentPost; +import com.a.eye.skywalking.collector.worker.segment.mock.SegmentMock; +import com.a.eye.skywalking.collector.worker.storage.EsClient; +import com.a.eye.skywalking.collector.worker.tools.DateTools; +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; +import org.apache.logging.log4j.LogManager; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.powermock.core.classloader.annotations.PowerMockIgnore; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; + +import java.util.List; + +import static org.powermock.api.mockito.PowerMockito.when; + +/** + * @author pengys5 + */ +@RunWith(PowerMockRunner.class) +@PrepareForTest({EsClient.class, LogManager.class}) +@PowerMockIgnore({"javax.management.*"}) +public class SegmentCostSaveTestCase { + + private SegmentCostSave segmentCostSave; + private SegmentMock segmentMock = new SegmentMock(); + private MockEsBulkClient mockEsBulkClient = new MockEsBulkClient(); + + private SaveToEsSourceAnswer saveToEsSourceAnswer; + + @Before + public void init() throws Exception { + mockEsBulkClient.createMock(); + + saveToEsSourceAnswer = new SaveToEsSourceAnswer(); + when(mockEsBulkClient.indexRequestBuilder.setSource(Mockito.anyString())).thenAnswer(saveToEsSourceAnswer); + + ClusterWorkerContext clusterWorkerContext = new ClusterWorkerContext(null); + LocalWorkerContext localWorkerContext = new LocalWorkerContext(); + segmentCostSave = new SegmentCostSave(SegmentCostSave.Role.INSTANCE, clusterWorkerContext, localWorkerContext); + } + + @Test + public void testEsIndex() { + Assert.assertEquals(SegmentCostIndex.Index, segmentCostSave.esIndex()); + } + + @Test + public void testEsType() { + Assert.assertEquals(SegmentCostIndex.Type_Record, segmentCostSave.esType()); + } + + @Test + public void testRole() { + Assert.assertEquals(SegmentCostSave.class.getSimpleName(), SegmentCostSave.Role.INSTANCE.roleName()); + Assert.assertEquals(RollingSelector.class.getSimpleName(), SegmentCostSave.Role.INSTANCE.workerSelector().getClass().getSimpleName()); + } + + @Test + public void testFactory() { + Assert.assertEquals(SegmentCostSave.class.getSimpleName(), SegmentCostSave.Factory.INSTANCE.role().roleName()); + Assert.assertEquals(SegmentCostSave.class.getSimpleName(), SegmentCostSave.Factory.INSTANCE.workerInstance(null).getClass().getSimpleName()); + + int testSize = 10; + WorkerConfig.Queue.Segment.SegmentCostSave.Size = testSize; + Assert.assertEquals(testSize, SegmentCostSave.Factory.INSTANCE.queueSize()); + } + + @Test + public void testPersistenceServiceAnalyse() throws Exception { + WorkerConfig.Persistence.Data.size = 1; + + List segmentWithTimeSliceList = segmentMock.mockPersistenceServiceSegmentTimeSlice(); + + for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : segmentWithTimeSliceList) { + segmentCostSave.analyse(segmentWithTimeSlice); + } + + JsonArray sourceArray = saveToEsSourceAnswer.sourceObj.getSource(); + Assert.assertEquals(1, sourceArray.size()); + + JsonObject costJsonObj = sourceArray.get(0).getAsJsonObject(); + Assert.assertEquals("Segment.1490922929274.1382198130.5997.47.1", costJsonObj.get("segId").getAsString()); + Assert.assertEquals(1490922929274L, costJsonObj.get("startTime").getAsLong()); + Assert.assertEquals(1490922929288L, costJsonObj.get("EndTime").getAsLong()); + Assert.assertEquals("/persistence/query", costJsonObj.get("operationName").getAsString()); + Assert.assertEquals(DateTools.changeToUTCSlice(201703310915L), costJsonObj.get("timeSlice").getAsLong()); + Assert.assertEquals(14, costJsonObj.get("cost").getAsInt()); + } + + @Test + public void testCacheServiceAnalyse() throws Exception { + WorkerConfig.Persistence.Data.size = 2; + + List segmentWithTimeSliceList = segmentMock.mockCacheServiceSegmentSegmentTimeSlice(); + + for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : segmentWithTimeSliceList) { + segmentCostSave.analyse(segmentWithTimeSlice); + } + + JsonArray sourceArray = saveToEsSourceAnswer.sourceObj.getSource(); + Assert.assertEquals(2, sourceArray.size()); + + JsonObject costJsonObj_0 = null; + JsonObject costJsonObj_1 = null; + for (int i = 0; i < sourceArray.size(); i++) { + JsonObject costJsonObj = sourceArray.get(i).getAsJsonObject(); + if (costJsonObj.get("segId").getAsString().equals("Segment.1490922929258.927784221.5991.27.1")) { + costJsonObj_0 = costJsonObj; + } else if (costJsonObj.get("segId").getAsString().equals("Segment.1490922929298.927784221.5991.28.1")) { + costJsonObj_1 = costJsonObj; + } + } + + Assert.assertEquals(1490922929258L, costJsonObj_0.get("startTime").getAsLong()); + Assert.assertEquals(1490922929261L, costJsonObj_0.get("EndTime").getAsLong()); + Assert.assertEquals("com.a.eye.skywalking.test.cache.CacheService.findCache(java.lang.String)", costJsonObj_0.get("operationName").getAsString()); + Assert.assertEquals(DateTools.changeToUTCSlice(201703310915L), costJsonObj_0.get("timeSlice").getAsLong()); + Assert.assertEquals(3, costJsonObj_0.get("cost").getAsInt()); + + Assert.assertEquals(1490922929298L, costJsonObj_1.get("startTime").getAsLong()); + Assert.assertEquals(1490922929303L, costJsonObj_1.get("EndTime").getAsLong()); + Assert.assertEquals("com.a.eye.skywalking.test.cache.CacheService.updateCache(java.lang.String,java.lang.String)", costJsonObj_1.get("operationName").getAsString()); + Assert.assertEquals(DateTools.changeToUTCSlice(201703310915L), costJsonObj_1.get("timeSlice").getAsLong()); + Assert.assertEquals(5, costJsonObj_1.get("cost").getAsInt()); + } + + @Test + public void testPortalServiceAnalyse() throws Exception { + WorkerConfig.Persistence.Data.size = 1; + + List segmentWithTimeSliceList = segmentMock.mockPortalServiceSegmentSegmentTimeSlice(); + + for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : segmentWithTimeSliceList) { + segmentCostSave.analyse(segmentWithTimeSlice); + } + + JsonArray sourceArray = saveToEsSourceAnswer.sourceObj.getSource(); + Assert.assertEquals(1, sourceArray.size()); + + JsonObject costJsonObj = sourceArray.get(0).getAsJsonObject(); + Assert.assertEquals("Segment.1490922929254.1797892356.6003.69.1", costJsonObj.get("segId").getAsString()); + Assert.assertEquals(1490922929254L, costJsonObj.get("startTime").getAsLong()); + Assert.assertEquals(1490922929306L, costJsonObj.get("EndTime").getAsLong()); + Assert.assertEquals("/portal/", costJsonObj.get("operationName").getAsString()); + Assert.assertEquals(DateTools.changeToUTCSlice(201703310915L), costJsonObj.get("timeSlice").getAsLong()); + Assert.assertEquals(52, costJsonObj.get("cost").getAsInt()); + } + + @Test + public void testCacheServiceExceptionAnalyse() throws Exception { + WorkerConfig.Persistence.Data.size = 1; + + List segmentWithTimeSliceList = segmentMock.mockCacheServiceExceptionSegmentTimeSlice(); + + for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : segmentWithTimeSliceList) { + segmentCostSave.analyse(segmentWithTimeSlice); + } + + JsonArray sourceArray = saveToEsSourceAnswer.sourceObj.getSource(); + Assert.assertEquals(1, sourceArray.size()); + + JsonObject costJsonObj = sourceArray.get(0).getAsJsonObject(); + Assert.assertEquals("Segment.1490923010328.927784221.5991.32.1", costJsonObj.get("segId").getAsString()); + Assert.assertEquals(1490923010328L, costJsonObj.get("startTime").getAsLong()); + Assert.assertEquals(1490923010329L, costJsonObj.get("EndTime").getAsLong()); + Assert.assertEquals("com.a.eye.skywalking.test.cache.CacheService.findCacheWithException(java.lang.String)", costJsonObj.get("operationName").getAsString()); + Assert.assertEquals(DateTools.changeToUTCSlice(201703310916L), costJsonObj.get("timeSlice").getAsLong()); + Assert.assertEquals(1, costJsonObj.get("cost").getAsInt()); + } + + @Test + public void testPortalServiceExceptionAnalyse() throws Exception { + WorkerConfig.Persistence.Data.size = 1; + + List segmentWithTimeSliceList = segmentMock.mockPortalServiceExceptionSegmentTimeSlice(); + + for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : segmentWithTimeSliceList) { + segmentCostSave.analyse(segmentWithTimeSlice); + } + + JsonArray sourceArray = saveToEsSourceAnswer.sourceObj.getSource(); + Assert.assertEquals(1, sourceArray.size()); + + JsonObject costJsonObj = sourceArray.get(0).getAsJsonObject(); + Assert.assertEquals("Segment.1490923010324.1797892356.6003.67.1", costJsonObj.get("segId").getAsString()); + Assert.assertEquals(1490923010324L, costJsonObj.get("startTime").getAsLong()); + Assert.assertEquals(1490923010336L, costJsonObj.get("EndTime").getAsLong()); + Assert.assertEquals("/portal/cache/exception/test", costJsonObj.get("operationName").getAsString()); + Assert.assertEquals(DateTools.changeToUTCSlice(201703310916L), costJsonObj.get("timeSlice").getAsLong()); + Assert.assertEquals(12, costJsonObj.get("cost").getAsInt()); + } +} diff --git a/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/segment/persistence/SegmentExceptionSaveTestCase.java b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/segment/persistence/SegmentExceptionSaveTestCase.java new file mode 100644 index 000000000..8fd8eeb86 --- /dev/null +++ b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/segment/persistence/SegmentExceptionSaveTestCase.java @@ -0,0 +1,133 @@ +package com.a.eye.skywalking.collector.worker.segment.persistence; + +import com.a.eye.skywalking.collector.actor.ClusterWorkerContext; +import com.a.eye.skywalking.collector.actor.LocalWorkerContext; +import com.a.eye.skywalking.collector.actor.selector.RollingSelector; +import com.a.eye.skywalking.collector.worker.WorkerConfig; +import com.a.eye.skywalking.collector.worker.mock.MockEsBulkClient; +import com.a.eye.skywalking.collector.worker.segment.SegmentExceptionIndex; +import com.a.eye.skywalking.collector.worker.segment.SegmentPost; +import com.a.eye.skywalking.collector.worker.segment.mock.SegmentMock; +import com.a.eye.skywalking.collector.worker.storage.EsClient; +import com.google.gson.Gson; +import com.google.gson.JsonObject; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.stubbing.Answer; +import org.powermock.core.classloader.annotations.PowerMockIgnore; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static org.powermock.api.mockito.PowerMockito.when; + +/** + * @author pengys5 + */ +@RunWith(PowerMockRunner.class) +@PrepareForTest({EsClient.class}) +@PowerMockIgnore({"javax.management.*"}) +public class SegmentExceptionSaveTestCase { + + private Logger logger = LogManager.getFormatterLogger(SegmentExceptionSaveTestCase.class); + + private SegmentMock segmentMock = new SegmentMock(); + private SegmentExceptionSave segmentExceptionSave; + private SaveToEsSource saveToEsSource; + private MockEsBulkClient mockEsBulkClient = new MockEsBulkClient(); + + @Before + public void init() { + mockEsBulkClient.createMock(); + + saveToEsSource = new SaveToEsSource(); + when(mockEsBulkClient.indexRequestBuilder.setSource(Mockito.anyString())).thenAnswer(saveToEsSource); + + ClusterWorkerContext clusterWorkerContext = new ClusterWorkerContext(null); + LocalWorkerContext localWorkerContext = new LocalWorkerContext(); + + segmentExceptionSave = new SegmentExceptionSave(SegmentExceptionSave.Role.INSTANCE, clusterWorkerContext, localWorkerContext); + } + + @Test + public void testEsIndex() { + Assert.assertEquals(SegmentExceptionIndex.Index, segmentExceptionSave.esIndex()); + } + + @Test + public void testEsType() { + Assert.assertEquals(SegmentExceptionIndex.Type_Record, segmentExceptionSave.esType()); + } + + @Test + public void testRole() { + Assert.assertEquals(SegmentExceptionSave.class.getSimpleName(), SegmentExceptionSave.Role.INSTANCE.roleName()); + Assert.assertEquals(RollingSelector.class.getSimpleName(), SegmentExceptionSave.Role.INSTANCE.workerSelector().getClass().getSimpleName()); + } + + @Test + public void testFactory() { + Assert.assertEquals(SegmentExceptionSave.class.getSimpleName(), SegmentExceptionSave.Factory.INSTANCE.role().roleName()); + Assert.assertEquals(SegmentExceptionSave.class.getSimpleName(), SegmentExceptionSave.Factory.INSTANCE.workerInstance(null).getClass().getSimpleName()); + + int testSize = 10; + WorkerConfig.Queue.Segment.SegmentExceptionSave.Size = testSize; + Assert.assertEquals(testSize, SegmentExceptionSave.Factory.INSTANCE.queueSize()); + } + + @Test + public void testSuccessAnalyse() throws Exception { + WorkerConfig.Persistence.Data.size = 1; + + List cacheServiceList = segmentMock.mockCacheServiceSegmentSegmentTimeSlice(); + for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : cacheServiceList) { + segmentExceptionSave.analyse(segmentWithTimeSlice); + } + + JsonObject isError_1 = saveToEsSource.isErrorMap.get("Segment.1490922929258.927784221.5991.27.1"); + Assert.assertEquals(false, isError_1.get("isError").getAsBoolean()); + Assert.assertEquals(0, isError_1.get("errorKind").getAsJsonArray().size()); + + JsonObject isError_2 = saveToEsSource.isErrorMap.get("Segment.1490922929298.927784221.5991.28.1"); + Assert.assertEquals(false, isError_2.get("isError").getAsBoolean()); + Assert.assertEquals(0, isError_2.get("errorKind").getAsJsonArray().size()); + } + + @Test + public void testErrorAnalyse() throws Exception { + WorkerConfig.Persistence.Data.size = 1; + + List cacheServiceList = segmentMock.mockCacheServiceExceptionSegmentTimeSlice(); + for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : cacheServiceList) { + segmentExceptionSave.analyse(segmentWithTimeSlice); + } + + JsonObject isError_1 = saveToEsSource.isErrorMap.get("Segment.1490923010328.927784221.5991.32.1"); + Assert.assertEquals(true, isError_1.get("isError").getAsBoolean()); + Assert.assertEquals("com.weibo.api.motan.exception.MotanBizException", isError_1.get("errorKind").getAsJsonArray().get(0).getAsString()); + } + + class SaveToEsSource implements Answer { + + Map isErrorMap = new HashMap<>(); + + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + Gson gson = new Gson(); + String source = (String) invocation.getArguments()[0]; + JsonObject sourceJsonObj = gson.fromJson(source, JsonObject.class); + logger.info("es source: %s", sourceJsonObj.toString()); + isErrorMap.put(sourceJsonObj.get("segId").getAsString(), sourceJsonObj); + return null; + } + } +} diff --git a/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/segment/persistence/SegmentSaveTestCase.java b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/segment/persistence/SegmentSaveTestCase.java new file mode 100644 index 000000000..5f187f1c1 --- /dev/null +++ b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/segment/persistence/SegmentSaveTestCase.java @@ -0,0 +1,101 @@ +package com.a.eye.skywalking.collector.worker.segment.persistence; + +import com.a.eye.skywalking.collector.actor.ClusterWorkerContext; +import com.a.eye.skywalking.collector.actor.LocalWorkerContext; +import com.a.eye.skywalking.collector.actor.selector.RollingSelector; +import com.a.eye.skywalking.collector.worker.WorkerConfig; +import com.a.eye.skywalking.collector.worker.mock.MockEsBulkClient; +import com.a.eye.skywalking.collector.worker.segment.SegmentCostIndex; +import com.a.eye.skywalking.collector.worker.segment.SegmentIndex; +import com.a.eye.skywalking.collector.worker.storage.EsClient; +import com.google.gson.Gson; +import com.google.gson.JsonObject; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.stubbing.Answer; +import org.powermock.core.classloader.annotations.PowerMockIgnore; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; + +import static org.powermock.api.mockito.PowerMockito.when; + +/** + * @author pengys5 + */ +@RunWith(PowerMockRunner.class) +@PrepareForTest({EsClient.class}) +@PowerMockIgnore({"javax.management.*"}) +public class SegmentSaveTestCase { + + private SegmentSave segmentSave; + private SaveToEsSource saveToEsSource; + private MockEsBulkClient mockEsBulkClient = new MockEsBulkClient(); + + @Before + public void init() { + mockEsBulkClient.createMock(); + + saveToEsSource = new SaveToEsSource(); + when(mockEsBulkClient.indexRequestBuilder.setSource(Mockito.anyString())).thenAnswer(saveToEsSource); + + ClusterWorkerContext clusterWorkerContext = new ClusterWorkerContext(null); + LocalWorkerContext localWorkerContext = new LocalWorkerContext(); + + segmentSave = new SegmentSave(SegmentSave.Role.INSTANCE, clusterWorkerContext, localWorkerContext); + } + + @Test + public void testEsIndex() { + Assert.assertEquals(SegmentIndex.Index, segmentSave.esIndex()); + } + + @Test + public void testEsType() { + Assert.assertEquals(SegmentIndex.Type_Record, segmentSave.esType()); + } + + @Test + public void testRole() { + Assert.assertEquals(SegmentSave.class.getSimpleName(), SegmentSave.Role.INSTANCE.roleName()); + Assert.assertEquals(RollingSelector.class.getSimpleName(), SegmentSave.Role.INSTANCE.workerSelector().getClass().getSimpleName()); + } + + @Test + public void testFactory() { + Assert.assertEquals(SegmentSave.class.getSimpleName(), SegmentSave.Factory.INSTANCE.role().roleName()); + Assert.assertEquals(SegmentSave.class.getSimpleName(), SegmentSave.Factory.INSTANCE.workerInstance(null).getClass().getSimpleName()); + + int testSize = 10; + WorkerConfig.Queue.Segment.SegmentSave.Size = testSize; + Assert.assertEquals(testSize, SegmentSave.Factory.INSTANCE.queueSize()); + } + + @Test + public void testAnalyse() throws Exception { + WorkerConfig.Persistence.Data.size = 1; + + JsonObject segment_1 = new JsonObject(); + segment_1.addProperty("ts", "segment_1"); + segmentSave.analyse(segment_1); + + Assert.assertEquals("segment_1", saveToEsSource.ts); + } + + class SaveToEsSource implements Answer { + + String ts = ""; + + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + Gson gson = new Gson(); + String source = (String) invocation.getArguments()[0]; + JsonObject sourceJsonObj = gson.fromJson(source, JsonObject.class); + ts = sourceJsonObj.get("ts").getAsString(); + return null; + } + } +} diff --git a/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/tools/ParameterToolsTestCase.java b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/tools/ParameterToolsTestCase.java new file mode 100644 index 000000000..7efbf3874 --- /dev/null +++ b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/tools/ParameterToolsTestCase.java @@ -0,0 +1,24 @@ +package com.a.eye.skywalking.collector.worker.tools; + +import org.junit.Assert; +import org.junit.Test; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author pengys5 + */ +public class ParameterToolsTestCase { + + @Test + public void testToString() { + Map request = new HashMap<>(); + String[] test = {"Test"}; + + request.put("Key", test); + + String value = ParameterTools.INSTANCE.toString(request, "Key"); + Assert.assertEquals("Test", value); + } +} diff --git a/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/tools/RecordDataTool.java b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/tools/RecordDataTool.java new file mode 100644 index 000000000..e9258debb --- /dev/null +++ b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/tools/RecordDataTool.java @@ -0,0 +1,22 @@ +package com.a.eye.skywalking.collector.worker.tools; + +import com.a.eye.skywalking.collector.worker.storage.RecordData; + +import java.util.List; + +/** + * @author pengys5 + */ +public enum RecordDataTool { + + INSTANCE; + + public RecordData getRecord(List recordDataList, String id) { + for (RecordData recordData : recordDataList) { + if (id.equals(recordData.getId())) { + return recordData; + } + } + return null; + } +} diff --git a/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/tracedag/TraceDagDataBuilderTestCase.java b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/tracedag/TraceDagDataBuilderTestCase.java new file mode 100644 index 000000000..1bf956c24 --- /dev/null +++ b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/tracedag/TraceDagDataBuilderTestCase.java @@ -0,0 +1,60 @@ +package com.a.eye.skywalking.collector.worker.tracedag; + +import com.google.gson.Gson; +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; +import org.junit.Test; + +/** + * @author pengys5 + */ +public class TraceDagDataBuilderTestCase { + + private Gson gson = new Gson(); + + @Test + public void testBuild() { + JsonArray nodeMappingArray = nodeMappingArrayData(); + JsonArray nodeRefArray = nodeRefArrayData(); + JsonArray nodeCompArray = nodeCompArrayData(); + JsonArray resSumArray = resSumArrayData(); + + TraceDagDataBuilder builder = new TraceDagDataBuilder(); + JsonObject dagJsonObj = builder.build(nodeCompArray, nodeMappingArray, nodeRefArray, resSumArray); + + JsonArray pointArray = dagJsonObj.getAsJsonArray("nodes"); + JsonArray lineArray = dagJsonObj.getAsJsonArray("nodeRefs"); + + for (int i = 0; i < pointArray.size(); i++) { + System.out.println(pointArray.get(i).getAsJsonObject()); + } + + for (int i = 0; i < lineArray.size(); i++) { + System.out.println(lineArray.get(i).getAsJsonObject()); + } + } + + private JsonArray nodeMappingArrayData() { + String str = "[{\"code\":\"cache-service\",\"peers\":\"[127.0.0.1:8002]\"},{\"code\":\"persistence-service\",\"peers\":\"[10.128.35.80:20880]\"}]"; + JsonArray jsonArray = gson.fromJson(str, JsonArray.class); + return jsonArray; + } + + private JsonArray nodeRefArrayData() { + String str = "[{\"front\":\"User\",\"behind\":\"portal-service\"},{\"front\":\"portal-service\",\"behind\":\"[127.0.0.1:8002]\"},{\"front\":\"cache-service\",\"behind\":\"[127.0.0.1:6379]\"},{\"front\":\"cache-service\",\"behind\":\"[localhost:-1]\"},{\"front\":\"persistence-service\",\"behind\":\"[127.0.0.1:3307]\"},{\"front\":\"portal-service\",\"behind\":\"[10.128.35.80:20880]\"}]"; + JsonArray jsonArray = gson.fromJson(str, JsonArray.class); + return jsonArray; + } + + private JsonArray nodeCompArrayData() { + String str = "[{\"name\":\"Tomcat\",\"peers\":\"portal-service\"},{\"name\":\"Motan\",\"peers\":\"cache-service\"},{\"name\":\"H2\",\"peers\":\"[localhost:-1]\"},{\"name\":\"Tomcat\",\"peers\":\"[10.128.35.80:57818]\"},{\"name\":\"Redis\",\"peers\":\"[127.0.0.1:6379]\"},{\"name\":\"Mysql\",\"peers\":\"[127.0.0.1:3307]\"},{\"name\":\"Tomcat\",\"peers\":\"persistence-service\"},{\"name\":\"HttpClient\",\"peers\":\"[10.128.35.80:20880]\"},{\"name\":\"Motan\",\"peers\":\"[127.0.0.1:8002]\"},{\"name\":\"Tomcat\",\"peers\":\"[0:0:0:0:0:0:0:1:57837]\"}]"; + JsonArray jsonArray = gson.fromJson(str, JsonArray.class); + return jsonArray; + } + + private JsonArray resSumArrayData() { + String str = "[{\"front\":\"User\",\"behind\":\"portal-service\",\"oneSecondLess\":1.0,\"threeSecondLess\":0.0,\"fiveSecondLess\":0.0,\"fiveSecondGreater\":0.0,\"error\":0.0,\"summary\":1.0},{\"front\":\"cache-service\",\"behind\":\"[127.0.0.1:6379]\",\"oneSecondLess\":10.0,\"threeSecondLess\":0.0,\"fiveSecondLess\":0.0,\"fiveSecondGreater\":0.0,\"error\":0.0,\"summary\":10.0},{\"front\":\"cache-service\",\"behind\":\"[localhost:-1]\",\"oneSecondLess\":4.0,\"threeSecondLess\":0.0,\"fiveSecondLess\":0.0,\"fiveSecondGreater\":0.0,\"error\":0.0,\"summary\":4.0},{\"front\":\"persistence-service\",\"behind\":\"[127.0.0.1:3307]\",\"oneSecondLess\":2.0,\"threeSecondLess\":0.0,\"fiveSecondLess\":0.0,\"fiveSecondGreater\":0.0,\"error\":0.0,\"summary\":2.0},{\"front\":\"portal-service\",\"behind\":\"[10.128.35.80:20880]\",\"oneSecondLess\":1.0,\"threeSecondLess\":0.0,\"fiveSecondLess\":0.0,\"fiveSecondGreater\":0.0,\"error\":0.0,\"summary\":1.0},{\"front\":\"portal-service\",\"behind\":\"[127.0.0.1:8002]\",\"oneSecondLess\":2.0,\"threeSecondLess\":0.0,\"fiveSecondLess\":0.0,\"fiveSecondGreater\":0.0,\"error\":0.0,\"summary\":2.0}]"; + JsonArray jsonArray = gson.fromJson(str, JsonArray.class); + return jsonArray; + } +} diff --git a/skywalking-collector/skywalking-collector-worker/src/test/resources/json/segment/post/special/special.json b/skywalking-collector/skywalking-collector-worker/src/test/resources/json/segment/post/special/special.json new file mode 100644 index 000000000..b1e00ef64 --- /dev/null +++ b/skywalking-collector/skywalking-collector-worker/src/test/resources/json/segment/post/special/special.json @@ -0,0 +1,187 @@ +[ + { + "ts": "Segment.1491277162066.18986177.70531.27.1", + "st": 1491277162066, + "et": 1491277165743, + "rs": [ + { + "ts": "Segment.1491277147441.-1562443425.70539.65.1", + "si": 6, + "ac": "portal-service", + "ph": "127.0.0.1:8002" + } + ], + "ss": [ + { + "si": 2, + "ps": 1, + "st": 1491277162141, + "et": 1491277162144, + "on": "Jedis/getClient", + "ts": { + "span.layer": "db", + "component": "Redis", + "db.type": "Redis", + "peer.host": "127.0.0.1", + "span.kind": "client" + }, + "tb": {}, + "ti": { + "peer.port": 6379 + }, + "lo": [] + }, + { + "si": 3, + "ps": 1, + "st": 1491277162144, + "et": 1491277162147, + "on": "Jedis/getClient", + "ts": { + "span.layer": "db", + "component": "Redis", + "db.type": "Redis", + "peer.host": "127.0.0.1", + "span.kind": "client" + }, + "tb": {}, + "ti": { + "peer.port": 6379 + }, + "lo": [] + }, + { + "si": 4, + "ps": 1, + "st": 1491277162147, + "et": 1491277162147, + "on": "Jedis/isConnected", + "ts": { + "span.layer": "db", + "component": "Redis", + "db.type": "Redis", + "peer.host": "127.0.0.1", + "span.kind": "client" + }, + "tb": {}, + "ti": { + "peer.port": 6379 + }, + "lo": [] + }, + { + "si": 5, + "ps": 1, + "st": 1491277162147, + "et": 1491277164410, + "on": "Jedis/ping", + "ts": { + "span.layer": "db", + "component": "Redis", + "db.type": "Redis", + "peer.host": "127.0.0.1", + "span.kind": "client" + }, + "tb": {}, + "ti": { + "peer.port": 6379 + }, + "lo": [] + }, + { + "si": 6, + "ps": 1, + "st": 1491277164420, + "et": 1491277165738, + "on": "Jedis/set", + "ts": { + "span.layer": "db", + "component": "Redis", + "db.type": "Redis", + "peer.host": "127.0.0.1", + "span.kind": "client", + "db.statement": "set test_NEW" + }, + "tb": {}, + "ti": { + "peer.port": 6379 + }, + "lo": [] + }, + { + "si": 7, + "ps": 1, + "st": 1491277165741, + "et": 1491277165743, + "on": "H2/JDBI/PreparedStatement/executeUpdate", + "ts": { + "db.instance": "dataSource", + "span.layer": "db", + "db.type": "sql", + "component": "H2", + "span.kind": "client", + "db.statement": "INSERT INTO CACHE_TABLE(CACHE_VALUE, CACHE_KEY) VALUES(?, ?)", + "peer.host": "localhost" + }, + "tb": {}, + "ti": { + "peer.port": -1 + }, + "lo": [] + }, + { + "si": 8, + "ps": 1, + "st": 1491277165743, + "et": 1491277165743, + "on": "H2/JDBI/Connection/close", + "ts": { + "db.instance": "dataSource", + "span.layer": "db", + "db.type": "sql", + "component": "H2", + "span.kind": "client", + "db.statement": "", + "peer.host": "localhost" + }, + "tb": {}, + "ti": { + "peer.port": -1 + }, + "lo": [] + }, + { + "si": 1, + "ps": 0, + "st": 1491277162066, + "et": 1491277165743, + "on": "Motan_default_rpc_com.a.eye.skywalking.test.cache.CacheService.updateCache(java.lang.String,java.lang.String)", + "ts": { + "requestId": "1563717428890828802" + }, + "tb": {}, + "ti": {}, + "lo": [] + }, + { + "si": 0, + "ps": -1, + "st": 1491277162066, + "et": 1491277165743, + "on": "com.a.eye.skywalking.test.cache.CacheService.updateCache(java.lang.String,java.lang.String)", + "ts": { + "span.layer": "rpc", + "component": "Motan", + "span.kind": "server" + }, + "tb": {}, + "ti": {}, + "lo": [] + } + ], + "ac": "cache-service", + "gt": [ + "Trace.1491277147443.-1562443425.70539.65.2" + ] + } +] \ No newline at end of file