diff --git a/metric-module/metric/src/main/java/com/navercorp/pinpoint/metric/web/controller/SystemMetricController.java b/metric-module/metric/src/main/java/com/navercorp/pinpoint/metric/web/controller/SystemMetricController.java index 1d29c8c906ce6..c0c46ba748a3a 100644 --- a/metric-module/metric/src/main/java/com/navercorp/pinpoint/metric/web/controller/SystemMetricController.java +++ b/metric-module/metric/src/main/java/com/navercorp/pinpoint/metric/web/controller/SystemMetricController.java @@ -50,9 +50,7 @@ public class SystemMetricController { private final TenantProvider tenantProvider; private final TimeWindowSampler DEFAULT_TIME_WINDOW_SAMPLER = new TimeWindowSlotCentricSampler(10000L, 200); - - private final TagParser tagParser = new TagParser(); - + public SystemMetricController(SystemMetricDataService systemMetricDataService, SystemMetricHostInfoService systemMetricHostInfoService, YMLSystemMetricBasicGroupManager systemMetricBasicGroupManager, @@ -99,7 +97,7 @@ public SystemMetricView getCollectedMetricData(@RequestParam("hostGroupName") St String tenantId = tenantProvider.getTenantId(); TimeWindow timeWindow = new TimeWindow(Range.newRange(from, to), DEFAULT_TIME_WINDOW_SAMPLER); MetricDataSearchKey metricDataSearchKey = new MetricDataSearchKey(tenantId, hostGroupName, hostName, systemMetricBasicGroupManager.findMetricName(metricDefinitionId), metricDefinitionId, timeWindow); - List tagList = tagParser.parseTags(tags); + List tagList = TagParser.parseTags(tags); SystemMetricData systemMetricData = systemMetricDataService.getCollectedMetricData(metricDataSearchKey, timeWindow, tagList); return new SystemMetricView(systemMetricData); diff --git a/metric-module/metric/src/main/java/com/navercorp/pinpoint/metric/web/mybatis/typehandler/TagListTypeHandler.java b/metric-module/metric/src/main/java/com/navercorp/pinpoint/metric/web/mybatis/typehandler/TagListTypeHandler.java index 097248d46fc5a..3bcaa6e2c5755 100644 --- a/metric-module/metric/src/main/java/com/navercorp/pinpoint/metric/web/mybatis/typehandler/TagListTypeHandler.java +++ b/metric-module/metric/src/main/java/com/navercorp/pinpoint/metric/web/mybatis/typehandler/TagListTypeHandler.java @@ -12,7 +12,7 @@ import java.util.List; public class TagListTypeHandler implements TypeHandler> { - private final TagParser parser = new TagParser(); + @Override public void setParameter(PreparedStatement ps, int i, List parameter, JdbcType jdbcType) throws SQLException { ps.setString(i, parameter.toString()); @@ -20,16 +20,16 @@ public void setParameter(PreparedStatement ps, int i, List parameter, JdbcT @Override public List getResult(ResultSet rs, String columnName) throws SQLException { - return parser.parseTags(rs.getString(columnName)); + return TagParser.parseTags(rs.getString(columnName)); } @Override public List getResult(ResultSet rs, int columnIndex) throws SQLException { - return parser.parseTags(rs.getString(columnIndex)); + return TagParser.parseTags(rs.getString(columnIndex)); } @Override public List getResult(CallableStatement cs, int columnIndex) throws SQLException { - return parser.parseTags(cs.getString(columnIndex)); + return TagParser.parseTags(cs.getString(columnIndex)); } } diff --git a/metric-module/metric/src/main/java/com/navercorp/pinpoint/metric/web/mybatis/typehandler/TagTypeHandler.java b/metric-module/metric/src/main/java/com/navercorp/pinpoint/metric/web/mybatis/typehandler/TagTypeHandler.java index 27f2c5497cae2..6175881e59534 100644 --- a/metric-module/metric/src/main/java/com/navercorp/pinpoint/metric/web/mybatis/typehandler/TagTypeHandler.java +++ b/metric-module/metric/src/main/java/com/navercorp/pinpoint/metric/web/mybatis/typehandler/TagTypeHandler.java @@ -11,7 +11,6 @@ import java.sql.SQLException; public class TagTypeHandler implements TypeHandler { - private final TagParser parser = new TagParser(); @Override public void setParameter(PreparedStatement ps, int i, Tag parameter, JdbcType jdbcType) throws SQLException { @@ -20,16 +19,16 @@ public void setParameter(PreparedStatement ps, int i, Tag parameter, JdbcType jd @Override public Tag getResult(ResultSet rs, String columnName) throws SQLException { - return parser.parseTag(rs.getString(columnName)); + return TagParser.parseTag(rs.getString(columnName)); } @Override public Tag getResult(ResultSet rs, int columnIndex) throws SQLException { - return parser.parseTag(rs.getString(columnIndex)); + return TagParser.parseTag(rs.getString(columnIndex)); } @Override public Tag getResult(CallableStatement cs, int columnIndex) throws SQLException { - return parser.parseTag(cs.getString(columnIndex)); + return TagParser.parseTag(cs.getString(columnIndex)); } } diff --git a/metric-module/metric/src/main/java/com/navercorp/pinpoint/metric/web/util/TagParser.java b/metric-module/metric/src/main/java/com/navercorp/pinpoint/metric/web/util/TagParser.java index f25739dab61ef..a2bf1f23d3da6 100644 --- a/metric-module/metric/src/main/java/com/navercorp/pinpoint/metric/web/util/TagParser.java +++ b/metric-module/metric/src/main/java/com/navercorp/pinpoint/metric/web/util/TagParser.java @@ -22,15 +22,20 @@ import java.util.ArrayList; import java.util.List; import java.util.Objects; +import java.util.regex.Pattern; /** * @author Hyunjoon Cho */ public class TagParser { + + private static final Pattern MULTI_VALUE_FIELD_PATTERN = Pattern.compile("[\\[\\]\"]"); + private static final Pattern JSON_TAG_STRING_PATTERN = Pattern.compile("[{}\"]"); + public TagParser() { } - public List parseTags(List tags) { + public static List parseTags(List tags) { if (tags == null || tags.size() == 0) { return new ArrayList<>(); } @@ -43,7 +48,7 @@ public List parseTags(List tags) { return tagList; } - public List parseTags(String tagStrings) { + public static List parseTags(String tagStrings) { if (tagStrings == null || tagStrings.contains("null")) { return new ArrayList<>(); } @@ -59,7 +64,7 @@ public List parseTags(String tagStrings) { return tagList; } - public Tag parseTag(String tagString) { + public static Tag parseTag(String tagString) { Objects.requireNonNull(tagString, "tagString"); String[] tag = tagString.split(":"); @@ -67,10 +72,13 @@ public Tag parseTag(String tagString) { } private static String[] parseMultiValueFieldList(String string) { - return string.replaceAll("[\\[\\]\"]", "").split(","); + return MULTI_VALUE_FIELD_PATTERN.matcher(string).replaceAll("").split(","); } public static String toTagStrings(String jsonTagStrings) { - return jsonTagStrings.replaceAll("[{}\"]", ""); + if (jsonTagStrings.equals("{}")) { + return ""; + } + return JSON_TAG_STRING_PATTERN.matcher(jsonTagStrings).replaceAll(""); } } diff --git a/metric-module/metric/src/test/java/com/navercorp/pinpoint/metric/web/utill/metric/TagParserTest.java b/metric-module/metric/src/test/java/com/navercorp/pinpoint/metric/web/utill/metric/TagParserTest.java new file mode 100644 index 0000000000000..7f1a7e4b50006 --- /dev/null +++ b/metric-module/metric/src/test/java/com/navercorp/pinpoint/metric/web/utill/metric/TagParserTest.java @@ -0,0 +1,86 @@ +package com.navercorp.pinpoint.metric.web.utill.metric; + +import com.navercorp.pinpoint.metric.common.model.Tag; +import com.navercorp.pinpoint.metric.web.util.TagParser; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.List; + +public class TagParserTest { + + @Test + public void parseTagTest() { + List tagList = new ArrayList<>(); + tagList.add(new Tag("A", "1")); + tagList.add(new Tag("B", "2")); + tagList.add(new Tag("C", "3")); + + List result = new ArrayList<>(); + result.add(TagParser.parseTag("A:1")); + result.add(TagParser.parseTag("B:2")); + result.add(TagParser.parseTag("C:3")); + + Assertions.assertEquals(tagList, result); + } + + @Test + public void parseTagsListTest() { + List tagList = new ArrayList<>(); + tagList.add(new Tag("A", "1")); + tagList.add(new Tag("B", "2")); + tagList.add(new Tag("C", "3")); + + List tags = new ArrayList<>(); + tags.add("A:1"); + tags.add("B:2"); + tags.add("C:3"); + + List result = TagParser.parseTags(tags); + + Assertions.assertEquals(tagList, result); + } + + + @Test + public void parseTagsStringTest() { + List tagList = new ArrayList<>(); + tagList.add(new Tag("device", "1")); + tagList.add(new Tag("fstype", "2")); + tagList.add(new Tag("mode", "3")); + tagList.add(new Tag("path", "4")); + + String multiValueFieldTagString = "[\"device:1\",\"fstype:2\",\"mode:3\",\"path:4\"]"; + List result = TagParser.parseTags(multiValueFieldTagString); + + Assertions.assertEquals(tagList, result); + } + + @Test + public void parseTagsStringEmptyTest() { + String multiValueFieldTagString = "[\"null\"]"; + List result = TagParser.parseTags(multiValueFieldTagString); + + Assertions.assertEquals(0, result.size()); + } + + + @Test + public void toTagsStringTest() { + String expect = "device:1,fstype:2,mode:3,path:4"; + + String jsonTagString = "{\"device\":\"1\",\"fstype\":\"2\",\"mode\":\"3\",\"path\":\"4\"}"; + String result = TagParser.toTagStrings(jsonTagString); + + Assertions.assertEquals(expect, result); + } + + @Test + public void toTagsStringEmptyTest() { + String jsonTagStrings = "{}"; + String result = TagParser.toTagStrings(jsonTagStrings); + + Assertions.assertEquals("", result); + } +}