mirror of
https://github.com/wahyd4/pinpoint.git
synced 2026-08-16 16:28:48 +10:00
[유치수] [NOBTS] add servicetype, change thrift
git-svn-id: http://svn.bds.nhncorp.com/pe/hippo-tomcat-profiler/trunk@917 84d0f5b1-2673-498c-a247-62c4ff18d310
This commit is contained in:
@@ -105,7 +105,7 @@ public class AsyncTrace {
|
||||
public void recordRpcName(final String service, final String rpc) {
|
||||
try {
|
||||
this.span.setServiceName(service);
|
||||
this.span.setName(rpc);
|
||||
this.span.setRpc(rpc);
|
||||
} catch (Exception e) {
|
||||
logger.log(Level.SEVERE, e.getMessage(), e);
|
||||
}
|
||||
|
||||
@@ -5,54 +5,55 @@ import java.util.TimerTask;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.ConcurrentMap;
|
||||
|
||||
@Deprecated
|
||||
public class DeadlineSpanMap {
|
||||
|
||||
private static final long FLUSH_TIMEOUT = 120000L; // 2 minutes
|
||||
private static final long FLUSH_TIMEOUT = 120000L; // 2 minutes
|
||||
|
||||
private final ConcurrentMap<TraceID.TraceKey, Span> map = new ConcurrentHashMap<TraceID.TraceKey, Span>(256);
|
||||
private final ConcurrentMap<TraceID.TraceKey, Span> map = new ConcurrentHashMap<TraceID.TraceKey, Span>(256);
|
||||
|
||||
private final Timer timer = new Timer(true);
|
||||
private final Timer timer = new Timer(true);
|
||||
|
||||
public Span update(TraceID traceId, SpanUpdater spanUpdater) {
|
||||
TraceID.TraceKey traceIdKey = traceId.getTraceKey();
|
||||
Span span = map.get(traceIdKey);
|
||||
public Span update(TraceID traceId, SpanUpdater spanUpdater) {
|
||||
TraceID.TraceKey traceIdKey = traceId.getTraceKey();
|
||||
Span span = map.get(traceIdKey);
|
||||
|
||||
if (span == null) {
|
||||
span = new Span(traceId);
|
||||
map.put(traceIdKey, span);
|
||||
if (span == null) {
|
||||
span = new Span(traceId);
|
||||
map.put(traceIdKey, span);
|
||||
|
||||
TimerTask task = new FlushTimedoutSpanTask(span);
|
||||
// span.setTimerTask(task);
|
||||
TimerTask task = new FlushTimedoutSpanTask(span);
|
||||
// span.setTimerTask(task);
|
||||
|
||||
timer.schedule(task, FLUSH_TIMEOUT);
|
||||
}
|
||||
timer.schedule(task, FLUSH_TIMEOUT);
|
||||
}
|
||||
|
||||
return spanUpdater.updateSpan(span);
|
||||
}
|
||||
return spanUpdater.updateSpan(span);
|
||||
}
|
||||
|
||||
public Span remove(TraceID traceId) {
|
||||
return map.remove(traceId.getTraceKey());
|
||||
}
|
||||
public Span remove(TraceID traceId) {
|
||||
return map.remove(traceId.getTraceKey());
|
||||
}
|
||||
|
||||
public int size() {
|
||||
return map.size();
|
||||
}
|
||||
public int size() {
|
||||
return map.size();
|
||||
}
|
||||
|
||||
private static final class FlushTimedoutSpanTask extends TimerTask {
|
||||
private final Span span;
|
||||
private static final class FlushTimedoutSpanTask extends TimerTask {
|
||||
private final Span span;
|
||||
|
||||
public FlushTimedoutSpanTask(Span span) {
|
||||
this.span = span;
|
||||
}
|
||||
public FlushTimedoutSpanTask(Span span) {
|
||||
this.span = span;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
// Trace.logSpan(this.span);
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public void run() {
|
||||
// Trace.logSpan(this.span);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return map.toString();
|
||||
}
|
||||
@Override
|
||||
public String toString() {
|
||||
return map.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,136 +7,131 @@ import com.profiler.Agent;
|
||||
|
||||
/**
|
||||
* Span represent RPC
|
||||
*
|
||||
*
|
||||
* @author netspider
|
||||
*/
|
||||
public class Span implements Thriftable {
|
||||
|
||||
private final TraceID traceID;
|
||||
private final TraceID traceID;
|
||||
private long startTime;
|
||||
private long endTime;
|
||||
private String serviceName;
|
||||
private String rpc;
|
||||
private String endPoint;
|
||||
private boolean isTerminal = false;
|
||||
|
||||
private long startTime;
|
||||
private final List<HippoAnnotation> annotations = new ArrayList<HippoAnnotation>(5);
|
||||
|
||||
private long endTime;
|
||||
public Span(TraceID traceId) {
|
||||
this.traceID = traceId;
|
||||
}
|
||||
|
||||
private String serviceName;
|
||||
private String name;
|
||||
private String endPoint;
|
||||
private boolean isTerminal = false;
|
||||
public TraceID getTraceID() {
|
||||
return traceID;
|
||||
}
|
||||
|
||||
private final List<HippoAnnotation> annotations = new ArrayList<HippoAnnotation>(5);
|
||||
public boolean addAnnotation(HippoAnnotation annotation) {
|
||||
return annotations.add(annotation);
|
||||
}
|
||||
|
||||
public Span(TraceID traceId) {
|
||||
this.traceID = traceId;
|
||||
}
|
||||
public int getAnnotationSize() {
|
||||
return annotations.size();
|
||||
}
|
||||
|
||||
public TraceID getTraceID() {
|
||||
return traceID;
|
||||
}
|
||||
public String getEndPoint() {
|
||||
return this.endPoint;
|
||||
}
|
||||
|
||||
public String getServiceName() {
|
||||
return serviceName;
|
||||
}
|
||||
|
||||
public boolean addAnnotation(HippoAnnotation annotation) {
|
||||
return annotations.add(annotation);
|
||||
}
|
||||
public void setServiceName(String serviceName) {
|
||||
this.serviceName = serviceName;
|
||||
}
|
||||
|
||||
public int getAnnotationSize() {
|
||||
return annotations.size();
|
||||
}
|
||||
public String getRpc() {
|
||||
return rpc;
|
||||
}
|
||||
|
||||
public void setRpc(String rpc) {
|
||||
this.rpc = rpc;
|
||||
}
|
||||
|
||||
public String getEndPoint() {
|
||||
return this.endPoint;
|
||||
}
|
||||
public void setEndPoint(String endPoint) {
|
||||
this.endPoint = endPoint;
|
||||
}
|
||||
|
||||
public String getServiceName() {
|
||||
return serviceName;
|
||||
}
|
||||
public boolean isTerminal() {
|
||||
return isTerminal;
|
||||
}
|
||||
|
||||
public void setServiceName(String serviceName) {
|
||||
this.serviceName = serviceName;
|
||||
}
|
||||
public void setTerminal(boolean isTerminal) {
|
||||
this.isTerminal = isTerminal;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
public void setStartTime(long startTime) {
|
||||
this.startTime = startTime;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
public long getStartTime() {
|
||||
return startTime;
|
||||
}
|
||||
|
||||
public void setEndPoint(String endPoint) {
|
||||
this.endPoint = endPoint;
|
||||
}
|
||||
public void setEndTime(long endTime) {
|
||||
this.endTime = endTime;
|
||||
}
|
||||
|
||||
public boolean isTerminal() {
|
||||
return isTerminal;
|
||||
}
|
||||
public long getEndTime() {
|
||||
return endTime;
|
||||
}
|
||||
|
||||
public void setTerminal(boolean isTerminal) {
|
||||
this.isTerminal = isTerminal;
|
||||
}
|
||||
public String toString() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
public void setStartTime(long startTime) {
|
||||
this.startTime = startTime;
|
||||
}
|
||||
sb.append("{");
|
||||
sb.append("\n\t TraceID = ").append(traceID);
|
||||
sb.append(",\n\t StartTime = ").append(startTime);
|
||||
sb.append(", EndTime = ").append(endTime);
|
||||
sb.append(",\n\t Name = ").append(rpc);
|
||||
sb.append(", ServiceName = ").append(serviceName);
|
||||
sb.append(", EndPoint = ").append(endPoint);
|
||||
|
||||
public long getStartTime() {
|
||||
return startTime;
|
||||
}
|
||||
sb.append(",\n\t Annotations = {");
|
||||
for (HippoAnnotation a : annotations) {
|
||||
sb.append("\n\t\t").append(a);
|
||||
}
|
||||
sb.append("\n\t}");
|
||||
|
||||
public void setEndTime(long endTime) {
|
||||
this.endTime = endTime;
|
||||
}
|
||||
sb.append("}");
|
||||
|
||||
public long getEndTime() {
|
||||
return endTime;
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
public com.profiler.common.dto.thrift.Span toThrift() {
|
||||
com.profiler.common.dto.thrift.Span span = new com.profiler.common.dto.thrift.Span();
|
||||
|
||||
sb.append("{");
|
||||
sb.append("\n\t TraceID = ").append(traceID);
|
||||
sb.append(",\n\t StartTime = ").append(startTime);
|
||||
sb.append(", EndTime = ").append(endTime);
|
||||
sb.append(",\n\t Name = ").append(name);
|
||||
sb.append(", ServiceName = ").append(serviceName);
|
||||
sb.append(", EndPoint = ").append(endPoint);
|
||||
|
||||
sb.append(",\n\t Annotations = {");
|
||||
for (HippoAnnotation a : annotations) {
|
||||
sb.append("\n\t\t").append(a);
|
||||
}
|
||||
sb.append("\n\t}");
|
||||
|
||||
sb.append("}");
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public com.profiler.common.dto.thrift.Span toThrift() {
|
||||
com.profiler.common.dto.thrift.Span span = new com.profiler.common.dto.thrift.Span();
|
||||
|
||||
span.setAgentId(Agent.getInstance().getAgentId());
|
||||
span.setStartTime(startTime);
|
||||
span.setAgentId(Agent.getInstance().getAgentId());
|
||||
span.setStartTime(startTime);
|
||||
span.setElapsed((int) (endTime - startTime));
|
||||
span.setMostTraceId(traceID.getId().getMostSignificantBits());
|
||||
span.setLeastTraceId(traceID.getId().getLeastSignificantBits());
|
||||
span.setName(name);
|
||||
span.setServiceName(serviceName);
|
||||
span.setSpanId(traceID.getSpanId());
|
||||
span.setParentSpanId(traceID.getParentSpanId());
|
||||
span.setEndPoint(endPoint);
|
||||
span.setTerminal(isTerminal);
|
||||
span.setMostTraceId(traceID.getId().getMostSignificantBits());
|
||||
span.setLeastTraceId(traceID.getId().getLeastSignificantBits());
|
||||
span.setRpc(rpc);
|
||||
span.setServiceName(serviceName);
|
||||
span.setSpanId(traceID.getSpanId());
|
||||
span.setParentSpanId(traceID.getParentSpanId());
|
||||
span.setEndPoint(endPoint);
|
||||
span.setTerminal(isTerminal);
|
||||
|
||||
// 여기서 데이터 인코딩을 하자.
|
||||
List<com.profiler.common.dto.thrift.Annotation> annotationList = new ArrayList<com.profiler.common.dto.thrift.Annotation>(annotations.size());
|
||||
for (HippoAnnotation a : annotations) {
|
||||
annotationList.add(a.toThrift());
|
||||
}
|
||||
span.setAnnotations(annotationList);
|
||||
// 여기서 데이터 인코딩을 하자.
|
||||
List<com.profiler.common.dto.thrift.Annotation> annotationList = new ArrayList<com.profiler.common.dto.thrift.Annotation>(annotations.size());
|
||||
for (HippoAnnotation a : annotations) {
|
||||
annotationList.add(a.toThrift());
|
||||
}
|
||||
span.setAnnotations(annotationList);
|
||||
|
||||
span.setFlag(traceID.getFlags());
|
||||
span.setFlag(traceID.getFlags());
|
||||
|
||||
return span;
|
||||
}
|
||||
return span;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,14 +1,12 @@
|
||||
package com.profiler.context;
|
||||
|
||||
import com.profiler.common.util.AnnotationTranscoder;
|
||||
import com.profiler.common.util.AnnotationTranscoder.Encoded;
|
||||
import com.profiler.interceptor.MethodDescriptor;
|
||||
import com.profiler.sender.DataSender;
|
||||
import com.profiler.sender.LoggingDataSender;
|
||||
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import com.profiler.interceptor.MethodDescriptor;
|
||||
import com.profiler.sender.DataSender;
|
||||
import com.profiler.sender.LoggingDataSender;
|
||||
|
||||
/**
|
||||
* @author netspider
|
||||
*/
|
||||
@@ -22,7 +20,6 @@ public final class Trace {
|
||||
public static final int NOCHECK_STACKID = -1;
|
||||
public static final int ROOT_STACKID = 0;
|
||||
|
||||
// private static final DeadlineSpanMap spanMap = new DeadlineSpanMap();
|
||||
private boolean tracingEnabled = true;
|
||||
|
||||
private TraceID root;
|
||||
@@ -278,7 +275,7 @@ public final class Trace {
|
||||
try {
|
||||
Span span = getCurrentStackFrame().getSpan();
|
||||
span.setServiceName(service);
|
||||
span.setName(rpc);
|
||||
span.setRpc(rpc);
|
||||
} catch (Exception e) {
|
||||
logger.log(Level.SEVERE, e.getMessage(), e);
|
||||
}
|
||||
|
||||
@@ -7,18 +7,18 @@ public class TraceID {
|
||||
private long parentSpanId;
|
||||
private long spanId;
|
||||
private boolean sampled;
|
||||
private int flags;
|
||||
private short flags;
|
||||
|
||||
public static TraceID newTraceId() {
|
||||
UUID uuid = UUID.randomUUID();
|
||||
return new TraceID(uuid, SpanID.NULL, SpanID.newSpanID(), false, 0);
|
||||
return new TraceID(uuid, SpanID.NULL, SpanID.newSpanID(), false, (short) 0);
|
||||
}
|
||||
|
||||
public TraceID getNextTraceId() {
|
||||
return new TraceID(id, spanId, SpanID.nextSpanID(spanId), sampled, flags);
|
||||
}
|
||||
|
||||
public TraceID(UUID id, long parentSpanId, long spanId, boolean sampled, int flags) {
|
||||
public TraceID(UUID id, long parentSpanId, long spanId, boolean sampled, short flags) {
|
||||
this.id = id;
|
||||
this.parentSpanId = parentSpanId;
|
||||
this.spanId = spanId;
|
||||
@@ -82,7 +82,7 @@ public class TraceID {
|
||||
return sampled;
|
||||
}
|
||||
|
||||
public int getFlags() {
|
||||
public short getFlags() {
|
||||
return flags;
|
||||
}
|
||||
|
||||
@@ -102,7 +102,7 @@ public class TraceID {
|
||||
this.sampled = sampled;
|
||||
}
|
||||
|
||||
public void setFlags(int flags) {
|
||||
public void setFlags(short flags) {
|
||||
this.flags = flags;
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -115,7 +115,7 @@ public class ExecuteMethodInterceptor implements StaticAroundInterceptor, ByteCo
|
||||
long parentSpanID = NumberUtils.parseLong(request.getHeader(Header.HTTP_PARENT_SPAN_ID.toString()), SpanID.NULL);
|
||||
long spanID = NumberUtils.parseLong(request.getHeader(Header.HTTP_SPAN_ID.toString()), SpanID.NULL);
|
||||
boolean sampled = Boolean.parseBoolean(request.getHeader(Header.HTTP_SAMPLED.toString()));
|
||||
int flags = NumberUtils.parseInteger(request.getHeader(Header.HTTP_FLAGS.toString()), 0);
|
||||
short flags = NumberUtils.parseShort(request.getHeader(Header.HTTP_FLAGS.toString()), (short) 0);
|
||||
|
||||
TraceID id = new TraceID(uuid, parentSpanID, spanID, sampled, flags);
|
||||
if (logger.isLoggable(Level.INFO)) {
|
||||
|
||||
+1
-1
@@ -112,7 +112,7 @@ public class StandardHostValveInvokeInterceptor implements StaticAroundIntercept
|
||||
long parentSpanID = NumberUtils.parseLong(request.getHeader(Header.HTTP_PARENT_SPAN_ID.toString()), SpanID.NULL);
|
||||
long spanID = NumberUtils.parseLong(request.getHeader(Header.HTTP_SPAN_ID.toString()), SpanID.NULL);
|
||||
boolean sampled = Boolean.parseBoolean(request.getHeader(Header.HTTP_SAMPLED.toString()));
|
||||
int flags = NumberUtils.parseInteger(request.getHeader(Header.HTTP_FLAGS.toString()), 0);
|
||||
short flags = NumberUtils.parseShort(request.getHeader(Header.HTTP_FLAGS.toString()), (short) 0);
|
||||
|
||||
TraceID id = new TraceID(uuid, parentSpanID, spanID, sampled, flags);
|
||||
if (logger.isLoggable(Level.INFO)) {
|
||||
|
||||
@@ -21,9 +21,20 @@ public class NumberUtils {
|
||||
} catch (NumberFormatException e) {
|
||||
return defaultInt;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static Integer toInteger(Object integer) {
|
||||
public static short parseShort(String str, short defaultInt) {
|
||||
if (str == null) {
|
||||
return defaultInt;
|
||||
}
|
||||
try {
|
||||
return Short.parseShort(str);
|
||||
} catch (NumberFormatException e) {
|
||||
return defaultInt;
|
||||
}
|
||||
}
|
||||
|
||||
public static Integer toInteger(Object integer) {
|
||||
if(integer == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user