diff --git a/src/main/java/com/profiler/context/AsyncTrace.java b/src/main/java/com/profiler/context/AsyncTrace.java index 4bd70cab3..643d5a54c 100644 --- a/src/main/java/com/profiler/context/AsyncTrace.java +++ b/src/main/java/com/profiler/context/AsyncTrace.java @@ -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); } diff --git a/src/main/java/com/profiler/context/DeadlineSpanMap.java b/src/main/java/com/profiler/context/DeadlineSpanMap.java index 54179965f..cb5cfabbc 100644 --- a/src/main/java/com/profiler/context/DeadlineSpanMap.java +++ b/src/main/java/com/profiler/context/DeadlineSpanMap.java @@ -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 map = new ConcurrentHashMap(256); + private final ConcurrentMap map = new ConcurrentHashMap(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(); + } } diff --git a/src/main/java/com/profiler/context/Span.java b/src/main/java/com/profiler/context/Span.java index 05972a13f..6ae78f4cc 100644 --- a/src/main/java/com/profiler/context/Span.java +++ b/src/main/java/com/profiler/context/Span.java @@ -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 annotations = new ArrayList(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 annotations = new ArrayList(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 annotationList = new ArrayList(annotations.size()); - for (HippoAnnotation a : annotations) { - annotationList.add(a.toThrift()); - } - span.setAnnotations(annotationList); + // 여기서 데이터 인코딩을 하자. + List annotationList = new ArrayList(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; + } } diff --git a/src/main/java/com/profiler/context/Trace.java b/src/main/java/com/profiler/context/Trace.java index ad10ae2cd..2b305e255 100644 --- a/src/main/java/com/profiler/context/Trace.java +++ b/src/main/java/com/profiler/context/Trace.java @@ -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); } diff --git a/src/main/java/com/profiler/context/TraceID.java b/src/main/java/com/profiler/context/TraceID.java index b876f971d..470fee7c1 100644 --- a/src/main/java/com/profiler/context/TraceID.java +++ b/src/main/java/com/profiler/context/TraceID.java @@ -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; } diff --git a/src/main/java/com/profiler/modifier/bloc/handler/interceptors/ExecuteMethodInterceptor.java b/src/main/java/com/profiler/modifier/bloc/handler/interceptors/ExecuteMethodInterceptor.java index 4fa05bda7..1f2f381c9 100644 --- a/src/main/java/com/profiler/modifier/bloc/handler/interceptors/ExecuteMethodInterceptor.java +++ b/src/main/java/com/profiler/modifier/bloc/handler/interceptors/ExecuteMethodInterceptor.java @@ -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)) { diff --git a/src/main/java/com/profiler/modifier/tomcat/interceptors/StandardHostValveInvokeInterceptor.java b/src/main/java/com/profiler/modifier/tomcat/interceptors/StandardHostValveInvokeInterceptor.java index 94308aea5..274770dad 100644 --- a/src/main/java/com/profiler/modifier/tomcat/interceptors/StandardHostValveInvokeInterceptor.java +++ b/src/main/java/com/profiler/modifier/tomcat/interceptors/StandardHostValveInvokeInterceptor.java @@ -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)) { diff --git a/src/main/java/com/profiler/util/NumberUtils.java b/src/main/java/com/profiler/util/NumberUtils.java index 01dc62d8d..4493adf09 100644 --- a/src/main/java/com/profiler/util/NumberUtils.java +++ b/src/main/java/com/profiler/util/NumberUtils.java @@ -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; }