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:
wusheng 2017-04-05 22:21:27 +08:00
commit 0966bd5f3f
96 changed files with 3120 additions and 1525 deletions

View File

@ -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";
}

View File

@ -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();
}
}

View File

@ -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;

View File

@ -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);
}

View File

@ -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;

View File

@ -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();
}
}
}

View File

@ -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()

View File

@ -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());
}
}
}
}
}

View File

@ -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());
}
}
}
}
}

View File

@ -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);
}
}
}
}

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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();
}
}
}

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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();
}
}
}

View File

@ -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();
}
}
}

View File

@ -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();
}
}
}

View File

@ -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;
}
}
}
}
}

View File

@ -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();
}
}
}

View File

@ -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();
}
}
}

View File

@ -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();
}
}
}

View File

@ -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();
}
}
}

View File

@ -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();
}
}
}

View File

@ -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();
}
}
}

View File

@ -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();
}
}
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}
}
}
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);

View File

@ -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");

View File

@ -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);

View File

@ -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;

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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);

View File

@ -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()

View File

@ -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));

View File

@ -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();

View File

@ -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;

View File

@ -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 {

View File

@ -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);
}
}
}
}

View File

@ -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();
}
}
}

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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>

View File

@ -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);
}
}

View File

@ -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());
}
}
}

View File

@ -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);
}
}
}

View File

@ -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());
}
}

View File

@ -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());
}
}

View File

@ -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));
}
}

View File

@ -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));
}
}

View File

@ -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());
}
}

View File

@ -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);
}
}
}

View File

@ -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());
}
}

View File

@ -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());
}
}

View File

@ -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());
}
}

View File

@ -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);
}
}
}

View File

@ -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();
}
}

View File

@ -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());
}
}

View File

@ -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));
}
}

View File

@ -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));
}
}

View File

@ -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());
}
}

View File

@ -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);
}
}
}

View File

@ -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);
}
}
}

View File

@ -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);
}
}
}

View File

@ -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;

View File

@ -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();

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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;
}
}

View File

@ -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());
}
}

View File

@ -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;
}
}
}

View File

@ -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;
}
}
}

View File

@ -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);
}
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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"
]
}
]