[유치수] [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:
Chisu Yu
2012-11-27 01:25:19 +00:00
parent 1e50f29880
commit 82fd698af6
8 changed files with 157 additions and 153 deletions
@@ -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();
}
}
+95 -100
View File
@@ -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;
}
@@ -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)) {
@@ -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;
}