Search in sources :

Example 1 with Align

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);
                    }
                }
            }
        }
    });
}
Also used : AnnotationBo(com.navercorp.pinpoint.common.server.bo.AnnotationBo) Align(com.navercorp.pinpoint.web.calltree.span.Align) ArrayList(java.util.ArrayList) List(java.util.List) StringMetaDataBo(com.navercorp.pinpoint.common.server.bo.StringMetaDataBo)

Example 2 with Align

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;
}
Also used : Align(com.navercorp.pinpoint.web.calltree.span.Align) Api(com.navercorp.pinpoint.common.server.trace.Api)

Example 3 with Align

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);
    }
}
Also used : AnnotationBo(com.navercorp.pinpoint.common.server.bo.AnnotationBo) Align(com.navercorp.pinpoint.web.calltree.span.Align)

Example 4 with Align

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());
        }
    }
}
Also used : Align(com.navercorp.pinpoint.web.calltree.span.Align) StringMetaDataBo(com.navercorp.pinpoint.common.server.bo.StringMetaDataBo)

Example 5 with Align

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);
            }
        }
    });
}
Also used : AnnotationBo(com.navercorp.pinpoint.common.server.bo.AnnotationBo) IntStringStringValue(com.navercorp.pinpoint.common.util.IntStringStringValue) Align(com.navercorp.pinpoint.web.calltree.span.Align) SqlMetaDataBo(com.navercorp.pinpoint.common.server.bo.SqlMetaDataBo) ArrayList(java.util.ArrayList) List(java.util.List)

Aggregations

Align (com.navercorp.pinpoint.web.calltree.span.Align)10 AnnotationBo (com.navercorp.pinpoint.common.server.bo.AnnotationBo)4 ArrayList (java.util.ArrayList)4 List (java.util.List)4 SpanBo (com.navercorp.pinpoint.common.server.bo.SpanBo)2 StringMetaDataBo (com.navercorp.pinpoint.common.server.bo.StringMetaDataBo)2 TransactionId (com.navercorp.pinpoint.common.profiler.util.TransactionId)1 ApiMetaDataBo (com.navercorp.pinpoint.common.server.bo.ApiMetaDataBo)1 SqlMetaDataBo (com.navercorp.pinpoint.common.server.bo.SqlMetaDataBo)1 Api (com.navercorp.pinpoint.common.server.trace.Api)1 IntStringStringValue (com.navercorp.pinpoint.common.util.IntStringStringValue)1 CallTreeIterator (com.navercorp.pinpoint.web.calltree.span.CallTreeIterator)1 SpanAlign (com.navercorp.pinpoint.web.calltree.span.SpanAlign)1 Record (com.navercorp.pinpoint.web.vo.callstacks.Record)1 RecordSet (com.navercorp.pinpoint.web.vo.callstacks.RecordSet)1 Test (org.junit.Test)1