diff options
| author | wangwei <[email protected]> | 2022-06-28 11:33:29 +0800 |
|---|---|---|
| committer | wangwei <[email protected]> | 2022-06-28 11:35:40 +0800 |
| commit | 60a091c8c125eb6e8d51411a99f1a56222803196 (patch) | |
| tree | 8055363109022422337d0c43e51cd632a3a293dd | |
| parent | 3e1488ae688badaac3d841e2dd079e1658b0b0dd (diff) | |
| -rw-r--r-- | src/main/java/com/mesalab/services/service/impl/EntityServiceImp.java | 46 | ||||
| -rw-r--r-- | src/test/java/com/mesalab/qgw/service/TopEntityTest.java | 9 |
2 files changed, 32 insertions, 23 deletions
diff --git a/src/main/java/com/mesalab/services/service/impl/EntityServiceImp.java b/src/main/java/com/mesalab/services/service/impl/EntityServiceImp.java index e42bf9b8..d4a32643 100644 --- a/src/main/java/com/mesalab/services/service/impl/EntityServiceImp.java +++ b/src/main/java/com/mesalab/services/service/impl/EntityServiceImp.java @@ -96,7 +96,6 @@ public class EntityServiceImp implements EntityService, EnvironmentAware { public BaseResult getEntityInfo(String param, ComDSLObject comDSLObject) { BaseResult baseResult; - String fileSql; String sql; if (param.equalsIgnoreCase(EntityQueryType.ACTIVECLIENTIP.getType())) { setDefaultValue(comDSLObject.getQuery()); @@ -156,7 +155,8 @@ public class EntityServiceImp implements EntityService, EnvironmentAware { if (BooleanUtil.toBoolean(String.valueOf(item.get("isCDN")))) { countCDN++; } - if (!StringUtil.startsWith(String.valueOf(item.get("ssl_sni")), "*")) { + if (!StringUtil.startsWith(String.valueOf(item.get("ssl_sni")), "*") + && !StringUtil.startsWith(String.valueOf(item.get("ssl_sni")), "$")) { item.replace("ssl_sni", "$".concat(String.valueOf(item.get("ssl_sni")))); } item.remove("sessions"); @@ -186,31 +186,42 @@ public class EntityServiceImp implements EntityService, EnvironmentAware { while (iterator.hasNext()) { Map<String, Object> datum = iterator.next(); String name = String.valueOf(datum.get("ssl_sni")); - //1. CND filter - if (inCDN(cnd, name)) { + String key = getTopPrivateDomain(name); + datum.put("isCDN", false); + + //1. filter exception data + if (StringUtil.isBlank(key)) { + map.put(name, Lists.newArrayList(datum)); + continue; + } + String domain = FormatUtils.getDomain(name); + + //2. filter CND + if (inCDN(cnd, domain)) { datum.put("isCDN", true); cdnFilter.add(datum); continue; } - datum.put("isCDN", false); - String key = getTopPrivateDomain(name); - //2. exception data - if (StringUtil.isBlank(key)) { - map.put(name, Lists.newArrayList(datum)); + + //3 filter TopPrivateDomain + if (key.equalsIgnoreCase(domain)) { + datum.put("ssl_sni", domain); + map.put("$".concat(domain), Lists.newArrayList(datum)); continue; } - //3. first add + + //4. first add if (StringUtil.isEmpty(map.get(key))) { - datum.put("ssl_sni", FormatUtils.getDomain(name)); + datum.put("ssl_sni", domain); map.put(key, Lists.newArrayList(datum)); continue; } - //4. merge + //5. merge List<Map<String, Object>> mapList = map.get(key); for (Map<String, Object> item : mapList) { List<String> domainBefore = Splitter.on(".").omitEmptyStrings().splitToList(String.valueOf(item.get("ssl_sni"))); - List<String> domainAfter = Splitter.on(".").omitEmptyStrings().splitToList(FormatUtils.getDomain(name)); + List<String> domainAfter = Splitter.on(".").omitEmptyStrings().splitToList(domain); Stack<String> stackBefore = new Stack<>(); Stack<String> stackAfter = new Stack<>(); domainBefore.forEach(stackBefore::push); @@ -222,7 +233,8 @@ public class EntityServiceImp implements EntityService, EnvironmentAware { if ("*".equals(levelAfter) || "*".equals(levelBefore)) { break; } - if (!levelBefore.equalsIgnoreCase(levelAfter)) { + if (!levelBefore.equalsIgnoreCase(levelAfter) + || (stackBefore.isEmpty() || stackAfter.isEmpty())) { break; } stack.push(levelBefore); @@ -250,13 +262,13 @@ public class EntityServiceImp implements EntityService, EnvironmentAware { return result; } - public boolean inCDN(Map<String, List<String>> cdnMap, String name) { - String topPrivateDomain = getTopPrivateDomain(name); + public boolean inCDN(Map<String, List<String>> cdnMap, String domain) { + String topPrivateDomain = getTopPrivateDomain(domain); List<String> list = cdnMap.get(topPrivateDomain); if (StringUtil.isEmpty(list)) { return false; } - String[] parma = StrUtil.split(name, "."); + String[] parma = StrUtil.split(domain, "."); out: for (String cdn : list) { String[] flag = StrUtil.split(cdn, "."); diff --git a/src/test/java/com/mesalab/qgw/service/TopEntityTest.java b/src/test/java/com/mesalab/qgw/service/TopEntityTest.java index 048c37f7..7d489dd4 100644 --- a/src/test/java/com/mesalab/qgw/service/TopEntityTest.java +++ b/src/test/java/com/mesalab/qgw/service/TopEntityTest.java @@ -1,7 +1,6 @@ package com.mesalab.qgw.service; import cn.hutool.core.io.FileUtil; -import cn.hutool.core.io.file.FileReader; import cn.hutool.core.util.CharsetUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.log.Log; @@ -9,8 +8,6 @@ import cn.hutool.log.LogFactory; import com.google.common.base.Stopwatch; import com.google.common.collect.Lists; import com.mesalab.GalaxyQGWApplicationTests; -import com.mesalab.common.utils.JsonMapper; -import com.mesalab.network.service.NetworkMonitorService; import com.mesalab.services.service.EntityService; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -30,7 +27,7 @@ public class TopEntityTest extends GalaxyQGWApplicationTests { @Autowired EntityService entityService; - private List<Map<String, Object>> getLiveChartsData(String fileName) { + private List<Map<String, Object>> getEntityData(String fileName) { File file = new File("benchmark" + File.separator + "entity_dataset" + File.separator + fileName); List<String> list = FileUtil.readLines(file, CharsetUtil.UTF_8); List<Map<String, Object>> data = Lists.newArrayList(); @@ -51,7 +48,7 @@ public class TopEntityTest extends GalaxyQGWApplicationTests { @Test public void testCUCCSNIOutput() { Stopwatch stopwatch = Stopwatch.createStarted(); - entityService.mergeSNI(getLiveChartsData("XJ-CUCC-SNI-Top200w.txt")); + entityService.mergeSNI(getEntityData("XJ-CUCC-SNI-Top200w.txt")); stopwatch.stop(); long millis = stopwatch.elapsed(MILLISECONDS); log.info("time:{} ms", millis); @@ -60,7 +57,7 @@ public class TopEntityTest extends GalaxyQGWApplicationTests { @Test public void testE21SNIOutput() { Stopwatch stopwatch = Stopwatch.createStarted(); - entityService.mergeSNI(getLiveChartsData("E21-SNI-Top200w.txt")); + entityService.mergeSNI(getEntityData("E21-SNI-Top200w.txt")); stopwatch.stop(); long millis = stopwatch.elapsed(MILLISECONDS); log.info("time:{} ms", millis); |
