diff --git a/src/main/java/com/nhn/pinpoint/web/controller/ApplicationMapController.java b/src/main/java/com/nhn/pinpoint/web/controller/ApplicationMapController.java index 4ba5b04ca..e8761fcb9 100644 --- a/src/main/java/com/nhn/pinpoint/web/controller/ApplicationMapController.java +++ b/src/main/java/com/nhn/pinpoint/web/controller/ApplicationMapController.java @@ -5,6 +5,7 @@ import java.util.List; import javax.servlet.http.HttpServletResponse; +import com.nhn.pinpoint.web.filter.FilterBuilder; import com.nhn.pinpoint.web.vo.LimitedScanResult; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; @@ -16,7 +17,6 @@ import org.springframework.web.bind.annotation.RequestParam; import com.nhn.pinpoint.common.ServiceType; import com.nhn.pinpoint.web.applicationmap.ApplicationMap; import com.nhn.pinpoint.web.filter.Filter; -import com.nhn.pinpoint.web.filter.FilterBuilder; import com.nhn.pinpoint.web.service.ApplicationMapService; import com.nhn.pinpoint.web.service.FlowChartService; import com.nhn.pinpoint.web.util.TimeUtils; @@ -36,6 +36,9 @@ public class ApplicationMapController { @Autowired private FlowChartService flow; + @Autowired + private FilterBuilder filterBuilder; + /** * FROM ~ TO기간의 서버 맵 데이터 조회 * @@ -101,7 +104,7 @@ public class ApplicationMapController { model.addAttribute("fromDate", new Date(from)); model.addAttribute("toDate", new Date(to)); model.addAttribute("filterText", filterText); - model.addAttribute("filter", FilterBuilder.build(filterText)); + model.addAttribute("filter", filterBuilder.build(filterText)); return "applicationmap.filtered.view"; } @@ -130,7 +133,7 @@ public class ApplicationMapController { @RequestParam(value = "limit", required = false, defaultValue = "1000000") int limit) { LimitedScanResult> limitedScanResult = flow.selectTraceIdsFromApplicationTraceIndex(applicationName, from, to, limit); - Filter filter = FilterBuilder.build(filterText); + Filter filter = filterBuilder.build(filterText); ApplicationMap map = flow.selectApplicationMap(limitedScanResult.getScanData(), from, to, filter); @@ -248,7 +251,7 @@ public class ApplicationMapController { @RequestParam(value = "limit", required = false, defaultValue = "1000000") int limit) { LimitedScanResult> traceIdSet = flow.selectTraceIdsFromApplicationTraceIndex(applicationName, from, to, limit); - Filter filter = FilterBuilder.build(filterText); + Filter filter = filterBuilder.build(filterText); LinkStatistics linkStatistics = flow.linkStatisticsDetail(from, to, traceIdSet.getScanData(), srcApplicationName, srcServiceType, destApplicationName, destServiceType, filter); model.addAttribute("lastFetchedTimestamp", traceIdSet.getLimitedTime()); diff --git a/src/main/java/com/nhn/pinpoint/web/controller/BusinessTransactionController.java b/src/main/java/com/nhn/pinpoint/web/controller/BusinessTransactionController.java index 560483ab4..d5d247829 100644 --- a/src/main/java/com/nhn/pinpoint/web/controller/BusinessTransactionController.java +++ b/src/main/java/com/nhn/pinpoint/web/controller/BusinessTransactionController.java @@ -6,6 +6,7 @@ import java.util.List; import javax.servlet.http.HttpServletResponse; +import com.nhn.pinpoint.web.filter.FilterBuilder; import com.nhn.pinpoint.web.service.SpanResult; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -20,7 +21,6 @@ import org.springframework.web.servlet.ModelAndView; import com.nhn.pinpoint.web.calltree.server.ServerCallTree; import com.nhn.pinpoint.web.calltree.span.SpanAlign; import com.nhn.pinpoint.web.filter.Filter; -import com.nhn.pinpoint.web.filter.FilterBuilder; import com.nhn.pinpoint.web.service.FlowChartService; import com.nhn.pinpoint.web.service.RecordSetService; import com.nhn.pinpoint.web.service.SpanService; @@ -47,6 +47,9 @@ public class BusinessTransactionController { @Autowired private FlowChartService flow; + @Autowired + private FilterBuilder filterBuilder; + /** * applicationname에서 from ~ to 시간대에 수행된 URL을 조회한다. * @@ -68,7 +71,7 @@ public class BusinessTransactionController { // TOOD 구조개선을 위해 server map조회 로직 분리함, 임시로 분리한 상태이고 개선이 필요하다. LimitedScanResult> traceIdList = flow.selectTraceIdsFromApplicationTraceIndex(applicationName, from, to, limit); - Filter filter = FilterBuilder.build(filterText); + Filter filter = filterBuilder.build(filterText); BusinessTransactions selectBusinessTransactions = flow.selectBusinessTransactions(traceIdList.getScanData(), applicationName, from, to, filter); model.addAttribute("lastFetchedTimestamp", traceIdList.getLimitedTime()); diff --git a/src/main/java/com/nhn/pinpoint/web/controller/ScatterChartController.java b/src/main/java/com/nhn/pinpoint/web/controller/ScatterChartController.java index 314ef82fd..f301bf380 100644 --- a/src/main/java/com/nhn/pinpoint/web/controller/ScatterChartController.java +++ b/src/main/java/com/nhn/pinpoint/web/controller/ScatterChartController.java @@ -7,6 +7,7 @@ import java.util.TreeSet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import com.nhn.pinpoint.web.filter.FilterBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -18,7 +19,6 @@ import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import com.nhn.pinpoint.common.bo.SpanBo; -import com.nhn.pinpoint.web.filter.FilterBuilder; import com.nhn.pinpoint.web.service.FlowChartService; import com.nhn.pinpoint.web.service.ScatterChartService; import com.nhn.pinpoint.web.util.TimeUtils; @@ -42,6 +42,9 @@ public class ScatterChartController { @Autowired private FlowChartService flow; + @Autowired + private FilterBuilder filterBuilder; + @RequestMapping(value = "/selectedScatter", method = RequestMethod.GET) public String selectedScatter(Model model, HttpServletResponse response) { return "selectedScatter"; @@ -111,7 +114,7 @@ public class ScatterChartController { SortedSet traceIdSet = new TreeSet(traceIdList); logger.debug("selectScatterData with {}", traceIdSet); - scatterData = scatter.selectScatterData(traceIdSet, applicationName, FilterBuilder.build(filterText)); + scatterData = scatter.selectScatterData(traceIdSet, applicationName, filterBuilder.build(filterText)); if (traceIdList.isEmpty()) { model.addAttribute("resultFrom", -1); diff --git a/src/main/java/com/nhn/pinpoint/web/filter/DefaultFilterBuilder.java b/src/main/java/com/nhn/pinpoint/web/filter/DefaultFilterBuilder.java new file mode 100644 index 000000000..3f7037ccb --- /dev/null +++ b/src/main/java/com/nhn/pinpoint/web/filter/DefaultFilterBuilder.java @@ -0,0 +1,57 @@ +package com.nhn.pinpoint.web.filter; + +import org.apache.commons.lang.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +/** + * + * @author netspider + * + */ +@Component +public class DefaultFilterBuilder implements FilterBuilder { + + private Logger logger = LoggerFactory.getLogger(DefaultFilterBuilder.class); + + @Override + public Filter build(String filterText) { + if (StringUtils.isEmpty(filterText)) { + return Filter.NONE; + } + + logger.debug("build filter from string. {}", filterText); + + String[] f = filterText.split(Filter.FILTER_DELIMETER); + + Filter filter; + if (f.length == 1) { + filter = makeSingleFilter(f[0]); + } else { + filter = makeChainedFilter(f); + } + + // TODO: need cache filter? + return filter; + } + + private Filter makeSingleFilter(String filterText) { + logger.debug(" make filter from string. {}", filterText); + String[] element = filterText.split(Filter.FILTER_ENTRY_DELIMETER); + if (element.length == 4) { + return new FromToFilter(element[0], element[1], element[2], element[3]); + } else { + return Filter.NONE; + } + } + + private Filter makeChainedFilter(String[] filterTexts) { + logger.debug(" make chained filter."); + FilterChain chain = new FilterChain(); + for (String s : filterTexts) { + chain.addFilter(makeSingleFilter(s)); + } + return chain; + } +} diff --git a/src/main/java/com/nhn/pinpoint/web/filter/FilterBuilder.java b/src/main/java/com/nhn/pinpoint/web/filter/FilterBuilder.java index 3346f556a..44ef8721b 100644 --- a/src/main/java/com/nhn/pinpoint/web/filter/FilterBuilder.java +++ b/src/main/java/com/nhn/pinpoint/web/filter/FilterBuilder.java @@ -1,54 +1,8 @@ -package com.nhn.pinpoint.web.filter; - -import org.apache.commons.lang.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * - * @author netspider - * - */ -public class FilterBuilder { - - private static Logger logger = LoggerFactory.getLogger(FilterBuilder.class); - - public static Filter build(String filterText) { - if (StringUtils.isEmpty(filterText)) { - return Filter.NONE; - } - - logger.debug("build filter from string. {}", filterText); - - String[] f = filterText.split(Filter.FILTER_DELIMETER); - - Filter filter; - if (f.length == 1) { - filter = makeSingleFilter(f[0]); - } else { - filter = makeChainedFilter(f); - } - - // TODO: need cache filter? - return filter; - } - - private static Filter makeSingleFilter(String filterText) { - logger.debug(" make filter from string. {}", filterText); - String[] element = filterText.split(Filter.FILTER_ENTRY_DELIMETER); - if (element.length == 4) { - return new FromToFilter(element[0], element[1], element[2], element[3]); - } else { - return Filter.NONE; - } - } - - private static Filter makeChainedFilter(String[] filterTexts) { - logger.debug(" make chained filter."); - FilterChain chain = new FilterChain(); - for (String s : filterTexts) { - chain.addFilter(makeSingleFilter(s)); - } - return chain; - } -} +package com.nhn.pinpoint.web.filter; + +/** + * + */ +public interface FilterBuilder { + Filter build(String filterText); +}