You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@skywalking.apache.org by wu...@apache.org on 2018/01/08 09:39:25 UTC

[incubator-skywalking] branch collector/instrument updated: Debug new instrument.

This is an automated email from the ASF dual-hosted git repository.

wusheng pushed a commit to branch collector/instrument
in repository https://gitbox.apache.org/repos/asf/incubator-skywalking.git


The following commit(s) were added to refs/heads/collector/instrument by this push:
     new 21ed217  Debug new instrument.
21ed217 is described below

commit 21ed217c647130a96404433fd79376d65ed2d6d5
Author: wu-sheng <wu...@foxmail.com>
AuthorDate: Mon Jan 8 17:38:09 2018 +0800

    Debug new instrument.
---
 .../parser/provider/parser/SegmentParse.java       |  5 ++
 .../worker/model/base/LocalAsyncWorkerRef.java     |  6 ++-
 .../apm/collector/instrument/MetricTree.java       | 59 ++++++++++++++++------
 .../collector/instrument/ServiceMetricTracing.java |  4 +-
 4 files changed, 57 insertions(+), 17 deletions(-)

diff --git a/apm-collector/apm-collector-analysis/analysis-segment-parser/segment-parser-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/segment/parser/provider/parser/SegmentParse.java b/apm-collector/apm-collector-analysis/analysis-segment-parser/segment-parser-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/segment/parser/provider/parser/SegmentParse.java
index 1c8ab9f..4530400 100644
--- a/apm-collector/apm-collector-analysis/analysis-segment-parser/segment-parser-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/segment/parser/provider/parser/SegmentParse.java
+++ b/apm-collector/apm-collector-analysis/analysis-segment-parser/segment-parser-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/segment/parser/provider/parser/SegmentParse.java
@@ -36,6 +36,7 @@ import org.apache.skywalking.apm.collector.analysis.segment.parser.provider.pars
 import org.apache.skywalking.apm.collector.analysis.segment.parser.provider.parser.standardization.SegmentStandardization;
 import org.apache.skywalking.apm.collector.analysis.segment.parser.provider.parser.standardization.SpanIdExchanger;
 import org.apache.skywalking.apm.collector.core.UnexpectedException;
+import org.apache.skywalking.apm.collector.core.annotations.trace.GraphComputingMetric;
 import org.apache.skywalking.apm.collector.core.graph.Graph;
 import org.apache.skywalking.apm.collector.core.graph.GraphManager;
 import org.apache.skywalking.apm.collector.core.module.ModuleManager;
@@ -67,6 +68,7 @@ public class SegmentParse {
         this.spanListeners = new LinkedList<>();
     }
 
+    @GraphComputingMetric(name = "/segment/parse")
     public boolean parse(UpstreamSegment segment, ISegmentParseService.Source source) {
         createSpanListeners();
 
@@ -95,6 +97,7 @@ public class SegmentParse {
         return false;
     }
 
+    @GraphComputingMetric(name = "/segment/parse/preBuild")
     private boolean preBuild(List<UniqueId> traceIds, SegmentDecorator segmentDecorator) {
         StringBuilder segmentIdBuilder = new StringBuilder();
 
@@ -161,6 +164,7 @@ public class SegmentParse {
         return true;
     }
 
+    @GraphComputingMetric(name = "/segment/parse/buildSegment")
     private void buildSegment(String id, byte[] dataBinary) {
         Segment segment = new Segment(id);
         segment.setDataBinary(dataBinary);
@@ -169,6 +173,7 @@ public class SegmentParse {
         graph.start(segment);
     }
 
+    @GraphComputingMetric(name = "/segment/parse/bufferFile/write")
     private void writeToBufferFile(String id, UpstreamSegment upstreamSegment) {
         logger.debug("push to segment buffer write worker, id: {}", id);
         SegmentStandardization standardization = new SegmentStandardization(id);
diff --git a/apm-collector/apm-collector-analysis/analysis-worker-model/src/main/java/org/apache/skywalking/apm/collector/analysis/worker/model/base/LocalAsyncWorkerRef.java b/apm-collector/apm-collector-analysis/analysis-worker-model/src/main/java/org/apache/skywalking/apm/collector/analysis/worker/model/base/LocalAsyncWorkerRef.java
index 58d831a..3c9dd7b 100644
--- a/apm-collector/apm-collector-analysis/analysis-worker-model/src/main/java/org/apache/skywalking/apm/collector/analysis/worker/model/base/LocalAsyncWorkerRef.java
+++ b/apm-collector/apm-collector-analysis/analysis-worker-model/src/main/java/org/apache/skywalking/apm/collector/analysis/worker/model/base/LocalAsyncWorkerRef.java
@@ -20,6 +20,8 @@ package org.apache.skywalking.apm.collector.analysis.worker.model.base;
 
 import java.util.Iterator;
 import java.util.List;
+import org.apache.skywalking.apm.collector.core.annotations.trace.BatchParameter;
+import org.apache.skywalking.apm.collector.core.annotations.trace.GraphComputingMetric;
 import org.apache.skywalking.apm.collector.core.data.EndOfBatchQueueMessage;
 import org.apache.skywalking.apm.collector.core.graph.NodeProcessor;
 import org.apache.skywalking.apm.commons.datacarrier.DataCarrier;
@@ -44,7 +46,9 @@ public class LocalAsyncWorkerRef<INPUT extends EndOfBatchQueueMessage, OUTPUT ex
         this.dataCarrier = dataCarrier;
     }
 
-    @Override public void consume(List<INPUT> data) {
+    @GraphComputingMetric(name = "/worker/async/consume")
+    @Override
+    public void consume(@BatchParameter List<INPUT> data) {
         Iterator<INPUT> inputIterator = data.iterator();
 
         int i = 0;
diff --git a/apm-collector/apm-collector-instrument/src/main/java/org/apache/skywalking/apm/collector/instrument/MetricTree.java b/apm-collector/apm-collector-instrument/src/main/java/org/apache/skywalking/apm/collector/instrument/MetricTree.java
index c8b17f5..86edf9d 100644
--- a/apm-collector/apm-collector-instrument/src/main/java/org/apache/skywalking/apm/collector/instrument/MetricTree.java
+++ b/apm-collector/apm-collector-instrument/src/main/java/org/apache/skywalking/apm/collector/instrument/MetricTree.java
@@ -27,16 +27,19 @@ import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.ScheduledFuture;
 import java.util.concurrent.TimeUnit;
 import org.apache.skywalking.apm.collector.core.annotations.trace.BatchParameter;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * @author wusheng
  */
 public enum MetricTree implements Runnable {
     INSTANCE;
+    private final Logger logger = LoggerFactory.getLogger(MetricTree.class);
 
     private MetricNode root = new MetricNode("/", "/");
     private ScheduledFuture<?> scheduledFuture;
-    private String lineSeparater = System.getProperty("line.separator");
+    private String lineSeparator = System.getProperty("line.separator");
 
     MetricTree() {
         ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
@@ -63,6 +66,10 @@ public enum MetricTree implements Runnable {
         }
 
         StringBuilder logBuffer = new StringBuilder();
+        logBuffer.append(lineSeparator);
+        logBuffer.append("##################################################################################################################").append(lineSeparator);
+        logBuffer.append("#                                             Collector Service Report                                           #").append(lineSeparator);
+        logBuffer.append("##################################################################################################################").append(lineSeparator);
         root.toOutput(new ReportWriter() {
             private int stackDepth = 0;
 
@@ -70,7 +77,7 @@ public enum MetricTree implements Runnable {
                 for (int i = 0; i < stackDepth; i++) {
                     logBuffer.append("\t");
                 }
-                logBuffer.append(name).append("").append(lineSeparater);
+                logBuffer.append(name).append("").append(lineSeparator);
             }
 
             @Override public void writeMetric(String metrics) {
@@ -78,7 +85,7 @@ public enum MetricTree implements Runnable {
                     logBuffer.append("\t");
                 }
                 logBuffer.append("\t");
-                logBuffer.append(metrics).append("").append(lineSeparater);
+                logBuffer.append(metrics).append("").append(lineSeparator);
             }
 
             @Override public void prepare4Child() {
@@ -89,6 +96,8 @@ public enum MetricTree implements Runnable {
                 stackDepth--;
             }
         });
+
+        logger.warn(logBuffer.toString());
     }
 
     class MetricNode {
@@ -103,7 +112,7 @@ public enum MetricTree implements Runnable {
 
         }
 
-        ServiceMetric getMetric(Method targetMethod) {
+        ServiceMetric getMetric(Method targetMethod, Object[] allArguments) {
             if (metric == null) {
                 synchronized (nodeName) {
                     if (metric == null) {
@@ -111,14 +120,25 @@ public enum MetricTree implements Runnable {
                         if (targetMethod != null) {
                             Annotation[][] annotations = targetMethod.getParameterAnnotations();
                             if (annotations != null) {
+                                int index = 0;
                                 for (Annotation[] parameterAnnotation : annotations) {
                                     if (parameterAnnotation != null) {
                                         for (Annotation annotation : parameterAnnotation) {
                                             if (annotation.equals(BatchParameter.class)) {
                                                 isBatchDetected = true;
+                                                break;
                                             }
                                         }
                                     }
+                                    index++;
+                                }
+                                if (isBatchDetected) {
+                                    Object listArgs = allArguments[index];
+
+                                    if (listArgs instanceof List) {
+                                        List args = (List)listArgs;
+                                        metricName += "/" + args.get(0).getClass().getSimpleName();
+                                    }
                                 }
                             }
                         }
@@ -147,19 +167,28 @@ public enum MetricTree implements Runnable {
         }
 
         void toOutput(ReportWriter writer) {
-            writer.writeMetric(nodeName);
-            if (metric != null) {
-                writer.prepare4Child();
-                metric.toOutput(writer);
-                writer.finished();
-            }
-            if (childs.size() > 0) {
-                for (MetricNode child : childs) {
-                    writer.prepare4Child();
-                    child.toOutput(writer);
-                    writer.finished();
+            if (!nodeName.equals("/")) {
+                writer.writeMetricName(nodeName);
+                if (metric != null) {
+                    metric.toOutput(writer);
+                }
+                if (childs.size() > 0) {
+                    for (MetricNode child : childs) {
+                        writer.prepare4Child();
+                        child.toOutput(writer);
+                        writer.finished();
+                    }
+                }
+            } else {
+                writer.writeMetricName("/");
+                if (childs.size() > 0) {
+                    for (MetricNode child : childs) {
+                        child.toOutput(writer);
+                    }
                 }
             }
+
+
         }
     }
 }
diff --git a/apm-collector/apm-collector-instrument/src/main/java/org/apache/skywalking/apm/collector/instrument/ServiceMetricTracing.java b/apm-collector/apm-collector-instrument/src/main/java/org/apache/skywalking/apm/collector/instrument/ServiceMetricTracing.java
index b10e888..9b2e59c 100644
--- a/apm-collector/apm-collector-instrument/src/main/java/org/apache/skywalking/apm/collector/instrument/ServiceMetricTracing.java
+++ b/apm-collector/apm-collector-instrument/src/main/java/org/apache/skywalking/apm/collector/instrument/ServiceMetricTracing.java
@@ -21,6 +21,7 @@ package org.apache.skywalking.apm.collector.instrument;
 import java.lang.reflect.Method;
 import java.util.concurrent.Callable;
 import java.util.concurrent.ConcurrentHashMap;
+import net.bytebuddy.implementation.bind.annotation.AllArguments;
 import net.bytebuddy.implementation.bind.annotation.Origin;
 import net.bytebuddy.implementation.bind.annotation.RuntimeType;
 import net.bytebuddy.implementation.bind.annotation.SuperCall;
@@ -38,6 +39,7 @@ public class ServiceMetricTracing {
     @RuntimeType
     public Object intercept(
         @SuperCall Callable<?> zuper,
+        @AllArguments Object[] allArguments,
         @Origin Method method
     ) throws Throwable {
         ServiceMetric metric = this.metrics.get(method);
@@ -45,7 +47,7 @@ public class ServiceMetricTracing {
             GraphComputingMetric annotation = method.getAnnotation(GraphComputingMetric.class);
             String metricName = annotation.name();
             MetricTree.MetricNode metricNode = MetricTree.INSTANCE.lookup(metricName);
-            ServiceMetric serviceMetric = metricNode.getMetric(method);
+            ServiceMetric serviceMetric = metricNode.getMetric(method, allArguments);
             metrics.put(method, serviceMetric);
             metric = serviceMetric;
         }

-- 
To stop receiving notification emails like this one, please contact
['"commits@skywalking.apache.org" <co...@skywalking.apache.org>'].