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>'].