use of com.navercorp.pinpoint.web.calltree.span.Align in project pinpoint by naver.
the class SpanServiceImpl method transitionCachedString.
private void transitionCachedString(List<Align> spans) {
this.transitionAnnotation(spans, new AnnotationReplacementCallback() {
@Override
public void replacement(Align align, List<AnnotationBo> annotationBoList) {
List<AnnotationBo> cachedStringAnnotation = findCachedStringAnnotation(annotationBoList);
if (cachedStringAnnotation.isEmpty()) {
return;
}
for (AnnotationBo annotationBo : cachedStringAnnotation) {
final int cachedArgsKey = annotationBo.getKey();
int stringMetaDataId = (Integer) annotationBo.getValue();
List<StringMetaDataBo> stringMetaList = stringMetaDataDao.getStringMetaData(align.getAgentId(), align.getAgentStartTime(), stringMetaDataId);
int size = stringMetaList.size();
if (size == 0) {
logger.warn("StringMetaData not Found {}/{}/{}", align.getAgentId(), stringMetaDataId, align.getAgentStartTime());
String errorMessage = "CACHED-STRING-ID not found. stringId:";
AnnotationBo api = new AnnotationBo(AnnotationKey.ERROR_API_METADATA_NOT_FOUND.getCode(), errorMessage);
annotationBoList.add(api);
} else if (size >= 1) {
// key collision shouldn't really happen (probability too low)
StringMetaDataBo stringMetaDataBo = stringMetaList.get(0);
AnnotationBo stringMetaData = new AnnotationBo(AnnotationKeyUtils.cachedArgsToArgs(cachedArgsKey), stringMetaDataBo.getStringValue());
annotationBoList.add(stringMetaData);
if (size > 1) {
logger.warn("stringMetaData size not 1 :{}", stringMetaList);
}
}
}
}
});
}
use of com.navercorp.pinpoint.web.calltree.span.Align in project pinpoint by naver.
the class RecordFactory method get.
public Record get(final CallTreeNode node) {
final Align align = node.getAlign();
align.setId(getNextId());
final int parentId = getParentId(node);
Api api = getApi(align);
final String argument = getArgument(align);
final Record record = new DefaultRecord(align.getDepth(), align.getId(), parentId, true, api.getMethod(), argument, align.getStartTime(), align.getElapsed(), align.getGap(), align.getAgentId(), align.getAgentName(), align.getApplicationId(), registry.findServiceType(align.getServiceType()), align.getDestinationId(), align.hasChild(), false, align.getTransactionId(), align.getSpanId(), align.getExecutionMilliseconds(), api.getMethodTypeEnum(), true);
record.setSimpleClassName(api.getClassName());
record.setFullApiDescription(api.getDescription());
return record;
}
use of com.navercorp.pinpoint.web.calltree.span.Align in project pinpoint by naver.
the class SpanServiceImpl method transitionAnnotation.
private void transitionAnnotation(List<Align> spans, AnnotationReplacementCallback annotationReplacementCallback) {
for (Align align : spans) {
List<AnnotationBo> annotationBoList = align.getAnnotationBoList();
if (annotationBoList == null) {
annotationBoList = new ArrayList<>();
align.setAnnotationBoList(annotationBoList);
}
annotationReplacementCallback.replacement(align, annotationBoList);
}
}
use of com.navercorp.pinpoint.web.calltree.span.Align in project pinpoint by naver.
the class SpanServiceImpl method transitionException.
private void transitionException(List<Align> alignList) {
for (Align align : alignList) {
if (align.hasException()) {
StringMetaDataBo stringMetaData = selectStringMetaData(align.getAgentId(), align.getExceptionId(), align.getAgentStartTime());
align.setExceptionClass(stringMetaData.getStringValue());
}
}
}
use of com.navercorp.pinpoint.web.calltree.span.Align in project pinpoint by naver.
the class SpanServiceImpl method transitionSqlId.
private void transitionSqlId(final List<Align> spans) {
this.transitionAnnotation(spans, new AnnotationReplacementCallback() {
@Override
public void replacement(Align align, List<AnnotationBo> annotationBoList) {
AnnotationBo sqlIdAnnotation = findAnnotation(annotationBoList, AnnotationKey.SQL_ID.getCode());
if (sqlIdAnnotation == null) {
return;
}
if (metaDataFilter != null && metaDataFilter.filter(align, MetaData.SQL)) {
AnnotationBo annotationBo = metaDataFilter.createAnnotationBo(align, MetaData.SQL);
annotationBoList.add(annotationBo);
return;
}
// value of sqlId's annotation contains multiple values.
final IntStringStringValue sqlValue = (IntStringStringValue) sqlIdAnnotation.getValue();
final int sqlId = sqlValue.getIntValue();
final String sqlParam = sqlValue.getStringValue1();
final List<SqlMetaDataBo> sqlMetaDataList = sqlMetaDataDao.getSqlMetaData(align.getAgentId(), align.getAgentStartTime(), sqlId);
final int size = sqlMetaDataList.size();
if (size == 0) {
String errorMessage = "SQL-ID not found sqlId:" + sqlId;
AnnotationBo api = new AnnotationBo(AnnotationKey.SQL.getCode(), errorMessage);
annotationBoList.add(api);
} else if (size == 1) {
final SqlMetaDataBo sqlMetaDataBo = sqlMetaDataList.get(0);
if (StringUtils.isEmpty(sqlParam)) {
AnnotationBo sqlMeta = new AnnotationBo(AnnotationKey.SQL_METADATA.getCode(), sqlMetaDataBo.getSql());
annotationBoList.add(sqlMeta);
// AnnotationBo checkFail = checkIdentifier(spanAlign, sqlMetaDataBo);
// if (checkFail != null) {
// // fail
// annotationBoList.add(checkFail);
// return;
// }
AnnotationBo sql = new AnnotationBo(AnnotationKey.SQL.getCode(), StringUtils.trim(sqlMetaDataBo.getSql()));
annotationBoList.add(sql);
} else {
logger.debug("sqlMetaDataBo:{}", sqlMetaDataBo);
final String outputParams = sqlParam;
List<String> parsedOutputParams = outputParameterParser.parseOutputParameter(outputParams);
logger.debug("outputPrams:{}, parsedOutputPrams:{}", outputParams, parsedOutputParams);
String originalSql = sqlParser.combineOutputParams(sqlMetaDataBo.getSql(), parsedOutputParams);
logger.debug("outputPrams{}, originalSql:{}", outputParams, originalSql);
AnnotationBo sqlMeta = new AnnotationBo(AnnotationKey.SQL_METADATA.getCode(), sqlMetaDataBo.getSql());
annotationBoList.add(sqlMeta);
AnnotationBo sql = new AnnotationBo(AnnotationKey.SQL.getCode(), StringUtils.trim(originalSql));
annotationBoList.add(sql);
}
} else {
// TODO need improvement
String collisionSqlIdCodeMessage = collisionSqlIdCodeMessage(sqlId, sqlMetaDataList);
AnnotationBo api = new AnnotationBo(AnnotationKey.SQL.getCode(), collisionSqlIdCodeMessage);
annotationBoList.add(api);
}
// add if bindValue exists
final String bindValue = sqlValue.getStringValue2();
if (StringUtils.isNotEmpty(bindValue)) {
AnnotationBo bindValueAnnotation = new AnnotationBo(AnnotationKey.SQL_BINDVALUE.getCode(), bindValue);
annotationBoList.add(bindValueAnnotation);
}
}
});
}
Aggregations