diff --git a/pom.xml b/pom.xml
index 917382703..68da304bd 100644
--- a/pom.xml
+++ b/pom.xml
@@ -56,6 +56,12 @@
+
+ com.google.code.gson
+ gson
+ 2.8.0
+
+
junit
junit
diff --git a/skywalking-collector/skywalking-collector-cluster/src/main/java/com/a/eye/skywalking/collector/CollectorSystem.java b/skywalking-collector/skywalking-collector-cluster/src/main/java/com/a/eye/skywalking/collector/CollectorSystem.java
index 19def2552..fbb0551a9 100644
--- a/skywalking-collector/skywalking-collector-cluster/src/main/java/com/a/eye/skywalking/collector/CollectorSystem.java
+++ b/skywalking-collector/skywalking-collector-cluster/src/main/java/com/a/eye/skywalking/collector/CollectorSystem.java
@@ -2,6 +2,7 @@ package com.a.eye.skywalking.collector;
import akka.actor.ActorSystem;
import akka.actor.Props;
+import com.a.eye.skywalking.api.util.StringUtil;
import com.a.eye.skywalking.collector.actor.*;
import com.a.eye.skywalking.collector.cluster.ClusterConfig;
import com.a.eye.skywalking.collector.cluster.Const;
@@ -39,8 +40,10 @@ public class CollectorSystem {
private void createAkkaSystem() {
final Config config = ConfigFactory.parseString("akka.remote.netty.tcp.hostname=" + ClusterConfig.Cluster.Current.hostname).
withFallback(ConfigFactory.parseString("akka.remote.netty.tcp.port=" + ClusterConfig.Cluster.Current.port)).
- withFallback(ConfigFactory.parseString("akka.cluster.seed-nodes=" + ClusterConfig.Cluster.seed_nodes)).
withFallback(ConfigFactory.load("application.conf"));
+ if (!StringUtil.isEmpty(ClusterConfig.Cluster.seed_nodes)) {
+ config.withFallback(ConfigFactory.parseString("akka.cluster.seed-nodes=" + ClusterConfig.Cluster.seed_nodes));
+ }
ActorSystem akkaSystem = ActorSystem.create(Const.SystemName, config);
clusterContext = new ClusterWorkerContext(akkaSystem);
diff --git a/skywalking-collector/skywalking-collector-cluster/src/main/java/com/a/eye/skywalking/collector/actor/AbstractClusterWorkerProvider.java b/skywalking-collector/skywalking-collector-cluster/src/main/java/com/a/eye/skywalking/collector/actor/AbstractClusterWorkerProvider.java
index 75fe25a2f..421d44112 100644
--- a/skywalking-collector/skywalking-collector-cluster/src/main/java/com/a/eye/skywalking/collector/actor/AbstractClusterWorkerProvider.java
+++ b/skywalking-collector/skywalking-collector-cluster/src/main/java/com/a/eye/skywalking/collector/actor/AbstractClusterWorkerProvider.java
@@ -17,7 +17,7 @@ public abstract class AbstractClusterWorkerProviderskywalking-trace
${project.version}
-
- com.google.code.gson
- gson
- 2.8.0
-
-
\ No newline at end of file
+
diff --git a/skywalking-collector/skywalking-collector-commons/src/main/java/com/a/eye/skywalking/collector/commons/serializer/TraceSegmentSerializer.java b/skywalking-collector/skywalking-collector-commons/src/main/java/com/a/eye/skywalking/collector/commons/serializer/TraceSegmentSerializer.java
deleted file mode 100644
index c08f4ed5f..000000000
--- a/skywalking-collector/skywalking-collector-commons/src/main/java/com/a/eye/skywalking/collector/commons/serializer/TraceSegmentSerializer.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.a.eye.skywalking.collector.commons.serializer;
-
-import akka.serialization.JSerializer;
-import com.a.eye.skywalking.trace.TraceSegment;
-import com.a.eye.skywalking.trace.proto.SegmentMessage;
-import com.google.protobuf.InvalidProtocolBufferException;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
-/**
- * @author pengys5
- */
-public class TraceSegmentSerializer extends JSerializer {
- private Logger logger = LogManager.getFormatterLogger(TraceSegmentSerializer.class);
-
- @Override
- public boolean includeManifest() {
- return false;
- }
-
- @Override
- public int identifier() {
- return 30;
- }
-
- @Override
- public byte[] toBinary(Object o) {
- TraceSegment traceSegment = (TraceSegment) o;
- return traceSegment.serialize().toByteArray();
- }
-
- @Override
- public Object fromBinaryJava(byte[] bytes, Class> manifest) {
- TraceSegment traceSegment = null;
- try {
- traceSegment = new TraceSegment(SegmentMessage.parseFrom(bytes));
- } catch (InvalidProtocolBufferException e) {
- logger.warn("Can't covert message from byte[] to SegmentMessage");
- }
- return traceSegment;
- }
-}
diff --git a/skywalking-collector/skywalking-collector-commons/src/main/resources/application.conf b/skywalking-collector/skywalking-collector-commons/src/main/resources/application.conf
index 156ea54b2..fe62c052c 100644
--- a/skywalking-collector/skywalking-collector-commons/src/main/resources/application.conf
+++ b/skywalking-collector/skywalking-collector-commons/src/main/resources/application.conf
@@ -5,14 +5,14 @@ akka {
serializers {
java = "akka.serialization.JavaSerializer"
proto = "akka.remote.serialization.ProtobufSerializer"
- TraceSegment = "com.a.eye.skywalking.collector.worker.TraceSegmentSerializer"
+// TraceSegment = "com.a.eye.skywalking.collector.worker.TraceSegmentSerializer"
json = "com.a.eye.skywalking.collector.commons.serializer.JsonSerializer"
}
serialization-bindings {
"java.lang.String" = java
"com.google.protobuf.Message" = proto
- "com.a.eye.skywalking.trace.TraceSegment" = TraceSegment
+// "com.a.eye.skywalking.trace.TraceSegment" = TraceSegment
"com.google.gson.JsonObject" = json
}
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/application/ApplicationMain.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/application/ApplicationMain.java
index f043ef667..7626c353a 100644
--- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/application/ApplicationMain.java
+++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/application/ApplicationMain.java
@@ -8,7 +8,7 @@ import com.a.eye.skywalking.collector.worker.application.analysis.NodeInstanceAn
import com.a.eye.skywalking.collector.worker.application.analysis.ResponseCostAnalysis;
import com.a.eye.skywalking.collector.worker.application.analysis.ResponseSummaryAnalysis;
import com.a.eye.skywalking.collector.worker.application.persistence.TraceSegmentRecordPersistence;
-import com.a.eye.skywalking.collector.worker.receiver.TraceSegmentReceiver;
+import com.a.eye.skywalking.collector.worker.segment.SegmentPost;
import com.a.eye.skywalking.trace.Span;
import com.a.eye.skywalking.trace.TraceSegment;
import com.a.eye.skywalking.trace.TraceSegmentRef;
@@ -40,9 +40,9 @@ public class ApplicationMain extends AbstractLocalSyncWorker {
@Override
protected void onWork(Object request, Object response) throws Exception {
- if (request instanceof TraceSegmentReceiver.TraceSegmentTimeSlice) {
+ if (request instanceof SegmentPost.SegmentWithTimeSlice) {
logger.debug("begin translate TraceSegment Object to JsonObject");
- TraceSegmentReceiver.TraceSegmentTimeSlice traceSegment = (TraceSegmentReceiver.TraceSegmentTimeSlice) request;
+ SegmentPost.SegmentWithTimeSlice traceSegment = (SegmentPost.SegmentWithTimeSlice) request;
getSelfContext().lookup(TraceSegmentRecordPersistence.Role.INSTANCE).tell(traceSegment);
@@ -81,7 +81,7 @@ public class ApplicationMain extends AbstractLocalSyncWorker {
}
}
- private void sendToDAGNodePersistence(TraceSegmentReceiver.TraceSegmentTimeSlice traceSegment) throws Exception {
+ private void sendToDAGNodePersistence(SegmentPost.SegmentWithTimeSlice traceSegment) throws Exception {
String code = traceSegment.getTraceSegment().getApplicationCode();
String component = null;
@@ -93,11 +93,11 @@ public class ApplicationMain extends AbstractLocalSyncWorker {
}
}
- DAGNodeAnalysis.Metric node = new DAGNodeAnalysis.Metric(traceSegment.getMinute(), traceSegment.getSecond(), code, component, layer);
- getSelfContext().lookup(DAGNodeAnalysis.Role.INSTANCE).tell(node);
+// DAGNodeAnalysis.Metric node = new DAGNodeAnalysis.Metric(traceSegment.getMinute(), traceSegment.getSecond(), code, component, layer);
+// getSelfContext().lookup(DAGNodeAnalysis.Role.INSTANCE).tell(node);
}
- private void sendToNodeInstanceAnalysis(TraceSegmentReceiver.TraceSegmentTimeSlice traceSegment) throws Exception {
+ private void sendToNodeInstanceAnalysis(SegmentPost.SegmentWithTimeSlice traceSegment) throws Exception {
TraceSegment segment = traceSegment.getTraceSegment();
List refs = segment.getRefs();
@@ -106,13 +106,13 @@ public class ApplicationMain extends AbstractLocalSyncWorker {
String code = segment.getApplicationCode();
String address = ref.getPeerHost();
- NodeInstanceAnalysis.Metric property = new NodeInstanceAnalysis.Metric(traceSegment.getMinute(), traceSegment.getSecond(), code, address);
- getSelfContext().lookup(NodeInstanceAnalysis.Role.INSTANCE).tell(property);
+// NodeInstanceAnalysis.Metric property = new NodeInstanceAnalysis.Metric(traceSegment.getMinute(), traceSegment.getSecond(), code, address);
+// getSelfContext().lookup(NodeInstanceAnalysis.Role.INSTANCE).tell(property);
}
}
}
- private void sendToResponseCostPersistence(TraceSegmentReceiver.TraceSegmentTimeSlice traceSegment) throws Exception {
+ private void sendToResponseCostPersistence(SegmentPost.SegmentWithTimeSlice traceSegment) throws Exception {
String code = traceSegment.getTraceSegment().getApplicationCode();
long startTime = -1;
@@ -127,11 +127,11 @@ public class ApplicationMain extends AbstractLocalSyncWorker {
}
}
- ResponseCostAnalysis.Metric cost = new ResponseCostAnalysis.Metric(traceSegment.getMinute(), traceSegment.getSecond(), code, isError, startTime, endTime);
- getSelfContext().lookup(ResponseCostAnalysis.Role.INSTANCE).tell(cost);
+// ResponseCostAnalysis.Metric cost = new ResponseCostAnalysis.Metric(traceSegment.getMinute(), traceSegment.getSecond(), code, isError, startTime, endTime);
+// getSelfContext().lookup(ResponseCostAnalysis.Role.INSTANCE).tell(cost);
}
- private void sendToResponseSummaryPersistence(TraceSegmentReceiver.TraceSegmentTimeSlice traceSegment) throws Exception {
+ private void sendToResponseSummaryPersistence(SegmentPost.SegmentWithTimeSlice traceSegment) throws Exception {
String code = traceSegment.getTraceSegment().getApplicationCode();
boolean isError = false;
@@ -141,7 +141,7 @@ public class ApplicationMain extends AbstractLocalSyncWorker {
}
}
- ResponseSummaryAnalysis.Metric summary = new ResponseSummaryAnalysis.Metric(traceSegment.getMinute(), traceSegment.getSecond(), code, isError);
- getSelfContext().lookup(ResponseSummaryAnalysis.Role.INSTANCE).tell(summary);
+// ResponseSummaryAnalysis.Metric summary = new ResponseSummaryAnalysis.Metric(traceSegment.getMinute(), traceSegment.getSecond(), code, isError);
+// getSelfContext().lookup(ResponseSummaryAnalysis.Role.INSTANCE).tell(summary);
}
}
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/application/analysis/DAGNodeAnalysis.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/application/analysis/DAGNodeAnalysis.java
index f91a5785c..5168f1353 100644
--- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/application/analysis/DAGNodeAnalysis.java
+++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/application/analysis/DAGNodeAnalysis.java
@@ -9,7 +9,7 @@ import com.a.eye.skywalking.collector.worker.RecordAnalysisMember;
import com.a.eye.skywalking.collector.worker.application.receiver.DAGNodeReceiver;
import com.a.eye.skywalking.collector.worker.storage.AbstractTimeSlice;
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.storage.index.AbstractIndex;
import com.google.gson.JsonObject;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -31,7 +31,7 @@ public class DAGNodeAnalysis extends RecordAnalysisMember {
Metric metric = (Metric) message;
JsonObject propertyJsonObj = new JsonObject();
propertyJsonObj.addProperty("code", metric.code);
- propertyJsonObj.addProperty(DateTools.Time_Slice_Column_Name, metric.getMinute());
+ propertyJsonObj.addProperty(AbstractIndex.Time_Slice_Column_Name, metric.getMinute());
propertyJsonObj.addProperty("component", metric.component);
propertyJsonObj.addProperty("layer", metric.layer);
@@ -89,8 +89,8 @@ public class DAGNodeAnalysis extends RecordAnalysisMember {
private final String component;
private final String layer;
- public Metric(long minute, int second, String code, String component, String layer) {
- super(minute, second);
+ public Metric(long minute, long hour, long day, int second, String code, String component, String layer) {
+ super(minute, hour, day, second);
this.code = code;
this.component = component;
this.layer = layer;
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/application/analysis/NodeInstanceAnalysis.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/application/analysis/NodeInstanceAnalysis.java
index 56aeeb0aa..1fe502320 100644
--- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/application/analysis/NodeInstanceAnalysis.java
+++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/application/analysis/NodeInstanceAnalysis.java
@@ -10,7 +10,7 @@ import com.a.eye.skywalking.collector.worker.WorkerConfig;
import com.a.eye.skywalking.collector.worker.application.receiver.NodeInstanceReceiver;
import com.a.eye.skywalking.collector.worker.storage.AbstractTimeSlice;
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.storage.index.AbstractIndex;
import com.google.gson.JsonObject;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -32,7 +32,7 @@ public class NodeInstanceAnalysis extends RecordAnalysisMember {
Metric metric = (Metric) message;
JsonObject propertyJsonObj = new JsonObject();
propertyJsonObj.addProperty("code", metric.code);
- propertyJsonObj.addProperty(DateTools.Time_Slice_Column_Name, metric.getMinute());
+ propertyJsonObj.addProperty(AbstractIndex.Time_Slice_Column_Name, metric.getMinute());
propertyJsonObj.addProperty("address", metric.address);
String id = metric.getMinute() + "-" + metric.address;
@@ -88,8 +88,8 @@ public class NodeInstanceAnalysis extends RecordAnalysisMember {
private final String code;
private final String address;
- public Metric(long minute, int second, String code, String address) {
- super(minute, second);
+ public Metric(long minute, long hour, long day, int second, String code, String address) {
+ super(minute, hour, day, second);
this.code = code;
this.address = address;
}
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/application/analysis/ResponseCostAnalysis.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/application/analysis/ResponseCostAnalysis.java
index fd31469d5..d15c8a787 100644
--- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/application/analysis/ResponseCostAnalysis.java
+++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/application/analysis/ResponseCostAnalysis.java
@@ -84,8 +84,8 @@ public class ResponseCostAnalysis extends MetricAnalysisMember {
private final Long startTime;
private final Long endTime;
- public Metric(long minute, int second, String code, Boolean isError, Long startTime, Long endTime) {
- super(minute, second);
+ public Metric(long minute, long hour, long day, int second, String code, Boolean isError, Long startTime, Long endTime) {
+ super(minute, hour, day, second);
this.code = code;
this.isError = isError;
this.startTime = startTime;
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/application/analysis/ResponseSummaryAnalysis.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/application/analysis/ResponseSummaryAnalysis.java
index 9dae5cccb..7d1e02025 100644
--- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/application/analysis/ResponseSummaryAnalysis.java
+++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/application/analysis/ResponseSummaryAnalysis.java
@@ -79,8 +79,8 @@ public class ResponseSummaryAnalysis extends MetricAnalysisMember {
private final String code;
private final Boolean isError;
- public Metric(long minute, int second, String code, Boolean isError) {
- super(minute, second);
+ public Metric(long minute, long hour, long day, int second, String code, Boolean isError) {
+ super(minute, hour, day, second);
this.code = code;
this.isError = isError;
}
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/application/persistence/TraceSegmentRecordPersistence.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/application/persistence/TraceSegmentRecordPersistence.java
index c62f59e48..2f1cb56e5 100644
--- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/application/persistence/TraceSegmentRecordPersistence.java
+++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/application/persistence/TraceSegmentRecordPersistence.java
@@ -8,9 +8,9 @@ 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.RecordPersistenceMember;
import com.a.eye.skywalking.collector.worker.WorkerConfig;
-import com.a.eye.skywalking.collector.worker.receiver.TraceSegmentReceiver;
+import com.a.eye.skywalking.collector.worker.segment.SegmentPost;
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.storage.index.AbstractIndex;
import com.a.eye.skywalking.trace.Span;
import com.a.eye.skywalking.trace.TraceSegment;
import com.a.eye.skywalking.trace.TraceSegmentRef;
@@ -45,8 +45,8 @@ public class TraceSegmentRecordPersistence extends RecordPersistenceMember {
@Override
public void analyse(Object message) throws Exception {
- if (message instanceof TraceSegmentReceiver.TraceSegmentTimeSlice) {
- TraceSegmentReceiver.TraceSegmentTimeSlice traceSegment = (TraceSegmentReceiver.TraceSegmentTimeSlice) message;
+ if (message instanceof SegmentPost.SegmentWithTimeSlice) {
+ SegmentPost.SegmentWithTimeSlice traceSegment = (SegmentPost.SegmentWithTimeSlice) message;
JsonObject jsonObject = parseTraceSegment(traceSegment.getTraceSegment(), traceSegment.getMinute());
RecordData recordData = new RecordData(traceSegment.getTraceSegment().getTraceSegmentId());
@@ -91,7 +91,7 @@ public class TraceSegmentRecordPersistence extends RecordPersistenceMember {
private JsonObject parseTraceSegment(TraceSegment traceSegment, long minute) {
JsonObject traceJsonObj = new JsonObject();
traceJsonObj.addProperty("segmentId", traceSegment.getTraceSegmentId());
- traceJsonObj.addProperty(DateTools.Time_Slice_Column_Name, minute);
+ traceJsonObj.addProperty(AbstractIndex.Time_Slice_Column_Name, minute);
traceJsonObj.addProperty("startTime", traceSegment.getStartTime());
traceJsonObj.addProperty("endTime", traceSegment.getEndTime());
traceJsonObj.addProperty("appCode", traceSegment.getApplicationCode());
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/applicationref/ApplicationRefMain.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/applicationref/ApplicationRefMain.java
deleted file mode 100644
index 90e0bb404..000000000
--- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/applicationref/ApplicationRefMain.java
+++ /dev/null
@@ -1,73 +0,0 @@
-package com.a.eye.skywalking.collector.worker.applicationref;
-
-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.applicationref.analysis.DAGNodeRefAnalysis;
-import com.a.eye.skywalking.collector.worker.receiver.TraceSegmentReceiver;
-import com.a.eye.skywalking.trace.TraceSegment;
-import com.a.eye.skywalking.trace.TraceSegmentRef;
-
-import java.util.List;
-
-/**
- * @author pengys5
- */
-public class ApplicationRefMain extends AbstractLocalSyncWorker {
-
- private DAGNodeRefAnalysis dagNodeRefAnalysis;
-
- public ApplicationRefMain(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) {
- super(role, clusterContext, selfContext);
- }
-
- @Override
- public void preStart() throws ProviderNotFoundException {
- getClusterContext().findProvider(DAGNodeRefAnalysis.Role.INSTANCE).create(this);
- }
-
- @Override
- protected void onWork(Object request, Object response) throws Exception {
- TraceSegmentReceiver.TraceSegmentTimeSlice traceSegment = (TraceSegmentReceiver.TraceSegmentTimeSlice) request;
-
- TraceSegment segment = traceSegment.getTraceSegment();
- List refs = segment.getRefs();
- if (refs != null) {
- for (TraceSegmentRef ref : refs) {
- String front = ref.getApplicationCode();
- String behind = segment.getApplicationCode();
-
- DAGNodeRefAnalysis.Metric nodeRef = new DAGNodeRefAnalysis.Metric(traceSegment.getMinute(), traceSegment.getSecond(), front, behind);
- getSelfContext().lookup(DAGNodeRefAnalysis.Role.INSTANCE).tell(nodeRef);
- }
- }
- }
-
- public static class Factory extends AbstractLocalSyncWorkerProvider {
- public static Factory INSTANCE = new Factory();
-
- @Override
- public Role role() {
- return Role.INSTANCE;
- }
-
- @Override
- public ApplicationRefMain workerInstance(ClusterWorkerContext clusterContext) {
- return new ApplicationRefMain(role(), clusterContext, new LocalWorkerContext());
- }
- }
-
- public enum Role implements com.a.eye.skywalking.collector.actor.Role {
- INSTANCE;
-
- @Override
- public String roleName() {
- return ApplicationRefMain.class.getSimpleName();
- }
-
- @Override
- public WorkerSelector workerSelector() {
- return new RollingSelector();
- }
- }
-}
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/applicationref/analysis/DAGNodeRefAnalysis.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/applicationref/analysis/DAGNodeRefAnalysis.java
deleted file mode 100644
index 3b026dbd2..000000000
--- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/applicationref/analysis/DAGNodeRefAnalysis.java
+++ /dev/null
@@ -1,96 +0,0 @@
-package com.a.eye.skywalking.collector.worker.applicationref.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.HashCodeSelector;
-import com.a.eye.skywalking.collector.actor.selector.WorkerSelector;
-import com.a.eye.skywalking.collector.worker.RecordAnalysisMember;
-import com.a.eye.skywalking.collector.worker.WorkerConfig;
-import com.a.eye.skywalking.collector.worker.applicationref.receiver.DAGNodeRefReceiver;
-import com.a.eye.skywalking.collector.worker.storage.AbstractTimeSlice;
-import com.a.eye.skywalking.collector.worker.storage.RecordData;
-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;
-
-/**
- * @author pengys5
- */
-public class DAGNodeRefAnalysis extends RecordAnalysisMember {
-
- private Logger logger = LogManager.getFormatterLogger(DAGNodeRefAnalysis.class);
-
- public DAGNodeRefAnalysis(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 Metric) {
- Metric metric = (Metric) message;
- JsonObject propertyJsonObj = new JsonObject();
- propertyJsonObj.addProperty("frontCode", metric.frontCode);
- propertyJsonObj.addProperty("behindCode", metric.behindCode);
- propertyJsonObj.addProperty(DateTools.Time_Slice_Column_Name, metric.getMinute());
-
- String id = metric.getMinute() + "-" + metric.frontCode + "-" + metric.behindCode;
- setRecord(id, propertyJsonObj);
- logger.debug("dag node ref: %s", propertyJsonObj.toString());
- }
- }
-
- @Override
- protected void aggregation() throws Exception {
- RecordData oneRecord;
- while ((oneRecord = pushOne()) != null) {
- getClusterContext().lookup(DAGNodeRefReceiver.Role.INSTANCE).tell(oneRecord);
- }
- }
-
- public static class Factory extends AbstractLocalAsyncWorkerProvider {
-
- public static Factory INSTANCE = new Factory();
-
- @Override
- public Role role() {
- return Role.INSTANCE;
- }
-
- @Override
- public DAGNodeRefAnalysis workerInstance(ClusterWorkerContext clusterContext) {
- return new DAGNodeRefAnalysis(role(), clusterContext, new LocalWorkerContext());
- }
-
- @Override
- public int queueSize() {
- return WorkerConfig.Queue.DAGNodeRefAnalysis.Size;
- }
- }
-
- public enum Role implements com.a.eye.skywalking.collector.actor.Role {
- INSTANCE;
-
- @Override
- public String roleName() {
- return DAGNodeRefAnalysis.class.getSimpleName();
- }
-
- @Override
- public WorkerSelector workerSelector() {
- return new HashCodeSelector();
- }
- }
-
- public static class Metric extends AbstractTimeSlice {
- private final String frontCode;
- private final String behindCode;
-
- public Metric(long minute, int second, String frontCode, String behindCode) {
- super(minute, second);
- this.frontCode = frontCode;
- this.behindCode = behindCode;
- }
- }
-}
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/dagnode/persistence/NodeInstanceSearchPersistence.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/dagnode/persistence/NodeInstanceSearchPersistence.java
index aa3e5f199..1eead6f1f 100644
--- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/dagnode/persistence/NodeInstanceSearchPersistence.java
+++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/dagnode/persistence/NodeInstanceSearchPersistence.java
@@ -5,7 +5,7 @@ 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.storage.EsClient;
-import com.a.eye.skywalking.collector.worker.storage.index.NodeInstanceIndex;
+import com.a.eye.skywalking.collector.worker.nodeinst.NodeInstIndex;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import org.apache.logging.log4j.LogManager;
@@ -40,7 +40,7 @@ public class NodeInstanceSearchPersistence extends AbstractLocalSyncWorker {
}
public JsonArray search(String type, long timeSlice) {
- SearchRequestBuilder searchRequestBuilder = EsClient.getClient().prepareSearch(NodeInstanceIndex.Index);
+ SearchRequestBuilder searchRequestBuilder = EsClient.getClient().prepareSearch(NodeInstIndex.Index);
searchRequestBuilder.setTypes(type);
searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
searchRequestBuilder.setQuery(QueryBuilders.multiMatchQuery(timeSlice, "timeSlice"));
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/dagnode/persistence/NodeInstanceSummarySearchPersistence.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/dagnode/persistence/NodeInstanceSummarySearchPersistence.java
index b620c6d7a..d505b393a 100644
--- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/dagnode/persistence/NodeInstanceSummarySearchPersistence.java
+++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/dagnode/persistence/NodeInstanceSummarySearchPersistence.java
@@ -5,7 +5,7 @@ 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.storage.EsClient;
-import com.a.eye.skywalking.collector.worker.storage.index.NodeInstanceIndex;
+import com.a.eye.skywalking.collector.worker.nodeinst.NodeInstIndex;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import org.apache.logging.log4j.LogManager;
@@ -40,7 +40,7 @@ public class NodeInstanceSummarySearchPersistence extends AbstractLocalSyncWorke
}
public JsonArray search(String type, long timeSlice) {
- SearchRequestBuilder searchRequestBuilder = EsClient.getClient().prepareSearch(NodeInstanceIndex.Index);
+ SearchRequestBuilder searchRequestBuilder = EsClient.getClient().prepareSearch(NodeInstIndex.Index);
searchRequestBuilder.setTypes(type);
searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
searchRequestBuilder.setQuery(QueryBuilders.multiMatchQuery(timeSlice, "timeSlice"));
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/dagnode/persistence/NodeRefSearchPersistence.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/dagnode/persistence/NodeRefSearchPersistence.java
index a351f007d..c044bae97 100644
--- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/dagnode/persistence/NodeRefSearchPersistence.java
+++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/dagnode/persistence/NodeRefSearchPersistence.java
@@ -5,7 +5,7 @@ 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.storage.EsClient;
-import com.a.eye.skywalking.collector.worker.storage.index.NodeRefIndex;
+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;
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/dagnode/persistence/ServerNodeSearchPersistence.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/dagnode/persistence/ServerNodeSearchPersistence.java
index 428402a17..def983227 100644
--- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/dagnode/persistence/ServerNodeSearchPersistence.java
+++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/dagnode/persistence/ServerNodeSearchPersistence.java
@@ -5,7 +5,7 @@ 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.storage.EsClient;
-import com.a.eye.skywalking.collector.worker.storage.index.ServerNodeIndex;
+import com.a.eye.skywalking.collector.worker.node.NodeIndex;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import org.apache.logging.log4j.LogManager;
@@ -40,7 +40,7 @@ public class ServerNodeSearchPersistence extends AbstractLocalSyncWorker {
}
public JsonArray search(String type, long timeSlice) {
- SearchRequestBuilder searchRequestBuilder = EsClient.getClient().prepareSearch(ServerNodeIndex.Index);
+ SearchRequestBuilder searchRequestBuilder = EsClient.getClient().prepareSearch(NodeIndex.Index);
searchRequestBuilder.setTypes(type);
searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
searchRequestBuilder.setQuery(QueryBuilders.termQuery("timeSlice", timeSlice));
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/dagnode/searcher/ClientNodeWithTimeSliceSearcher.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/dagnode/searcher/ClientNodeWithTimeSliceGet.java
similarity index 80%
rename from skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/dagnode/searcher/ClientNodeWithTimeSliceSearcher.java
rename to skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/dagnode/searcher/ClientNodeWithTimeSliceGet.java
index d37bfcc08..8e3ded85a 100644
--- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/dagnode/searcher/ClientNodeWithTimeSliceSearcher.java
+++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/dagnode/searcher/ClientNodeWithTimeSliceGet.java
@@ -7,8 +7,8 @@ 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.dagnode.persistence.ClientNodeSearchPersistence;
-import com.a.eye.skywalking.collector.worker.httpserver.AbstractSearcher;
-import com.a.eye.skywalking.collector.worker.httpserver.AbstractSearcherProvider;
+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.tools.ParameterTools;
import com.google.gson.JsonObject;
import org.apache.logging.log4j.LogManager;
@@ -20,11 +20,11 @@ import java.util.Map;
/**
* @author pengys5
*/
-public class ClientNodeWithTimeSliceSearcher extends AbstractSearcher {
+public class ClientNodeWithTimeSliceGet extends AbstractGet {
- private Logger logger = LogManager.getFormatterLogger(ClientNodeWithTimeSliceSearcher.class);
+ private Logger logger = LogManager.getFormatterLogger(ClientNodeWithTimeSliceGet.class);
- private ClientNodeWithTimeSliceSearcher(Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) {
+ private ClientNodeWithTimeSliceGet(Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) {
super(role, clusterContext, selfContext);
}
@@ -52,7 +52,7 @@ public class ClientNodeWithTimeSliceSearcher extends AbstractSearcher {
getSelfContext().lookup(ClientNodeSearchPersistence.WorkerRole.INSTANCE).ask(requestEntity, response);
}
- public static class Factory extends AbstractSearcherProvider {
+ public static class Factory extends AbstractGetProvider {
@Override
public Role role() {
@@ -60,13 +60,13 @@ public class ClientNodeWithTimeSliceSearcher extends AbstractSearcher {
}
@Override
- public ClientNodeWithTimeSliceSearcher workerInstance(ClusterWorkerContext clusterContext) {
- return new ClientNodeWithTimeSliceSearcher(role(), clusterContext, new LocalWorkerContext());
+ public ClientNodeWithTimeSliceGet workerInstance(ClusterWorkerContext clusterContext) {
+ return new ClientNodeWithTimeSliceGet(role(), clusterContext, new LocalWorkerContext());
}
@Override
public String servletPath() {
- return "/dagNode/search/clientNodeWithTimeSlice";
+ return "/search/dagNode/clientNodeWithTimeSlice";
}
}
@@ -75,7 +75,7 @@ public class ClientNodeWithTimeSliceSearcher extends AbstractSearcher {
@Override
public String roleName() {
- return ClientNodeWithTimeSliceSearcher.class.getSimpleName();
+ return ClientNodeWithTimeSliceGet.class.getSimpleName();
}
@Override
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/dagnode/searcher/NodeInstanceWithTimeSliceSearcher.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/dagnode/searcher/NodeInstanceWithTimeSliceGet.java
similarity index 81%
rename from skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/dagnode/searcher/NodeInstanceWithTimeSliceSearcher.java
rename to skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/dagnode/searcher/NodeInstanceWithTimeSliceGet.java
index 4926bf13f..a80e837fe 100644
--- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/dagnode/searcher/NodeInstanceWithTimeSliceSearcher.java
+++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/dagnode/searcher/NodeInstanceWithTimeSliceGet.java
@@ -7,8 +7,8 @@ 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.dagnode.persistence.NodeInstanceSearchPersistence;
-import com.a.eye.skywalking.collector.worker.httpserver.AbstractSearcher;
-import com.a.eye.skywalking.collector.worker.httpserver.AbstractSearcherProvider;
+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.tools.ParameterTools;
import com.google.gson.JsonObject;
import org.apache.logging.log4j.LogManager;
@@ -20,11 +20,11 @@ import java.util.Map;
/**
* @author pengys5
*/
-public class NodeInstanceWithTimeSliceSearcher extends AbstractSearcher {
+public class NodeInstanceWithTimeSliceGet extends AbstractGet {
- private Logger logger = LogManager.getFormatterLogger(NodeInstanceWithTimeSliceSearcher.class);
+ private Logger logger = LogManager.getFormatterLogger(NodeInstanceWithTimeSliceGet.class);
- private NodeInstanceWithTimeSliceSearcher(Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) {
+ private NodeInstanceWithTimeSliceGet(Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) {
super(role, clusterContext, selfContext);
}
@@ -52,7 +52,7 @@ public class NodeInstanceWithTimeSliceSearcher extends AbstractSearcher {
getSelfContext().lookup(NodeInstanceSearchPersistence.WorkerRole.INSTANCE).ask(requestEntity, response);
}
- public static class Factory extends AbstractSearcherProvider {
+ public static class Factory extends AbstractGetProvider {
@Override
public Role role() {
@@ -60,8 +60,8 @@ public class NodeInstanceWithTimeSliceSearcher extends AbstractSearcher {
}
@Override
- public NodeInstanceWithTimeSliceSearcher workerInstance(ClusterWorkerContext clusterContext) {
- return new NodeInstanceWithTimeSliceSearcher(role(), clusterContext, new LocalWorkerContext());
+ public NodeInstanceWithTimeSliceGet workerInstance(ClusterWorkerContext clusterContext) {
+ return new NodeInstanceWithTimeSliceGet(role(), clusterContext, new LocalWorkerContext());
}
@Override
@@ -75,7 +75,7 @@ public class NodeInstanceWithTimeSliceSearcher extends AbstractSearcher {
@Override
public String roleName() {
- return NodeInstanceWithTimeSliceSearcher.class.getSimpleName();
+ return NodeInstanceWithTimeSliceGet.class.getSimpleName();
}
@Override
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/dagnode/searcher/NodeRefWithTimeSliceSearcher.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/dagnode/searcher/NodeRefWithTimeSliceGet.java
similarity index 82%
rename from skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/dagnode/searcher/NodeRefWithTimeSliceSearcher.java
rename to skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/dagnode/searcher/NodeRefWithTimeSliceGet.java
index f54c12d35..c435e9cba 100644
--- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/dagnode/searcher/NodeRefWithTimeSliceSearcher.java
+++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/dagnode/searcher/NodeRefWithTimeSliceGet.java
@@ -7,8 +7,8 @@ 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.dagnode.persistence.NodeRefSearchPersistence;
-import com.a.eye.skywalking.collector.worker.httpserver.AbstractSearcher;
-import com.a.eye.skywalking.collector.worker.httpserver.AbstractSearcherProvider;
+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.tools.ParameterTools;
import com.google.gson.JsonObject;
import org.apache.logging.log4j.LogManager;
@@ -20,11 +20,11 @@ import java.util.Map;
/**
* @author pengys5
*/
-public class NodeRefWithTimeSliceSearcher extends AbstractSearcher {
+public class NodeRefWithTimeSliceGet extends AbstractGet {
- private Logger logger = LogManager.getFormatterLogger(NodeRefWithTimeSliceSearcher.class);
+ private Logger logger = LogManager.getFormatterLogger(NodeRefWithTimeSliceGet.class);
- private NodeRefWithTimeSliceSearcher(Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) {
+ private NodeRefWithTimeSliceGet(Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) {
super(role, clusterContext, selfContext);
}
@@ -52,7 +52,7 @@ public class NodeRefWithTimeSliceSearcher extends AbstractSearcher {
getSelfContext().lookup(NodeRefSearchPersistence.WorkerRole.INSTANCE).ask(requestEntity, response);
}
- public static class Factory extends AbstractSearcherProvider {
+ public static class Factory extends AbstractGetProvider {
@Override
public Role role() {
@@ -60,8 +60,8 @@ public class NodeRefWithTimeSliceSearcher extends AbstractSearcher {
}
@Override
- public NodeRefWithTimeSliceSearcher workerInstance(ClusterWorkerContext clusterContext) {
- return new NodeRefWithTimeSliceSearcher(role(), clusterContext, new LocalWorkerContext());
+ public NodeRefWithTimeSliceGet workerInstance(ClusterWorkerContext clusterContext) {
+ return new NodeRefWithTimeSliceGet(role(), clusterContext, new LocalWorkerContext());
}
@Override
@@ -75,7 +75,7 @@ public class NodeRefWithTimeSliceSearcher extends AbstractSearcher {
@Override
public String roleName() {
- return NodeRefWithTimeSliceSearcher.class.getSimpleName();
+ return NodeRefWithTimeSliceGet.class.getSimpleName();
}
@Override
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/dagnode/searcher/ServerNodeWithTimeSliceSearcher.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/dagnode/searcher/ServerNodeWithTimeSliceGet.java
similarity index 81%
rename from skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/dagnode/searcher/ServerNodeWithTimeSliceSearcher.java
rename to skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/dagnode/searcher/ServerNodeWithTimeSliceGet.java
index 6a4aeea13..f9a7ba16e 100644
--- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/dagnode/searcher/ServerNodeWithTimeSliceSearcher.java
+++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/dagnode/searcher/ServerNodeWithTimeSliceGet.java
@@ -7,8 +7,8 @@ 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.dagnode.persistence.ServerNodeSearchPersistence;
-import com.a.eye.skywalking.collector.worker.httpserver.AbstractSearcher;
-import com.a.eye.skywalking.collector.worker.httpserver.AbstractSearcherProvider;
+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.tools.ParameterTools;
import com.google.gson.JsonObject;
import org.apache.logging.log4j.LogManager;
@@ -20,11 +20,11 @@ import java.util.Map;
/**
* @author pengys5
*/
-public class ServerNodeWithTimeSliceSearcher extends AbstractSearcher {
+public class ServerNodeWithTimeSliceGet extends AbstractGet {
- private Logger logger = LogManager.getFormatterLogger(ServerNodeWithTimeSliceSearcher.class);
+ private Logger logger = LogManager.getFormatterLogger(ServerNodeWithTimeSliceGet.class);
- private ServerNodeWithTimeSliceSearcher(Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) {
+ private ServerNodeWithTimeSliceGet(Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) {
super(role, clusterContext, selfContext);
}
@@ -52,7 +52,7 @@ public class ServerNodeWithTimeSliceSearcher extends AbstractSearcher {
getSelfContext().lookup(ServerNodeSearchPersistence.WorkerRole.INSTANCE).ask(requestEntity, response);
}
- public static class Factory extends AbstractSearcherProvider {
+ public static class Factory extends AbstractGetProvider {
@Override
public Role role() {
@@ -60,8 +60,8 @@ public class ServerNodeWithTimeSliceSearcher extends AbstractSearcher {
}
@Override
- public ServerNodeWithTimeSliceSearcher workerInstance(ClusterWorkerContext clusterContext) {
- return new ServerNodeWithTimeSliceSearcher(role(), clusterContext, new LocalWorkerContext());
+ public ServerNodeWithTimeSliceGet workerInstance(ClusterWorkerContext clusterContext) {
+ return new ServerNodeWithTimeSliceGet(role(), clusterContext, new LocalWorkerContext());
}
@Override
@@ -75,7 +75,7 @@ public class ServerNodeWithTimeSliceSearcher extends AbstractSearcher {
@Override
public String roleName() {
- return ServerNodeWithTimeSliceSearcher.class.getSimpleName();
+ return ServerNodeWithTimeSliceGet.class.getSimpleName();
}
@Override
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/httpserver/AbstractSearcher.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/httpserver/AbstractGet.java
similarity index 82%
rename from skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/httpserver/AbstractSearcher.java
rename to skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/httpserver/AbstractGet.java
index 13e3d1345..59ffa4fff 100644
--- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/httpserver/AbstractSearcher.java
+++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/httpserver/AbstractGet.java
@@ -12,9 +12,9 @@ import java.util.Map;
/**
* @author pengys5
*/
-public abstract class AbstractSearcher extends AbstractLocalSyncWorker {
+public abstract class AbstractGet extends AbstractLocalSyncWorker {
- public AbstractSearcher(Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) {
+ public AbstractGet(Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) {
super(role, clusterContext, selfContext);
}
@@ -26,11 +26,11 @@ public abstract class AbstractSearcher extends AbstractLocalSyncWorker {
protected abstract void onSearch(Map request, JsonObject response) throws Exception;
- static class SearchWithHttpServlet extends AbstractHttpServlet {
+ static class GetWithHttpServlet extends AbstractHttpServlet {
private final LocalSyncWorkerRef ownerWorkerRef;
- SearchWithHttpServlet(LocalSyncWorkerRef ownerWorkerRef) {
+ GetWithHttpServlet(LocalSyncWorkerRef ownerWorkerRef) {
this.ownerWorkerRef = ownerWorkerRef;
}
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/httpserver/AbstractGetProvider.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/httpserver/AbstractGetProvider.java
new file mode 100644
index 000000000..72ac9adf2
--- /dev/null
+++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/httpserver/AbstractGetProvider.java
@@ -0,0 +1,19 @@
+package com.a.eye.skywalking.collector.worker.httpserver;
+
+import com.a.eye.skywalking.collector.actor.*;
+import org.eclipse.jetty.servlet.ServletContextHandler;
+import org.eclipse.jetty.servlet.ServletHolder;
+
+/**
+ * @author pengys5
+ */
+public abstract class AbstractGetProvider extends AbstractLocalSyncWorkerProvider {
+
+ public abstract String servletPath();
+
+ final protected void create(ServletContextHandler context) throws IllegalArgumentException, ProviderNotFoundException {
+ LocalSyncWorkerRef workerRef = (LocalSyncWorkerRef) super.create(AbstractWorker.noOwner());
+ AbstractGet.GetWithHttpServlet getWithHttpServlet = new AbstractGet.GetWithHttpServlet(workerRef);
+ context.addServlet(new ServletHolder(getWithHttpServlet), servletPath());
+ }
+}
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/httpserver/AbstractPost.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/httpserver/AbstractPost.java
new file mode 100644
index 000000000..2e915ff6b
--- /dev/null
+++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/httpserver/AbstractPost.java
@@ -0,0 +1,65 @@
+package com.a.eye.skywalking.collector.worker.httpserver;
+
+import com.a.eye.skywalking.collector.actor.*;
+import com.a.eye.skywalking.collector.queue.EndOfBatchCommand;
+import com.google.gson.JsonObject;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.BufferedReader;
+import java.io.IOException;
+
+/**
+ * @author pengys5
+ */
+public abstract class AbstractPost extends AbstractLocalAsyncWorker {
+
+ private Logger logger = LogManager.getFormatterLogger(AbstractPost.class);
+
+ public AbstractPost(Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) {
+ super(role, clusterContext, selfContext);
+ }
+
+ @Override
+ final public void onWork(Object request) throws Exception {
+ if (request instanceof String) {
+ onReceive((String) request);
+ } else if (request instanceof EndOfBatchCommand) {
+
+ } else {
+ logger.error("unhandled request, request instance must String, but is %s", request.getClass().toString());
+ }
+ }
+
+ protected abstract void onReceive(String reqJsonStr) throws Exception;
+
+ static class PostWithHttpServlet extends AbstractHttpServlet {
+
+ private final LocalAsyncWorkerRef ownerWorkerRef;
+
+ protected PostWithHttpServlet(LocalAsyncWorkerRef ownerWorkerRef) {
+ this.ownerWorkerRef = ownerWorkerRef;
+ }
+
+ @Override
+ final protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+ JsonObject resJson = new JsonObject();
+ try {
+ BufferedReader bufferedReader = request.getReader();
+ StringBuffer dataStr = new StringBuffer();
+ String tmpStr;
+ while ((tmpStr = bufferedReader.readLine()) != null) {
+ dataStr.append(tmpStr);
+ }
+ ownerWorkerRef.tell(dataStr.toString());
+ reply(response, resJson, HttpServletResponse.SC_OK);
+ } catch (Exception e) {
+ resJson.addProperty("error", e.getMessage());
+ reply(response, resJson, HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ }
+ }
+ }
+}
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/httpserver/AbstractPostProvider.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/httpserver/AbstractPostProvider.java
new file mode 100644
index 000000000..563f4f1dd
--- /dev/null
+++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/httpserver/AbstractPostProvider.java
@@ -0,0 +1,19 @@
+package com.a.eye.skywalking.collector.worker.httpserver;
+
+import com.a.eye.skywalking.collector.actor.*;
+import org.eclipse.jetty.servlet.ServletContextHandler;
+import org.eclipse.jetty.servlet.ServletHolder;
+
+/**
+ * @author pengys5
+ */
+public abstract class AbstractPostProvider extends AbstractLocalAsyncWorkerProvider {
+
+ public abstract String servletPath();
+
+ final protected void create(ServletContextHandler context) throws IllegalArgumentException, ProviderNotFoundException {
+ LocalAsyncWorkerRef workerRef = (LocalAsyncWorkerRef) super.create(AbstractWorker.noOwner());
+ AbstractPost.PostWithHttpServlet postWithHttpServlet = new AbstractPost.PostWithHttpServlet(workerRef);
+ context.addServlet(new ServletHolder(postWithHttpServlet), servletPath());
+ }
+}
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/httpserver/AbstractReceiver.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/httpserver/AbstractReceiver.java
deleted file mode 100644
index df534806e..000000000
--- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/httpserver/AbstractReceiver.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package com.a.eye.skywalking.collector.worker.httpserver;
-
-import com.a.eye.skywalking.collector.actor.*;
-import com.google.gson.JsonObject;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-
-/**
- * @author pengys5
- */
-public abstract class AbstractReceiver extends AbstractLocalAsyncWorker {
-
- public AbstractReceiver(Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) {
- super(role, clusterContext, selfContext);
- }
-
- @Override
- final public void onWork(Object request) throws Exception {
- if (request instanceof ReceiverMessage) {
- ReceiverMessage receiverMessage = (ReceiverMessage) request;
- onReceive(receiverMessage.request);
- }
- }
-
- protected abstract void onReceive(JsonObject request) throws Exception;
-
- static class ReceiveWithHttpServlet extends AbstractHttpServlet {
-
- private final LocalAsyncWorkerRef ownerWorkerRef;
-
- public ReceiveWithHttpServlet(LocalAsyncWorkerRef ownerWorkerRef) {
- this.ownerWorkerRef = ownerWorkerRef;
- }
-
- @Override
- final protected void doPut(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- JsonObject reqJson = new JsonObject();
- JsonObject resJson = new JsonObject();
- try {
- request.getParameter("json");
- ownerWorkerRef.tell(new ReceiverMessage(reqJson));
- reply(response, resJson, HttpServletResponse.SC_OK);
- } catch (Exception e) {
- resJson.addProperty("error", e.getMessage());
- reply(response, resJson, HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
- }
- }
- }
-
- static class ReceiverMessage {
- private final JsonObject request;
-
- public ReceiverMessage(JsonObject request) {
- this.request = request;
- }
- }
-}
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/httpserver/AbstractReceiverProvider.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/httpserver/AbstractReceiverProvider.java
deleted file mode 100644
index 8d660e230..000000000
--- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/httpserver/AbstractReceiverProvider.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.a.eye.skywalking.collector.worker.httpserver;
-
-import com.a.eye.skywalking.collector.actor.*;
-import org.eclipse.jetty.servlet.ServletContextHandler;
-import org.eclipse.jetty.servlet.ServletHolder;
-
-/**
- * @author pengys5
- */
-public abstract class AbstractReceiverProvider extends AbstractLocalAsyncWorkerProvider {
-
- public abstract String servletPath();
-
- final protected void createReceiver(ServletContextHandler context) throws IllegalArgumentException, ProviderNotFoundException {
- LocalAsyncWorkerRef workerRef = (LocalAsyncWorkerRef) super.create(AbstractWorker.noOwner());
- AbstractReceiver.ReceiveWithHttpServlet receiveWithHttpServlet = new AbstractReceiver.ReceiveWithHttpServlet(workerRef);
- context.addServlet(new ServletHolder(receiveWithHttpServlet), servletPath());
- }
-
- @Override
- final public T workerInstance(ClusterWorkerContext clusterContext) {
- return null;
- }
-
- @Override
- final public Role role() {
- return null;
- }
-}
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/httpserver/AbstractSearcherProvider.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/httpserver/AbstractSearcherProvider.java
deleted file mode 100644
index 48efede55..000000000
--- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/httpserver/AbstractSearcherProvider.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.a.eye.skywalking.collector.worker.httpserver;
-
-import com.a.eye.skywalking.collector.actor.*;
-import org.eclipse.jetty.servlet.ServletContextHandler;
-import org.eclipse.jetty.servlet.ServletHolder;
-
-/**
- * @author pengys5
- */
-public abstract class AbstractSearcherProvider extends AbstractLocalSyncWorkerProvider {
-
- public abstract String servletPath();
-
- final protected void createSearcher(ServletContextHandler context) throws IllegalArgumentException, ProviderNotFoundException {
- LocalSyncWorkerRef workerRef = (LocalSyncWorkerRef) super.create(AbstractWorker.noOwner());
- AbstractSearcher.SearchWithHttpServlet searchWithHttpServlet = new AbstractSearcher.SearchWithHttpServlet(workerRef);
- context.addServlet(new ServletHolder(searchWithHttpServlet), servletPath());
- }
-}
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/httpserver/HttpServer.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/httpserver/HttpServer.java
index 6f1134e97..481ac94ee 100644
--- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/httpserver/HttpServer.java
+++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/httpserver/HttpServer.java
@@ -18,7 +18,7 @@ public enum HttpServer {
public void boot(ClusterWorkerContext clusterContext) throws Exception {
Server server = new Server(7001);
- String contextPath = "/skywalking";
+ String contextPath = "/";
ServletContextHandler servletContextHandler = new ServletContextHandler(ServletContextHandler.NO_SESSIONS);
servletContextHandler.setContextPath(contextPath);
logger.info("http server root context path: %s", contextPath);
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/httpserver/ServletsCreator.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/httpserver/ServletsCreator.java
index 63d6c22a9..722fc079b 100644
--- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/httpserver/ServletsCreator.java
+++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/httpserver/ServletsCreator.java
@@ -17,18 +17,18 @@ public enum ServletsCreator {
private Logger logger = LogManager.getFormatterLogger(ServletsCreator.class);
public void boot(ServletContextHandler servletContextHandler, ClusterWorkerContext clusterContext) throws IllegalArgumentException, ProviderNotFoundException {
- ServiceLoader receiverLoader = java.util.ServiceLoader.load(AbstractReceiverProvider.class);
- for (AbstractReceiverProvider provider : receiverLoader) {
+ ServiceLoader receiverLoader = java.util.ServiceLoader.load(AbstractPostProvider.class);
+ for (AbstractPostProvider provider : receiverLoader) {
provider.setClusterContext(clusterContext);
- provider.createReceiver(servletContextHandler);
- logger.info("add receiver servlet mapping path: %s ", provider.servletPath());
+ provider.create(servletContextHandler);
+ logger.info("add post servlet mapping path: %s ", provider.servletPath());
}
- ServiceLoader searcherLoader = java.util.ServiceLoader.load(AbstractSearcherProvider.class);
- for (AbstractSearcherProvider provider : searcherLoader) {
+ ServiceLoader searcherLoader = java.util.ServiceLoader.load(AbstractGetProvider.class);
+ for (AbstractGetProvider provider : searcherLoader) {
provider.setClusterContext(clusterContext);
- provider.createSearcher(servletContextHandler);
- logger.info("add searcher servlet mapping path: %s ", provider.servletPath());
+ provider.create(servletContextHandler);
+ logger.info("add get servlet mapping path: %s ", provider.servletPath());
}
}
}
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/storage/index/ServerNodeIndex.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/NodeIndex.java
similarity index 79%
rename from skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/storage/index/ServerNodeIndex.java
rename to skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/NodeIndex.java
index cd16beae1..4adfa07aa 100644
--- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/storage/index/ServerNodeIndex.java
+++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/NodeIndex.java
@@ -1,5 +1,6 @@
-package com.a.eye.skywalking.collector.worker.storage.index;
+package com.a.eye.skywalking.collector.worker.node;
+import com.a.eye.skywalking.collector.worker.storage.index.AbstractIndex;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.elasticsearch.common.xcontent.XContentBuilder;
@@ -10,18 +11,22 @@ import java.io.IOException;
/**
* @author pengys5
*/
-public class ServerNodeIndex extends AbstractIndex {
+public class NodeIndex extends AbstractIndex {
- private Logger logger = LogManager.getFormatterLogger(ServerNodeIndex.class);
-
- public static final String Index = "server_node_idx";
+ private Logger logger = LogManager.getFormatterLogger(NodeIndex.class);
+ public static final String Index = "node_idx";
@Override
public String index() {
return Index;
}
+ @Override
+ public boolean isRecord() {
+ return false;
+ }
+
@Override
public XContentBuilder createMappingBuilder() throws IOException {
XContentBuilder mappingBuilder = XContentFactory.jsonBuilder()
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/analysis/AbstractNodeAnalysis.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/analysis/AbstractNodeAnalysis.java
new file mode 100644
index 000000000..b52c74329
--- /dev/null
+++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/analysis/AbstractNodeAnalysis.java
@@ -0,0 +1,60 @@
+package com.a.eye.skywalking.collector.worker.node.analysis;
+
+import com.a.eye.skywalking.collector.actor.ClusterWorkerContext;
+import com.a.eye.skywalking.collector.actor.LocalWorkerContext;
+import com.a.eye.skywalking.collector.worker.RecordAnalysisMember;
+import com.a.eye.skywalking.collector.worker.storage.index.AbstractIndex;
+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
+ */
+public abstract class AbstractNodeAnalysis extends RecordAnalysisMember {
+
+ private Logger logger = LogManager.getFormatterLogger(AbstractNodeAnalysis.class);
+
+ public AbstractNodeAnalysis(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) {
+ super(role, clusterContext, selfContext);
+ }
+
+ public void analyseSpans(TraceSegment segment, long timeSlice) throws Exception {
+ List spanList = segment.getSpans();
+ if (spanList != null && spanList.size() > 0) {
+ for (Span span : spanList) {
+ JsonObject dataJsonObj = new JsonObject();
+ String kind = Tags.SPAN_KIND.get(span);
+
+ String layer = null;
+ String component = null;
+ String code = null;
+ if (Tags.SPAN_KIND_CLIENT.equals(kind)) {
+ layer = Tags.SPAN_LAYER.get(span);
+ component = Tags.COMPONENT.get(span);
+ code = Tags.PEERS.get(span) + "-" + component;
+ } else if (Tags.SPAN_KIND_SERVER.equals(kind)) {
+ code = segment.getApplicationCode();
+ layer = Tags.SPAN_LAYER.get(span);
+ component = Tags.COMPONENT.get(span);
+ } else {
+ logger.error("The span kind value is incorrect which segment record id is %s, the value must client or server", segment.getTraceSegmentId());
+ return;
+ }
+ dataJsonObj.addProperty("code", code);
+ dataJsonObj.addProperty("component", component);
+ dataJsonObj.addProperty("layer", layer);
+ dataJsonObj.addProperty("kind", kind);
+ dataJsonObj.addProperty(AbstractIndex.Time_Slice_Column_Name, timeSlice);
+ String id = timeSlice + "-" + code;
+ logger.debug("node: %s", dataJsonObj.toString());
+ setRecord(id, dataJsonObj);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/analysis/NodeDayAnalysis.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/analysis/NodeDayAnalysis.java
new file mode 100644
index 000000000..99b0e22c1
--- /dev/null
+++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/analysis/NodeDayAnalysis.java
@@ -0,0 +1,71 @@
+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;
+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.segment.SegmentPost;
+import com.a.eye.skywalking.collector.worker.storage.RecordData;
+import com.a.eye.skywalking.trace.TraceSegment;
+
+/**
+ * @author pengys5
+ */
+public class NodeDayAnalysis extends AbstractNodeAnalysis {
+
+ public NodeDayAnalysis(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());
+ }
+ }
+
+ @Override
+ protected void aggregation() throws Exception {
+ RecordData oneRecord;
+ while ((oneRecord = pushOne()) != null) {
+ getClusterContext().lookup(NodeDayAgg.Role.INSTANCE).tell(oneRecord);
+ }
+ }
+
+ public static class Factory extends AbstractLocalAsyncWorkerProvider {
+ public static Factory INSTANCE = new Factory();
+
+ @Override
+ public Role role() {
+ return Role.INSTANCE;
+ }
+
+ @Override
+ public NodeDayAnalysis workerInstance(ClusterWorkerContext clusterContext) {
+ return new NodeDayAnalysis(role(), clusterContext, new LocalWorkerContext());
+ }
+
+ @Override
+ public int queueSize() {
+ return 1024;
+ }
+ }
+
+ public enum Role implements com.a.eye.skywalking.collector.actor.Role {
+ INSTANCE;
+
+ @Override
+ public String roleName() {
+ return NodeDayAnalysis.class.getSimpleName();
+ }
+
+ @Override
+ public WorkerSelector workerSelector() {
+ return new RollingSelector();
+ }
+ }
+}
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/analysis/NodeHourAnalysis.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/analysis/NodeHourAnalysis.java
new file mode 100644
index 000000000..fece26e0f
--- /dev/null
+++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/analysis/NodeHourAnalysis.java
@@ -0,0 +1,71 @@
+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;
+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.segment.SegmentPost;
+import com.a.eye.skywalking.collector.worker.storage.RecordData;
+import com.a.eye.skywalking.trace.TraceSegment;
+
+/**
+ * @author pengys5
+ */
+public class NodeHourAnalysis extends AbstractNodeAnalysis {
+
+ public NodeHourAnalysis(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(NodeHourAgg.Role.INSTANCE).tell(oneRecord);
+ }
+ }
+
+ public static class Factory extends AbstractLocalAsyncWorkerProvider {
+ public static Factory INSTANCE = new Factory();
+
+ @Override
+ public Role role() {
+ return Role.INSTANCE;
+ }
+
+ @Override
+ public NodeHourAnalysis workerInstance(ClusterWorkerContext clusterContext) {
+ return new NodeHourAnalysis(role(), clusterContext, new LocalWorkerContext());
+ }
+
+ @Override
+ public int queueSize() {
+ return 1024;
+ }
+ }
+
+ public enum Role implements com.a.eye.skywalking.collector.actor.Role {
+ INSTANCE;
+
+ @Override
+ public String roleName() {
+ return NodeHourAnalysis.class.getSimpleName();
+ }
+
+ @Override
+ public WorkerSelector workerSelector() {
+ return new RollingSelector();
+ }
+ }
+}
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/analysis/NodeMinuteAnalysis.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/analysis/NodeMinuteAnalysis.java
new file mode 100644
index 000000000..4031e1551
--- /dev/null
+++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/analysis/NodeMinuteAnalysis.java
@@ -0,0 +1,71 @@
+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;
+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.segment.SegmentPost;
+import com.a.eye.skywalking.collector.worker.storage.RecordData;
+import com.a.eye.skywalking.trace.TraceSegment;
+
+/**
+ * @author pengys5
+ */
+public class NodeMinuteAnalysis extends AbstractNodeAnalysis {
+
+ public NodeMinuteAnalysis(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(NodeMinuteAgg.Role.INSTANCE).tell(oneRecord);
+ }
+ }
+
+ public static class Factory extends AbstractLocalAsyncWorkerProvider {
+ public static Factory INSTANCE = new Factory();
+
+ @Override
+ public Role role() {
+ return Role.INSTANCE;
+ }
+
+ @Override
+ public NodeMinuteAnalysis workerInstance(ClusterWorkerContext clusterContext) {
+ return new NodeMinuteAnalysis(role(), clusterContext, new LocalWorkerContext());
+ }
+
+ @Override
+ public int queueSize() {
+ return 1024;
+ }
+ }
+
+ public enum Role implements com.a.eye.skywalking.collector.actor.Role {
+ INSTANCE;
+
+ @Override
+ public String roleName() {
+ return NodeMinuteAnalysis.class.getSimpleName();
+ }
+
+ @Override
+ public WorkerSelector workerSelector() {
+ return new RollingSelector();
+ }
+ }
+}
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeDayAgg.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeDayAgg.java
new file mode 100644
index 000000000..d780cb432
--- /dev/null
+++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeDayAgg.java
@@ -0,0 +1,68 @@
+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 NodeDayAgg extends AbstractClusterWorker {
+
+ private Logger logger = LogManager.getFormatterLogger(NodeDayAgg.class);
+
+ public NodeDayAgg(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);
+ }
+
+ @Override
+ protected void onWork(Object message) throws Exception {
+ if (message instanceof RecordData) {
+ getSelfContext().lookup(NodeDaySave.Role.INSTANCE).tell(message);
+ } else {
+ logger.error("message unhandled");
+ }
+ }
+
+ public static class Factory extends AbstractClusterWorkerProvider {
+ public static Factory INSTANCE = new Factory();
+
+ @Override
+ public Role role() {
+ return Role.INSTANCE;
+ }
+
+ @Override
+ public NodeDayAgg workerInstance(ClusterWorkerContext clusterContext) {
+ return new NodeDayAgg(role(), clusterContext, new LocalWorkerContext());
+ }
+
+ @Override
+ public int workerNum() {
+ return WorkerConfig.Worker.DAGNodeReceiver.Num;
+ }
+ }
+
+ public enum Role implements com.a.eye.skywalking.collector.actor.Role {
+ INSTANCE;
+
+ @Override
+ public String roleName() {
+ return NodeDayAgg.class.getSimpleName();
+ }
+
+ @Override
+ public WorkerSelector workerSelector() {
+ return new HashCodeSelector();
+ }
+ }
+}
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeDaySave.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeDaySave.java
new file mode 100644
index 000000000..698a9249b
--- /dev/null
+++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeDaySave.java
@@ -0,0 +1,63 @@
+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;
+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.node.NodeIndex;
+
+/**
+ * @author pengys5
+ */
+public class NodeDaySave extends RecordPersistenceMember {
+
+ public NodeDaySave(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) {
+ super(role, clusterContext, selfContext);
+ }
+
+ @Override
+ public String esIndex() {
+ return NodeIndex.Index;
+ }
+
+ @Override
+ public String esType() {
+ return NodeIndex.Type_Day;
+ }
+
+ public static class Factory extends AbstractLocalAsyncWorkerProvider {
+ public static Factory INSTANCE = new Factory();
+
+ @Override
+ public Role role() {
+ return Role.INSTANCE;
+ }
+
+ @Override
+ public NodeDaySave workerInstance(ClusterWorkerContext clusterContext) {
+ return new NodeDaySave(role(), clusterContext, new LocalWorkerContext());
+ }
+
+ @Override
+ public int queueSize() {
+ return WorkerConfig.Queue.Persistence.DAGNodePersistence.Size;
+ }
+ }
+
+ public enum Role implements com.a.eye.skywalking.collector.actor.Role {
+ INSTANCE;
+
+ @Override
+ public String roleName() {
+ return NodeDaySave.class.getSimpleName();
+ }
+
+ @Override
+ public WorkerSelector workerSelector() {
+ return new HashCodeSelector();
+ }
+ }
+}
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeHourAgg.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeHourAgg.java
new file mode 100644
index 000000000..a1cab73bc
--- /dev/null
+++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeHourAgg.java
@@ -0,0 +1,68 @@
+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 NodeHourAgg extends AbstractClusterWorker {
+
+ private Logger logger = LogManager.getFormatterLogger(NodeHourAgg.class);
+
+ public NodeHourAgg(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);
+ }
+
+ @Override
+ protected void onWork(Object message) throws Exception {
+ if (message instanceof RecordData) {
+ getSelfContext().lookup(NodeHourSave.Role.INSTANCE).tell(message);
+ } else {
+ logger.error("message unhandled");
+ }
+ }
+
+ public static class Factory extends AbstractClusterWorkerProvider {
+ public static Factory INSTANCE = new Factory();
+
+ @Override
+ public Role role() {
+ return Role.INSTANCE;
+ }
+
+ @Override
+ public NodeHourAgg workerInstance(ClusterWorkerContext clusterContext) {
+ return new NodeHourAgg(role(), clusterContext, new LocalWorkerContext());
+ }
+
+ @Override
+ public int workerNum() {
+ return WorkerConfig.Worker.DAGNodeReceiver.Num;
+ }
+ }
+
+ public enum Role implements com.a.eye.skywalking.collector.actor.Role {
+ INSTANCE;
+
+ @Override
+ public String roleName() {
+ return NodeHourAgg.class.getSimpleName();
+ }
+
+ @Override
+ public WorkerSelector workerSelector() {
+ return new HashCodeSelector();
+ }
+ }
+}
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeHourSave.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeHourSave.java
new file mode 100644
index 000000000..d76dc8509
--- /dev/null
+++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeHourSave.java
@@ -0,0 +1,63 @@
+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;
+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.node.NodeIndex;
+
+/**
+ * @author pengys5
+ */
+public class NodeHourSave extends RecordPersistenceMember {
+
+ public NodeHourSave(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) {
+ super(role, clusterContext, selfContext);
+ }
+
+ @Override
+ public String esIndex() {
+ return NodeIndex.Index;
+ }
+
+ @Override
+ public String esType() {
+ return NodeIndex.Type_Hour;
+ }
+
+ public static class Factory extends AbstractLocalAsyncWorkerProvider {
+ public static Factory INSTANCE = new Factory();
+
+ @Override
+ public Role role() {
+ return Role.INSTANCE;
+ }
+
+ @Override
+ public NodeHourSave workerInstance(ClusterWorkerContext clusterContext) {
+ return new NodeHourSave(role(), clusterContext, new LocalWorkerContext());
+ }
+
+ @Override
+ public int queueSize() {
+ return WorkerConfig.Queue.Persistence.DAGNodePersistence.Size;
+ }
+ }
+
+ public enum Role implements com.a.eye.skywalking.collector.actor.Role {
+ INSTANCE;
+
+ @Override
+ public String roleName() {
+ return NodeHourSave.class.getSimpleName();
+ }
+
+ @Override
+ public WorkerSelector workerSelector() {
+ return new HashCodeSelector();
+ }
+ }
+}
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeMinuteAgg.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeMinuteAgg.java
new file mode 100644
index 000000000..ba2dbb7b6
--- /dev/null
+++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeMinuteAgg.java
@@ -0,0 +1,68 @@
+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 NodeMinuteAgg extends AbstractClusterWorker {
+
+ private Logger logger = LogManager.getFormatterLogger(NodeMinuteAgg.class);
+
+ public NodeMinuteAgg(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);
+ }
+
+ @Override
+ protected void onWork(Object message) throws Exception {
+ if (message instanceof RecordData) {
+ getSelfContext().lookup(NodeMinuteSave.Role.INSTANCE).tell(message);
+ } else {
+ logger.error("message unhandled");
+ }
+ }
+
+ public static class Factory extends AbstractClusterWorkerProvider {
+ public static Factory INSTANCE = new Factory();
+
+ @Override
+ public Role role() {
+ return Role.INSTANCE;
+ }
+
+ @Override
+ public NodeMinuteAgg workerInstance(ClusterWorkerContext clusterContext) {
+ return new NodeMinuteAgg(role(), clusterContext, new LocalWorkerContext());
+ }
+
+ @Override
+ public int workerNum() {
+ return WorkerConfig.Worker.DAGNodeReceiver.Num;
+ }
+ }
+
+ public enum Role implements com.a.eye.skywalking.collector.actor.Role {
+ INSTANCE;
+
+ @Override
+ public String roleName() {
+ return NodeMinuteAgg.class.getSimpleName();
+ }
+
+ @Override
+ public WorkerSelector workerSelector() {
+ return new HashCodeSelector();
+ }
+ }
+}
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeMinuteSave.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeMinuteSave.java
new file mode 100644
index 000000000..c3512df95
--- /dev/null
+++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/node/persistence/NodeMinuteSave.java
@@ -0,0 +1,63 @@
+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;
+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.node.NodeIndex;
+
+/**
+ * @author pengys5
+ */
+public class NodeMinuteSave extends RecordPersistenceMember {
+
+ public NodeMinuteSave(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) {
+ super(role, clusterContext, selfContext);
+ }
+
+ @Override
+ public String esIndex() {
+ return NodeIndex.Index;
+ }
+
+ @Override
+ public String esType() {
+ return NodeIndex.Type_Minute;
+ }
+
+ public static class Factory extends AbstractLocalAsyncWorkerProvider {
+ public static Factory INSTANCE = new Factory();
+
+ @Override
+ public Role role() {
+ return Role.INSTANCE;
+ }
+
+ @Override
+ public NodeMinuteSave workerInstance(ClusterWorkerContext clusterContext) {
+ return new NodeMinuteSave(role(), clusterContext, new LocalWorkerContext());
+ }
+
+ @Override
+ public int queueSize() {
+ return WorkerConfig.Queue.Persistence.DAGNodePersistence.Size;
+ }
+ }
+
+ public enum Role implements com.a.eye.skywalking.collector.actor.Role {
+ INSTANCE;
+
+ @Override
+ public String roleName() {
+ return NodeMinuteSave.class.getSimpleName();
+ }
+
+ @Override
+ public WorkerSelector workerSelector() {
+ return new HashCodeSelector();
+ }
+ }
+}
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/storage/index/NodeInstanceIndex.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/NodeInstIndex.java
similarity index 79%
rename from skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/storage/index/NodeInstanceIndex.java
rename to skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/NodeInstIndex.java
index bd62e8be8..aac0ec7a2 100644
--- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/storage/index/NodeInstanceIndex.java
+++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/NodeInstIndex.java
@@ -1,5 +1,6 @@
-package com.a.eye.skywalking.collector.worker.storage.index;
+package com.a.eye.skywalking.collector.worker.nodeinst;
+import com.a.eye.skywalking.collector.worker.storage.index.AbstractIndex;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.elasticsearch.common.xcontent.XContentBuilder;
@@ -10,17 +11,22 @@ import java.io.IOException;
/**
* @author pengys5
*/
-public class NodeInstanceIndex extends AbstractIndex {
+public class NodeInstIndex extends AbstractIndex {
- private static Logger logger = LogManager.getFormatterLogger(NodeInstanceIndex.class);
+ private static Logger logger = LogManager.getFormatterLogger(NodeInstIndex.class);
- public static final String Index = "node_instance_idx";
+ public static final String Index = "node_inst_idx";
@Override
public String index() {
return Index;
}
+ @Override
+ public boolean isRecord() {
+ return false;
+ }
+
@Override
public XContentBuilder createMappingBuilder() throws IOException {
XContentBuilder mappingBuilder = XContentFactory.jsonBuilder()
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/persistence/NodeInstDayAgg.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/persistence/NodeInstDayAgg.java
new file mode 100644
index 000000000..7c270e830
--- /dev/null
+++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/persistence/NodeInstDayAgg.java
@@ -0,0 +1,68 @@
+package com.a.eye.skywalking.collector.worker.nodeinst.persistence;
+
+import com.a.eye.skywalking.collector.actor.*;
+import com.a.eye.skywalking.collector.actor.selector.HashCodeSelector;
+import com.a.eye.skywalking.collector.actor.selector.WorkerSelector;
+import com.a.eye.skywalking.collector.worker.WorkerConfig;
+import com.a.eye.skywalking.collector.worker.storage.RecordData;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+/**
+ * @author pengys5
+ */
+public class NodeInstDayAgg extends AbstractClusterWorker {
+
+ private Logger logger = LogManager.getFormatterLogger(NodeInstDayAgg.class);
+
+ public NodeInstDayAgg(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) {
+ super(role, clusterContext, selfContext);
+ }
+
+ @Override
+ public void preStart() throws ProviderNotFoundException {
+ getClusterContext().findProvider(NodeInstDaySave.Role.INSTANCE).create(this);
+ }
+
+ @Override
+ protected void onWork(Object message) throws Exception {
+ if (message instanceof RecordData) {
+ getSelfContext().lookup(NodeInstDaySave.Role.INSTANCE).tell(message);
+ } else {
+ logger.error("message unhandled");
+ }
+ }
+
+ public static class Factory extends AbstractClusterWorkerProvider {
+ public static Factory INSTANCE = new Factory();
+
+ @Override
+ public Role role() {
+ return Role.INSTANCE;
+ }
+
+ @Override
+ public NodeInstDayAgg workerInstance(ClusterWorkerContext clusterContext) {
+ return new NodeInstDayAgg(role(), clusterContext, new LocalWorkerContext());
+ }
+
+ @Override
+ public int workerNum() {
+ return WorkerConfig.Worker.NodeInstanceReceiver.Num;
+ }
+ }
+
+ public enum Role implements com.a.eye.skywalking.collector.actor.Role {
+ INSTANCE;
+
+ @Override
+ public String roleName() {
+ return NodeInstDayAgg.class.getSimpleName();
+ }
+
+ @Override
+ public WorkerSelector workerSelector() {
+ return new HashCodeSelector();
+ }
+ }
+}
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/persistence/NodeInstDaySave.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/persistence/NodeInstDaySave.java
new file mode 100644
index 000000000..2f00a4d57
--- /dev/null
+++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/persistence/NodeInstDaySave.java
@@ -0,0 +1,63 @@
+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 NodeInstDaySave extends RecordPersistenceMember {
+
+ public NodeInstDaySave(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_Day;
+ }
+
+ public static class Factory extends AbstractLocalAsyncWorkerProvider {
+ public static Factory INSTANCE = new Factory();
+
+ @Override
+ public Role role() {
+ return Role.INSTANCE;
+ }
+
+ @Override
+ public NodeInstDaySave workerInstance(ClusterWorkerContext clusterContext) {
+ return new NodeInstDaySave(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 NodeInstDaySave.class.getSimpleName();
+ }
+
+ @Override
+ public WorkerSelector workerSelector() {
+ return new HashCodeSelector();
+ }
+ }
+}
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/persistence/NodeInstHourAgg.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/persistence/NodeInstHourAgg.java
new file mode 100644
index 000000000..005b42c87
--- /dev/null
+++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/persistence/NodeInstHourAgg.java
@@ -0,0 +1,68 @@
+package com.a.eye.skywalking.collector.worker.nodeinst.persistence;
+
+import com.a.eye.skywalking.collector.actor.*;
+import com.a.eye.skywalking.collector.actor.selector.HashCodeSelector;
+import com.a.eye.skywalking.collector.actor.selector.WorkerSelector;
+import com.a.eye.skywalking.collector.worker.WorkerConfig;
+import com.a.eye.skywalking.collector.worker.storage.RecordData;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+/**
+ * @author pengys5
+ */
+public class NodeInstHourAgg extends AbstractClusterWorker {
+
+ private Logger logger = LogManager.getFormatterLogger(NodeInstHourAgg.class);
+
+ public NodeInstHourAgg(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) {
+ super(role, clusterContext, selfContext);
+ }
+
+ @Override
+ public void preStart() throws ProviderNotFoundException {
+ getClusterContext().findProvider(NodeInstHourSave.Role.INSTANCE).create(this);
+ }
+
+ @Override
+ protected void onWork(Object message) throws Exception {
+ if (message instanceof RecordData) {
+ getSelfContext().lookup(NodeInstHourSave.Role.INSTANCE).tell(message);
+ } else {
+ logger.error("message unhandled");
+ }
+ }
+
+ public static class Factory extends AbstractClusterWorkerProvider {
+ public static Factory INSTANCE = new Factory();
+
+ @Override
+ public Role role() {
+ return Role.INSTANCE;
+ }
+
+ @Override
+ public NodeInstHourAgg workerInstance(ClusterWorkerContext clusterContext) {
+ return new NodeInstHourAgg(role(), clusterContext, new LocalWorkerContext());
+ }
+
+ @Override
+ public int workerNum() {
+ return WorkerConfig.Worker.NodeInstanceReceiver.Num;
+ }
+ }
+
+ public enum Role implements com.a.eye.skywalking.collector.actor.Role {
+ INSTANCE;
+
+ @Override
+ public String roleName() {
+ return NodeInstHourAgg.class.getSimpleName();
+ }
+
+ @Override
+ public WorkerSelector workerSelector() {
+ return new HashCodeSelector();
+ }
+ }
+}
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/persistence/NodeInstHourSave.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/persistence/NodeInstHourSave.java
new file mode 100644
index 000000000..c9de5e5f2
--- /dev/null
+++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/persistence/NodeInstHourSave.java
@@ -0,0 +1,63 @@
+package com.a.eye.skywalking.collector.worker.nodeinst.persistence;
+
+import com.a.eye.skywalking.collector.actor.AbstractLocalAsyncWorkerProvider;
+import com.a.eye.skywalking.collector.actor.ClusterWorkerContext;
+import com.a.eye.skywalking.collector.actor.LocalWorkerContext;
+import com.a.eye.skywalking.collector.actor.selector.HashCodeSelector;
+import com.a.eye.skywalking.collector.actor.selector.WorkerSelector;
+import com.a.eye.skywalking.collector.worker.RecordPersistenceMember;
+import com.a.eye.skywalking.collector.worker.WorkerConfig;
+import com.a.eye.skywalking.collector.worker.nodeinst.NodeInstIndex;
+
+/**
+ * @author pengys5
+ */
+public class NodeInstHourSave extends RecordPersistenceMember {
+
+ public NodeInstHourSave(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) {
+ super(role, clusterContext, selfContext);
+ }
+
+ @Override
+ public String esIndex() {
+ return NodeInstIndex.Index;
+ }
+
+ @Override
+ public String esType() {
+ return NodeInstIndex.Type_Hour;
+ }
+
+ public static class Factory extends AbstractLocalAsyncWorkerProvider {
+ public static Factory INSTANCE = new Factory();
+
+ @Override
+ public Role role() {
+ return Role.INSTANCE;
+ }
+
+ @Override
+ public NodeInstHourSave workerInstance(ClusterWorkerContext clusterContext) {
+ return new NodeInstHourSave(role(), clusterContext, new LocalWorkerContext());
+ }
+
+ @Override
+ public int queueSize() {
+ return WorkerConfig.Queue.Persistence.NodeInstancePersistence.Size;
+ }
+ }
+
+ public enum Role implements com.a.eye.skywalking.collector.actor.Role {
+ INSTANCE;
+
+ @Override
+ public String roleName() {
+ return NodeInstHourSave.class.getSimpleName();
+ }
+
+ @Override
+ public WorkerSelector workerSelector() {
+ return new HashCodeSelector();
+ }
+ }
+}
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/persistence/NodeInstMinuteAgg.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/persistence/NodeInstMinuteAgg.java
new file mode 100644
index 000000000..c74ea4201
--- /dev/null
+++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/persistence/NodeInstMinuteAgg.java
@@ -0,0 +1,68 @@
+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 NodeInstMinuteAgg extends AbstractClusterWorker {
+
+ private Logger logger = LogManager.getFormatterLogger(NodeInstMinuteAgg.class);
+
+ public NodeInstMinuteAgg(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);
+ }
+
+ @Override
+ protected void onWork(Object message) throws Exception {
+ if (message instanceof RecordData) {
+ getSelfContext().lookup(NodeInstMinuteSave.Role.INSTANCE).tell(message);
+ } else {
+ logger.error("message unhandled");
+ }
+ }
+
+ public static class Factory extends AbstractClusterWorkerProvider {
+ public static Factory INSTANCE = new Factory();
+
+ @Override
+ public Role role() {
+ return Role.INSTANCE;
+ }
+
+ @Override
+ public NodeInstMinuteAgg workerInstance(ClusterWorkerContext clusterContext) {
+ return new NodeInstMinuteAgg(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 NodeInstMinuteAgg.class.getSimpleName();
+ }
+
+ @Override
+ public WorkerSelector workerSelector() {
+ return new HashCodeSelector();
+ }
+ }
+}
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/persistence/NodeInstMinuteSave.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/persistence/NodeInstMinuteSave.java
new file mode 100644
index 000000000..9084aa28e
--- /dev/null
+++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/nodeinst/persistence/NodeInstMinuteSave.java
@@ -0,0 +1,63 @@
+package com.a.eye.skywalking.collector.worker.nodeinst.persistence;
+
+import com.a.eye.skywalking.collector.actor.AbstractLocalAsyncWorkerProvider;
+import com.a.eye.skywalking.collector.actor.ClusterWorkerContext;
+import com.a.eye.skywalking.collector.actor.LocalWorkerContext;
+import com.a.eye.skywalking.collector.actor.selector.HashCodeSelector;
+import com.a.eye.skywalking.collector.actor.selector.WorkerSelector;
+import com.a.eye.skywalking.collector.worker.RecordPersistenceMember;
+import com.a.eye.skywalking.collector.worker.WorkerConfig;
+import com.a.eye.skywalking.collector.worker.nodeinst.NodeInstIndex;
+
+/**
+ * @author pengys5
+ */
+public class NodeInstMinuteSave extends RecordPersistenceMember {
+
+ public NodeInstMinuteSave(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) {
+ super(role, clusterContext, selfContext);
+ }
+
+ @Override
+ public String esIndex() {
+ return NodeInstIndex.Index;
+ }
+
+ @Override
+ public String esType() {
+ return NodeInstIndex.Type_Minute;
+ }
+
+ public static class Factory extends AbstractLocalAsyncWorkerProvider {
+ public static Factory INSTANCE = new Factory();
+
+ @Override
+ public Role role() {
+ return Role.INSTANCE;
+ }
+
+ @Override
+ public NodeInstMinuteSave workerInstance(ClusterWorkerContext clusterContext) {
+ return new NodeInstMinuteSave(role(), clusterContext, new LocalWorkerContext());
+ }
+
+ @Override
+ public int queueSize() {
+ return WorkerConfig.Queue.Persistence.NodeInstancePersistence.Size;
+ }
+ }
+
+ public enum Role implements com.a.eye.skywalking.collector.actor.Role {
+ INSTANCE;
+
+ @Override
+ public String roleName() {
+ return NodeInstMinuteSave.class.getSimpleName();
+ }
+
+ @Override
+ public WorkerSelector workerSelector() {
+ return new HashCodeSelector();
+ }
+ }
+}
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/storage/index/NodeRefIndex.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/NodeRefIndex.java
similarity index 81%
rename from skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/storage/index/NodeRefIndex.java
rename to skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/NodeRefIndex.java
index f5aab9ea2..1f59d5941 100644
--- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/storage/index/NodeRefIndex.java
+++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/NodeRefIndex.java
@@ -1,5 +1,6 @@
-package com.a.eye.skywalking.collector.worker.storage.index;
+package com.a.eye.skywalking.collector.worker.noderef;
+import com.a.eye.skywalking.collector.worker.storage.index.AbstractIndex;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.elasticsearch.common.xcontent.XContentBuilder;
@@ -21,16 +22,21 @@ public class NodeRefIndex extends AbstractIndex {
return Index;
}
+ @Override
+ public boolean isRecord() {
+ return false;
+ }
+
@Override
public XContentBuilder createMappingBuilder() throws IOException {
XContentBuilder mappingBuilder = XContentFactory.jsonBuilder()
.startObject()
.startObject("properties")
- .startObject("client")
+ .startObject("front")
.field("type", "string")
.field("index", "not_analyzed")
.endObject()
- .startObject("server")
+ .startObject("behind")
.field("type", "string")
.field("index", "not_analyzed")
.endObject()
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/analysis/AbstractNodeRefAnalysis.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/analysis/AbstractNodeRefAnalysis.java
new file mode 100644
index 000000000..846d8bfdd
--- /dev/null
+++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/analysis/AbstractNodeRefAnalysis.java
@@ -0,0 +1,68 @@
+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.worker.RecordAnalysisMember;
+import com.a.eye.skywalking.collector.worker.storage.index.AbstractIndex;
+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
+ */
+public abstract class AbstractNodeRefAnalysis extends RecordAnalysisMember {
+
+ private Logger logger = LogManager.getFormatterLogger(AbstractNodeRefAnalysis.class);
+
+ public AbstractNodeRefAnalysis(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) {
+ super(role, clusterContext, selfContext);
+ }
+
+ void analyseRefs(TraceSegment segment, long timeSlice) throws Exception {
+ List segmentRefList = segment.getRefs();
+ if (segmentRefList != null && segmentRefList.size() > 0) {
+ for (TraceSegmentRef segmentRef : segmentRefList) {
+ String front = segmentRef.getApplicationCode();
+ String behind = segment.getApplicationCode();
+ String id = timeSlice + "-" + front + "-" + behind;
+
+ JsonObject dataJsonObj = new JsonObject();
+ dataJsonObj.addProperty("front", front);
+ dataJsonObj.addProperty("behind", behind);
+ dataJsonObj.addProperty(AbstractIndex.Time_Slice_Column_Name, timeSlice);
+ logger.debug("dag node ref: %s", dataJsonObj.toString());
+ setRecord(id, dataJsonObj);
+ }
+ }
+ }
+
+ void analyseSpans(TraceSegment segment, long timeSlice) throws Exception {
+ List spanList = segment.getSpans();
+ if (spanList != null && spanList.size() > 0) {
+ for (Span span : spanList) {
+ if (Tags.SPAN_KIND_CLIENT.equals(Tags.SPAN_KIND.get(span))) {
+ JsonObject dataJsonObj = new JsonObject();
+ String front = segment.getApplicationCode();
+ dataJsonObj.addProperty("front", front);
+
+ String component = Tags.COMPONENT.get(span);
+ String peers = Tags.PEERS.get(span);
+ String behind = component + "-" + peers;
+ dataJsonObj.addProperty("behind", behind);
+ dataJsonObj.addProperty(AbstractIndex.Time_Slice_Column_Name, timeSlice);
+
+ String id = timeSlice + "-" + front + "-" + behind;
+ logger.debug("dag node ref: %s", dataJsonObj.toString());
+ setRecord(id, dataJsonObj);
+ }
+ }
+ }
+ }
+}
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/analysis/NodeRefDayAnalysis.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/analysis/NodeRefDayAnalysis.java
new file mode 100644
index 000000000..3e052dcc3
--- /dev/null
+++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/analysis/NodeRefDayAnalysis.java
@@ -0,0 +1,78 @@
+package com.a.eye.skywalking.collector.worker.noderef.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.segment.SegmentPost;
+import com.a.eye.skywalking.collector.worker.noderef.persistence.NodeRefDayAgg;
+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 NodeRefDayAnalysis extends AbstractNodeRefAnalysis {
+
+ private Logger logger = LogManager.getFormatterLogger(NodeRefDayAnalysis.class);
+
+ public NodeRefDayAnalysis(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();
+ analyseRefs(segment, segmentWithTimeSlice.getDay());
+ analyseSpans(segment, segmentWithTimeSlice.getDay());
+ }
+ }
+
+ @Override
+ protected void aggregation() throws Exception {
+ RecordData oneRecord;
+ while ((oneRecord = pushOne()) != null) {
+ getClusterContext().lookup(NodeRefDayAgg.Role.INSTANCE).tell(oneRecord);
+ }
+ }
+
+ public static class Factory extends AbstractLocalAsyncWorkerProvider {
+
+ public static Factory INSTANCE = new Factory();
+
+ @Override
+ public Role role() {
+ return Role.INSTANCE;
+ }
+
+ @Override
+ public NodeRefDayAnalysis workerInstance(ClusterWorkerContext clusterContext) {
+ return new NodeRefDayAnalysis(role(), clusterContext, new LocalWorkerContext());
+ }
+
+ @Override
+ public int queueSize() {
+ return WorkerConfig.Queue.DAGNodeRefAnalysis.Size;
+ }
+ }
+
+ public enum Role implements com.a.eye.skywalking.collector.actor.Role {
+ INSTANCE;
+
+ @Override
+ public String roleName() {
+ return NodeRefDayAnalysis.class.getSimpleName();
+ }
+
+ @Override
+ public WorkerSelector workerSelector() {
+ return new RollingSelector();
+ }
+ }
+}
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/analysis/NodeRefHourAnalysis.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/analysis/NodeRefHourAnalysis.java
new file mode 100644
index 000000000..ae8c0ac0d
--- /dev/null
+++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/analysis/NodeRefHourAnalysis.java
@@ -0,0 +1,78 @@
+package com.a.eye.skywalking.collector.worker.noderef.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.segment.SegmentPost;
+import com.a.eye.skywalking.collector.worker.noderef.persistence.NodeRefHourAgg;
+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 NodeRefHourAnalysis extends AbstractNodeRefAnalysis {
+
+ private Logger logger = LogManager.getFormatterLogger(NodeRefHourAnalysis.class);
+
+ public NodeRefHourAnalysis(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();
+ analyseRefs(segment, segmentWithTimeSlice.getHour());
+ analyseSpans(segment, segmentWithTimeSlice.getHour());
+ }
+ }
+
+ @Override
+ protected void aggregation() throws Exception {
+ RecordData oneRecord;
+ while ((oneRecord = pushOne()) != null) {
+ getClusterContext().lookup(NodeRefHourAgg.Role.INSTANCE).tell(oneRecord);
+ }
+ }
+
+ public static class Factory extends AbstractLocalAsyncWorkerProvider {
+
+ public static Factory INSTANCE = new Factory();
+
+ @Override
+ public Role role() {
+ return Role.INSTANCE;
+ }
+
+ @Override
+ public NodeRefHourAnalysis workerInstance(ClusterWorkerContext clusterContext) {
+ return new NodeRefHourAnalysis(role(), clusterContext, new LocalWorkerContext());
+ }
+
+ @Override
+ public int queueSize() {
+ return WorkerConfig.Queue.DAGNodeRefAnalysis.Size;
+ }
+ }
+
+ public enum Role implements com.a.eye.skywalking.collector.actor.Role {
+ INSTANCE;
+
+ @Override
+ public String roleName() {
+ return NodeRefHourAnalysis.class.getSimpleName();
+ }
+
+ @Override
+ public WorkerSelector workerSelector() {
+ return new RollingSelector();
+ }
+ }
+}
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/analysis/NodeRefMinuteAnalysis.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/analysis/NodeRefMinuteAnalysis.java
new file mode 100644
index 000000000..70410c1e9
--- /dev/null
+++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/analysis/NodeRefMinuteAnalysis.java
@@ -0,0 +1,78 @@
+package com.a.eye.skywalking.collector.worker.noderef.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.segment.SegmentPost;
+import com.a.eye.skywalking.collector.worker.noderef.persistence.NodeRefMinuteAgg;
+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 NodeRefMinuteAnalysis extends AbstractNodeRefAnalysis {
+
+ private Logger logger = LogManager.getFormatterLogger(NodeRefMinuteAnalysis.class);
+
+ public NodeRefMinuteAnalysis(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();
+ analyseRefs(segment, segmentWithTimeSlice.getMinute());
+ analyseSpans(segment, segmentWithTimeSlice.getMinute());
+ }
+ }
+
+ @Override
+ protected void aggregation() throws Exception {
+ RecordData oneRecord;
+ while ((oneRecord = pushOne()) != null) {
+ getClusterContext().lookup(NodeRefMinuteAgg.Role.INSTANCE).tell(oneRecord);
+ }
+ }
+
+ public static class Factory extends AbstractLocalAsyncWorkerProvider {
+
+ public static Factory INSTANCE = new Factory();
+
+ @Override
+ public Role role() {
+ return Role.INSTANCE;
+ }
+
+ @Override
+ public NodeRefMinuteAnalysis workerInstance(ClusterWorkerContext clusterContext) {
+ return new NodeRefMinuteAnalysis(role(), clusterContext, new LocalWorkerContext());
+ }
+
+ @Override
+ public int queueSize() {
+ return WorkerConfig.Queue.DAGNodeRefAnalysis.Size;
+ }
+ }
+
+ public enum Role implements com.a.eye.skywalking.collector.actor.Role {
+ INSTANCE;
+
+ @Override
+ public String roleName() {
+ return NodeRefMinuteAnalysis.class.getSimpleName();
+ }
+
+ @Override
+ public WorkerSelector workerSelector() {
+ return new RollingSelector();
+ }
+ }
+}
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/applicationref/receiver/DAGNodeRefReceiver.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/persistence/NodeRefDayAgg.java
similarity index 55%
rename from skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/applicationref/receiver/DAGNodeRefReceiver.java
rename to skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/persistence/NodeRefDayAgg.java
index 76c638e9a..ce44bfcec 100644
--- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/applicationref/receiver/DAGNodeRefReceiver.java
+++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/persistence/NodeRefDayAgg.java
@@ -1,10 +1,9 @@
-package com.a.eye.skywalking.collector.worker.applicationref.receiver;
+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.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.applicationref.persistence.DAGNodeRefPersistence;
import com.a.eye.skywalking.collector.worker.storage.RecordData;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -12,31 +11,29 @@ import org.apache.logging.log4j.Logger;
/**
* @author pengys5
*/
-public class DAGNodeRefReceiver extends AbstractClusterWorker {
+public class NodeRefDayAgg extends AbstractClusterWorker {
- private Logger logger = LogManager.getFormatterLogger(DAGNodeRefReceiver.class);
+ private Logger logger = LogManager.getFormatterLogger(NodeRefDayAgg.class);
- private DAGNodeRefPersistence persistence;
-
- public DAGNodeRefReceiver(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) {
+ public NodeRefDayAgg(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) {
super(role, clusterContext, selfContext);
}
@Override
public void preStart() throws ProviderNotFoundException {
- getClusterContext().findProvider(DAGNodeRefPersistence.Role.INSTANCE).create(this);
+ getClusterContext().findProvider(NodeRefDaySave.Role.INSTANCE).create(this);
}
@Override
protected void onWork(Object message) throws Exception {
if (message instanceof RecordData) {
- getSelfContext().lookup(DAGNodeRefPersistence.Role.INSTANCE).tell(message);
+ getSelfContext().lookup(NodeRefDaySave.Role.INSTANCE).tell(message);
} else {
logger.error("message unhandled");
}
}
- public static class Factory extends AbstractClusterWorkerProvider {
+ public static class Factory extends AbstractClusterWorkerProvider {
public static Factory INSTANCE = new Factory();
@Override
@@ -45,8 +42,8 @@ public class DAGNodeRefReceiver extends AbstractClusterWorker {
}
@Override
- public DAGNodeRefReceiver workerInstance(ClusterWorkerContext clusterContext) {
- return new DAGNodeRefReceiver(role(), clusterContext, new LocalWorkerContext());
+ public NodeRefDayAgg workerInstance(ClusterWorkerContext clusterContext) {
+ return new NodeRefDayAgg(role(), clusterContext, new LocalWorkerContext());
}
@Override
@@ -60,12 +57,12 @@ public class DAGNodeRefReceiver extends AbstractClusterWorker {
@Override
public String roleName() {
- return DAGNodeRefReceiver.class.getSimpleName();
+ return NodeRefDayAgg.class.getSimpleName();
}
@Override
public WorkerSelector workerSelector() {
- return new RollingSelector();
+ return new HashCodeSelector();
}
}
}
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/persistence/NodeRefDaySave.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/persistence/NodeRefDaySave.java
new file mode 100644
index 000000000..45e362cff
--- /dev/null
+++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/persistence/NodeRefDaySave.java
@@ -0,0 +1,65 @@
+package com.a.eye.skywalking.collector.worker.noderef.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.RollingSelector;
+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.noderef.NodeRefIndex;
+
+/**
+ * @author pengys5
+ */
+public class NodeRefDaySave extends RecordPersistenceMember {
+
+ public NodeRefDaySave(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) {
+ super(role, clusterContext, selfContext);
+ }
+
+ @Override
+ public String esIndex() {
+ return NodeRefIndex.Index;
+ }
+
+ @Override
+ public String esType() {
+ return NodeRefIndex.Type_Day;
+ }
+
+ public static class Factory extends AbstractLocalAsyncWorkerProvider {
+
+ public static Factory INSTANCE = new Factory();
+
+ @Override
+ public Role role() {
+ return Role.INSTANCE;
+ }
+
+ @Override
+ public NodeRefDaySave workerInstance(ClusterWorkerContext clusterContext) {
+ return new NodeRefDaySave(role(), clusterContext, new LocalWorkerContext());
+ }
+
+ @Override
+ public int queueSize() {
+ return WorkerConfig.Queue.Persistence.DAGNodeRefPersistence.Size;
+ }
+ }
+
+ public enum Role implements com.a.eye.skywalking.collector.actor.Role {
+ INSTANCE;
+
+ @Override
+ public String roleName() {
+ return NodeRefDaySave.class.getSimpleName();
+ }
+
+ @Override
+ public WorkerSelector workerSelector() {
+ return new HashCodeSelector();
+ }
+ }
+}
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/persistence/NodeRefHourAgg.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/persistence/NodeRefHourAgg.java
new file mode 100644
index 000000000..14c6890f7
--- /dev/null
+++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/persistence/NodeRefHourAgg.java
@@ -0,0 +1,68 @@
+package com.a.eye.skywalking.collector.worker.noderef.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 NodeRefHourAgg extends AbstractClusterWorker {
+
+ private Logger logger = LogManager.getFormatterLogger(NodeRefHourAgg.class);
+
+ public NodeRefHourAgg(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) {
+ super(role, clusterContext, selfContext);
+ }
+
+ @Override
+ public void preStart() throws ProviderNotFoundException {
+ getClusterContext().findProvider(NodeRefHourSave.Role.INSTANCE).create(this);
+ }
+
+ @Override
+ protected void onWork(Object message) throws Exception {
+ if (message instanceof RecordData) {
+ getSelfContext().lookup(NodeRefHourSave.Role.INSTANCE).tell(message);
+ } else {
+ logger.error("message unhandled");
+ }
+ }
+
+ public static class Factory extends AbstractClusterWorkerProvider {
+ public static Factory INSTANCE = new Factory();
+
+ @Override
+ public Role role() {
+ return Role.INSTANCE;
+ }
+
+ @Override
+ public NodeRefHourAgg workerInstance(ClusterWorkerContext clusterContext) {
+ return new NodeRefHourAgg(role(), clusterContext, new LocalWorkerContext());
+ }
+
+ @Override
+ public int workerNum() {
+ return WorkerConfig.Worker.DAGNodeRefReceiver.Num;
+ }
+ }
+
+ public enum Role implements com.a.eye.skywalking.collector.actor.Role {
+ INSTANCE;
+
+ @Override
+ public String roleName() {
+ return NodeRefHourAgg.class.getSimpleName();
+ }
+
+ @Override
+ public WorkerSelector workerSelector() {
+ return new HashCodeSelector();
+ }
+ }
+}
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/persistence/NodeRefHourSave.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/persistence/NodeRefHourSave.java
new file mode 100644
index 000000000..a0d72c1d5
--- /dev/null
+++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/persistence/NodeRefHourSave.java
@@ -0,0 +1,65 @@
+package com.a.eye.skywalking.collector.worker.noderef.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.RollingSelector;
+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.noderef.NodeRefIndex;
+
+/**
+ * @author pengys5
+ */
+public class NodeRefHourSave extends RecordPersistenceMember {
+
+ public NodeRefHourSave(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) {
+ super(role, clusterContext, selfContext);
+ }
+
+ @Override
+ public String esIndex() {
+ return NodeRefIndex.Index;
+ }
+
+ @Override
+ public String esType() {
+ return NodeRefIndex.Type_Hour;
+ }
+
+ public static class Factory extends AbstractLocalAsyncWorkerProvider {
+
+ public static Factory INSTANCE = new Factory();
+
+ @Override
+ public Role role() {
+ return Role.INSTANCE;
+ }
+
+ @Override
+ public NodeRefHourSave workerInstance(ClusterWorkerContext clusterContext) {
+ return new NodeRefHourSave(role(), clusterContext, new LocalWorkerContext());
+ }
+
+ @Override
+ public int queueSize() {
+ return WorkerConfig.Queue.Persistence.DAGNodeRefPersistence.Size;
+ }
+ }
+
+ public enum Role implements com.a.eye.skywalking.collector.actor.Role {
+ INSTANCE;
+
+ @Override
+ public String roleName() {
+ return NodeRefHourSave.class.getSimpleName();
+ }
+
+ @Override
+ public WorkerSelector workerSelector() {
+ return new HashCodeSelector();
+ }
+ }
+}
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/persistence/NodeRefMinuteAgg.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/persistence/NodeRefMinuteAgg.java
new file mode 100644
index 000000000..5d1b4f124
--- /dev/null
+++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/persistence/NodeRefMinuteAgg.java
@@ -0,0 +1,68 @@
+package com.a.eye.skywalking.collector.worker.noderef.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 NodeRefMinuteAgg extends AbstractClusterWorker {
+
+ private Logger logger = LogManager.getFormatterLogger(NodeRefMinuteAgg.class);
+
+ public NodeRefMinuteAgg(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) {
+ super(role, clusterContext, selfContext);
+ }
+
+ @Override
+ public void preStart() throws ProviderNotFoundException {
+ getClusterContext().findProvider(NodeRefMinuteSave.Role.INSTANCE).create(this);
+ }
+
+ @Override
+ protected void onWork(Object message) throws Exception {
+ if (message instanceof RecordData) {
+ getSelfContext().lookup(NodeRefMinuteSave.Role.INSTANCE).tell(message);
+ } else {
+ logger.error("message unhandled");
+ }
+ }
+
+ public static class Factory extends AbstractClusterWorkerProvider {
+ public static Factory INSTANCE = new Factory();
+
+ @Override
+ public Role role() {
+ return Role.INSTANCE;
+ }
+
+ @Override
+ public NodeRefMinuteAgg workerInstance(ClusterWorkerContext clusterContext) {
+ return new NodeRefMinuteAgg(role(), clusterContext, new LocalWorkerContext());
+ }
+
+ @Override
+ public int workerNum() {
+ return WorkerConfig.Worker.DAGNodeRefReceiver.Num;
+ }
+ }
+
+ public enum Role implements com.a.eye.skywalking.collector.actor.Role {
+ INSTANCE;
+
+ @Override
+ public String roleName() {
+ return NodeRefMinuteAgg.class.getSimpleName();
+ }
+
+ @Override
+ public WorkerSelector workerSelector() {
+ return new HashCodeSelector();
+ }
+ }
+}
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/applicationref/persistence/DAGNodeRefPersistence.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/persistence/NodeRefMinuteSave.java
similarity index 60%
rename from skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/applicationref/persistence/DAGNodeRefPersistence.java
rename to skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/persistence/NodeRefMinuteSave.java
index 901d31c1d..c9621a392 100644
--- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/applicationref/persistence/DAGNodeRefPersistence.java
+++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/noderef/persistence/NodeRefMinuteSave.java
@@ -1,37 +1,35 @@
-package com.a.eye.skywalking.collector.worker.applicationref.persistence;
+package com.a.eye.skywalking.collector.worker.noderef.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.RollingSelector;
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 org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
+import com.a.eye.skywalking.collector.worker.noderef.NodeRefIndex;
/**
* @author pengys5
*/
-public class DAGNodeRefPersistence extends RecordPersistenceMember {
+public class NodeRefMinuteSave extends RecordPersistenceMember {
- private Logger logger = LogManager.getFormatterLogger(DAGNodeRefPersistence.class);
-
- public DAGNodeRefPersistence(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) {
+ public NodeRefMinuteSave(com.a.eye.skywalking.collector.actor.Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) {
super(role, clusterContext, selfContext);
}
@Override
public String esIndex() {
- return "node_ref";
+ return NodeRefIndex.Index;
}
@Override
public String esType() {
- return "node_ref";
+ return NodeRefIndex.Type_Minute;
}
- public static class Factory extends AbstractLocalAsyncWorkerProvider {
+ public static class Factory extends AbstractLocalAsyncWorkerProvider {
public static Factory INSTANCE = new Factory();
@@ -41,8 +39,8 @@ public class DAGNodeRefPersistence extends RecordPersistenceMember {
}
@Override
- public DAGNodeRefPersistence workerInstance(ClusterWorkerContext clusterContext) {
- return new DAGNodeRefPersistence(role(), clusterContext, new LocalWorkerContext());
+ public NodeRefMinuteSave workerInstance(ClusterWorkerContext clusterContext) {
+ return new NodeRefMinuteSave(role(), clusterContext, new LocalWorkerContext());
}
@Override
@@ -56,12 +54,12 @@ public class DAGNodeRefPersistence extends RecordPersistenceMember {
@Override
public String roleName() {
- return DAGNodeRefPersistence.class.getSimpleName();
+ return NodeRefMinuteSave.class.getSimpleName();
}
@Override
public WorkerSelector workerSelector() {
- return new RollingSelector();
+ return new HashCodeSelector();
}
}
}
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/receiver/TraceSegmentKeyMapping.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/receiver/TraceSegmentKeyMapping.java
deleted file mode 100644
index 79b54825f..000000000
--- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/receiver/TraceSegmentKeyMapping.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package com.a.eye.skywalking.collector.worker.receiver;
-
-/**
- * @author pengys5
- */
-public class TraceSegmentKeyMapping {
- public static class TraceSegment {
- public static String traceSegmentId = "ts";
- }
-}
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/receiver/TraceSegmentReceiver.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/receiver/TraceSegmentReceiver.java
deleted file mode 100644
index 6372c9174..000000000
--- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/receiver/TraceSegmentReceiver.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package com.a.eye.skywalking.collector.worker.receiver;
-
-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.worker.application.ApplicationMain;
-import com.a.eye.skywalking.collector.worker.applicationref.ApplicationRefMain;
-import com.a.eye.skywalking.collector.worker.httpserver.AbstractReceiver;
-import com.a.eye.skywalking.collector.worker.httpserver.AbstractReceiverProvider;
-import com.a.eye.skywalking.collector.worker.storage.AbstractTimeSlice;
-import com.a.eye.skywalking.collector.worker.tools.DateTools;
-import com.a.eye.skywalking.trace.TraceSegment;
-import com.google.gson.JsonObject;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
-/**
- * @author pengys5
- */
-public class TraceSegmentReceiver extends AbstractReceiver {
-
- private Logger logger = LogManager.getFormatterLogger(TraceSegmentReceiver.class);
-
- public TraceSegmentReceiver(Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) {
- super(role, clusterContext, selfContext);
- }
-
- @Override
- public void preStart() throws ProviderNotFoundException {
- getClusterContext().findProvider(ApplicationMain.Role.INSTANCE).create(this);
- getClusterContext().findProvider(ApplicationRefMain.Role.INSTANCE).create(this);
- }
-
- @Override
- protected void onReceive(JsonObject request) throws Exception {
- logger.debug("receive message instanceof TraceSegment, traceSegmentId is %s", request.get("ts"));
-// long timeSlice = DateTools.timeStampToTimeSlice(traceSegment.getStartTime());
-// int second = DateTools.timeStampToSecond(traceSegment.getStartTime());
-//
-// TraceSegmentTimeSlice segmentTimeSlice = new TraceSegmentTimeSlice(timeSlice, second, traceSegment);
-// getSelfContext().lookup(ApplicationMain.Role.INSTANCE).tell(segmentTimeSlice);
-// getSelfContext().lookup(ApplicationRefMain.Role.INSTANCE).tell(segmentTimeSlice);
- }
-
- public static class Factory extends AbstractReceiverProvider {
- public static Factory INSTANCE = new Factory();
-
- @Override
- public String servletPath() {
- return "/receiver/traceSegment";
- }
-
- @Override
- public int queueSize() {
- return 128;
- }
- }
-
- public static class TraceSegmentTimeSlice extends AbstractTimeSlice {
- private final TraceSegment traceSegment;
-
- public TraceSegmentTimeSlice(long timeSliceMinute, int second, TraceSegment traceSegment) {
- super(timeSliceMinute, second);
- this.traceSegment = traceSegment;
- }
-
- public TraceSegment getTraceSegment() {
- return traceSegment;
- }
- }
-}
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/segment/SegmentIndex.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/segment/SegmentIndex.java
new file mode 100644
index 000000000..b7b8786b1
--- /dev/null
+++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/segment/SegmentIndex.java
@@ -0,0 +1,113 @@
+package com.a.eye.skywalking.collector.worker.segment;
+
+import com.a.eye.skywalking.collector.worker.storage.index.AbstractIndex;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.elasticsearch.common.xcontent.XContentBuilder;
+import org.elasticsearch.common.xcontent.XContentFactory;
+
+import java.io.IOException;
+
+/**
+ * @author pengys5
+ */
+public class SegmentIndex extends AbstractIndex {
+
+ private Logger logger = LogManager.getFormatterLogger(SegmentIndex.class);
+
+ public static final String Index = "segment_idx";
+
+ @Override
+ public String index() {
+ return Index;
+ }
+
+ @Override
+ public boolean isRecord() {
+ return true;
+ }
+
+ @Override
+ public XContentBuilder createMappingBuilder() throws IOException {
+ XContentBuilder mappingBuilder = XContentFactory.jsonBuilder()
+ .startObject()
+ .startObject("properties")
+ .startObject("traceSegmentId")
+ .field("type", "string")
+ .field("index", "not_analyzed")
+ .endObject()
+ .startObject("startTime")
+ .field("type", "date")
+ .field("index", "not_analyzed")
+ .endObject()
+ .startObject("endTime")
+ .field("type", "date")
+ .field("index", "not_analyzed")
+ .endObject()
+ .startObject("applicationCode")
+ .field("type", "string")
+ .field("index", "not_analyzed")
+ .endObject()
+ .startObject("minute")
+ .field("type", "long")
+ .field("index", "not_analyzed")
+ .endObject()
+ .startObject("hour")
+ .field("type", "long")
+ .field("index", "not_analyzed")
+ .endObject()
+ .startObject("day")
+ .field("type", "long")
+ .field("index", "not_analyzed")
+ .endObject()
+ .startArray("refs")
+ .startObject("traceSegmentId")
+ .field("type", "String")
+ .field("index", "not_analyzed")
+ .endObject()
+ .startObject("spanId")
+ .field("type", "integer")
+ .field("index", "not_analyzed")
+ .endObject()
+ .startObject("applicationCode")
+ .field("type", "String")
+ .field("index", "not_analyzed")
+ .endObject()
+ .startObject("peerHost")
+ .field("type", "String")
+ .field("index", "not_analyzed")
+ .endObject()
+ .endArray()
+ .startArray("refs")
+ .startObject("spanId")
+ .field("type", "integer")
+ .field("index", "not_analyzed")
+ .endObject()
+ .startObject("parentSpanId")
+ .field("type", "integer")
+ .field("index", "not_analyzed")
+ .endObject()
+ .startObject("startTime")
+ .field("type", "date")
+ .field("index", "not_analyzed")
+ .endObject()
+ .startObject("endTime")
+ .field("type", "date")
+ .field("index", "not_analyzed")
+ .endObject()
+ .startObject("operationName")
+ .field("type", "String")
+ .field("index", "not_analyzed")
+ .endObject()
+ .endArray()
+ .startArray("relatedGlobalTraces")
+ .startObject("id")
+ .field("type", "String")
+ .field("index", "not_analyzed")
+ .endObject()
+ .endArray()
+ .endObject()
+ .endObject();
+ return mappingBuilder;
+ }
+}
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/segment/SegmentPost.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/segment/SegmentPost.java
new file mode 100644
index 000000000..f3e04de5e
--- /dev/null
+++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/segment/SegmentPost.java
@@ -0,0 +1,150 @@
+package com.a.eye.skywalking.collector.worker.segment;
+
+import com.a.eye.skywalking.api.util.StringUtil;
+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.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.noderef.analysis.NodeRefDayAnalysis;
+import com.a.eye.skywalking.collector.worker.noderef.analysis.NodeRefHourAnalysis;
+import com.a.eye.skywalking.collector.worker.noderef.analysis.NodeRefMinuteAnalysis;
+import com.a.eye.skywalking.collector.worker.segment.persistence.SegmentSave;
+import com.a.eye.skywalking.collector.worker.storage.AbstractTimeSlice;
+import com.a.eye.skywalking.collector.worker.tools.DateTools;
+import com.a.eye.skywalking.trace.TraceSegment;
+import com.google.gson.Gson;
+import com.google.gson.JsonObject;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+/**
+ * @author pengys5
+ */
+public class SegmentPost extends AbstractPost {
+
+ private Logger logger = LogManager.getFormatterLogger(SegmentPost.class);
+
+ private Gson gson = new Gson();
+
+ public SegmentPost(Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) {
+ super(role, clusterContext, selfContext);
+ }
+
+ @Override
+ public void preStart() throws ProviderNotFoundException {
+ getClusterContext().findProvider(SegmentSave.Role.INSTANCE).create(this);
+
+ getClusterContext().findProvider(NodeRefMinuteAnalysis.Role.INSTANCE).create(this);
+ 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);
+ }
+
+ @Override
+ protected void onReceive(String reqJsonStr) throws Exception {
+ TraceSegment newSegment = gson.fromJson(reqJsonStr, TraceSegment.class);
+ validateData(newSegment);
+ logger.debug("receive message instanceof TraceSegment, traceSegmentId is %s", newSegment.getTraceSegmentId());
+
+ long minuteSlice = DateTools.getMinuteSlice(newSegment.getStartTime());
+ long hourSlice = DateTools.getHourSlice(newSegment.getStartTime());
+ long daySlice = DateTools.getDaySlice(newSegment.getStartTime());
+ int second = DateTools.getSecond(newSegment.getStartTime());
+
+ SegmentWithTimeSlice segmentWithTimeSlice = new SegmentWithTimeSlice(newSegment, minuteSlice, hourSlice, daySlice, second);
+ tellSegmentSave(reqJsonStr, daySlice, hourSlice, minuteSlice);
+
+ tellNodeRef(segmentWithTimeSlice);
+ tellNode(segmentWithTimeSlice);
+ }
+
+ private void tellSegmentSave(String reqJsonStr, long day, long hour, long minute) throws Exception {
+ JsonObject newSegmentJson = gson.fromJson(reqJsonStr, JsonObject.class);
+ newSegmentJson.addProperty("minute", minute);
+ newSegmentJson.addProperty("hour", hour);
+ newSegmentJson.addProperty("day", day);
+ getSelfContext().lookup(SegmentSave.Role.INSTANCE).tell(newSegmentJson);
+ }
+
+ private void tellNodeRef(SegmentWithTimeSlice segmentWithTimeSlice) throws Exception {
+ getSelfContext().lookup(NodeRefMinuteAnalysis.Role.INSTANCE).tell(segmentWithTimeSlice);
+ getSelfContext().lookup(NodeRefHourAnalysis.Role.INSTANCE).tell(segmentWithTimeSlice);
+ 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 validateData(TraceSegment newSegment) {
+ if (StringUtil.isEmpty(newSegment.getTraceSegmentId())) {
+ throw new IllegalArgumentException("traceSegmentId required");
+ }
+ if (0 == newSegment.getStartTime()) {
+ throw new IllegalArgumentException("startTime required");
+ }
+ }
+
+ public static class Factory extends AbstractPostProvider {
+ public static Factory INSTANCE = new Factory();
+
+ @Override
+ public String servletPath() {
+ return "/segment";
+ }
+
+ @Override
+ public int queueSize() {
+ return 128;
+ }
+
+ @Override
+ public Role role() {
+ return WorkerRole.INSTANCE;
+ }
+
+ @Override
+ public SegmentPost workerInstance(ClusterWorkerContext clusterContext) {
+ return new SegmentPost(role(), clusterContext, new LocalWorkerContext());
+ }
+ }
+
+ public enum WorkerRole implements Role {
+ INSTANCE;
+
+ @Override
+ public String roleName() {
+ return SegmentPost.class.getSimpleName();
+ }
+
+ @Override
+ public WorkerSelector workerSelector() {
+ return new RollingSelector();
+ }
+ }
+
+ public static class SegmentWithTimeSlice extends AbstractTimeSlice {
+ private final TraceSegment traceSegment;
+
+ public SegmentWithTimeSlice(TraceSegment traceSegment, long minute, long hour, long day, int second) {
+ super(minute, hour, day, second);
+ this.traceSegment = traceSegment;
+ }
+
+ public TraceSegment getTraceSegment() {
+ return traceSegment;
+ }
+ }
+}
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/segment/persistence/SegmentSave.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/segment/persistence/SegmentSave.java
new file mode 100644
index 000000000..e1f2ef08c
--- /dev/null
+++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/segment/persistence/SegmentSave.java
@@ -0,0 +1,83 @@
+package com.a.eye.skywalking.collector.worker.segment.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.RollingSelector;
+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.segment.SegmentIndex;
+import com.a.eye.skywalking.collector.worker.storage.RecordData;
+import com.a.eye.skywalking.collector.worker.storage.index.AbstractIndex;
+import com.google.gson.JsonObject;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+/**
+ * @author pengys5
+ */
+public class SegmentSave extends RecordPersistenceMember {
+
+ private Logger logger = LogManager.getFormatterLogger(SegmentSave.class);
+
+ @Override
+ public String esIndex() {
+ return SegmentIndex.Index;
+ }
+
+ @Override
+ public String esType() {
+ return AbstractIndex.Type_Record;
+ }
+
+ public SegmentSave(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 JsonObject) {
+ JsonObject segmentJson = (JsonObject) message;
+ RecordData recordData = new RecordData(segmentJson.get("ts").getAsString());
+ recordData.setRecord(segmentJson);
+ super.analyse(recordData);
+ } else {
+ logger.error("unhandled message, message instance must JsonObject, but is %s", message.getClass().toString());
+ }
+ }
+
+ public static class Factory extends AbstractLocalAsyncWorkerProvider {
+ public static Factory INSTANCE = new Factory();
+
+ @Override
+ public Role role() {
+ return Role.INSTANCE;
+ }
+
+ @Override
+ public int queueSize() {
+ return WorkerConfig.Queue.TraceSegmentRecordAnalysis.Size;
+ }
+
+ @Override
+ public SegmentSave workerInstance(ClusterWorkerContext clusterContext) {
+ return new SegmentSave(role(), clusterContext, new LocalWorkerContext());
+ }
+ }
+
+ public enum Role implements com.a.eye.skywalking.collector.actor.Role {
+ INSTANCE;
+
+ @Override
+ public String roleName() {
+ return SegmentSave.class.getSimpleName();
+ }
+
+ @Override
+ public WorkerSelector workerSelector() {
+ return new RollingSelector();
+ }
+ }
+}
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/storage/AbstractTimeSlice.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/storage/AbstractTimeSlice.java
index bb0ade6e1..2920b58e8 100644
--- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/storage/AbstractTimeSlice.java
+++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/storage/AbstractTimeSlice.java
@@ -5,10 +5,14 @@ package com.a.eye.skywalking.collector.worker.storage;
*/
public abstract class AbstractTimeSlice {
private final long minute;
+ private final long hour;
+ private final long day;
private final int second;
- public AbstractTimeSlice(long minute, int second) {
+ public AbstractTimeSlice(long minute, long hour, long day, int second) {
this.minute = minute;
+ this.hour = hour;
+ this.day = day;
this.second = second;
}
@@ -16,6 +20,14 @@ public abstract class AbstractTimeSlice {
return minute;
}
+ public long getHour() {
+ return hour;
+ }
+
+ public long getDay() {
+ return day;
+ }
+
public int getSecond() {
return second;
}
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/storage/index/AbstractIndex.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/storage/index/AbstractIndex.java
index 916b1cbe6..b1c1cad3b 100644
--- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/storage/index/AbstractIndex.java
+++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/storage/index/AbstractIndex.java
@@ -5,6 +5,7 @@ import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.elasticsearch.action.admin.indices.create.CreateIndexResponse;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexResponse;
+import org.elasticsearch.action.admin.indices.mapping.put.PutMappingResponse;
import org.elasticsearch.client.IndicesAdminClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.xcontent.XContentBuilder;
@@ -24,6 +25,10 @@ public abstract class AbstractIndex {
public static final String Type_Hour = "hour";
public static final String Type_Day = "day";
+ public static final String Type_Record = "record";
+
+ public static final String Time_Slice_Column_Name = "timeSlice";
+
final public XContentBuilder createSettingBuilder() throws IOException {
XContentBuilder settingsBuilder = XContentFactory.jsonBuilder()
.startObject()
@@ -33,6 +38,8 @@ public abstract class AbstractIndex {
return settingsBuilder;
}
+ public abstract boolean isRecord();
+
public abstract XContentBuilder createMappingBuilder() throws IOException;
final public void createIndex() {
@@ -53,11 +60,18 @@ public abstract class AbstractIndex {
}
Settings settings = Settings.builder().loadFromSource(settingSource).build();
IndicesAdminClient client = EsClient.getClient().admin().indices();
- CreateIndexResponse response = client.prepareCreate(index()).setSettings(settings).addMapping(Type_Minute, mappingBuilder).get();
- client.preparePutMapping(index()).setType(Type_Hour).setSource(mappingBuilder).get();
- client.preparePutMapping(index()).setType(Type_Day).setSource(mappingBuilder).get();
- logger.info("create %s index with type of %s finished, isAcknowledged: %s", index(), "aaa", response.isAcknowledged());
+ if (isRecord()) {
+ CreateIndexResponse response = client.prepareCreate(index()).setSettings(settings).addMapping(Type_Record, mappingBuilder).get();
+ logger.info("create %s index with type of %s finished, isAcknowledged: %s", index(), Type_Record, response.isAcknowledged());
+ } else {
+ CreateIndexResponse response = client.prepareCreate(index()).setSettings(settings).addMapping(Type_Minute, mappingBuilder).get();
+ logger.info("create %s index with type of %s finished, isAcknowledged: %s", index(), Type_Minute, response.isAcknowledged());
+ PutMappingResponse putMappingResponse = client.preparePutMapping(index()).setType(Type_Hour).setSource(mappingBuilder).get();
+ logger.info("create %s index with type of %s finished, isAcknowledged: %s", index(), Type_Hour, putMappingResponse.isAcknowledged());
+ putMappingResponse = client.preparePutMapping(index()).setType(Type_Day).setSource(mappingBuilder).get();
+ logger.info("create %s index with type of %s finished, isAcknowledged: %s", index(), Type_Day, putMappingResponse.isAcknowledged());
+ }
}
final public boolean deleteIndex() {
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/storage/index/ClientNodeIndex.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/storage/index/ClientNodeIndex.java
index 862be517d..6e009b441 100644
--- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/storage/index/ClientNodeIndex.java
+++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/storage/index/ClientNodeIndex.java
@@ -21,6 +21,11 @@ public class ClientNodeIndex extends AbstractIndex {
return Index;
}
+ @Override
+ public boolean isRecord() {
+ return false;
+ }
+
@Override
public XContentBuilder createMappingBuilder() throws IOException {
XContentBuilder mappingBuilder = XContentFactory.jsonBuilder()
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/tools/DateTools.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/tools/DateTools.java
index bf61c67cf..4dd288add 100644
--- a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/tools/DateTools.java
+++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/tools/DateTools.java
@@ -8,20 +8,34 @@ import java.util.Calendar;
*/
public class DateTools {
- private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmm");
+ private static final SimpleDateFormat dayDateFormat = new SimpleDateFormat("yyyyMMdd");
+ private static final SimpleDateFormat hourDateFormat = new SimpleDateFormat("yyyyMMddHH");
+ private static final SimpleDateFormat minuteDateFormat = new SimpleDateFormat("yyyyMMddHHmm");
- public static final String Time_Slice_Column_Name = "timeSlice";
-
- public static int timeStampToSecond(long time) {
+ public static int getSecond(long time) {
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(time);
return calendar.get(Calendar.SECOND);
}
- public static long timeStampToTimeSlice(long time) {
+ public static long getMinuteSlice(long time) {
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(time);
- String timeStr = sdf.format(calendar.getTime());
+ String timeStr = minuteDateFormat.format(calendar.getTime());
+ return Long.valueOf(timeStr);
+ }
+
+ public static long getHourSlice(long time) {
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTimeInMillis(time);
+ String timeStr = hourDateFormat.format(calendar.getTime()) + "00";
+ return Long.valueOf(timeStr);
+ }
+
+ public static long getDaySlice(long time) {
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTimeInMillis(time);
+ String timeStr = dayDateFormat.format(calendar.getTime()) + "0000";
return Long.valueOf(timeStr);
}
}
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/tools/HttpClientTools.java b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/tools/HttpClientTools.java
new file mode 100644
index 000000000..84d0d0530
--- /dev/null
+++ b/skywalking-collector/skywalking-collector-worker/src/main/java/com/a/eye/skywalking/collector/worker/tools/HttpClientTools.java
@@ -0,0 +1,79 @@
+package com.a.eye.skywalking.collector.worker.tools;
+
+import org.apache.http.Consts;
+import org.apache.http.HttpEntity;
+import org.apache.http.NameValuePair;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.util.EntityUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import java.io.IOException;
+import java.net.URI;
+import java.util.List;
+
+/**
+ * @author pengys5
+ */
+public enum HttpClientTools {
+ INSTANCE;
+
+ private Logger logger = LogManager.getFormatterLogger(HttpClientTools.class);
+
+ public String get(String url, List params) throws IOException {
+ CloseableHttpClient httpClient = HttpClients.createDefault();
+ try {
+ HttpGet httpget = new HttpGet(url);
+ String paramStr = EntityUtils.toString(new UrlEncodedFormEntity(params));
+ httpget.setURI(new URI(httpget.getURI().toString() + "?" + paramStr));
+ logger.debug("executing get request %s", httpget.getURI());
+
+ try (CloseableHttpResponse response = httpClient.execute(httpget)) {
+ HttpEntity entity = response.getEntity();
+ System.out.println(response.getStatusLine());
+ if (entity != null) {
+ return EntityUtils.toString(entity);
+ }
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ try {
+ httpClient.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ return null;
+ }
+
+ public String post(String url, String data) throws IOException {
+ CloseableHttpClient httpClient = HttpClients.createDefault();
+ try {
+ HttpPost httppost = new HttpPost(url);
+ httppost.setEntity(new StringEntity(data, Consts.UTF_8));
+ logger.debug("executing post request %s", httppost.getURI());
+ try (CloseableHttpResponse response = httpClient.execute(httppost)) {
+ HttpEntity entity = response.getEntity();
+ if (entity != null) {
+ return EntityUtils.toString(entity);
+ }
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ try {
+ httpClient.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ return null;
+ }
+}
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/resources/META-INF/services/com.a.eye.skywalking.collector.actor.AbstractClusterWorkerProvider b/skywalking-collector/skywalking-collector-worker/src/main/resources/META-INF/services/com.a.eye.skywalking.collector.actor.AbstractClusterWorkerProvider
new file mode 100644
index 000000000..5de9895f9
--- /dev/null
+++ b/skywalking-collector/skywalking-collector-worker/src/main/resources/META-INF/services/com.a.eye.skywalking.collector.actor.AbstractClusterWorkerProvider
@@ -0,0 +1,11 @@
+com.a.eye.skywalking.collector.worker.noderef.persistence.NodeRefDayAgg$Factory
+com.a.eye.skywalking.collector.worker.noderef.persistence.NodeRefHourAgg$Factory
+com.a.eye.skywalking.collector.worker.noderef.persistence.NodeRefMinuteAgg$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.nodeinst.persistence.NodeInstDayAgg$Factory
+com.a.eye.skywalking.collector.worker.nodeinst.persistence.NodeInstHourAgg$Factory
+com.a.eye.skywalking.collector.worker.nodeinst.persistence.NodeInstMinuteAgg$Factory
\ No newline at end of file
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/resources/META-INF/services/com.a.eye.skywalking.collector.actor.AbstractLocalWorkerProvider b/skywalking-collector/skywalking-collector-worker/src/main/resources/META-INF/services/com.a.eye.skywalking.collector.actor.AbstractLocalWorkerProvider
index 800542f71..d37466a36 100644
--- a/skywalking-collector/skywalking-collector-worker/src/main/resources/META-INF/services/com.a.eye.skywalking.collector.actor.AbstractLocalWorkerProvider
+++ b/skywalking-collector/skywalking-collector-worker/src/main/resources/META-INF/services/com.a.eye.skywalking.collector.actor.AbstractLocalWorkerProvider
@@ -1,4 +1,21 @@
-com.a.eye.skywalking.collector.worker.dagnode.persistence.ClientNodeSearchPersistence$Factory
-com.a.eye.skywalking.collector.worker.dagnode.persistence.NodeInstanceSearchPersistence$Factory
-com.a.eye.skywalking.collector.worker.dagnode.persistence.NodeRefSearchPersistence$Factory
-com.a.eye.skywalking.collector.worker.dagnode.persistence.ServerNodeSearchPersistence$Factory
\ No newline at end of file
+com.a.eye.skywalking.collector.worker.segment.persistence.SegmentSave$Factory
+
+com.a.eye.skywalking.collector.worker.noderef.analysis.NodeRefDayAnalysis$Factory
+com.a.eye.skywalking.collector.worker.noderef.analysis.NodeRefHourAnalysis$Factory
+com.a.eye.skywalking.collector.worker.noderef.analysis.NodeRefMinuteAnalysis$Factory
+
+com.a.eye.skywalking.collector.worker.noderef.persistence.NodeRefDaySave$Factory
+com.a.eye.skywalking.collector.worker.noderef.persistence.NodeRefHourSave$Factory
+com.a.eye.skywalking.collector.worker.noderef.persistence.NodeRefMinuteSave$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.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.nodeinst.persistence.NodeInstDaySave$Factory
+com.a.eye.skywalking.collector.worker.nodeinst.persistence.NodeInstHourSave$Factory
+com.a.eye.skywalking.collector.worker.nodeinst.persistence.NodeInstMinuteSave$Factory
\ No newline at end of file
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/resources/META-INF/services/com.a.eye.skywalking.collector.actor.AbstractWorkerProvider b/skywalking-collector/skywalking-collector-worker/src/main/resources/META-INF/services/com.a.eye.skywalking.collector.actor.AbstractWorkerProvider
deleted file mode 100644
index 1416bc9e5..000000000
--- a/skywalking-collector/skywalking-collector-worker/src/main/resources/META-INF/services/com.a.eye.skywalking.collector.actor.AbstractWorkerProvider
+++ /dev/null
@@ -1,6 +0,0 @@
-com.a.eye.skywalking.collector.worker.receiver.TraceSegmentReceiver$Factory
-com.a.eye.skywalking.collector.worker.application.receiver.DAGNodeReceiver$Factory
-com.a.eye.skywalking.collector.worker.application.receiver.NodeInstanceReceiver$Factory
-com.a.eye.skywalking.collector.worker.application.receiver.ResponseCostReceiver$Factory
-com.a.eye.skywalking.collector.worker.application.receiver.ResponseSummaryReceiver$Factory
-com.a.eye.skywalking.collector.worker.applicationref.receiver.DAGNodeRefReceiver$Factory
\ No newline at end of file
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/resources/META-INF/services/com.a.eye.skywalking.collector.worker.httpserver.AbstractReceiverProvider b/skywalking-collector/skywalking-collector-worker/src/main/resources/META-INF/services/com.a.eye.skywalking.collector.worker.httpserver.AbstractGetProvider
similarity index 100%
rename from skywalking-collector/skywalking-collector-worker/src/main/resources/META-INF/services/com.a.eye.skywalking.collector.worker.httpserver.AbstractReceiverProvider
rename to skywalking-collector/skywalking-collector-worker/src/main/resources/META-INF/services/com.a.eye.skywalking.collector.worker.httpserver.AbstractGetProvider
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/resources/META-INF/services/com.a.eye.skywalking.collector.worker.httpserver.AbstractPostProvider b/skywalking-collector/skywalking-collector-worker/src/main/resources/META-INF/services/com.a.eye.skywalking.collector.worker.httpserver.AbstractPostProvider
new file mode 100644
index 000000000..4918285cd
--- /dev/null
+++ b/skywalking-collector/skywalking-collector-worker/src/main/resources/META-INF/services/com.a.eye.skywalking.collector.worker.httpserver.AbstractPostProvider
@@ -0,0 +1 @@
+com.a.eye.skywalking.collector.worker.segment.SegmentPost$Factory
\ No newline at end of file
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/resources/META-INF/services/com.a.eye.skywalking.collector.worker.httpserver.AbstractSearcherProvider b/skywalking-collector/skywalking-collector-worker/src/main/resources/META-INF/services/com.a.eye.skywalking.collector.worker.httpserver.AbstractSearcherProvider
deleted file mode 100644
index ac041486a..000000000
--- a/skywalking-collector/skywalking-collector-worker/src/main/resources/META-INF/services/com.a.eye.skywalking.collector.worker.httpserver.AbstractSearcherProvider
+++ /dev/null
@@ -1,4 +0,0 @@
-com.a.eye.skywalking.collector.worker.dagnode.searcher.ClientNodeWithTimeSliceSearcher$Factory
-com.a.eye.skywalking.collector.worker.dagnode.searcher.NodeInstanceWithTimeSliceSearcher$Factory
-com.a.eye.skywalking.collector.worker.dagnode.searcher.NodeRefWithTimeSliceSearcher$Factory
-com.a.eye.skywalking.collector.worker.dagnode.searcher.ServerNodeWithTimeSliceSearcher$Factory
diff --git a/skywalking-collector/skywalking-collector-worker/src/main/resources/collector.config b/skywalking-collector/skywalking-collector-worker/src/main/resources/collector.config
index 459b5d9bd..8e3e48c4a 100644
--- a/skywalking-collector/skywalking-collector-worker/src/main/resources/collector.config
+++ b/skywalking-collector/skywalking-collector-worker/src/main/resources/collector.config
@@ -1,4 +1,4 @@
cluster.current.hostname=127.0.0.1
cluster.current.port=1000
-cluster.current.roles=[WorkersListener, TraceSegmentReceiver, NodeInstancePersistence]
-cluster.seed_nodes=["akka.tcp://CollectorSystem@127.0.0.1:1000", "akka.tcp://CollectorSystem@127.0.0.1:1001", "akka.tcp://CollectorSystem@127.0.0.1:1002"]
+cluster.current.roles=[WorkersListener]
+#cluster.seed_nodes=["akka.tcp://CollectorSystem@127.0.0.1:1000"]
diff --git a/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/StartUpTestCase.java b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/StartUpTestCase.java
index 53548da5e..fabd68d2c 100644
--- a/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/StartUpTestCase.java
+++ b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/StartUpTestCase.java
@@ -5,13 +5,10 @@ import akka.actor.ActorSelection;
import akka.actor.ActorSystem;
import com.a.eye.skywalking.collector.cluster.ClusterConfig;
import com.a.eye.skywalking.collector.cluster.ClusterConfigInitializer;
-import com.a.eye.skywalking.collector.worker.receiver.TraceSegmentReceiver;
+import com.a.eye.skywalking.collector.worker.segment.SegmentPost;
import com.a.eye.skywalking.collector.worker.storage.EsClient;
import com.a.eye.skywalking.sniffer.mock.trace.TraceSegmentBuilderFactory;
import com.a.eye.skywalking.trace.TraceSegment;
-import com.a.eye.skywalking.trace.proto.SegmentMessage;
-import com.a.eye.skywalking.trace.proto.SegmentRefMessage;
-import com.a.eye.skywalking.trace.tag.Tags;
import com.typesafe.config.Config;
import com.typesafe.config.ConfigFactory;
@@ -21,7 +18,7 @@ import com.typesafe.config.ConfigFactory;
public class StartUpTestCase {
public void test() throws Exception {
- System.out.println(TraceSegmentReceiver.class.getSimpleName());
+ System.out.println(SegmentPost.class.getSimpleName());
ClusterConfigInitializer.initialize("collector.config");
System.out.println(ClusterConfig.Cluster.Current.roles);
@@ -36,25 +33,25 @@ public class StartUpTestCase {
TraceSegment dubboClientData = TraceSegmentBuilderFactory.INSTANCE.traceOf_Tomcat_DubboClient();
- SegmentMessage.Builder clientBuilder = dubboClientData.serialize().toBuilder();
- clientBuilder.setApplicationCode("Tomcat_DubboClient");
-
- dubboClientData = new TraceSegment(clientBuilder.build());
-
- TraceSegment dubboServerData = TraceSegmentBuilderFactory.INSTANCE.traceOf_DubboServer_MySQL();
-
- SegmentMessage serializeServer = dubboServerData.serialize();
- SegmentMessage.Builder builder = serializeServer.toBuilder();
-
- SegmentRefMessage.Builder builderRef = builder.getRefs(0).toBuilder();
- builderRef.setApplicationCode(dubboClientData.getApplicationCode());
-
-
- builderRef.setPeerHost(Tags.PEER_HOST.get(dubboClientData.getSpans().get(1)));
-
- builder.setApplicationCode("DubboServer_MySQL");
- builder.addRefs(builderRef);
- dubboServerData = new TraceSegment(builder.build());
+// SegmentMessage.Builder clientBuilder = dubboClientData.serialize().toBuilder();
+// clientBuilder.setApplicationCode("Tomcat_DubboClient");
+//
+// dubboClientData = new TraceSegment(clientBuilder.build());
+//
+// TraceSegment dubboServerData = TraceSegmentBuilderFactory.INSTANCE.traceOf_DubboServer_MySQL();
+//
+// SegmentMessage serializeServer = dubboServerData.serialize();
+// SegmentMessage.Builder builder = serializeServer.toBuilder();
+//
+// SegmentRefMessage.Builder builderRef = builder.getRefs(0).toBuilder();
+// builderRef.setApplicationCode(dubboClientData.getApplicationCode());
+//
+//
+// builderRef.setPeerHost(Tags.PEER_HOST.get(dubboClientData.getSpans().get(1)));
+//
+// builder.setApplicationCode("DubboServer_MySQL");
+// builder.addRefs(builderRef);
+// dubboServerData = new TraceSegment(builder.build());
Thread.sleep(5000);
@@ -62,7 +59,7 @@ public class StartUpTestCase {
for (int i = 0; i < 100; i++) {
selection.tell(dubboClientData, ActorRef.noSender());
- selection.tell(dubboServerData, ActorRef.noSender());
+// selection.tell(dubboServerData, ActorRef.noSender());
Thread.sleep(200);
}
diff --git a/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/dagnode/persistence/NodeInstanceTestCase.java b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/dagnode/persistence/NodeInstanceTestCase.java
index eeb37c3cd..68e208209 100644
--- a/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/dagnode/persistence/NodeInstanceTestCase.java
+++ b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/dagnode/persistence/NodeInstanceTestCase.java
@@ -3,7 +3,7 @@ package com.a.eye.skywalking.collector.worker.dagnode.persistence;
import com.a.eye.skywalking.collector.actor.AbstractWorker;
import com.a.eye.skywalking.collector.actor.LocalSyncWorkerRef;
import com.a.eye.skywalking.collector.worker.storage.EsClient;
-import com.a.eye.skywalking.collector.worker.storage.index.NodeInstanceIndex;
+import com.a.eye.skywalking.collector.worker.nodeinst.NodeInstIndex;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import org.elasticsearch.action.index.IndexResponse;
@@ -23,23 +23,23 @@ public class NodeInstanceTestCase {
@Before
public void initIndex() throws UnknownHostException {
EsClient.boot();
- NodeInstanceIndex index = new NodeInstanceIndex();
+ NodeInstIndex index = new NodeInstIndex();
index.deleteIndex();
index.createIndex();
}
@Test
public void testLoadNodeInstance() throws Exception {
- loadNodeInstance(201703101201l, NodeInstanceIndex.Type_Minute);
- loadNodeInstance(201703101200l, NodeInstanceIndex.Type_Hour);
- loadNodeInstance(201703100000l, NodeInstanceIndex.Type_Day);
+ loadNodeInstance(201703101201l, NodeInstIndex.Type_Minute);
+ loadNodeInstance(201703101200l, NodeInstIndex.Type_Hour);
+ loadNodeInstance(201703100000l, NodeInstIndex.Type_Day);
}
public void loadNodeInstance(long timeSlice, String type) throws Exception {
LocalSyncWorkerRef workerRef = (LocalSyncWorkerRef) NodeInstanceSearchPersistence.Factory.INSTANCE.create(AbstractWorker.noOwner());
insertData(timeSlice, type);
- EsClient.indexRefresh(NodeInstanceIndex.Index);
+ EsClient.indexRefresh(NodeInstIndex.Index);
NodeInstanceSearchPersistence.RequestEntity requestEntity = new NodeInstanceSearchPersistence.RequestEntity(type, timeSlice);
JsonObject resJsonObj = new JsonObject();
@@ -58,7 +58,7 @@ public class NodeInstanceTestCase {
json.put("timeSlice", timeSlice);
String _id = timeSlice + "-WebApplication-" + "10.218.9.86:8080";
- IndexResponse response = EsClient.getClient().prepareIndex(NodeInstanceIndex.Index, type, _id).setSource(json).get();
+ IndexResponse response = EsClient.getClient().prepareIndex(NodeInstIndex.Index, type, _id).setSource(json).get();
RestStatus status = response.status();
status.getStatus();
@@ -68,7 +68,7 @@ public class NodeInstanceTestCase {
json.put("timeSlice", timeSlice);
_id = timeSlice + "-MotanServiceApplication-" + "10.20.3.15:3000";
- response = EsClient.getClient().prepareIndex(NodeInstanceIndex.Index, type, _id).setSource(json).get();
+ response = EsClient.getClient().prepareIndex(NodeInstIndex.Index, type, _id).setSource(json).get();
status = response.status();
status.getStatus();
}
diff --git a/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/dagnode/persistence/NodeRefTestCase.java b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/dagnode/persistence/NodeRefTestCase.java
index cf4525a96..145ec4620 100644
--- a/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/dagnode/persistence/NodeRefTestCase.java
+++ b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/dagnode/persistence/NodeRefTestCase.java
@@ -3,7 +3,7 @@ package com.a.eye.skywalking.collector.worker.dagnode.persistence;
import com.a.eye.skywalking.collector.actor.AbstractWorker;
import com.a.eye.skywalking.collector.actor.LocalSyncWorkerRef;
import com.a.eye.skywalking.collector.worker.storage.EsClient;
-import com.a.eye.skywalking.collector.worker.storage.index.NodeRefIndex;
+import com.a.eye.skywalking.collector.worker.noderef.NodeRefIndex;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import org.elasticsearch.action.index.IndexResponse;
diff --git a/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/dagnode/persistence/ServerNodeTestCase.java b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/dagnode/persistence/ServerNodeTestCase.java
index 90bdc8f81..96643faf5 100644
--- a/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/dagnode/persistence/ServerNodeTestCase.java
+++ b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/dagnode/persistence/ServerNodeTestCase.java
@@ -3,7 +3,7 @@ package com.a.eye.skywalking.collector.worker.dagnode.persistence;
import com.a.eye.skywalking.collector.actor.AbstractWorker;
import com.a.eye.skywalking.collector.actor.LocalSyncWorkerRef;
import com.a.eye.skywalking.collector.worker.storage.EsClient;
-import com.a.eye.skywalking.collector.worker.storage.index.ServerNodeIndex;
+import com.a.eye.skywalking.collector.worker.node.NodeIndex;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import org.elasticsearch.action.index.IndexResponse;
@@ -23,23 +23,23 @@ public class ServerNodeTestCase {
@Before
public void initIndex() throws UnknownHostException {
EsClient.boot();
- ServerNodeIndex index = new ServerNodeIndex();
+ NodeIndex index = new NodeIndex();
index.deleteIndex();
index.createIndex();
}
@Test
public void testLoadServerNode() throws Exception {
- loadNode(201703101201l, ServerNodeIndex.Type_Minute);
- loadNode(201703101200l, ServerNodeIndex.Type_Hour);
- loadNode(201703100000l, ServerNodeIndex.Type_Day);
+ loadNode(201703101201l, NodeIndex.Type_Minute);
+ loadNode(201703101200l, NodeIndex.Type_Hour);
+ loadNode(201703100000l, NodeIndex.Type_Day);
}
public void loadNode(long timeSlice, String type) throws Exception {
LocalSyncWorkerRef workerRef = (LocalSyncWorkerRef) ServerNodeSearchPersistence.Factory.INSTANCE.create(AbstractWorker.noOwner());
insertData(timeSlice, type);
- EsClient.indexRefresh(ServerNodeIndex.Index);
+ EsClient.indexRefresh(NodeIndex.Index);
ServerNodeSearchPersistence.RequestEntity requestEntity = new ServerNodeSearchPersistence.RequestEntity(type, timeSlice);
JsonObject resJsonObj = new JsonObject();
@@ -59,7 +59,7 @@ public class ServerNodeTestCase {
json.put("layer", "http");
String _id = timeSlice + "-WebApplication";
- IndexResponse response = EsClient.getClient().prepareIndex(ServerNodeIndex.Index, type, _id).setSource(json).get();
+ IndexResponse response = EsClient.getClient().prepareIndex(NodeIndex.Index, type, _id).setSource(json).get();
RestStatus status = response.status();
status.getStatus();
@@ -70,7 +70,7 @@ public class ServerNodeTestCase {
json.put("layer", "rpc");
_id = timeSlice + "-MotanServiceApplication";
- response = EsClient.getClient().prepareIndex(ServerNodeIndex.Index, type, _id).setSource(json).get();
+ response = EsClient.getClient().prepareIndex(NodeIndex.Index, type, _id).setSource(json).get();
status = response.status();
status.getStatus();
}
diff --git a/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/segment/SegmentPostTestCase.java b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/segment/SegmentPostTestCase.java
new file mode 100644
index 000000000..eac2e6498
--- /dev/null
+++ b/skywalking-collector/skywalking-collector-worker/src/test/java/com/a/eye/skywalking/collector/worker/segment/SegmentPostTestCase.java
@@ -0,0 +1,88 @@
+package com.a.eye.skywalking.collector.worker.segment;
+
+import com.a.eye.skywalking.collector.worker.tools.HttpClientTools;
+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.Gson;
+import com.google.gson.GsonBuilder;
+import org.junit.Test;
+
+import java.io.IOException;
+import java.util.Date;
+
+/**
+ * @author pengys5
+ */
+public class SegmentPostTestCase {
+
+ @Test
+ public void testPostSegment() throws Exception {
+ Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
+
+ TraceSegment webSegment = new TraceSegment("WebApplication");
+
+ Span span = new Span(0, "/Web/GetUser", new Date().getTime());
+ Tags.SPAN_LAYER.asHttp(span);
+ Tags.SPAN_KIND.set(span, Tags.SPAN_KIND_SERVER);
+ Tags.URL.set(span, "http://10.218.9.86:8080/Web/GetUser");
+ Tags.STATUS_CODE.set(span, 200);
+ Tags.COMPONENT.set(span, "Tomcat");
+ Tags.PEERS.set(span, "202.135.4.12");
+ Thread.sleep(300);
+ webSegment.archive(span);
+ Thread.sleep(300);
+
+ Span span1 = new Span(1, span, "com.a.eye.skywalking.demo.services.GetUserService.findUser(String, String)", new Date().getTime());
+ Tags.SPAN_LAYER.asRPCFramework(span1);
+ Tags.URL.set(span1, "motan://10.20.3.15:3000/com.a.eye.skywalking.demo.services.GetUserService.findUser(String, String)");
+ Tags.SPAN_KIND.set(span1, Tags.SPAN_KIND_CLIENT);
+ Tags.COMPONENT.set(span1, "Motan");
+ Tags.PEERS.set(span1, "10.20.3.15:3000");
+ Thread.sleep(300);
+ webSegment.archive(span1);
+ Thread.sleep(300);
+
+ Thread.sleep(300);
+ webSegment.finish();
+ Thread.sleep(300);
+
+ String webJsonStr = gson.toJson(webSegment);
+ HttpClientTools.INSTANCE.post("http://localhost:7001/segment", webJsonStr);
+
+ TraceSegment motanSegment = new TraceSegment("MotanServiceApplication");
+
+ TraceSegmentRef segmentRef = new TraceSegmentRef();
+ segmentRef.setApplicationCode("WebApplication");
+ segmentRef.setPeerHost("10.20.3.15:3000");
+ segmentRef.setTraceSegmentId(webSegment.getTraceSegmentId());
+ motanSegment.ref(segmentRef);
+
+ Span span2 = new Span(0, "com.a.eye.skywalking.demo.services.GetUserService.findUser(String, String)", new Date().getTime());
+ Tags.SPAN_LAYER.asRPCFramework(span2);
+ Tags.SPAN_KIND.set(span2, Tags.SPAN_KIND_SERVER);
+ Tags.URL.set(span2, "motan://10.20.3.15:3000/com.a.eye.skywalking.demo.services.GetUserService.findUser(String, String)");
+ Tags.COMPONENT.set(span2, "Motan");
+ Tags.PEERS.set(span2, "10.218.9.86");
+ Thread.sleep(300);
+ motanSegment.archive(span2);
+ Thread.sleep(300);
+
+ Span span3 = new Span(1, span2, "com.a.eye.skywalking.demo.services.GetUserService.findUser(String, String)", new Date().getTime());
+ Tags.SPAN_LAYER.asDB(span3);
+ Tags.SPAN_KIND.set(span3, Tags.SPAN_KIND_CLIENT);
+ Tags.COMPONENT.set(span3, "Mysql");
+ Tags.PEERS.set(span3, "10.5.34.18");
+ Thread.sleep(300);
+ motanSegment.archive(span3);
+ Thread.sleep(300);
+
+ Thread.sleep(300);
+ motanSegment.finish();
+ Thread.sleep(300);
+
+ String motanJsonStr = gson.toJson(motanSegment);
+ HttpClientTools.INSTANCE.post("http://localhost:7001/segment", motanJsonStr);
+ }
+}
diff --git a/skywalking-commons/skywalking-trace/pom.xml b/skywalking-commons/skywalking-trace/pom.xml
index 553f1e934..cce9e9903 100644
--- a/skywalking-commons/skywalking-trace/pom.xml
+++ b/skywalking-commons/skywalking-trace/pom.xml
@@ -17,12 +17,6 @@
skywalking-util
${project.version}
-
-
- com.google.protobuf
- protobuf-java
- 3.1.0
-
diff --git a/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/LogData.java b/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/LogData.java
index d689947f9..b50468bdc 100644
--- a/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/LogData.java
+++ b/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/LogData.java
@@ -1,11 +1,8 @@
package com.a.eye.skywalking.trace;
-import com.a.eye.skywalking.api.util.StringUtil;
-import com.a.eye.skywalking.trace.proto.KeyValue;
-import com.a.eye.skywalking.trace.proto.LogDataMessage;
+import com.google.gson.annotations.Expose;
+import com.google.gson.annotations.SerializedName;
import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
import java.util.Map;
/**
@@ -14,7 +11,12 @@ import java.util.Map;
* Created by wusheng on 2017/2/17.
*/
public class LogData {
+ @Expose
+ @SerializedName(value="ti")
private long time;
+
+ @Expose
+ @SerializedName(value="fi")
private Map fields;
LogData(long time, Map fields) {
@@ -25,9 +27,7 @@ public class LogData {
this.fields = fields;
}
- LogData(LogDataMessage message){
- deserialize(message);
- }
+ public LogData(){}
public long getTime() {
return time;
@@ -37,35 +37,4 @@ public class LogData {
return Collections.unmodifiableMap(fields);
}
- public LogDataMessage serialize() {
- LogDataMessage.Builder logDataBuilder = LogDataMessage.newBuilder();
- logDataBuilder.setTime(time);
-
- if(fields != null){
- for (Map.Entry entry : fields.entrySet()) {
- KeyValue.Builder logEntryBuilder = KeyValue.newBuilder();
-
- logEntryBuilder.setKey(entry.getKey());
- String value = String.valueOf(entry.getValue());
- if(!StringUtil.isEmpty(value)) {
- logEntryBuilder.setValue(value);
- }
-
- logDataBuilder.addFields(logEntryBuilder);
- }
- }
- return logDataBuilder.build();
- }
-
- public void deserialize(LogDataMessage message) {
- time = message.getTime();
- List list = message.getFieldsList();
- if(list != null){
- HashMap initFields = new HashMap();
- for (KeyValue field : list) {
- initFields.put(field.getKey(), field.getValue());
- }
- this.fields = initFields;
- }
- }
}
diff --git a/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/Span.java b/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/Span.java
index e7a6f3b18..57573fd4e 100644
--- a/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/Span.java
+++ b/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/Span.java
@@ -1,12 +1,9 @@
package com.a.eye.skywalking.trace;
-import com.a.eye.skywalking.api.util.StringUtil;
-import com.a.eye.skywalking.trace.proto.KeyValue;
-import com.a.eye.skywalking.trace.proto.LogDataMessage;
-import com.a.eye.skywalking.trace.proto.SpanMessage;
+import com.google.gson.annotations.Expose;
+import com.google.gson.annotations.SerializedName;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
-import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedList;
@@ -23,18 +20,26 @@ import java.util.Map;
* Created by wusheng on 2017/2/17.
*/
public class Span{
+ @Expose
+ @SerializedName(value="si")
private int spanId;
+ @Expose
+ @SerializedName(value="ps")
private int parentSpanId;
/**
* The start time of this Span.
*/
+ @Expose
+ @SerializedName(value="st")
private long startTime;
/**
* The end time of this Span.
*/
+ @Expose
+ @SerializedName(value="et")
private long endTime;
/**
@@ -42,6 +47,8 @@ public class Span{
* If you want to know, how to set an operation name,
* {@see https://github.com/opentracing/specification/blob/master/specification.md#start-a-new-span}
*/
+ @Expose
+ @SerializedName(value="on")
private String operationName;
/**
@@ -49,6 +56,8 @@ public class Span{
*
* {@see https://github.com/opentracing/specification/blob/master/specification.md#set-a-span-tag}
*/
+ @Expose
+ @SerializedName(value="ta")
private final Map tags;
/**
@@ -56,6 +65,8 @@ public class Span{
*
* {@see https://github.com/opentracing/specification/blob/master/specification.md#log-structured-data}
*/
+ @Expose
+ @SerializedName(value="lo")
private final List logs;
/**
@@ -82,12 +93,11 @@ public class Span{
* @param startTime given start timestamp.
*/
private Span(int spanId, int parentSpanId, String operationName, long startTime) {
+ this();
this.spanId = spanId;
this.parentSpanId = parentSpanId;
this.startTime = startTime;
this.operationName = operationName;
- this.tags = new HashMap();
- this.logs = new ArrayList();
}
/**
@@ -138,15 +148,11 @@ public class Span{
}
/**
- * Create a new span, by given {@link SpanMessage}, which you can get from another {@link Span} object,
- * by calling {@link Span#serialize()};
- *
- * @param spanMessage from another {@link Span#serialize()}
+ * Create a new/empty span.
*/
- public Span(SpanMessage spanMessage) {
+ public Span() {
tags = new HashMap();
logs = new LinkedList();
- this.deserialize(spanMessage);
}
/**
@@ -265,51 +271,6 @@ public class Span{
return log(exceptionFields);
}
- public SpanMessage serialize() {
- SpanMessage.Builder builder = SpanMessage.newBuilder();
- builder.setSpanId(spanId);
- builder.setParentSpanId(parentSpanId);
- builder.setStartTime(startTime);
- builder.setEndTime(endTime);
- builder.setOperationName(operationName);
- for (Map.Entry entry : tags.entrySet()) {
- KeyValue.Builder tagEntryBuilder = KeyValue.newBuilder();
- tagEntryBuilder.setKey(entry.getKey());
- String value = String.valueOf(entry.getValue());
- if (!StringUtil.isEmpty(value)) {
- tagEntryBuilder.setValue(value);
- }
- builder.addTags(tagEntryBuilder);
- }
-
- for (LogData log : logs) {
- builder.addLogs(log.serialize());
- }
- return builder.build();
- }
-
- public void deserialize(SpanMessage message) {
- spanId = message.getSpanId();
- parentSpanId = message.getParentSpanId();
- startTime = message.getStartTime();
- endTime = message.getEndTime();
- operationName = message.getOperationName();
-
- List tagsList = message.getTagsList();
- if(tagsList != null){
- for (KeyValue tag : tagsList) {
- tags.put(tag.getKey(), tag.getValue());
- }
- }
-
- List logsList = message.getLogsList();
- if (logsList != null) {
- for (LogDataMessage logDataMessage : logsList) {
- logs.add(new LogData(logDataMessage));
- }
- }
- }
-
private enum ThrowableTransformer {
INSTANCE;
diff --git a/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/TraceId/DistributedTraceId.java b/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/TraceId/DistributedTraceId.java
index b64cffaea..e17462796 100644
--- a/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/TraceId/DistributedTraceId.java
+++ b/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/TraceId/DistributedTraceId.java
@@ -1,5 +1,11 @@
package com.a.eye.skywalking.trace.TraceId;
+import com.google.gson.TypeAdapter;
+import com.google.gson.annotations.JsonAdapter;
+import com.google.gson.stream.JsonReader;
+import com.google.gson.stream.JsonWriter;
+import java.io.IOException;
+
/**
* The DistributedTraceId presents a distributed call chain.
*
@@ -13,6 +19,7 @@ package com.a.eye.skywalking.trace.TraceId;
*
* @author wusheng
*/
+@JsonAdapter(DistributedTraceId.Serializer.class)
public abstract class DistributedTraceId {
private String id;
@@ -40,4 +47,22 @@ public abstract class DistributedTraceId {
public int hashCode() {
return id != null ? id.hashCode() : 0;
}
+
+ public static class Serializer extends TypeAdapter {
+
+ @Override
+ public void write(JsonWriter out, DistributedTraceId value) throws IOException {
+ out.beginArray();
+ out.value(value.get());
+ out.endArray();
+ }
+
+ @Override
+ public DistributedTraceId read(JsonReader in) throws IOException {
+ in.beginArray();
+ PropagatedTraceId traceId = new PropagatedTraceId(in.nextString());
+ in.endArray();
+ return traceId;
+ }
+ }
}
diff --git a/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/TraceSegment.java b/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/TraceSegment.java
index a657d84c5..424970cf6 100644
--- a/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/TraceSegment.java
+++ b/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/TraceSegment.java
@@ -2,11 +2,8 @@ package com.a.eye.skywalking.trace;
import com.a.eye.skywalking.trace.TraceId.DistributedTraceId;
import com.a.eye.skywalking.trace.TraceId.NewDistributedTraceId;
-import com.a.eye.skywalking.trace.TraceId.PropagatedTraceId;
-import com.a.eye.skywalking.trace.proto.SegmentMessage;
-import com.a.eye.skywalking.trace.proto.SegmentRefMessage;
-import com.a.eye.skywalking.trace.proto.SpanMessage;
-import com.google.protobuf.ProtocolStringList;
+import com.google.gson.annotations.Expose;
+import com.google.gson.annotations.SerializedName;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
@@ -27,16 +24,22 @@ public class TraceSegment {
* The id of this trace segment.
* Every segment has its unique-global-id.
*/
+ @Expose
+ @SerializedName(value="ts")
private String traceSegmentId;
/**
* The start time of this trace segment.
*/
+ @Expose
+ @SerializedName(value="st")
private long startTime;
/**
* The end time of this trace segment.
*/
+ @Expose
+ @SerializedName(value="et")
private long endTime;
/**
@@ -45,6 +48,8 @@ public class TraceSegment {
* but if this segment is a start span of batch process, the segment faces multi parents,
* at this moment, we use this {@link #refs} to link them.
*/
+ @Expose
+ @SerializedName(value="rs")
private List refs;
/**
@@ -52,6 +57,8 @@ public class TraceSegment {
* They all have finished.
* All active spans are hold and controlled by "skywalking-api" module.
*/
+ @Expose
+ @SerializedName(value="ss")
private List spans;
/**
@@ -60,6 +67,8 @@ public class TraceSegment {
*
* e.g. account_app, billing_app
*/
+ @Expose
+ @SerializedName(value="ac")
private String applicationCode;
/**
@@ -75,6 +84,8 @@ public class TraceSegment {
* relatedGlobalTraces targets this {@link TraceSegment}'s related call chain, a call chain contains
* multi {@link TraceSegment}s, only using {@link #refs} is not enough for analysis and ui.
*/
+ @Expose
+ @SerializedName(value="gt")
private LinkedList relatedGlobalTraces;
/**
@@ -82,21 +93,19 @@ public class TraceSegment {
* This segmentId is generated by TraceSegmentRef, AKA, from tracer/agent module.
*/
public TraceSegment(String applicationCode) {
+ this();
this.traceSegmentId = GlobalIdGenerator.generate(ID_TYPE);
this.applicationCode = applicationCode;
this.startTime = System.currentTimeMillis();
- this.spans = new LinkedList();
- this.relatedGlobalTraces = new LinkedList();
- this.relatedGlobalTraces.add(new NewDistributedTraceId());
}
/**
- * Create a trace segment, by given {@link SegmentMessage}
- *
- * @param message from another {@link TraceSegment#serialize()}
+ * Create a default/empty trace segment
*/
- public TraceSegment(SegmentMessage message) {
- deserialize(message);
+ public TraceSegment() {
+ this.spans = new LinkedList();
+ this.relatedGlobalTraces = new LinkedList();
+ this.relatedGlobalTraces.add(new NewDistributedTraceId());
}
/**
@@ -189,53 +198,4 @@ public class TraceSegment {
", relatedGlobalTraces=" + relatedGlobalTraces +
'}';
}
-
- public SegmentMessage serialize() {
- SegmentMessage.Builder segmentBuilder = SegmentMessage.newBuilder();
- segmentBuilder.setTraceSegmentId(traceSegmentId);
- segmentBuilder.setStartTime(startTime);
- segmentBuilder.setEndTime(endTime);
- segmentBuilder.setApplicationCode(applicationCode);
- if (refs != null && refs.size() > 0) {
- for (TraceSegmentRef ref : refs) {
- segmentBuilder.addRefs(ref.serialize());
- }
- }
- for (DistributedTraceId id : relatedGlobalTraces) {
- segmentBuilder.addRelatedTraceIds(id.get());
- }
- for (Span span : spans) {
- segmentBuilder.addSpans(span.serialize());
- }
- return segmentBuilder.build();
- }
-
- public void deserialize(SegmentMessage message) {
- traceSegmentId = message.getTraceSegmentId();
- startTime = message.getStartTime();
- endTime = message.getEndTime();
- applicationCode = message.getApplicationCode();
- List refsList = message.getRefsList();
- if (refsList != null && refsList.size() > 0) {
- this.refs = new LinkedList();
- for (SegmentRefMessage refMessage : refsList) {
- TraceSegmentRef ref = new TraceSegmentRef();
- ref.deserialize(refMessage);
- refs.add(ref);
- }
- }
- ProtocolStringList relatedTraceIdsList = message.getRelatedTraceIdsList();
- this.relatedGlobalTraces = new LinkedList();
- for (String id : relatedTraceIdsList) {
- relatedGlobalTraces.add(new PropagatedTraceId(id));
- }
-
- List spansList = message.getSpansList();
- if (spansList != null) {
- this.spans = new LinkedList();
- for (SpanMessage spanMessage : spansList) {
- spans.add(new Span(spanMessage));
- }
- }
- }
}
diff --git a/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/TraceSegmentRef.java b/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/TraceSegmentRef.java
index 6a926f6d5..e900a7182 100644
--- a/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/TraceSegmentRef.java
+++ b/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/TraceSegmentRef.java
@@ -1,7 +1,8 @@
package com.a.eye.skywalking.trace;
-import com.a.eye.skywalking.trace.proto.SegmentRefMessage;
import com.a.eye.skywalking.trace.tag.Tags;
+import com.google.gson.annotations.Expose;
+import com.google.gson.annotations.SerializedName;
/**
* {@link TraceSegmentRef} is like a pointer, which ref to another {@link TraceSegment},
@@ -13,21 +14,29 @@ public class TraceSegmentRef{
/**
* {@link TraceSegment#traceSegmentId}
*/
+ @Expose
+ @SerializedName(value="ts")
private String traceSegmentId;
/**
* {@link Span#spanId}
*/
+ @Expose
+ @SerializedName(value="si")
private int spanId = -1;
/**
* {@link TraceSegment#applicationCode}
*/
+ @Expose
+ @SerializedName(value="ac")
private String applicationCode;
/**
* {@link Tags#PEER_HOST}
*/
+ @Expose
+ @SerializedName(value="ph")
private String peerHost;
/**
@@ -77,23 +86,6 @@ public class TraceSegmentRef{
'}';
}
- public SegmentRefMessage serialize() {
- SegmentRefMessage.Builder builder = SegmentRefMessage.newBuilder();
- builder.setTraceSegmentId(traceSegmentId);
- builder.setSpanId(spanId);
- builder.setApplicationCode(applicationCode);
- if(peerHost != null) {
- builder.setPeerHost(peerHost);
- }
- return builder.build();
- }
-
- public void deserialize(SegmentRefMessage message) {
- traceSegmentId = message.getTraceSegmentId();
- spanId = message.getSpanId();
- applicationCode = message.getApplicationCode();
- peerHost = message.getPeerHost();
- }
@Override
public boolean equals(Object o) {
diff --git a/skywalking-commons/skywalking-trace/src/main/proto/trace.proto b/skywalking-commons/skywalking-trace/src/main/proto/trace.proto
deleted file mode 100644
index 0dad331cc..000000000
--- a/skywalking-commons/skywalking-trace/src/main/proto/trace.proto
+++ /dev/null
@@ -1,41 +0,0 @@
-syntax = "proto3";
-
-option java_multiple_files = true;
-option java_package = "com.a.eye.skywalking.trace.proto";
-
-message SegmentMessage {
- string traceSegmentId = 1;
- int64 startTime = 2;
- int64 endTime = 3;
- string applicationCode = 4;
- repeated SegmentRefMessage refs = 5;
- repeated string relatedTraceIds = 6;
- repeated SpanMessage spans = 7;
-}
-
-message SegmentRefMessage {
- string traceSegmentId = 1;
- int32 spanId = 2;
- string applicationCode = 3;
- string peerHost = 4;
-}
-
-message SpanMessage {
- int32 spanId = 1;
- int32 parentSpanId = 2;
- int64 startTime = 3;
- int64 endTime = 4;
- string operationName = 5;
- repeated KeyValue tags = 6;
- repeated LogDataMessage logs = 7;
-}
-
-message LogDataMessage {
- int64 time = 1;
- repeated KeyValue fields = 5;
-}
-
-message KeyValue {
- string key = 1;
- string value = 2;
-}
diff --git a/skywalking-commons/skywalking-trace/src/test/java/com/a/eye/skywalking/trace/TraceSegmentTestCase.java b/skywalking-commons/skywalking-trace/src/test/java/com/a/eye/skywalking/trace/TraceSegmentTestCase.java
index cd02abee4..d941649af 100644
--- a/skywalking-commons/skywalking-trace/src/test/java/com/a/eye/skywalking/trace/TraceSegmentTestCase.java
+++ b/skywalking-commons/skywalking-trace/src/test/java/com/a/eye/skywalking/trace/TraceSegmentTestCase.java
@@ -1,6 +1,8 @@
package com.a.eye.skywalking.trace;
import com.a.eye.skywalking.trace.tag.Tags;
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
import org.junit.Assert;
import org.junit.Test;
@@ -100,7 +102,15 @@ public class TraceSegmentTestCase {
span2.log(new NullPointerException());
segment.archive(span2);
- TraceSegment newSegment = new TraceSegment(segment.serialize());
+ Gson gson = new GsonBuilder()
+ .excludeFieldsWithoutExposeAnnotation()
+ .create();
+
+ String json = gson.toJson(segment);
+ System.out.println(json);
+
+
+ TraceSegment newSegment = gson.fromJson(json, TraceSegment.class);
Assert.assertEquals(segment.getSpans().size(), newSegment.getSpans().size());
Assert.assertEquals(segment.getRefs().get(0).getTraceSegmentId(), newSegment.getRefs().get(0).getTraceSegmentId());