summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author王宽 <[email protected]>2024-03-14 08:49:35 +0000
committer王宽 <[email protected]>2024-03-14 08:49:35 +0000
commitada2ab6427c8269cb68e10437319fbe5d4151c40 (patch)
tree2ec3d485b022f1f589df2ef389ec2cfdfad04a89
parent7347323b963fad7f972e6f872711207415c513ce (diff)
parentb9e20efd2384b8bc94f974a0e8d47b8b00736410 (diff)
Merge branch 'improve/knowledgebase' into 'develop'
Improve/knowledgebase See merge request galaxy/platform/groot-stream!24
-rw-r--r--config/grootstream.yaml2
-rw-r--r--groot-bootstrap/pom.xml17
-rw-r--r--groot-common/src/main/java/com/geedgenetworks/common/utils/FileUtils.java17
-rw-r--r--groot-common/src/main/resources/grootstream.yaml2
-rw-r--r--groot-common/src/test/resources/grootstream.yaml2
-rw-r--r--groot-core/src/main/java/com/geedgenetworks/core/processor/projection/ProjectionProcessFunction.java7
-rw-r--r--groot-core/src/main/java/com/geedgenetworks/core/udf/AsnLookup.java9
-rw-r--r--groot-core/src/main/java/com/geedgenetworks/core/udf/GeoIpLookup.java8
-rw-r--r--groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/KnowledgeBaseScheduler.java11
-rw-r--r--groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/KnowledgeBaseUpdateJob.java4
-rw-r--r--groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/AbstractKnowledgeBaseHandler.java67
-rw-r--r--groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/AbstractMultipleKnowledgeBaseHandler.java47
-rw-r--r--groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/AbstractSingleKnowledgeBaseHandler.java17
-rw-r--r--groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/AppCategoryKnowledgeBaseHandler.java7
-rw-r--r--groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/AppTagUserDefineKnowledgeBaseHandler.java13
-rw-r--r--groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/AsnKnowledgeBaseHandler.java52
-rw-r--r--groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/DnsServerInfoKnowledgeBaseHandler.java7
-rw-r--r--groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/DomainTagUserDefineKnowledgeBaseHandler.java16
-rw-r--r--groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/DomainVpnKnowledgeBaseHandler.java7
-rw-r--r--groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/FqdnCategoryKnowledgeBaseHandler.java7
-rw-r--r--groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/FqdnIcpKnowledgeBaseHandler.java7
-rw-r--r--groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/FqdnWhoisKnowledgeBaseHandler.java7
-rw-r--r--groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/GeoIpKnowledgeBaseHandler.java48
-rw-r--r--groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/IdcRenterKnowledgeBaseHandler.java7
-rw-r--r--groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/InternalIpKnowledgeBaseHandler.java7
-rw-r--r--groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/IocDarkwebKnowledgeBaseHandler.java9
-rw-r--r--groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/IocMalwareKnowledgeBaseHandler.java10
-rw-r--r--groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/IpTagUserDefineKnowledgeBaseHandler.java15
-rw-r--r--groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/IpVpnKnowledgeBaseHandler.java8
-rw-r--r--groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/LinkDirectionKnowledgeBaseHandler.java8
-rw-r--r--groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/RuleKnowledgeBaseHandler.java28
-rw-r--r--groot-core/src/test/java/com/geedgenetworks/core/udf/cn/LookupTestUtils.java12
-rw-r--r--groot-core/src/test/java/com/geedgenetworks/core/udf/test/AsnLookupFunctionTest.java10
-rw-r--r--groot-core/src/test/java/com/geedgenetworks/core/udf/test/GeoIpLookupFunctionTest.java31
-rw-r--r--groot-core/src/test/resources/asn.mmdbbin0 -> 2316 bytes
-rw-r--r--groot-core/src/test/resources/ip_builtin.mmdbbin0 -> 4738 bytes
36 files changed, 379 insertions, 147 deletions
diff --git a/config/grootstream.yaml b/config/grootstream.yaml
index fdd240a..acb19b1 100644
--- a/config/grootstream.yaml
+++ b/config/grootstream.yaml
@@ -12,7 +12,7 @@ grootstream:
- 64af7077-eb9b-4b8f-80cf-2ceebc89bea9
- 004390bc-3135-4a6f-a492-3662ecb9e289
properties:
- hos.path: http://192.168.44.12:8089
+ hos.path: http://192.168.44.12:9098/hos
hos.bucket.name.traffic_file: traffic_file_bucket
hos.bucket.name.troubleshooting_file: troubleshooting_file_bucket
scheduler.knowledge_base.update.interval.minutes: 5
diff --git a/groot-bootstrap/pom.xml b/groot-bootstrap/pom.xml
index 62c2dc8..0a1fd9c 100644
--- a/groot-bootstrap/pom.xml
+++ b/groot-bootstrap/pom.xml
@@ -121,23 +121,6 @@
<scope>${scope}</scope>
</dependency>
- <dependency>
- <groupId>org.apache.hbase</groupId>
- <artifactId>hbase-client</artifactId>
- <scope>${scope}</scope>
- <exclusions>
- <exclusion>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-log4j12</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.slf4j</groupId>
- <artifactId>log4j-over-slf4j</artifactId>
- </exclusion>
-
- </exclusions>
- </dependency>
-
<dependency>
<groupId>org.apache.flink</groupId>
diff --git a/groot-common/src/main/java/com/geedgenetworks/common/utils/FileUtils.java b/groot-common/src/main/java/com/geedgenetworks/common/utils/FileUtils.java
index 2d59477..6796514 100644
--- a/groot-common/src/main/java/com/geedgenetworks/common/utils/FileUtils.java
+++ b/groot-common/src/main/java/com/geedgenetworks/common/utils/FileUtils.java
@@ -190,4 +190,21 @@ public class FileUtils {
public static String getFileName(@NonNull String filePath) {
return filePath.substring(filePath.lastIndexOf(File.separatorChar) + 1);
}
+
+ public static byte[] getFileFromDir(String filePath) {
+ try (BufferedInputStream bis = new BufferedInputStream(Files.newInputStream(Paths.get(filePath)));
+ ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
+
+ byte[] buffer = new byte[1024];
+ int bytesRead;
+ while ((bytesRead = bis.read(buffer)) != -1) {
+ baos.write(buffer, 0, bytesRead);
+ }
+ return baos.toByteArray();
+ } catch (Exception e) {
+ String errorMsg = String.format("get local file [%s] failed", filePath);
+ throw new GrootStreamRuntimeException(
+ CommonErrorCode.UNSUPPORTED_OPERATION, errorMsg, e);
+ }
+ }
}
diff --git a/groot-common/src/main/resources/grootstream.yaml b/groot-common/src/main/resources/grootstream.yaml
index efc5b52..1a9a974 100644
--- a/groot-common/src/main/resources/grootstream.yaml
+++ b/groot-common/src/main/resources/grootstream.yaml
@@ -12,6 +12,6 @@ grootstream:
- 64af7077-eb9b-4b8f-80cf-2ceebc89bea9
- 004390bc-3135-4a6f-a492-3662ecb9e289
properties:
- hos.path: http://192.168.44.12:8089
+ hos.path: http://192.168.44.12:9098/hos
hos.bucket.name.traffic_file: traffic_file_bucket
hos.bucket.name.troubleshooting_file: troubleshooting_file_bucket \ No newline at end of file
diff --git a/groot-common/src/test/resources/grootstream.yaml b/groot-common/src/test/resources/grootstream.yaml
index efc5b52..1a9a974 100644
--- a/groot-common/src/test/resources/grootstream.yaml
+++ b/groot-common/src/test/resources/grootstream.yaml
@@ -12,6 +12,6 @@ grootstream:
- 64af7077-eb9b-4b8f-80cf-2ceebc89bea9
- 004390bc-3135-4a6f-a492-3662ecb9e289
properties:
- hos.path: http://192.168.44.12:8089
+ hos.path: http://192.168.44.12:9098/hos
hos.bucket.name.traffic_file: traffic_file_bucket
hos.bucket.name.troubleshooting_file: troubleshooting_file_bucket \ No newline at end of file
diff --git a/groot-core/src/main/java/com/geedgenetworks/core/processor/projection/ProjectionProcessFunction.java b/groot-core/src/main/java/com/geedgenetworks/core/processor/projection/ProjectionProcessFunction.java
index 71454dc..cf82ab7 100644
--- a/groot-core/src/main/java/com/geedgenetworks/core/processor/projection/ProjectionProcessFunction.java
+++ b/groot-core/src/main/java/com/geedgenetworks/core/processor/projection/ProjectionProcessFunction.java
@@ -85,6 +85,7 @@ public class ProjectionProcessFunction extends ProcessFunction<Event, Event> {
} catch (Exception e) {
throw new GrootStreamRuntimeException(CommonErrorCode.UNSUPPORTED_OPERATION, "Initialization UDF failed!", e);
}
+ KnowledgeBaseScheduler.increment();
}
@Override
@@ -172,10 +173,12 @@ public class ProjectionProcessFunction extends ProcessFunction<Event, Event> {
public void close() throws Exception {
for (UdfEntity udfEntity : functions) {
-
udfEntity.getUdfFunction().close();
}
- KnowledgeBaseScheduler.stopSchedulerForKnowledgeBase();
+ KnowledgeBaseScheduler.decrement();
+ if(KnowledgeBaseScheduler.getCount()<=0) {
+ KnowledgeBaseScheduler.stopSchedulerForKnowledgeBase();
+ }
super.close();
}
diff --git a/groot-core/src/main/java/com/geedgenetworks/core/udf/AsnLookup.java b/groot-core/src/main/java/com/geedgenetworks/core/udf/AsnLookup.java
index 77e2c9a..33c0653 100644
--- a/groot-core/src/main/java/com/geedgenetworks/core/udf/AsnLookup.java
+++ b/groot-core/src/main/java/com/geedgenetworks/core/udf/AsnLookup.java
@@ -48,6 +48,8 @@ public class AsnLookup implements UDF {
}
this.lookupFieldName = udfContext.getLookup_fields().get(0);
this.outputFieldName = udfContext.getOutput_fields().get(0);
+ AsnKnowledgeBaseHandler.increment();
+ log.warn("AsnKnowledgeBaseHandlerCount "+AsnKnowledgeBaseHandler.getCount());
}
@@ -71,8 +73,11 @@ public class AsnLookup implements UDF {
@Override
public void close() {
-
- KnowledgeBaseUpdateJob.removeKnowledgeBase(kbName);
+ AsnKnowledgeBaseHandler.decrement();
+ if (AsnKnowledgeBaseHandler.getCount()<=0) {
+ KnowledgeBaseUpdateJob.removeKnowledgeBase(kbName);
+ log.warn("AsnKnowledgeBaseHandler removeKnowledgeBase "+kbName);
+ }
}
private void checkUdfContext(UDFContext udfContext) {
diff --git a/groot-core/src/main/java/com/geedgenetworks/core/udf/GeoIpLookup.java b/groot-core/src/main/java/com/geedgenetworks/core/udf/GeoIpLookup.java
index 9763758..442d499 100644
--- a/groot-core/src/main/java/com/geedgenetworks/core/udf/GeoIpLookup.java
+++ b/groot-core/src/main/java/com/geedgenetworks/core/udf/GeoIpLookup.java
@@ -56,6 +56,8 @@ public class GeoIpLookup implements UDF {
if(udfContext.getOutput_fields()!=null && !udfContext.getOutput_fields().isEmpty()){
this.outputFieldName = udfContext.getOutput_fields().get(0);
}
+ GeoIpKnowledgeBaseHandler.increment();
+ log.warn("GeoIpKnowledgeBaseHandler "+GeoIpKnowledgeBaseHandler.getCount());
}
@@ -163,6 +165,10 @@ public class GeoIpLookup implements UDF {
@Override
public void close() {
- KnowledgeBaseUpdateJob.removeKnowledgeBase(kbName);
+ GeoIpKnowledgeBaseHandler.decrement();
+ if (GeoIpKnowledgeBaseHandler.getCount()<=0) {
+ KnowledgeBaseUpdateJob.removeKnowledgeBase(kbName);
+ log.warn("GeoIpKnowledgeBaseHandler removeKnowledgeBase "+kbName);
+ }
}
}
diff --git a/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/KnowledgeBaseScheduler.java b/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/KnowledgeBaseScheduler.java
index 2047bb7..f006044 100644
--- a/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/KnowledgeBaseScheduler.java
+++ b/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/KnowledgeBaseScheduler.java
@@ -11,8 +11,17 @@ public class KnowledgeBaseScheduler {
private final static String JOB_GROUP = "knowledgeBase";
private final static String TRIGGER_NAME = "knowledgeBaseUpdateJob";
private static boolean methodCalled = false;
+ private static int count = 0;
-
+ public static synchronized void increment() {
+ count++;
+ }
+ public static synchronized void decrement() {
+ count--;
+ }
+ public static synchronized int getCount() {
+ return count;
+ }
public synchronized static void startSchedulerForKnowledgeBase(int intervalInMinutes) throws SchedulerException {
if(!methodCalled){
diff --git a/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/KnowledgeBaseUpdateJob.java b/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/KnowledgeBaseUpdateJob.java
index 84a7be4..c8c47de 100644
--- a/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/KnowledgeBaseUpdateJob.java
+++ b/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/KnowledgeBaseUpdateJob.java
@@ -63,7 +63,9 @@ public class KnowledgeBaseUpdateJob implements Job {
if (!KnowLedgeBaseEntityMap.isEmpty()) {
for (Map.Entry<String, KnowledgeBaseConfigWithHandler> entry : KnowLedgeBaseEntityMap.entrySet()) {
try {
- updateKnowledgeBase(entry.getValue());
+ if("http".equals(entry.getValue().getKnowledgeConfig().getFsType())) {
+ updateKnowledgeBase(entry.getValue());
+ }
} catch (Exception e) {
log.error(e.getMessage());
}
diff --git a/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/AbstractKnowledgeBaseHandler.java b/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/AbstractKnowledgeBaseHandler.java
index 96eeb11..dd95198 100644
--- a/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/AbstractKnowledgeBaseHandler.java
+++ b/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/AbstractKnowledgeBaseHandler.java
@@ -3,6 +3,7 @@ package com.geedgenetworks.core.udf.knowlegdebase.handler;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.geedgenetworks.common.config.KnowledgeBaseConfig;
+import com.geedgenetworks.common.utils.FileUtils;
import com.geedgenetworks.core.pojo.KnowLedgeBaseFileMeta;
import com.geedgenetworks.core.utils.HttpClientPoolUtil;
import lombok.extern.slf4j.Slf4j;
@@ -13,6 +14,7 @@ import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
+
@Slf4j
public abstract class AbstractKnowledgeBaseHandler {
@@ -58,30 +60,28 @@ public abstract class AbstractKnowledgeBaseHandler {
return inputStream;
}
+
+ public static byte[] getFileFromLocal(String filepath) {
+ return FileUtils.getFileFromDir(filepath);
+ }
+
+
+
public static List<KnowLedgeBaseFileMeta> getMetadata(String type, String path) {
List<KnowLedgeBaseFileMeta> knowLedgeBaseFileMetaList = new ArrayList<>();
try {
- switch (type) {
- case "http":
-
- HttpClientPoolUtil httpClientPoolUtil = HttpClientPoolUtil.getInstance();
- String metadate = httpClientPoolUtil.httpGet(URI.create(path));
- Map metaObject = JSON.parseObject(metadate, Map.class);
- JSONArray jsonArray = (JSONArray) metaObject.get("data");
- List<KnowLedgeBaseFileMeta> resultList = jsonArray.toJavaList(KnowLedgeBaseFileMeta.class);
- knowLedgeBaseFileMetaList.addAll(resultList);
- knowLedgeBaseFileMetaList.removeIf(knowLedgeBaseFileMeta -> !"latest".equals(knowLedgeBaseFileMeta.getVersion()));
- break;
- case "local":
- break;
- case "hdfs":
- break;
- default:
- log.error("get file Metadata error: fs_type not suppoort !");
- break;
- }
+
+ HttpClientPoolUtil httpClientPoolUtil = HttpClientPoolUtil.getInstance();
+ String metadate = httpClientPoolUtil.httpGet(URI.create(path));
+ Map metaObject = JSON.parseObject(metadate, Map.class);
+ JSONArray jsonArray = (JSONArray) metaObject.get("data");
+ List<KnowLedgeBaseFileMeta> resultList = jsonArray.toJavaList(KnowLedgeBaseFileMeta.class);
+ knowLedgeBaseFileMetaList.addAll(resultList);
+ knowLedgeBaseFileMetaList.removeIf(knowLedgeBaseFileMeta -> !"latest".equals(knowLedgeBaseFileMeta.getVersion()));
+
+
} catch (Exception e) {
log.error("get file Metadata error! path = " + path + " " + e.getMessage());
}
@@ -95,26 +95,15 @@ public abstract class AbstractKnowledgeBaseHandler {
List<KnowLedgeBaseFileMeta> knowLedgeBaseFileMetaList = new ArrayList<>();
try {
- switch (type) {
- case "http":
-
- HttpClientPoolUtil httpClientPoolUtil = HttpClientPoolUtil.getInstance();
- String metadate = httpClientPoolUtil.httpGet(URI.create(path + "?kb_id=" + kbId));
- Map metaObject = JSON.parseObject(metadate, Map.class);
- JSONArray jsonArray = (JSONArray) metaObject.get("data");
- knowLedgeBaseFileMetaList = jsonArray.toJavaList(KnowLedgeBaseFileMeta.class);
- knowLedgeBaseFileMetaList.removeIf(knowLedgeBaseFileMeta -> !"latest".equals(knowLedgeBaseFileMeta.getVersion()));
- break;
- case "local":
- log.error("get file Metadata error: fs_type local not suppoort !");
- break;
- case "hdfs":
- log.error("get file Metadata error: fs_type hdfs not suppoort !");
- break;
- default:
- log.error("get file Metadata error: fs_type not suppoort !");
- break;
- }
+
+ HttpClientPoolUtil httpClientPoolUtil = HttpClientPoolUtil.getInstance();
+ String metadate = httpClientPoolUtil.httpGet(URI.create(path + "?kb_id=" + kbId));
+ Map metaObject = JSON.parseObject(metadate, Map.class);
+ JSONArray jsonArray = (JSONArray) metaObject.get("data");
+ knowLedgeBaseFileMetaList = jsonArray.toJavaList(KnowLedgeBaseFileMeta.class);
+ knowLedgeBaseFileMetaList.removeIf(knowLedgeBaseFileMeta -> !"latest".equals(knowLedgeBaseFileMeta.getVersion()));
+
+
} catch (Exception e) {
log.error("get file Metadata error! path = " + path + " " + e.getMessage());
return null;
diff --git a/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/AbstractMultipleKnowledgeBaseHandler.java b/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/AbstractMultipleKnowledgeBaseHandler.java
index 548e40a..39be307 100644
--- a/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/AbstractMultipleKnowledgeBaseHandler.java
+++ b/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/AbstractMultipleKnowledgeBaseHandler.java
@@ -2,6 +2,8 @@ package com.geedgenetworks.core.udf.knowlegdebase.handler;
import com.alibaba.fastjson2.JSON;
import com.geedgenetworks.common.config.KnowledgeBaseConfig;
+import com.geedgenetworks.common.exception.CommonErrorCode;
+import com.geedgenetworks.common.exception.GrootStreamRuntimeException;
import com.geedgenetworks.core.pojo.KnowLedgeBaseFileMeta;
import lombok.AllArgsConstructor;
import lombok.Data;
@@ -38,7 +40,9 @@ public abstract class AbstractMultipleKnowledgeBaseHandler extends AbstractKnowl
@Override
public boolean initKnowledgeBase(KnowledgeBaseConfig knowledgeBaseConfig) {
this.knowledgeBaseConfig = knowledgeBaseConfig;
- this.knowledgeMetedataCacheMap = getMetadata(knowledgeBaseConfig.getFsPath());
+ if ("http".equals(knowledgeBaseConfig.getFsType())) {
+ this.knowledgeMetedataCacheMap = getMetadata(knowledgeBaseConfig.getFsPath());
+ }
return buildKnowledgeBase();
}
@@ -51,6 +55,26 @@ public abstract class AbstractMultipleKnowledgeBaseHandler extends AbstractKnowl
protected abstract Boolean buildKnowledgeBase();
+ protected byte[] downloadFile(Long id) {
+ if ("http".equals(knowledgeBaseConfig.getFsType())) {
+ return downloadFile(knowledgeMetedataCacheMap.get(encodeId(id)).getPath(), 1);
+ }
+ if ("local".equals(knowledgeBaseConfig.getFsType())) {
+ return getFileFromLocal(knowledgeBaseConfig.getFsPath() + id);
+ }
+ throw new GrootStreamRuntimeException(CommonErrorCode.ILLEGAL_ARGUMENT, knowledgeBaseConfig.getFsType() + " is illegal");
+ }
+
+ protected List<Long> getAllFileIds() {
+ if ("http".equals(knowledgeBaseConfig.getFsType())) {
+ return knowledgeMetedataCacheMap.keySet().stream().map(AbstractMultipleKnowledgeBaseHandler::decodeId).collect(Collectors.toList());
+ }
+ if ("local".equals(knowledgeBaseConfig.getFsType())) {
+ return knowledgeBaseConfig.getFiles().stream().map(AbstractMultipleKnowledgeBaseHandler::decodeId).collect(Collectors.toList());
+ }
+ throw new GrootStreamRuntimeException(CommonErrorCode.ILLEGAL_ARGUMENT, knowledgeBaseConfig.getFsType() + " is illegal");
+ }
+
protected Boolean ifNeedUpdate() {
Map<String, KnowLedgeBaseFileMeta> knowledgeMetedataMap = getMetadata(knowledgeBaseConfig.getFsPath());
if (knowledgeMetedataMap.size() != knowledgeMetedataCacheMap.size()) {
@@ -76,7 +100,7 @@ public abstract class AbstractMultipleKnowledgeBaseHandler extends AbstractKnowl
KnowledgeResponse knowledgeResponse = JSON.parseObject(content, KnowledgeResponse.class);
List<KnowLedgeBaseFileMeta> knowledgeMetedataList = JSON.parseArray(knowledgeResponse.data, KnowLedgeBaseFileMeta.class);
return knowledgeMetedataList.stream()
- .filter(metadata -> "latest".equals(metadata.getVersion()) && metadata.getIsValid() == 1 && metadata.getSha256() != null)
+ .filter(metadata -> "latest".equals(metadata.getVersion()) && metadata.getIsValid() == 1 && metadata.getSha256() != null && checkId(metadata.getKb_id()))
.collect(Collectors.toMap(KnowLedgeBaseFileMeta::getKb_id, Function.identity(), (existing, replacement) -> existing, HashMap::new));
}
} catch (IOException e) {
@@ -85,6 +109,16 @@ public abstract class AbstractMultipleKnowledgeBaseHandler extends AbstractKnowl
return new HashMap<>();
}
+ public static boolean checkId(String id) {
+ try {
+ decodeId(id);
+ return true;
+ } catch (Exception e) {
+ logger.error("knowledge id:" + id + " is illegal", e);
+ return false;
+ }
+ }
+
@Data
private static final class KnowledgeResponse {
private int status;
@@ -99,15 +133,20 @@ public abstract class AbstractMultipleKnowledgeBaseHandler extends AbstractKnowl
* @param id
* @return
*/
- protected Long convertId(String id) {
+ public static Long decodeId(String id) {
return Long.parseLong(id);
}
+ public static String encodeId(Long id) {
+ return String.valueOf(id);
+ }
+
@Data
@AllArgsConstructor
public static final class Node {
private String tag;
private Long kbId;
-
}
+
+ public abstract void close();
}
diff --git a/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/AbstractSingleKnowledgeBaseHandler.java b/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/AbstractSingleKnowledgeBaseHandler.java
index 1691b88..cd831de 100644
--- a/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/AbstractSingleKnowledgeBaseHandler.java
+++ b/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/AbstractSingleKnowledgeBaseHandler.java
@@ -1,6 +1,8 @@
package com.geedgenetworks.core.udf.knowlegdebase.handler;
import com.alibaba.fastjson2.JSON;
import com.geedgenetworks.common.config.KnowledgeBaseConfig;
+import com.geedgenetworks.common.exception.CommonErrorCode;
+import com.geedgenetworks.common.exception.GrootStreamRuntimeException;
import com.geedgenetworks.core.pojo.KnowLedgeBaseFileMeta;
import lombok.Data;
import org.apache.http.HttpEntity;
@@ -34,7 +36,9 @@ public abstract class AbstractSingleKnowledgeBaseHandler extends AbstractKnowled
@Override
public boolean initKnowledgeBase(KnowledgeBaseConfig knowledgeBaseConfig) {
this.knowledgeBaseConfig = knowledgeBaseConfig;
- this.knowledgeMetedataCache = getMetadata(knowledgeBaseConfig.getFsType(), knowledgeBaseConfig.getFsPath(), knowledgeBaseConfig.getFiles().get(0));
+ if ("http".equals(knowledgeBaseConfig.getFsType())) {
+ this.knowledgeMetedataCache = getMetadata(knowledgeBaseConfig.getFsType(), knowledgeBaseConfig.getFsPath(), knowledgeBaseConfig.getFiles().get(0));
+ }
return buildKnowledgeBase();
}
@@ -47,6 +51,16 @@ public abstract class AbstractSingleKnowledgeBaseHandler extends AbstractKnowled
protected abstract Boolean buildKnowledgeBase();
+ public byte[] downloadFile() {
+ if ("http".equals(knowledgeBaseConfig.getFsType())) {
+ return downloadFile(knowledgeMetedataCache.getPath(), 1);
+ }
+ if ("local".equals(knowledgeBaseConfig.getFsType())) {
+ return getFileFromLocal(knowledgeBaseConfig.getFsPath() + knowledgeBaseConfig.getFiles().get(0));
+ }
+ throw new GrootStreamRuntimeException(CommonErrorCode.ILLEGAL_ARGUMENT, knowledgeBaseConfig.getFsType() + " is illegal");
+ }
+
protected Boolean ifNeedUpdate() {
KnowLedgeBaseFileMeta knowledgeMetedata = getMetadata(knowledgeBaseConfig.getFsType(), knowledgeBaseConfig.getFsPath(), knowledgeBaseConfig.getFiles().get(0));
if (knowledgeMetedata == null || knowledgeMetedata.getSha256() == null) {
@@ -89,4 +103,5 @@ public abstract class AbstractSingleKnowledgeBaseHandler extends AbstractKnowled
private String data;
}
+ public abstract void close();
}
diff --git a/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/AppCategoryKnowledgeBaseHandler.java b/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/AppCategoryKnowledgeBaseHandler.java
index cf579fd..c66a86a 100644
--- a/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/AppCategoryKnowledgeBaseHandler.java
+++ b/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/AppCategoryKnowledgeBaseHandler.java
@@ -43,7 +43,7 @@ public class AppCategoryKnowledgeBaseHandler extends AbstractSingleKnowledgeBase
needColumns.add("app_subcategory");
needColumns.add("app_company");
needColumns.add("app_company_category");
- byte[] content = downloadFile(knowledgeMetedataCache.getPath(), 1);
+ byte[] content = downloadFile();
HighCsvReader highCsvReader = new HighCsvReader(new InputStreamReader(new ByteArrayInputStream(content)), needColumns);
HashMap<String, AppCategory> newAppMap = new HashMap<>((int) (highCsvReader.getLineNumber() / 0.75F + 1.0F));
HighCsvReader.CsvIterator iterator = highCsvReader.getIterator();
@@ -88,4 +88,9 @@ public class AppCategoryKnowledgeBaseHandler extends AbstractSingleKnowledgeBase
private String appCompany;
private String appCompanyCategory;
}
+
+ public void close() {
+ appMap.clear();
+ appMap = null;
+ }
}
diff --git a/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/AppTagUserDefineKnowledgeBaseHandler.java b/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/AppTagUserDefineKnowledgeBaseHandler.java
index 0ff0183..d09c11e 100644
--- a/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/AppTagUserDefineKnowledgeBaseHandler.java
+++ b/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/AppTagUserDefineKnowledgeBaseHandler.java
@@ -1,6 +1,5 @@
package com.geedgenetworks.core.udf.knowlegdebase.handler;
-import com.geedgenetworks.core.pojo.KnowLedgeBaseFileMeta;
import com.geedgenetworks.core.utils.cn.csv.HighCsvReader;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -37,19 +36,17 @@ public class AppTagUserDefineKnowledgeBaseHandler extends AbstractMultipleKnowle
@Override
protected Boolean buildKnowledgeBase() {
Map<String, List<Node>> newAppTagRules = new HashMap<>();
- this.knowledgeMetedataCacheMap.forEach((key, value) -> {
- buildSingleKnowledgeBase(newAppTagRules, convertId(key), value);
- });
+ getAllFileIds().forEach(id -> buildSingleKnowledgeBase(newAppTagRules, id));
appTagRules = newAppTagRules;
return true;
}
- private void buildSingleKnowledgeBase(Map<String, List<Node>> appTags, Long id, KnowLedgeBaseFileMeta metadata) {
+ private void buildSingleKnowledgeBase(Map<String, List<Node>> appTags, Long id) {
try {
List<String> needColumns = new ArrayList<>();
needColumns.add("tag_value");
needColumns.add("app_name");
- byte[] content = downloadFile(metadata.getPath(), 1);
+ byte[] content = downloadFile(id);
HighCsvReader highCsvReader = new HighCsvReader(new InputStreamReader(new ByteArrayInputStream(content)), needColumns);
HighCsvReader.CsvIterator iterator = highCsvReader.getIterator();
while (iterator.hasNext()) {
@@ -79,4 +76,8 @@ public class AppTagUserDefineKnowledgeBaseHandler extends AbstractMultipleKnowle
return new ArrayList<>();
}
+ public void close() {
+ appTagRules.clear();
+ appTagRules = null;
+ }
}
diff --git a/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/AsnKnowledgeBaseHandler.java b/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/AsnKnowledgeBaseHandler.java
index 6d5860c..381b0aa 100644
--- a/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/AsnKnowledgeBaseHandler.java
+++ b/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/AsnKnowledgeBaseHandler.java
@@ -2,29 +2,38 @@ package com.geedgenetworks.core.udf.knowlegdebase.handler;
import com.geedgenetworks.common.config.KnowledgeBaseConfig;
-
import com.geedgenetworks.core.pojo.KnowLedgeBaseFileMeta;
import com.geedgenetworks.core.pojo.KnowledgeBaseInfoForIpLookUp;
import com.geedgenetworks.utils.IpLookupV2;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
-
import java.io.ByteArrayInputStream;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
+
@Slf4j
public class AsnKnowledgeBaseHandler extends AbstractKnowledgeBaseHandler {
@Getter
private static Map<String, KnowledgeBaseInfoForIpLookUp> kbNameWithKbConfigAndFileMetas = new ConcurrentHashMap<>();
private static AsnKnowledgeBaseHandler instance;
+ private static int count = 0;
// 私有构造函数,防止外部实例化
private AsnKnowledgeBaseHandler() {
}
+ public static synchronized void increment() {
+ count++;
+ }
+ public static synchronized void decrement() {
+ count--;
+ }
+ public static synchronized int getCount() {
+ return count;
+ }
public static synchronized AsnKnowledgeBaseHandler getInstance() {
if (instance == null) {
instance = new AsnKnowledgeBaseHandler();
@@ -34,8 +43,12 @@ public class AsnKnowledgeBaseHandler extends AbstractKnowledgeBaseHandler {
@Override
public boolean initKnowledgeBase(KnowledgeBaseConfig knowledgeBaseConfig) {
- return buildKnowledgeBase(knowledgeBaseConfig);
- }
+
+ if("http".equals(knowledgeBaseConfig.getFsType()))
+ return buildKnowledgeBaseWithMeta(knowledgeBaseConfig);
+ else
+ return buildKnowledgeBaseWithoutMeta(knowledgeBaseConfig);
+ }
@Override
public void updateKnowledgeBase() {
@@ -43,7 +56,7 @@ public class AsnKnowledgeBaseHandler extends AbstractKnowledgeBaseHandler {
for (Map.Entry<String, KnowledgeBaseInfoForIpLookUp> entry : kbNameWithKbConfigAndFileMetas.entrySet()) {
try {
if (ifNeedUpdate(entry.getValue())) {
- boolean result = buildKnowledgeBase(entry.getValue().getKnowledgeConfig());
+ boolean result = buildKnowledgeBaseWithMeta(entry.getValue().getKnowledgeConfig());
if(result) {
log.warn("AsnKnowledgeBase " + entry.getKey() + " update success!");
}
@@ -80,8 +93,35 @@ public class AsnKnowledgeBaseHandler extends AbstractKnowledgeBaseHandler {
}
return false;
}
+ private boolean buildKnowledgeBaseWithoutMeta(KnowledgeBaseConfig knowledgeBaseConfig) {
- private static boolean buildKnowledgeBase(KnowledgeBaseConfig knowledgeBaseConfig) {
+ IpLookupV2.Builder asnLookupBuilder = new IpLookupV2.Builder(false);
+ for (int i = 0; i < knowledgeBaseConfig.getFiles().size(); i++) {
+ try {
+ byte[] fileByte = getFileFromLocal(knowledgeBaseConfig.getFsPath() + knowledgeBaseConfig.getFiles().get(i));
+ switch (i) {
+ case 0:
+ asnLookupBuilder.loadAsnDataFile(new ByteArrayInputStream(fileByte));
+ break;
+ case 1:
+ asnLookupBuilder.loadDataFilePrivate(new ByteArrayInputStream(fileByte));
+ break;
+ }
+
+ } catch (Exception e) {
+ log.error("buildKnowledgeBase error " + e.getMessage());
+ return false;
+ }
+
+ }
+ IpLookupV2 ipLookup = asnLookupBuilder.build();
+ KnowledgeBaseInfoForIpLookUp kbInfoForIpLookUp = new KnowledgeBaseInfoForIpLookUp();
+ kbInfoForIpLookUp.setKnowledgeConfig(knowledgeBaseConfig);
+ kbInfoForIpLookUp.setIpLookupV2(ipLookup);
+ kbNameWithKbConfigAndFileMetas.put(knowledgeBaseConfig.getName(), kbInfoForIpLookUp);
+ return true;
+ }
+ private static boolean buildKnowledgeBaseWithMeta(KnowledgeBaseConfig knowledgeBaseConfig) {
IpLookupV2.Builder asnLookupBuilder = new IpLookupV2.Builder(false);
List<KnowLedgeBaseFileMeta> knowLedgeBaseFileMetas = new ArrayList<>();
diff --git a/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/DnsServerInfoKnowledgeBaseHandler.java b/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/DnsServerInfoKnowledgeBaseHandler.java
index 1f7196a..bb3a8c9 100644
--- a/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/DnsServerInfoKnowledgeBaseHandler.java
+++ b/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/DnsServerInfoKnowledgeBaseHandler.java
@@ -39,7 +39,7 @@ public class DnsServerInfoKnowledgeBaseHandler extends AbstractSingleKnowledgeBa
List<String> needColumns = new ArrayList<>();
needColumns.add("ip_addr");
needColumns.add("dns_server_role");
- byte[] content = downloadFile(knowledgeMetedataCache.getPath(), 1);
+ byte[] content = downloadFile();
HighCsvReader highCsvReader = new HighCsvReader(new InputStreamReader(new ByteArrayInputStream(content)), needColumns);
HashMap<String, List<String>> newDnsMap = new HashMap<>((int) (highCsvReader.getLineNumber() / 0.75F + 1.0F));
HighCsvReader.CsvIterator iterator = highCsvReader.getIterator();
@@ -64,4 +64,9 @@ public class DnsServerInfoKnowledgeBaseHandler extends AbstractSingleKnowledgeBa
public List<String> lookup(String ip) {
return dnsMap.get(ip);
}
+
+ public void close() {
+ dnsMap.clear();
+ dnsMap = null;
+ }
}
diff --git a/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/DomainTagUserDefineKnowledgeBaseHandler.java b/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/DomainTagUserDefineKnowledgeBaseHandler.java
index 37abe9e..85e1ad4 100644
--- a/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/DomainTagUserDefineKnowledgeBaseHandler.java
+++ b/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/DomainTagUserDefineKnowledgeBaseHandler.java
@@ -1,6 +1,5 @@
package com.geedgenetworks.core.udf.knowlegdebase.handler;
-import com.geedgenetworks.core.pojo.KnowLedgeBaseFileMeta;
import com.geedgenetworks.core.utils.cn.common.Trie;
import com.geedgenetworks.core.utils.cn.csv.HighCsvReader;
import org.apache.commons.lang3.StringUtils;
@@ -41,20 +40,18 @@ public class DomainTagUserDefineKnowledgeBaseHandler extends AbstractMultipleKno
protected Boolean buildKnowledgeBase() {
Trie<Node> newFqdnTagFuzzyMatchRules = new Trie<>();
Map<String, List<Node>> newFqdnTagFullMatchRules = new HashMap<>();
- this.knowledgeMetedataCacheMap.forEach((key, value) -> {
- buildSingleKnowledgeBase(newFqdnTagFuzzyMatchRules, newFqdnTagFullMatchRules, convertId(key), value);
- });
+ getAllFileIds().forEach(id -> buildSingleKnowledgeBase(newFqdnTagFuzzyMatchRules, newFqdnTagFullMatchRules, id));
fqdnTagFuzzyMatchRules = newFqdnTagFuzzyMatchRules;
fqdnTagFullMatchRules = newFqdnTagFullMatchRules;
return true;
}
- private void buildSingleKnowledgeBase(Trie<Node> fqdnTagsFuzzy, Map<String, List<Node>> fqdnTagsFull, Long id, KnowLedgeBaseFileMeta metadata) {
+ private void buildSingleKnowledgeBase(Trie<Node> fqdnTagsFuzzy, Map<String, List<Node>> fqdnTagsFull, Long id) {
try {
List<String> needColumns = new ArrayList<>();
needColumns.add("tag_value");
needColumns.add("domain");
- byte[] content = downloadFile(metadata.getPath(), 1);
+ byte[] content = downloadFile(id);
HighCsvReader highCsvReader = new HighCsvReader(new InputStreamReader(new ByteArrayInputStream(content)), needColumns);
HighCsvReader.CsvIterator iterator = highCsvReader.getIterator();
while (iterator.hasNext()) {
@@ -102,4 +99,11 @@ public class DomainTagUserDefineKnowledgeBaseHandler extends AbstractMultipleKno
}
return nodes;
}
+
+ @Override
+ public void close() {
+ fqdnTagFuzzyMatchRules = null;
+ fqdnTagFullMatchRules.clear();
+ fqdnTagFullMatchRules = null;
+ }
}
diff --git a/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/DomainVpnKnowledgeBaseHandler.java b/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/DomainVpnKnowledgeBaseHandler.java
index 2eada2a..a8fa70c 100644
--- a/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/DomainVpnKnowledgeBaseHandler.java
+++ b/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/DomainVpnKnowledgeBaseHandler.java
@@ -39,7 +39,7 @@ public class DomainVpnKnowledgeBaseHandler extends AbstractSingleKnowledgeBaseHa
List<String> needColumns = new ArrayList<>();
needColumns.add("domain");
needColumns.add("vpn_service_name");
- byte[] content = downloadFile(knowledgeMetedataCache.getPath(), 1);
+ byte[] content = downloadFile();
HighCsvReader highCsvReader = new HighCsvReader(new InputStreamReader(new ByteArrayInputStream(content)), needColumns);
Map<String, String> newMap = new HashMap<>((int) (highCsvReader.getLineNumber() / 0.75F + 1.0F));
HighCsvReader.CsvIterator iterator = highCsvReader.getIterator();
@@ -77,4 +77,9 @@ public class DomainVpnKnowledgeBaseHandler extends AbstractSingleKnowledgeBaseHa
}
}
}
+
+ public void close() {
+ map.clear();
+ map = null;
+ }
}
diff --git a/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/FqdnCategoryKnowledgeBaseHandler.java b/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/FqdnCategoryKnowledgeBaseHandler.java
index ba7d166..a70fdf8 100644
--- a/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/FqdnCategoryKnowledgeBaseHandler.java
+++ b/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/FqdnCategoryKnowledgeBaseHandler.java
@@ -42,7 +42,7 @@ public class FqdnCategoryKnowledgeBaseHandler extends AbstractSingleKnowledgeBas
needColumns.add("reputation_level");
needColumns.add("category_name");
needColumns.add("category_group");
- byte[] content = downloadFile(knowledgeMetedataCache.getPath(), 1);
+ byte[] content = downloadFile();
HighCsvReader highCsvReader = new HighCsvReader(new InputStreamReader(new ByteArrayInputStream(content)), needColumns);
HashMap<String, FqdnCategory> newCategoryMap = new HashMap<>((int) (highCsvReader.getLineNumber() / 0.75F + 1.0F));
HighCsvReader.CsvIterator iterator = highCsvReader.getIterator();
@@ -96,4 +96,9 @@ public class FqdnCategoryKnowledgeBaseHandler extends AbstractSingleKnowledgeBas
private String categoryGroup;
private String reputationLevel;
}
+
+ public void close() {
+ categoryMap.clear();
+ categoryMap = null;
+ }
}
diff --git a/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/FqdnIcpKnowledgeBaseHandler.java b/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/FqdnIcpKnowledgeBaseHandler.java
index b983ac0..8891a46 100644
--- a/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/FqdnIcpKnowledgeBaseHandler.java
+++ b/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/FqdnIcpKnowledgeBaseHandler.java
@@ -38,7 +38,7 @@ public class FqdnIcpKnowledgeBaseHandler extends AbstractSingleKnowledgeBaseHand
List<String> needColumns = new ArrayList<>();
needColumns.add("fqdn");
needColumns.add("icp_company_name");
- byte[] content = downloadFile(knowledgeMetedataCache.getPath(), 1);
+ byte[] content = downloadFile();
HighCsvReader highCsvReader = new HighCsvReader(new InputStreamReader(new ByteArrayInputStream(content)), needColumns);
HashMap<String, String> newIcpMap = new HashMap<>((int) (highCsvReader.getLineNumber() / 0.75F + 1.0F));
HighCsvReader.CsvIterator iterator = highCsvReader.getIterator();
@@ -76,4 +76,9 @@ public class FqdnIcpKnowledgeBaseHandler extends AbstractSingleKnowledgeBaseHand
}
}
}
+
+ public void close() {
+ icpMap.clear();
+ icpMap = null;
+ }
}
diff --git a/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/FqdnWhoisKnowledgeBaseHandler.java b/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/FqdnWhoisKnowledgeBaseHandler.java
index b9a2457..2803d10 100644
--- a/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/FqdnWhoisKnowledgeBaseHandler.java
+++ b/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/FqdnWhoisKnowledgeBaseHandler.java
@@ -39,7 +39,7 @@ public class FqdnWhoisKnowledgeBaseHandler extends AbstractSingleKnowledgeBaseHa
List<String> needColumns = new ArrayList<>();
needColumns.add("fqdn");
needColumns.add("whois_registrant_org");
- byte[] content = downloadFile(knowledgeMetedataCache.getPath(), 1);
+ byte[] content = downloadFile();
HighCsvReader highCsvReader = new HighCsvReader(new InputStreamReader(new ByteArrayInputStream(content)), needColumns);
HashMap<String, String> newWhoIsMap = new HashMap<>((int) (highCsvReader.getLineNumber() / 0.75F + 1.0F));
HighCsvReader.CsvIterator iterator = highCsvReader.getIterator();
@@ -77,4 +77,9 @@ public class FqdnWhoisKnowledgeBaseHandler extends AbstractSingleKnowledgeBaseHa
}
}
}
+
+ public void close() {
+ whoIsMap.clear();
+ whoIsMap = null;
+ }
}
diff --git a/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/GeoIpKnowledgeBaseHandler.java b/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/GeoIpKnowledgeBaseHandler.java
index a441369..4d207a2 100644
--- a/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/GeoIpKnowledgeBaseHandler.java
+++ b/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/GeoIpKnowledgeBaseHandler.java
@@ -20,10 +20,19 @@ public class GeoIpKnowledgeBaseHandler extends AbstractKnowledgeBaseHandler {
private static Map<String, KnowledgeBaseInfoForIpLookUp> kbNameWithKbConfigAndFileMetas = new ConcurrentHashMap<>();
private static GeoIpKnowledgeBaseHandler instance;
+ private static int count = 0;
private GeoIpKnowledgeBaseHandler() {
}
-
+ public static synchronized void increment() {
+ count++;
+ }
+ public static synchronized void decrement() {
+ count--;
+ }
+ public static synchronized int getCount() {
+ return count;
+ }
public static synchronized GeoIpKnowledgeBaseHandler getInstance() {
if (instance == null) {
instance = new GeoIpKnowledgeBaseHandler();
@@ -33,7 +42,11 @@ public class GeoIpKnowledgeBaseHandler extends AbstractKnowledgeBaseHandler {
@Override
public boolean initKnowledgeBase(KnowledgeBaseConfig knowledgeBaseConfig) {
- return buildKnowledgeBase(knowledgeBaseConfig);
+ if("http".equals(knowledgeBaseConfig.getFsType()))
+ return buildKnowledgeBaseWithMeta(knowledgeBaseConfig);
+ else
+ return buildKnowledgeBaseWithoutMeta(knowledgeBaseConfig);
+
}
@Override
@@ -42,7 +55,7 @@ public class GeoIpKnowledgeBaseHandler extends AbstractKnowledgeBaseHandler {
for (Map.Entry<String, KnowledgeBaseInfoForIpLookUp> entry : kbNameWithKbConfigAndFileMetas.entrySet()) {
try {
if (ifNeedUpdate(entry.getValue())) {
- boolean result = buildKnowledgeBase(entry.getValue().getKnowledgeConfig());
+ boolean result = buildKnowledgeBaseWithMeta(entry.getValue().getKnowledgeConfig());
if(result) {
log.warn("GeoIpKnowledgeBase " + entry.getKey() + " update success!");
}
@@ -66,8 +79,35 @@ public class GeoIpKnowledgeBaseHandler extends AbstractKnowledgeBaseHandler {
}
return false;
}
+ private boolean buildKnowledgeBaseWithoutMeta(KnowledgeBaseConfig knowledgeBaseConfig) {
- private static boolean buildKnowledgeBase(KnowledgeBaseConfig knowledgeBaseConfig) {
+ IpLookupV2.Builder ipLookupBuilder = new IpLookupV2.Builder(false);
+ for (int i = 0; i < knowledgeBaseConfig.getFiles().size(); i++) {
+ try {
+ byte[] fileByte = getFileFromLocal(knowledgeBaseConfig.getFsPath()+knowledgeBaseConfig.getFiles().get(i));
+ switch (i) {
+ case 0:
+ ipLookupBuilder.loadDataFile(new ByteArrayInputStream(fileByte));
+ break;
+ case 1:
+ ipLookupBuilder.loadDataFilePrivate(new ByteArrayInputStream(fileByte));
+ break;
+ }
+
+ } catch (Exception e) {
+ log.error("buildKnowledgeBase error " + e.getMessage());
+ return false;
+ }
+
+ }
+ IpLookupV2 ipLookup = ipLookupBuilder.build();
+ KnowledgeBaseInfoForIpLookUp kbInfoForIpLookUp = new KnowledgeBaseInfoForIpLookUp();
+ kbInfoForIpLookUp.setKnowledgeConfig(knowledgeBaseConfig);
+ kbInfoForIpLookUp.setIpLookupV2(ipLookup);
+ kbNameWithKbConfigAndFileMetas.put(knowledgeBaseConfig.getName(), kbInfoForIpLookUp);
+ return true;
+ }
+ private static boolean buildKnowledgeBaseWithMeta(KnowledgeBaseConfig knowledgeBaseConfig) {
IpLookupV2.Builder ipLookupBuilder = new IpLookupV2.Builder(false);
List<KnowLedgeBaseFileMeta> knowLedgeBaseFileMetas = new ArrayList<>();
diff --git a/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/IdcRenterKnowledgeBaseHandler.java b/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/IdcRenterKnowledgeBaseHandler.java
index d7c7f1f..50127bb 100644
--- a/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/IdcRenterKnowledgeBaseHandler.java
+++ b/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/IdcRenterKnowledgeBaseHandler.java
@@ -44,7 +44,7 @@ public class IdcRenterKnowledgeBaseHandler extends AbstractSingleKnowledgeBaseHa
needColumns.add("ip1");
needColumns.add("ip2");
needColumns.add("idc_renter");
- byte[] content = downloadFile(knowledgeMetedataCache.getPath(), 1);
+ byte[] content = downloadFile();
HighCsvReader highCsvReader = new HighCsvReader(new InputStreamReader(new ByteArrayInputStream(content)), needColumns);
TreeRangeMap<IPAddress, String> newTreeRangeMap = TreeRangeMap.create();
HighCsvReader.CsvIterator iterator = highCsvReader.getIterator();
@@ -103,4 +103,9 @@ public class IdcRenterKnowledgeBaseHandler extends AbstractSingleKnowledgeBaseHa
}
return null;
}
+
+ public void close() {
+ treeRangeMap.clear();
+ treeRangeMap = null;
+ }
}
diff --git a/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/InternalIpKnowledgeBaseHandler.java b/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/InternalIpKnowledgeBaseHandler.java
index 4faefc5..4d6ad3e 100644
--- a/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/InternalIpKnowledgeBaseHandler.java
+++ b/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/InternalIpKnowledgeBaseHandler.java
@@ -43,7 +43,7 @@ public class InternalIpKnowledgeBaseHandler extends AbstractSingleKnowledgeBaseH
needColumns.add("addr_format");
needColumns.add("ip1");
needColumns.add("ip2");
- byte[] content = downloadFile(knowledgeMetedataCache.getPath(), 1);
+ byte[] content = downloadFile();
HighCsvReader highCsvReader = new HighCsvReader(new InputStreamReader(new ByteArrayInputStream(content)), needColumns);
TreeRangeSet<IPAddress> newTreeRangeSet = TreeRangeSet.create();
HighCsvReader.CsvIterator iterator = highCsvReader.getIterator();
@@ -107,4 +107,9 @@ public class InternalIpKnowledgeBaseHandler extends AbstractSingleKnowledgeBaseH
}
return false;
}
+
+ public void close() {
+ treeRangeSet.clear();
+ treeRangeSet = null;
+ }
}
diff --git a/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/IocDarkwebKnowledgeBaseHandler.java b/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/IocDarkwebKnowledgeBaseHandler.java
index 859206d..0d0dec4 100644
--- a/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/IocDarkwebKnowledgeBaseHandler.java
+++ b/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/IocDarkwebKnowledgeBaseHandler.java
@@ -41,7 +41,7 @@ public class IocDarkwebKnowledgeBaseHandler extends AbstractSingleKnowledgeBaseH
needColumns.add("ioc_type");
needColumns.add("ioc_value");
needColumns.add("node_type");
- byte[] content = downloadFile(knowledgeMetedataCache.getPath(), 1);
+ byte[] content = downloadFile();
HighCsvReader highCsvReader = new HighCsvReader(new InputStreamReader(new ByteArrayInputStream(content)), needColumns);
HashMap<String, String> newIpMap = new HashMap<>((int) (highCsvReader.getLineNumber() / 0.75F + 1.0F));
HashMap<String, String> newDomainMap = new HashMap<>((int) (highCsvReader.getLineNumber() / 0.75F + 1.0F));
@@ -90,4 +90,11 @@ public class IocDarkwebKnowledgeBaseHandler extends AbstractSingleKnowledgeBaseH
}
}
}
+
+ public void close() {
+ ipMap.clear();
+ ipMap = null;
+ domainMap.clear();
+ domainMap = null;
+ }
}
diff --git a/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/IocMalwareKnowledgeBaseHandler.java b/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/IocMalwareKnowledgeBaseHandler.java
index 94dc628..8e6f83b 100644
--- a/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/IocMalwareKnowledgeBaseHandler.java
+++ b/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/IocMalwareKnowledgeBaseHandler.java
@@ -43,7 +43,7 @@ public class IocMalwareKnowledgeBaseHandler extends AbstractSingleKnowledgeBaseH
needColumns.add("ioc_type");
needColumns.add("ioc_value");
needColumns.add("malware_name");
- byte[] content = downloadFile(knowledgeMetedataCache.getPath(), 1);
+ byte[] content = downloadFile();
HighCsvReader highCsvReader = new HighCsvReader(new InputStreamReader(new ByteArrayInputStream(content)), needColumns);
HashMap<String, String> newIpMap = new HashMap<>((int) (highCsvReader.getLineNumber() / 0.75F + 1.0F));
HashMap<String, String> newDomainMap = new HashMap<>((int) (highCsvReader.getLineNumber() / 0.75F + 1.0F));
@@ -104,4 +104,12 @@ public class IocMalwareKnowledgeBaseHandler extends AbstractSingleKnowledgeBaseH
}
return list.get(0);
}
+
+ public void close() {
+ ipMap.clear();
+ ipMap = null;
+ domainMap.clear();
+ domainMap = null;
+ urlTrie = null;
+ }
}
diff --git a/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/IpTagUserDefineKnowledgeBaseHandler.java b/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/IpTagUserDefineKnowledgeBaseHandler.java
index d5a4a13..3b2f1e3 100644
--- a/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/IpTagUserDefineKnowledgeBaseHandler.java
+++ b/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/IpTagUserDefineKnowledgeBaseHandler.java
@@ -1,6 +1,5 @@
package com.geedgenetworks.core.udf.knowlegdebase.handler;
-import com.geedgenetworks.core.pojo.KnowLedgeBaseFileMeta;
import com.geedgenetworks.core.utils.cn.csv.HighCsvReader;
import inet.ipaddr.IPAddress;
import inet.ipaddr.IPAddressString;
@@ -40,21 +39,19 @@ public class IpTagUserDefineKnowledgeBaseHandler extends AbstractMultipleKnowled
@Override
protected Boolean buildKnowledgeBase() {
TreeRangeMap<IPAddress, List<Node>> newIpTagRules = TreeRangeMap.create();
- this.knowledgeMetedataCacheMap.forEach((key, value) -> {
- buildSingleKnowledgeBase(newIpTagRules, convertId(key), value);
- });
+ getAllFileIds().forEach(id -> buildSingleKnowledgeBase(newIpTagRules, id));
ipTagRules = newIpTagRules;
return true;
}
- private void buildSingleKnowledgeBase(TreeRangeMap<IPAddress, List<Node>> treeRangeMap, Long id, KnowLedgeBaseFileMeta metadata) {
+ private void buildSingleKnowledgeBase(TreeRangeMap<IPAddress, List<Node>> treeRangeMap, Long id) {
try {
List<String> needColumns = new ArrayList<>();
needColumns.add("tag_value");
needColumns.add("addr_format");
needColumns.add("ip1");
needColumns.add("ip2");
- byte[] content = downloadFile(metadata.getPath(), 1);
+ byte[] content = downloadFile(id);
HighCsvReader highCsvReader = new HighCsvReader(new InputStreamReader(new ByteArrayInputStream(content)), needColumns);
HighCsvReader.CsvIterator iterator = highCsvReader.getIterator();
while (iterator.hasNext()) {
@@ -124,4 +121,10 @@ public class IpTagUserDefineKnowledgeBaseHandler extends AbstractMultipleKnowled
}
return nodes == null ? new ArrayList<>() : nodes;
}
+
+ @Override
+ public void close() {
+ ipTagRules.clear();
+ ipTagRules = null;
+ }
}
diff --git a/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/IpVpnKnowledgeBaseHandler.java b/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/IpVpnKnowledgeBaseHandler.java
index a1fc9ff..99b3168 100644
--- a/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/IpVpnKnowledgeBaseHandler.java
+++ b/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/IpVpnKnowledgeBaseHandler.java
@@ -44,7 +44,7 @@ public class IpVpnKnowledgeBaseHandler extends AbstractSingleKnowledgeBaseHandle
needColumns.add("ip1");
needColumns.add("ip2");
needColumns.add("vpn_service_name");
- byte[] content = downloadFile(knowledgeMetedataCache.getPath(), 1);
+ byte[] content = downloadFile();
HighCsvReader highCsvReader = new HighCsvReader(new InputStreamReader(new ByteArrayInputStream(content)), needColumns);
TreeRangeMap<IPAddress, String> newTreeRangeMap = TreeRangeMap.create();
HighCsvReader.CsvIterator iterator = highCsvReader.getIterator();
@@ -103,4 +103,10 @@ public class IpVpnKnowledgeBaseHandler extends AbstractSingleKnowledgeBaseHandle
}
return null;
}
+
+ @Override
+ public void close() {
+ treeRangeMap.clear();
+ treeRangeMap = null;
+ }
}
diff --git a/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/LinkDirectionKnowledgeBaseHandler.java b/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/LinkDirectionKnowledgeBaseHandler.java
index 861eb70..ba0925c 100644
--- a/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/LinkDirectionKnowledgeBaseHandler.java
+++ b/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/LinkDirectionKnowledgeBaseHandler.java
@@ -38,7 +38,7 @@ public class LinkDirectionKnowledgeBaseHandler extends AbstractSingleKnowledgeBa
List<String> needColumns = new ArrayList<>();
needColumns.add("peer_city");
needColumns.add("link_id");
- byte[] content = downloadFile(knowledgeMetedataCache.getPath(), 1);
+ byte[] content = downloadFile();
HighCsvReader highCsvReader = new HighCsvReader(new InputStreamReader(new ByteArrayInputStream(content)), needColumns);
HashMap<Long, String> newLinkMap = new HashMap<>((int) (highCsvReader.getLineNumber() / 0.75F + 1.0F));
HighCsvReader.CsvIterator iterator = highCsvReader.getIterator();
@@ -71,4 +71,10 @@ public class LinkDirectionKnowledgeBaseHandler extends AbstractSingleKnowledgeBa
}
return null;
}
+
+ @Override
+ public void close() {
+ linkMap.clear();
+ linkMap = null;
+ }
}
diff --git a/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/RuleKnowledgeBaseHandler.java b/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/RuleKnowledgeBaseHandler.java
index a97a2a1..a3335c4 100644
--- a/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/RuleKnowledgeBaseHandler.java
+++ b/groot-core/src/main/java/com/geedgenetworks/core/udf/knowlegdebase/handler/RuleKnowledgeBaseHandler.java
@@ -2,6 +2,8 @@ package com.geedgenetworks.core.udf.knowlegdebase.handler;
import com.alibaba.fastjson2.JSON;
import com.geedgenetworks.common.config.KnowledgeBaseConfig;
+import com.geedgenetworks.common.exception.CommonErrorCode;
+import com.geedgenetworks.common.exception.GrootStreamRuntimeException;
import lombok.Data;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
@@ -53,17 +55,29 @@ public class RuleKnowledgeBaseHandler extends AbstractKnowledgeBaseHandler {
@Override
public boolean initKnowledgeBase(KnowledgeBaseConfig knowledgeBaseConfig) {
this.knowledgeBaseConfig = knowledgeBaseConfig;
- updateCache(knowledgeBaseConfig.getFsPath());
+ updateCache();
return true;
}
@Override
public void updateKnowledgeBase() {
- updateCache(knowledgeBaseConfig.getFsPath());
+ updateCache();
}
- public void updateCache(String address) {
- String url = getUrl(address);
+ public void updateCache() {
+ if ("http".equals(knowledgeBaseConfig.getFsType())) {
+ requestApi();
+ }
+ if ("local".equals(knowledgeBaseConfig.getFsType())) {
+ byte[] localRuleContent = getFileFromLocal(knowledgeBaseConfig.getFsPath());
+ RuleResponse ruleResponse = JSON.parseObject(new String(localRuleContent), RuleResponse.class);
+ processResponse(ruleResponse);
+ }
+ throw new GrootStreamRuntimeException(CommonErrorCode.ILLEGAL_ARGUMENT, knowledgeBaseConfig.getFsType() + " is illegal");
+ }
+
+ private void requestApi() {
+ String url = getUrl(knowledgeBaseConfig.getFsPath());
final HttpGet httpGet = new HttpGet(url);
httpGet.addHeader("Accept", "application/json");
httpGet.addHeader("Cn-Authorization", knowledgeBaseConfig.getProperties().get("token"));
@@ -125,6 +139,12 @@ public class RuleKnowledgeBaseHandler extends AbstractKnowledgeBaseHandler {
return kbIdMap.get(kbId);
}
+ public void close() {
+ ruleMap.clear();
+ nameMap.clear();
+ kbIdMap.clear();
+ }
+
@Data
private static final class RuleResponse {
private Integer code;
diff --git a/groot-core/src/test/java/com/geedgenetworks/core/udf/cn/LookupTestUtils.java b/groot-core/src/test/java/com/geedgenetworks/core/udf/cn/LookupTestUtils.java
index 56f1776..0178375 100644
--- a/groot-core/src/test/java/com/geedgenetworks/core/udf/cn/LookupTestUtils.java
+++ b/groot-core/src/test/java/com/geedgenetworks/core/udf/cn/LookupTestUtils.java
@@ -5,9 +5,9 @@ import com.geedgenetworks.common.Constants;
import com.geedgenetworks.common.config.CommonConfig;
import com.geedgenetworks.common.config.KnowledgeBaseConfig;
import com.geedgenetworks.core.pojo.KnowLedgeBaseFileMeta;
+import com.geedgenetworks.core.udf.knowlegdebase.KnowledgeBaseUpdateJob;
import com.geedgenetworks.core.udf.knowlegdebase.handler.AbstractKnowledgeBaseHandler;
import com.geedgenetworks.core.udf.knowlegdebase.handler.AbstractMultipleKnowledgeBaseHandler;
-import com.geedgenetworks.core.udf.knowlegdebase.KnowledgeBaseUpdateJob;
import org.apache.flink.api.common.ExecutionConfig;
import org.apache.flink.api.common.functions.RuntimeContext;
import org.apache.flink.configuration.Configuration;
@@ -19,6 +19,8 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.mockStatic;
/**
@@ -29,7 +31,7 @@ import static org.mockito.Mockito.mockStatic;
public class LookupTestUtils {
private static String fsPath = "testPath";
- private static String fsType = "testType";
+ private static String fsType = "http";
private static List<String> fsFiles = Arrays.asList("testFile");
public static String kbName = "testKbName";
private static String downloadPath = "testDownloadPath";
@@ -75,11 +77,15 @@ public class LookupTestUtils {
static void mockMultipleKnowledgeBaseHandler(String downloadContent) {
checkStaticMock();
KnowLedgeBaseFileMeta KnowLedgeBaseFileMeta = new KnowLedgeBaseFileMeta();
+ KnowLedgeBaseFileMeta.setKb_id("1");
KnowLedgeBaseFileMeta.setPath(downloadPath);
Map<String, KnowLedgeBaseFileMeta> KnowLedgeBaseFileMetaMap = new HashMap<>();
KnowLedgeBaseFileMetaMap.put("1", KnowLedgeBaseFileMeta);
abstractMultipleKnowledgeBaseHandlerMockedStatic.when(() -> AbstractMultipleKnowledgeBaseHandler.getMetadata(fsPath)).thenReturn(KnowLedgeBaseFileMetaMap);
abstractKnowledgeBaseHandlerMockedStatic.when(() -> AbstractKnowledgeBaseHandler.downloadFile(downloadPath, 1)).thenReturn(downloadContent.getBytes());
+ abstractMultipleKnowledgeBaseHandlerMockedStatic.when(() -> AbstractMultipleKnowledgeBaseHandler.decodeId(anyString())).thenCallRealMethod();
+ abstractMultipleKnowledgeBaseHandlerMockedStatic.when(() -> AbstractMultipleKnowledgeBaseHandler.encodeId(anyLong())).thenCallRealMethod();
+ abstractMultipleKnowledgeBaseHandlerMockedStatic.when(() -> AbstractMultipleKnowledgeBaseHandler.checkId(anyString())).thenCallRealMethod();
}
static RuntimeContext mockRuleRuntimeContext() {
@@ -95,7 +101,7 @@ public class LookupTestUtils {
knowledgeBaseConfig.setName(kbName);
KnowledgeBaseConfig ruleKnowledgeBaseConfig = new KnowledgeBaseConfig();
ruleKnowledgeBaseConfig.setFsPath("testRulePath");
- ruleKnowledgeBaseConfig.setFsType("testRuleType");
+ ruleKnowledgeBaseConfig.setFsType(fsType);
Map<String, String> properties = new HashMap<>();
properties.put("token", "testToken");
ruleKnowledgeBaseConfig.setProperties(properties);
diff --git a/groot-core/src/test/java/com/geedgenetworks/core/udf/test/AsnLookupFunctionTest.java b/groot-core/src/test/java/com/geedgenetworks/core/udf/test/AsnLookupFunctionTest.java
index 69a074b..5bcf89e 100644
--- a/groot-core/src/test/java/com/geedgenetworks/core/udf/test/AsnLookupFunctionTest.java
+++ b/groot-core/src/test/java/com/geedgenetworks/core/udf/test/AsnLookupFunctionTest.java
@@ -70,14 +70,14 @@ public class AsnLookupFunctionTest {
knowledgeBaseConfig.setName("tsg_ip_asn");
Map<String, String> parameters = new HashMap<>();
knowledgeBaseConfig.setProperties(parameters);
- knowledgeBaseConfig.setFsType("http");
- knowledgeBaseConfig.setFsPath("http://192.168.44.67:9999/v1/knowledge_base");
- knowledgeBaseConfig.setFiles(Collections.singletonList("f9f6bc91-2142-4673-8249-e097c00fe1ea"));
+ knowledgeBaseConfig.setFsType("local");
+ knowledgeBaseConfig.setFsPath("");
+ knowledgeBaseConfig.setFiles(Collections.singletonList("src/test/resources/asn.mmdb"));
knowledgeBaseConfigList.add(knowledgeBaseConfig);
commonConfig.setKnowledgeBaseConfig(knowledgeBaseConfigList);
KnowledgeBaseUpdateJob.registerKnowledgeBase(AsnKnowledgeBaseHandler.getInstance(), knowledgeBaseConfig);
- String asn = AsnKnowledgeBaseHandler.lookUp("tsg_ip_asn","IP_TO_ASN","2600:1015:b002::");
- assertEquals("6167", asn);
+ String asn = AsnKnowledgeBaseHandler.lookUp("tsg_ip_asn","IP_TO_ASN","12.16.98.1");
+ assertEquals("31978", asn);
}
diff --git a/groot-core/src/test/java/com/geedgenetworks/core/udf/test/GeoIpLookupFunctionTest.java b/groot-core/src/test/java/com/geedgenetworks/core/udf/test/GeoIpLookupFunctionTest.java
index faa65f4..f487500 100644
--- a/groot-core/src/test/java/com/geedgenetworks/core/udf/test/GeoIpLookupFunctionTest.java
+++ b/groot-core/src/test/java/com/geedgenetworks/core/udf/test/GeoIpLookupFunctionTest.java
@@ -29,7 +29,6 @@ public class GeoIpLookupFunctionTest {
udfContext.setOutput_fields(Collections.singletonList("iplocation"));
}
-//com.geedgenetworks.core.udf.GeoIpLookup单元测试
@Test
public void testInit(){
GeoIpLookup geoIpLookup = new GeoIpLookup();
@@ -69,33 +68,17 @@ public class GeoIpLookupFunctionTest {
knowledgeBaseConfig.setName("tsg_ip_location");
Map<String, String> parameters = new HashMap<>();
knowledgeBaseConfig.setProperties(parameters);
- knowledgeBaseConfig.setFsType("http");
- knowledgeBaseConfig.setFsPath("http://192.168.44.67:9999/v1/knowledge_base");
- knowledgeBaseConfig.setFiles(Arrays.asList("64af7077-eb9b-4b8f-80cf-2ceebc89bea9","004390bc-3135-4a6f-a492-3662ecb9e289"));
+ knowledgeBaseConfig.setFsType("local");
+ knowledgeBaseConfig.setFsPath("");
+ knowledgeBaseConfig.setFiles(Collections.singletonList("src/test/resources/ip_builtin.mmdb"));
knowledgeBaseConfigList.add(knowledgeBaseConfig);
commonConfig.setKnowledgeBaseConfig(knowledgeBaseConfigList);
KnowledgeBaseUpdateJob.registerKnowledgeBase(GeoIpKnowledgeBaseHandler.getInstance(), knowledgeBaseConfig);
- String countryLookup = GeoIpKnowledgeBaseHandler.lookUp("tsg_ip_location","IP_TO_COUNTRY","2600:1015:b002::");
- assertEquals("美国", countryLookup);
- String provinceLookup = GeoIpKnowledgeBaseHandler.lookUp("tsg_ip_location","IP_TO_PROVINCE","2600:1015:b002::");
- assertEquals("印第安纳州", provinceLookup);
- String cityLookup = GeoIpKnowledgeBaseHandler.lookUp("tsg_ip_location","IP_TO_CITY","2600:1015:b002::");
- assertEquals("Unknown", cityLookup);
- String cityLookupDetail = GeoIpKnowledgeBaseHandler.lookUp("tsg_ip_location","IP_TO_SUBDIVISION_ADDR","2600:1015:b002::");
- assertEquals("美国.印第安纳州.Unknown", cityLookupDetail);
- String locationLookupDetail = GeoIpKnowledgeBaseHandler.lookUp("tsg_ip_location","IP_TO_DETAIL","2600:1015:b002::");
- assertEquals("美国.印第安纳州.Unknown.", locationLookupDetail.trim());
- String latLngLookup = GeoIpKnowledgeBaseHandler.lookUp("tsg_ip_location","IP_TO_LATLNG","2600:1015:b002::");
- assertEquals("39.9388,-86.1137", latLngLookup);
- String ispLookup = GeoIpKnowledgeBaseHandler.lookUp("tsg_ip_location","IP_TO_PROVIDER","2600:1015:b002::");
- assertEquals("", ispLookup);
- String infoLookupToJSONString = GeoIpKnowledgeBaseHandler.lookUp("tsg_ip_location","IP_TO_JSON","2600:1015:b002::");
- assertEquals(JSONObject.parseObject(infoLookupToJSONString).getString("country"), "美国");
- String country = GeoIpKnowledgeBaseHandler.lookUpObject("tsg_ip_location","2600:1015:b002::").getCountry();
- assertEquals("美国", country);
+ String countryLookup = GeoIpKnowledgeBaseHandler.lookUp("tsg_ip_location","IP_TO_COUNTRY","86.111.175.128");
+ assertEquals("United Kingdom", countryLookup);
+ String country = GeoIpKnowledgeBaseHandler.lookUpObject("tsg_ip_location","86.111.175.128").getCountry();
+ assertEquals("United Kingdom", country);
assertNull(GeoIpKnowledgeBaseHandler.lookUpObject("tsg_ip_location", "255.255.255.255"));
}
-
-
}
diff --git a/groot-core/src/test/resources/asn.mmdb b/groot-core/src/test/resources/asn.mmdb
new file mode 100644
index 0000000..a20e238
--- /dev/null
+++ b/groot-core/src/test/resources/asn.mmdb
Binary files differ
diff --git a/groot-core/src/test/resources/ip_builtin.mmdb b/groot-core/src/test/resources/ip_builtin.mmdb
new file mode 100644
index 0000000..b333c64
--- /dev/null
+++ b/groot-core/src/test/resources/ip_builtin.mmdb
Binary files differ