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));