From ed81b800640450421fd04864fc0e19f639df7df9 Mon Sep 17 00:00:00 2001 From: Woonduk Kang Date: Mon, 14 Oct 2013 08:37:37 +0000 Subject: [PATCH] =?UTF-8?q?[=EA=B0=95=EC=9A=B4=EB=8D=95]=20[LUCYSUS-1744]?= =?UTF-8?q?=20sql=20trace=EC=A0=95=EB=B3=B4=EB=A5=BC=20=EC=84=9C=EB=B2=84?= =?UTF-8?q?=EB=A1=9C=20=EB=8D=98=EC=A7=88=EB=95=8C=20=EA=B0=9C=EB=B3=84=20?= =?UTF-8?q?=ED=8C=8C=EB=9D=BC=EB=AF=B8=ED=84=B0=EB=A1=9C=20=EB=8D=98?= =?UTF-8?q?=EC=A7=80=EB=8A=94=EA=B2=8C=20=EC=95=84=EB=8B=88=EA=B3=A0,=20?= =?UTF-8?q?=ED=95=9C=EB=B2=88=EC=97=90=20=EB=AD=89=EC=B3=90=EC=84=9C=20?= =?UTF-8?q?=EB=8D=98=EC=A7=80=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= =?UTF-8?q?=ED=95=A8.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://svn.bds.nhncorp.com/pe/hippo-tomcat-profiler/trunk@2516 84d0f5b1-2673-498c-a247-62c4ff18d310 --- .../pinpoint/profiler/context/Annotation.java | 6 +++ .../profiler/context/DefaultTrace.java | 37 +++++++++++-------- .../profiler/context/DisableTrace.java | 4 ++ .../nhn/pinpoint/profiler/context/Span.java | 4 ++ ...paredStatementExecuteQueryInterceptor.java | 15 +++----- .../profiler/util/AnnotationValueMapper.java | 3 ++ 6 files changed, 44 insertions(+), 25 deletions(-) diff --git a/src/main/java/com/nhn/pinpoint/profiler/context/Annotation.java b/src/main/java/com/nhn/pinpoint/profiler/context/Annotation.java index dd39e21ff..479f94843 100644 --- a/src/main/java/com/nhn/pinpoint/profiler/context/Annotation.java +++ b/src/main/java/com/nhn/pinpoint/profiler/context/Annotation.java @@ -3,6 +3,7 @@ package com.nhn.pinpoint.profiler.context; import com.nhn.pinpoint.profiler.util.AnnotationValueMapper; import com.nhn.pinpoint.thrift.dto.TAnnotation; import com.nhn.pinpoint.thrift.dto.TAnnotationValue; +import com.nhn.pinpoint.thrift.dto.TIntStringStringValue; import com.nhn.pinpoint.thrift.dto.TIntStringValue; /** @@ -24,6 +25,11 @@ public class Annotation extends TAnnotation { this.setValue(TAnnotationValue.intStringValue(value)); } + public Annotation(int key, TIntStringStringValue value) { + super(key); + this.setValue(TAnnotationValue.intStringStringValue(value)); + } + public Annotation(int key, String value) { super(key); this.setValue(TAnnotationValue.stringValue(value)); diff --git a/src/main/java/com/nhn/pinpoint/profiler/context/DefaultTrace.java b/src/main/java/com/nhn/pinpoint/profiler/context/DefaultTrace.java index 4c61b760a..a7ddf8aee 100644 --- a/src/main/java/com/nhn/pinpoint/profiler/context/DefaultTrace.java +++ b/src/main/java/com/nhn/pinpoint/profiler/context/DefaultTrace.java @@ -5,6 +5,7 @@ import com.nhn.pinpoint.common.ServiceType; import com.nhn.pinpoint.common.util.ParsingResult; import com.nhn.pinpoint.profiler.interceptor.MethodDescriptor; import com.nhn.pinpoint.profiler.util.StringUtils; +import com.nhn.pinpoint.thrift.dto.TIntStringStringValue; import com.nhn.pinpoint.thrift.dto.TIntStringValue; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -231,7 +232,7 @@ public final class DefaultTrace implements Trace { recordAttribute(AnnotationKey.EXCEPTION_CLASS, th.getClass().getName()); final Span span = getCallStack().getSpan(); - if (span.getErrCode() == 0) { + if (!span.isSetErrCode()) { span.setErrCode(1); } } @@ -308,27 +309,33 @@ public final class DefaultTrace implements Trace { @Override public void recordSqlParsingResult(ParsingResult parsingResult) { + recordSqlParsingResult(parsingResult, null); + } + + @Override + public void recordSqlParsingResult(ParsingResult parsingResult, String bindValue) { if (parsingResult == null) { return; } - String sql = parsingResult.getSql(); - recordAttribute(AnnotationKey.SQL_ID, sql.hashCode()); - String output = parsingResult.getOutput(); - if (output != null && output.length() != 0) { - recordAttribute(AnnotationKey.SQL_PARAM, output); + final String sql = parsingResult.getSql(); + final TIntStringStringValue tSqlValue = new TIntStringStringValue(sql.hashCode()); + final String output = parsingResult.getOutput(); + if (isNotEmpty(output)) { + tSqlValue.setStringValue1(output); } -// final String sql = parsingResult.getSql(); -// final TIntStringValue tSqlValue = new TIntStringValue(sql.hashCode()); -// final String output = parsingResult.getOutput(); -// if (output != null && output.length() != 0) { -// tSqlValue.setBindValue(output); -// } -// recordSqlParam(tSqlValue); + if (isNotEmpty(bindValue)) { + tSqlValue.setStringValue2(bindValue); + } + recordSqlParam(tSqlValue); } - private void recordSqlParam(TIntStringValue tIntStringValue) { + private static boolean isNotEmpty(final String bindValue) { + return bindValue != null && bindValue.length() != 0; + } + + private void recordSqlParam(TIntStringStringValue tIntStringStringValue) { final StackFrame currentStackFrame = this.currentStackFrame; - currentStackFrame.addAnnotation(new Annotation(AnnotationKey.SQL_ID.getCode(), tIntStringValue)); + currentStackFrame.addAnnotation(new Annotation(AnnotationKey.SQL_ID.getCode(), tIntStringStringValue)); } @Override diff --git a/src/main/java/com/nhn/pinpoint/profiler/context/DisableTrace.java b/src/main/java/com/nhn/pinpoint/profiler/context/DisableTrace.java index 9f5ef5c2a..ee88c8c73 100644 --- a/src/main/java/com/nhn/pinpoint/profiler/context/DisableTrace.java +++ b/src/main/java/com/nhn/pinpoint/profiler/context/DisableTrace.java @@ -113,6 +113,10 @@ public class DisableTrace implements Trace { throw new UnsupportedOperationException(); } + public void recordSqlParsingResult(ParsingResult parsingResult, String bindValue) { + throw new UnsupportedOperationException(); + } + @Override public void recordAttribute(AnnotationKey key, String value) { throw new UnsupportedOperationException(); diff --git a/src/main/java/com/nhn/pinpoint/profiler/context/Span.java b/src/main/java/com/nhn/pinpoint/profiler/context/Span.java index 28d8ed6aa..d63b6ab4a 100644 --- a/src/main/java/com/nhn/pinpoint/profiler/context/Span.java +++ b/src/main/java/com/nhn/pinpoint/profiler/context/Span.java @@ -68,6 +68,10 @@ public class Span extends TSpan implements Thriftable { return super.getExceptionId(); } + public boolean isSetErrCode() { + return isSetErr(); + } + public int getErrCode() { return getErr(); } diff --git a/src/main/java/com/nhn/pinpoint/profiler/modifier/db/interceptor/PreparedStatementExecuteQueryInterceptor.java b/src/main/java/com/nhn/pinpoint/profiler/modifier/db/interceptor/PreparedStatementExecuteQueryInterceptor.java index 71a3d916b..0be7fe2e5 100644 --- a/src/main/java/com/nhn/pinpoint/profiler/modifier/db/interceptor/PreparedStatementExecuteQueryInterceptor.java +++ b/src/main/java/com/nhn/pinpoint/profiler/modifier/db/interceptor/PreparedStatementExecuteQueryInterceptor.java @@ -55,18 +55,13 @@ public class PreparedStatementExecuteQueryInterceptor implements SimpleAroundInt trace.recordDestinationId(databaseInfo.getDatabaseId()); - ParsingResult parsingResult = (ParsingResult) getSql.invoke(target); - - trace.recordSqlParsingResult(parsingResult); - + final ParsingResult parsingResult = (ParsingResult) getSql.invoke(target); Map bindValue = getBindValue.invoke(target); if (bindValue != null) { String bindString = toBindVariable(bindValue); - if (bindString != null && bindString.length() != 0) { - trace.recordAttribute(AnnotationKey.SQL_BINDVALUE, bindString); - } + trace.recordSqlParsingResult(parsingResult, bindString); } else { - logger.warn("bindValue not found."); + trace.recordSqlParsingResult(parsingResult); } trace.recordApi(descriptor); @@ -90,7 +85,7 @@ public class PreparedStatementExecuteQueryInterceptor implements SimpleAroundInt } private String toBindVariable(Map bindValue) { - String[] temp = new String[bindValue.size()]; + final String[] temp = new String[bindValue.size()]; for (Map.Entry entry : bindValue.entrySet()) { Integer key = entry.getKey() - 1; if (temp.length < key) { @@ -107,7 +102,7 @@ public class PreparedStatementExecuteQueryInterceptor implements SimpleAroundInt if (temp == null) { return ""; } - StringBuilder sb = new StringBuilder(); + final StringBuilder sb = new StringBuilder(32); int end = temp.length - 1; for (int i = 0; i < temp.length; i++) { sb.append(temp[i]); diff --git a/src/main/java/com/nhn/pinpoint/profiler/util/AnnotationValueMapper.java b/src/main/java/com/nhn/pinpoint/profiler/util/AnnotationValueMapper.java index afa5117d4..291e7d876 100644 --- a/src/main/java/com/nhn/pinpoint/profiler/util/AnnotationValueMapper.java +++ b/src/main/java/com/nhn/pinpoint/profiler/util/AnnotationValueMapper.java @@ -2,6 +2,7 @@ package com.nhn.pinpoint.profiler.util; import com.nhn.pinpoint.thrift.dto.*; +import org.apache.thrift.TBase; public class AnnotationValueMapper { @@ -37,6 +38,8 @@ public class AnnotationValueMapper { } else if (value instanceof Short) { annotation.setValue(TAnnotationValue.shortValue((Short) value)); return; + } else if(value instanceof TBase) { + throw new IllegalArgumentException("TBase not supported. Class:" + value.getClass()); } String str = StringUtils.drop(value.toString()); annotation.setValue(TAnnotationValue.stringValue(str));