Merge branch 'feature/collector' into feature/3.0
* feature/collector: timezone error import a deleted class no message mock mock mock
This commit is contained in:
commit
0966bd5f3f
|
|
@ -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";
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<Map.Entry<String, RecordData>> iterator = persistenceData.iterator();
|
||||
Iterator<Map.Entry<String, RecordData>> iterator = getPersistenceData().iterator();
|
||||
|
||||
while (iterator.hasNext()) {
|
||||
Map.Entry<String, RecordData> 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();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
@ -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<String, String[]> 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<NodeGetWithTimeSlice> {
|
||||
|
||||
@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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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()
|
||||
|
|
@ -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<Span> 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());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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<Span> 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());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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<TraceSegmentRef> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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<NodeInstDayAnalysis> {
|
||||
public static class Factory extends AbstractLocalAsyncWorkerProvider<NodeCompAnalysis> {
|
||||
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
|
||||
|
|
@ -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<NodeHourAnalysis> {
|
||||
public static class Factory extends AbstractLocalAsyncWorkerProvider<NodeMappingDayAnalysis> {
|
||||
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
|
||||
|
|
@ -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<NodeDayAnalysis> {
|
||||
public static class Factory extends AbstractLocalAsyncWorkerProvider<NodeMappingHourAnalysis> {
|
||||
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
|
||||
|
|
@ -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<NodeMinuteAnalysis> {
|
||||
public static class Factory extends AbstractLocalAsyncWorkerProvider<NodeMappingMinuteAnalysis> {
|
||||
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
|
||||
|
|
@ -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<NodeHourAgg> {
|
||||
public static class Factory extends AbstractClusterWorkerProvider<NodeCompAgg> {
|
||||
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
|
||||
|
|
@ -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<NodeCompLoad> {
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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<NodeHourSave> {
|
||||
public static class Factory extends AbstractLocalAsyncWorkerProvider<NodeCompSave> {
|
||||
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
|
||||
|
|
@ -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<NodeInstMinuteAgg> {
|
||||
public static class Factory extends AbstractClusterWorkerProvider<NodeMappingDayAgg> {
|
||||
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
|
||||
|
|
@ -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<NodeMinuteSave> {
|
||||
public static class Factory extends AbstractLocalAsyncWorkerProvider<NodeMappingDaySave> {
|
||||
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
|
||||
|
|
@ -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<NodeDayAgg> {
|
||||
public static class Factory extends AbstractClusterWorkerProvider<NodeMappingHourAgg> {
|
||||
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
|
||||
|
|
@ -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<NodeDaySave> {
|
||||
public static class Factory extends AbstractLocalAsyncWorkerProvider<NodeMappingHourSave> {
|
||||
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
|
||||
|
|
@ -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<NodeMinuteAgg> {
|
||||
public static class Factory extends AbstractClusterWorkerProvider<NodeMappingMinuteAgg> {
|
||||
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
|
||||
|
|
@ -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<NodeInstDaySave> {
|
||||
public static class Factory extends AbstractLocalAsyncWorkerProvider<NodeMappingMinuteSave> {
|
||||
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
|
||||
|
|
@ -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<NodeInstSummarySearchWithTimeSlice> {
|
||||
public static class Factory extends AbstractLocalSyncWorkerProvider<NodeMappingSearchWithTimeSlice> {
|
||||
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
|
||||
|
|
@ -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<NodeSearchWithTimeSlice> {
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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<String, String[]> 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<NodeInstGetWithTimeSlice> {
|
||||
|
||||
@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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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<String, String[]> 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<NodeInstSummaryGetWithTimeSlice> {
|
||||
|
||||
@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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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<Span> 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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<NodeInstHourAnalysis> {
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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<NodeInstMinuteAnalysis> {
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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<NodeInstDayAgg> {
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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<NodeInstHourAgg> {
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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<NodeInstHourSave> {
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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<NodeInstMinuteSave> {
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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<NodeInstSearchWithTimeSlice> {
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -5,9 +5,10 @@ import java.util.Map;
|
|||
/**
|
||||
* @author pengys5
|
||||
*/
|
||||
public class ParameterTools {
|
||||
public enum ParameterTools {
|
||||
INSTANCE;
|
||||
|
||||
public static String toString(Map<String, String[]> request, String key) {
|
||||
public String toString(Map<String, String[]> request, String key) {
|
||||
if (request.get(key) != null) {
|
||||
return request.get(key)[0];
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -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<String, String> mappingMap = new HashMap<>();
|
||||
private Map<String, String> nodeCompMap = new HashMap<>();
|
||||
private Map<String, Long> resSumMap = new HashMap<>();
|
||||
private Map<String, Integer> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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<String, String[]> 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<TraceDagGetWithTimeSlice> {
|
||||
|
||||
@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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
||||
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
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
com.a.eye.skywalking.collector.worker.span.SpanGetWithId$Factory
|
||||
com.a.eye.skywalking.collector.worker.tracedag.TraceDagGetWithTimeSlice$Factory
|
||||
|
|
@ -2,7 +2,7 @@
|
|||
<Configuration status="info">
|
||||
<Appenders>
|
||||
<Console name="Console" target="SYSTEM_OUT">
|
||||
<PatternLayout charset="UTF-8" pattern="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
|
||||
<PatternLayout charset="UTF-8" pattern="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%p] - %c{1} - %m%n"/>
|
||||
</Console>
|
||||
</Appenders>
|
||||
<Loggers>
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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<Object> {
|
||||
|
||||
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<RecordData> recordDataList;
|
||||
|
||||
private RecordObj() {
|
||||
recordDataList = new ArrayList<>();
|
||||
}
|
||||
|
||||
public List<RecordData> 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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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<Object> {
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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<RecordData> 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());
|
||||
}
|
||||
}
|
||||
|
|
@ -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<RecordData> 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());
|
||||
}
|
||||
}
|
||||
|
|
@ -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<SegmentPost.SegmentWithTimeSlice> cacheServiceSegment = segmentMock.mockCacheServiceSegmentSegmentTimeSlice();
|
||||
for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : cacheServiceSegment) {
|
||||
nodeMappingDayAnalysis.analyse(segmentWithTimeSlice);
|
||||
}
|
||||
List<SegmentPost.SegmentWithTimeSlice> portalService = segmentMock.mockPortalServiceSegmentSegmentTimeSlice();
|
||||
for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : portalService) {
|
||||
nodeMappingDayAnalysis.analyse(segmentWithTimeSlice);
|
||||
}
|
||||
List<SegmentPost.SegmentWithTimeSlice> persistenceService = segmentMock.mockPersistenceServiceSegmentTimeSlice();
|
||||
for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : persistenceService) {
|
||||
nodeMappingDayAnalysis.analyse(segmentWithTimeSlice);
|
||||
}
|
||||
List<SegmentPost.SegmentWithTimeSlice> cacheServiceException = segmentMock.mockCacheServiceExceptionSegmentTimeSlice();
|
||||
for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : cacheServiceException) {
|
||||
nodeMappingDayAnalysis.analyse(segmentWithTimeSlice);
|
||||
}
|
||||
List<SegmentPost.SegmentWithTimeSlice> portalServiceException = segmentMock.mockPortalServiceExceptionSegmentTimeSlice();
|
||||
for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : portalServiceException) {
|
||||
nodeMappingDayAnalysis.analyse(segmentWithTimeSlice);
|
||||
}
|
||||
|
||||
nodeMappingDayAnalysis.onWork(new EndOfBatchCommand());
|
||||
|
||||
NodeMappingAnalysisVerify.INSTANCE.verify(recordDataAnswer.recordObj.getRecordData(), DateTools.changeToUTCSlice(201703310000L));
|
||||
}
|
||||
}
|
||||
|
|
@ -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<SegmentPost.SegmentWithTimeSlice> cacheServiceSegment = segmentMock.mockCacheServiceSegmentSegmentTimeSlice();
|
||||
for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : cacheServiceSegment) {
|
||||
nodeMappingHourAnalysis.analyse(segmentWithTimeSlice);
|
||||
}
|
||||
List<SegmentPost.SegmentWithTimeSlice> portalService = segmentMock.mockPortalServiceSegmentSegmentTimeSlice();
|
||||
for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : portalService) {
|
||||
nodeMappingHourAnalysis.analyse(segmentWithTimeSlice);
|
||||
}
|
||||
List<SegmentPost.SegmentWithTimeSlice> persistenceService = segmentMock.mockPersistenceServiceSegmentTimeSlice();
|
||||
for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : persistenceService) {
|
||||
nodeMappingHourAnalysis.analyse(segmentWithTimeSlice);
|
||||
}
|
||||
List<SegmentPost.SegmentWithTimeSlice> cacheServiceException = segmentMock.mockCacheServiceExceptionSegmentTimeSlice();
|
||||
for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : cacheServiceException) {
|
||||
nodeMappingHourAnalysis.analyse(segmentWithTimeSlice);
|
||||
}
|
||||
List<SegmentPost.SegmentWithTimeSlice> portalServiceException = segmentMock.mockPortalServiceExceptionSegmentTimeSlice();
|
||||
for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : portalServiceException) {
|
||||
nodeMappingHourAnalysis.analyse(segmentWithTimeSlice);
|
||||
}
|
||||
|
||||
nodeMappingHourAnalysis.onWork(new EndOfBatchCommand());
|
||||
|
||||
NodeMappingAnalysisVerify.INSTANCE.verify(recordDataAnswer.recordObj.getRecordData(), DateTools.changeToUTCSlice(201703310900L));
|
||||
}
|
||||
}
|
||||
|
|
@ -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<SegmentPost.SegmentWithTimeSlice> cacheServiceSegment = segmentMock.mockCacheServiceSegmentSegmentTimeSlice();
|
||||
for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : cacheServiceSegment) {
|
||||
nodeMappingMinuteAnalysis.analyse(segmentWithTimeSlice);
|
||||
}
|
||||
List<SegmentPost.SegmentWithTimeSlice> portalService = segmentMock.mockPortalServiceSegmentSegmentTimeSlice();
|
||||
for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : portalService) {
|
||||
nodeMappingMinuteAnalysis.analyse(segmentWithTimeSlice);
|
||||
}
|
||||
List<SegmentPost.SegmentWithTimeSlice> persistenceService = segmentMock.mockPersistenceServiceSegmentTimeSlice();
|
||||
for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : persistenceService) {
|
||||
nodeMappingMinuteAnalysis.analyse(segmentWithTimeSlice);
|
||||
}
|
||||
List<SegmentPost.SegmentWithTimeSlice> cacheServiceException = segmentMock.mockCacheServiceExceptionSegmentTimeSlice();
|
||||
for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : cacheServiceException) {
|
||||
nodeMappingMinuteAnalysis.analyse(segmentWithTimeSlice);
|
||||
}
|
||||
List<SegmentPost.SegmentWithTimeSlice> 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<RecordData> 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<RecordData> 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());
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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<RecordData> 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());
|
||||
}
|
||||
}
|
||||
|
|
@ -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<RecordData> 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());
|
||||
}
|
||||
}
|
||||
|
|
@ -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<RecordData> 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());
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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<String, Object> json = new HashMap<String, Object>();
|
||||
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<String, Object>();
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
|
@ -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<RecordData> 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());
|
||||
}
|
||||
}
|
||||
|
|
@ -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<SegmentPost.SegmentWithTimeSlice> cacheServiceSegment = segmentMock.mockCacheServiceSegmentSegmentTimeSlice();
|
||||
for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : cacheServiceSegment) {
|
||||
nodeRefDayAnalysis.analyse(segmentWithTimeSlice);
|
||||
}
|
||||
List<SegmentPost.SegmentWithTimeSlice> portalService = segmentMock.mockPortalServiceSegmentSegmentTimeSlice();
|
||||
for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : portalService) {
|
||||
nodeRefDayAnalysis.analyse(segmentWithTimeSlice);
|
||||
}
|
||||
List<SegmentPost.SegmentWithTimeSlice> persistenceService = segmentMock.mockPersistenceServiceSegmentTimeSlice();
|
||||
for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : persistenceService) {
|
||||
nodeRefDayAnalysis.analyse(segmentWithTimeSlice);
|
||||
}
|
||||
List<SegmentPost.SegmentWithTimeSlice> cacheServiceException = segmentMock.mockCacheServiceExceptionSegmentTimeSlice();
|
||||
for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : cacheServiceException) {
|
||||
nodeRefDayAnalysis.analyse(segmentWithTimeSlice);
|
||||
}
|
||||
List<SegmentPost.SegmentWithTimeSlice> portalServiceException = segmentMock.mockPortalServiceExceptionSegmentTimeSlice();
|
||||
for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : portalServiceException) {
|
||||
nodeRefDayAnalysis.analyse(segmentWithTimeSlice);
|
||||
}
|
||||
|
||||
nodeRefDayAnalysis.onWork(new EndOfBatchCommand());
|
||||
|
||||
List<RecordData> recordDataList = recordDataAnswer.recordObj.getRecordData();
|
||||
NodeRefAnalysisVerify.INSTANCE.verify(recordDataList, DateTools.changeToUTCSlice(201703310000L));
|
||||
}
|
||||
}
|
||||
|
|
@ -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<SegmentPost.SegmentWithTimeSlice> cacheServiceSegment = segmentMock.mockCacheServiceSegmentSegmentTimeSlice();
|
||||
for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : cacheServiceSegment) {
|
||||
nodeRefHourAnalysis.analyse(segmentWithTimeSlice);
|
||||
}
|
||||
List<SegmentPost.SegmentWithTimeSlice> portalService = segmentMock.mockPortalServiceSegmentSegmentTimeSlice();
|
||||
for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : portalService) {
|
||||
nodeRefHourAnalysis.analyse(segmentWithTimeSlice);
|
||||
}
|
||||
List<SegmentPost.SegmentWithTimeSlice> persistenceService = segmentMock.mockPersistenceServiceSegmentTimeSlice();
|
||||
for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : persistenceService) {
|
||||
nodeRefHourAnalysis.analyse(segmentWithTimeSlice);
|
||||
}
|
||||
List<SegmentPost.SegmentWithTimeSlice> cacheServiceException = segmentMock.mockCacheServiceExceptionSegmentTimeSlice();
|
||||
for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : cacheServiceException) {
|
||||
nodeRefHourAnalysis.analyse(segmentWithTimeSlice);
|
||||
}
|
||||
List<SegmentPost.SegmentWithTimeSlice> portalServiceException = segmentMock.mockPortalServiceExceptionSegmentTimeSlice();
|
||||
for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : portalServiceException) {
|
||||
nodeRefHourAnalysis.analyse(segmentWithTimeSlice);
|
||||
}
|
||||
|
||||
nodeRefHourAnalysis.onWork(new EndOfBatchCommand());
|
||||
|
||||
NodeRefAnalysisVerify.INSTANCE.verify(recordDataAnswer.recordObj.getRecordData(), DateTools.changeToUTCSlice(201703310900L));
|
||||
}
|
||||
}
|
||||
|
|
@ -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<SegmentPost.SegmentWithTimeSlice> cacheServiceSegment = segmentMock.mockCacheServiceSegmentSegmentTimeSlice();
|
||||
for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : cacheServiceSegment) {
|
||||
nodeRefMinuteAnalysis.analyse(segmentWithTimeSlice);
|
||||
}
|
||||
List<SegmentPost.SegmentWithTimeSlice> portalService = segmentMock.mockPortalServiceSegmentSegmentTimeSlice();
|
||||
for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : portalService) {
|
||||
nodeRefMinuteAnalysis.analyse(segmentWithTimeSlice);
|
||||
}
|
||||
List<SegmentPost.SegmentWithTimeSlice> persistenceService = segmentMock.mockPersistenceServiceSegmentTimeSlice();
|
||||
for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : persistenceService) {
|
||||
nodeRefMinuteAnalysis.analyse(segmentWithTimeSlice);
|
||||
}
|
||||
List<SegmentPost.SegmentWithTimeSlice> cacheServiceException = segmentMock.mockCacheServiceExceptionSegmentTimeSlice();
|
||||
for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : cacheServiceException) {
|
||||
nodeRefMinuteAnalysis.analyse(segmentWithTimeSlice);
|
||||
}
|
||||
List<SegmentPost.SegmentWithTimeSlice> 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<RecordData> 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<RecordData> 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());
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
|
|
@ -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<Object> {
|
||||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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<SegmentPost.SegmentWithTimeSlice> mockSpecialSegmentTimeSlice() throws FileNotFoundException {
|
||||
String specialSegmentAsString = mockSpecialSegmentAsString();
|
||||
logger.debug(specialSegmentAsString);
|
||||
return createSegmentWithTimeSliceList(specialSegmentAsString);
|
||||
}
|
||||
|
||||
public List<SegmentPost.SegmentWithTimeSlice> mockCacheServiceExceptionSegmentTimeSlice() throws FileNotFoundException {
|
||||
String cacheServiceExceptionSegmentAsString = mockCacheServiceExceptionSegmentAsString();
|
||||
logger.debug(cacheServiceExceptionSegmentAsString);
|
||||
return createSegmentWithTimeSliceList(cacheServiceExceptionSegmentAsString);
|
||||
}
|
||||
|
||||
public List<SegmentPost.SegmentWithTimeSlice> mockPortalServiceExceptionSegmentTimeSlice() throws FileNotFoundException {
|
||||
String portalServiceExceptionSegmentAsString = mockPortalServiceExceptionSegmentAsString();
|
||||
logger.debug(portalServiceExceptionSegmentAsString);
|
||||
return createSegmentWithTimeSliceList(portalServiceExceptionSegmentAsString);
|
||||
}
|
||||
|
||||
public List<SegmentPost.SegmentWithTimeSlice> mockCacheServiceSegmentSegmentTimeSlice() throws FileNotFoundException {
|
||||
String cacheServiceSegmentAsString = mockCacheServiceSegmentAsString();
|
||||
logger.debug(cacheServiceSegmentAsString);
|
||||
return createSegmentWithTimeSliceList(cacheServiceSegmentAsString);
|
||||
}
|
||||
|
||||
public List<SegmentPost.SegmentWithTimeSlice> mockPersistenceServiceSegmentTimeSlice() throws FileNotFoundException {
|
||||
String persistenceServiceSegmentAsString = mockPersistenceServiceSegmentAsString();
|
||||
logger.debug(persistenceServiceSegmentAsString);
|
||||
return createSegmentWithTimeSliceList(persistenceServiceSegmentAsString);
|
||||
}
|
||||
|
||||
public List<SegmentPost.SegmentWithTimeSlice> mockPortalServiceSegmentSegmentTimeSlice() throws FileNotFoundException {
|
||||
String portalServiceSegmentAsString = mockPortalServiceSegmentAsString();
|
||||
logger.debug(portalServiceSegmentAsString);
|
||||
return createSegmentWithTimeSliceList(portalServiceSegmentAsString);
|
||||
}
|
||||
|
||||
private List<SegmentPost.SegmentWithTimeSlice> createSegmentWithTimeSliceList(String segmentJsonStr) {
|
||||
SegmentsMessage segmentsMessage = gson.fromJson(segmentJsonStr, SegmentsMessage.class);
|
||||
List<TraceSegment> segmentList = segmentsMessage.getSegments();
|
||||
|
||||
List<SegmentPost.SegmentWithTimeSlice> 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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<SegmentPost.SegmentWithTimeSlice> 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<SegmentPost.SegmentWithTimeSlice> 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<SegmentPost.SegmentWithTimeSlice> 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<SegmentPost.SegmentWithTimeSlice> 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<SegmentPost.SegmentWithTimeSlice> 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());
|
||||
}
|
||||
}
|
||||
|
|
@ -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<SegmentPost.SegmentWithTimeSlice> 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<SegmentPost.SegmentWithTimeSlice> 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<Object> {
|
||||
|
||||
Map<String, JsonObject> 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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<Object> {
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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<String, String[]> request = new HashMap<>();
|
||||
String[] test = {"Test"};
|
||||
|
||||
request.put("Key", test);
|
||||
|
||||
String value = ParameterTools.INSTANCE.toString(request, "Key");
|
||||
Assert.assertEquals("Test", value);
|
||||
}
|
||||
}
|
||||
|
|
@ -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<RecordData> recordDataList, String id) {
|
||||
for (RecordData recordData : recordDataList) {
|
||||
if (id.equals(recordData.getId())) {
|
||||
return recordData;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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"
|
||||
]
|
||||
}
|
||||
]
|
||||
Loading…
Reference in New Issue