web/src/main/java/com/navercorp/pinpoint/web/controller/BusinessTransactionController.java
@RequestMapping(value = "/transactionInfo", method = RequestMethod.GET)
    @ResponseBody
    public TransactionInfoViewModel transactionInfo(@RequestParam("traceId") String traceIdParam,
                                                    @RequestParam(value = "focusTimestamp", required = false, defaultValue = "0") long focusTimestamp,
                                                    @RequestParam(value = "agentId", required = false) String agentId,
                                                    @RequestParam(value = "spanId", required = false, defaultValue = "-1") long spanId,
                                                    @RequestParam(value = "v", required = false, defaultValue = "0") int viewVersion) {
        logger.debug("GET /transactionInfo params {traceId={}, focusTimestamp={}, agentId={}, spanId={}, v={}}", traceIdParam, focusTimestamp, agentId, spanId, viewVersion);

        final TransactionId transactionId = TransactionIdUtils.parseTransactionId(traceIdParam);

        final ColumnGetCount columnGetCount = ColumnGetCountFactory.create(callstackSelectSpansLimit);

        // select spans
        final SpanResult spanResult = this.spanService.selectSpan(transactionId, focusTimestamp, columnGetCount);
        final CallTreeIterator callTreeIterator = spanResult.getCallTree();

        // application map
        ApplicationMap map = filteredMapService.selectApplicationMap(transactionId, viewVersion, columnGetCount);
        RecordSet recordSet = this.transactionInfoService.createRecordSet(callTreeIterator, focusTimestamp, agentId, spanId);

        if (spanResult.getTraceState() == TraceState.State.PROGRESS && columnGetCount.isreachedLimit()) {
            return new TransactionInfoViewModel(transactionId, spanId, map.getNodes(), map.getLinks(), recordSet, TraceState.State.OVERFLOW, logConfiguration);
        }
        return new TransactionInfoViewModel(transactionId, spanId, map.getNodes(), map.getLinks(), recordSet, spanResult.getTraceState(), logConfiguration);
    }
/**
     * info lookup for a selected transaction
     *
     * @param traceIdParam
     * @param focusTimestamp
     * @return
     */
info lookup for a selected transaction
@param traceIdParam
@param focusTimestamp
@return
info lookup for a selected transaction @param traceIdParam @param focusTimestamp @return
@RequestMapping(value = "/transactionInfo", method = RequestMethod.GET)
    @ResponseBody
    public TransactionInfoViewModel transactionInfo(@RequestParam("traceId") String traceIdParam,
                                                    @RequestParam(value = "focusTimestamp", required = false, defaultValue = "0") long focusTimestamp,
                                                    @RequestParam(value = "agentId", required = false) String agentId,
                                                    @RequestParam(value = "spanId", required = false, defaultValue = "-1") long spanId,
                                                    @RequestParam(value = "v", required = false, defaultValue = "0") int viewVersion) {
        logger.debug("GET /transactionInfo params {traceId={}, focusTimestamp={}, agentId={}, spanId={}, v={}}", traceIdParam, focusTimestamp, agentId, spanId, viewVersion);
        final TransactionId transactionId = TransactionIdUtils.parseTransactionId(traceIdParam);
        final ColumnGetCount columnGetCount = ColumnGetCountFactory.create(callstackSelectSpansLimit);
        final SpanResult spanResult = this.spanService.selectSpan(transactionId, focusTimestamp, columnGetCount);
        final CallTreeIterator callTreeIterator = spanResult.getCallTree();
        ApplicationMap map = filteredMapService.selectApplicationMap(transactionId, viewVersion, columnGetCount);
        RecordSet recordSet = this.transactionInfoService.createRecordSet(callTreeIterator, focusTimestamp, agentId, spanId);
        if (spanResult.getTraceState() == TraceState.State.PROGRESS && columnGetCount.isreachedLimit()) {
            return new TransactionInfoViewModel(transactionId, spanId, map.getNodes(), map.getLinks(), recordSet, TraceState.State.OVERFLOW, logConfiguration);
        }
        return new TransactionInfoViewModel(transactionId, spanId, map.getNodes(), map.getLinks(), recordSet, spanResult.getTraceState(), logConfiguration);
    }
@ RequestMapping ( value = "/transactionInfo" , method = RequestMethod . GET ) @ ResponseBody public TransactionInfoViewModel transactionInfo ( @ RequestParam ( "traceId" ) String traceIdParam , @ RequestParam ( value = "focusTimestamp" , required = false , defaultValue = "0" ) long focusTimestamp , @ RequestParam ( value = "agentId" , required = false ) String agentId , @ RequestParam ( value = "spanId" , required = false , defaultValue = "-1" ) long spanId , @ RequestParam ( value = "v" , required = false , defaultValue = "0" ) int viewVersion ) { logger . debug ( "GET /transactionInfo params {traceId={}, focusTimestamp={}, agentId={}, spanId={}, v={}}" , traceIdParam , focusTimestamp , agentId , spanId , viewVersion ) ; final TransactionId transactionId = TransactionIdUtils . parseTransactionId ( traceIdParam ) ; final ColumnGetCount columnGetCount = ColumnGetCountFactory . create ( callstackSelectSpansLimit ) ; final SpanResult spanResult = this . spanService . selectSpan ( transactionId , focusTimestamp , columnGetCount ) ; final CallTreeIterator callTreeIterator = spanResult . getCallTree ( ) ; ApplicationMap map = filteredMapService . selectApplicationMap ( transactionId , viewVersion , columnGetCount ) ; RecordSet recordSet = this . transactionInfoService . createRecordSet ( callTreeIterator , focusTimestamp , agentId , spanId ) ; if ( spanResult . getTraceState ( ) == TraceState . State . PROGRESS && columnGetCount . isreachedLimit ( ) ) { return new TransactionInfoViewModel ( transactionId , spanId , map . getNodes ( ) , map . getLinks ( ) , recordSet , TraceState . State . OVERFLOW , logConfiguration ) ; } return new TransactionInfoViewModel ( transactionId , spanId , map . getNodes ( ) , map . getLinks ( ) , recordSet , spanResult . getTraceState ( ) , logConfiguration ) ; }
info lookup for a selected transaction
 @param traceIdParam
 @param focusTimestamp
 @return
info lookup for a selected transaction @param traceIdParam @param focusTimestamp @return
// select spans // application map