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