Compare commits

9 Commits

Author SHA1 Message Date
qidaijie
4ec31ee8a1 1:增加补全程序数据类型Array
2:修改版本到21.06.02
2021-06-02 10:49:29 +08:00
戚岱杰
5821c981bb Delete dependency-reduced-pom.xml 2021-04-23 09:26:46 +00:00
戚岱杰
b445717f81 Delete Project_Default.xml 2021-04-23 09:26:40 +00:00
戚岱杰
1d6328dc89 Delete compiler.xml 2021-04-23 09:26:36 +00:00
戚岱杰
4363697dc2 Delete encodings.xml 2021-04-23 09:26:32 +00:00
戚岱杰
6f7a9b47a6 Delete misc.xml 2021-04-23 09:26:28 +00:00
戚岱杰
361e67839f Delete vcs.xml 2021-04-23 09:26:25 +00:00
戚岱杰
36a5c386bf Delete workspace.xml 2021-04-23 09:26:21 +00:00
qidaijie
c8f8d3c9cf 修改版本到最21.04.23,增加app_match函数 2021-04-23 17:25:47 +08:00
11 changed files with 339 additions and 617 deletions

View File

@@ -5,7 +5,7 @@
<parent> <parent>
<artifactId>dynamic_complement</artifactId> <artifactId>dynamic_complement</artifactId>
<groupId>com.zdjizhi</groupId> <groupId>com.zdjizhi</groupId>
<version>v3.20.09.22</version> <version>v3.21.06.02</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
@@ -18,34 +18,12 @@
<url>http://192.168.40.125:8099/content/groups/public</url> <url>http://192.168.40.125:8099/content/groups/public</url>
</repository> </repository>
<repository>
<id>ebi</id>
<name>www.ebi.ac.uk</name>
<url>http://www.ebi.ac.uk/intact/maven/nexus/content/groups/public/</url>
</repository>
<repository>
<id>maven-ali</id>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
<checksumPolicy>fail</checksumPolicy>
</snapshots>
</repository>
</repositories> </repositories>
<properties> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<flume.version>1.9.0</flume.version> <flume.version>1.9.0</flume.version>
<hbase.version>2.2.1</hbase.version> <hbase.version>2.2.3</hbase.version>
<!--<hadoop.version>2.8.5</hadoop.version>-->
<!--<hbase.version>1.4.9</hbase.version>-->
<!--<hadoop.version>2.7.1</hadoop.version>-->
</properties> </properties>
<build> <build>
@@ -55,11 +33,11 @@
<artifactId>maven-shade-plugin</artifactId> <artifactId>maven-shade-plugin</artifactId>
<version>2.4.1</version> <version>2.4.1</version>
<configuration> <configuration>
<createDependencyReducedPom>true</createDependencyReducedPom> <createDependencyReducedPom>false</createDependencyReducedPom>
</configuration> </configuration>
<executions> <executions>
<execution> <execution>
<phase>package</phase> <phase>install</phase>
<goals> <goals>
<goal>shade</goal> <goal>shade</goal>
</goals> </goals>
@@ -84,6 +62,21 @@
</execution> </execution>
</executions> </executions>
</plugin> </plugin>
<plugin>
<groupId>io.github.zlika</groupId>
<artifactId>reproducible-build-maven-plugin</artifactId>
<version>0.2</version>
<executions>
<execution>
<goals>
<goal>strip-jar</goal>
</goals>
<phase>install</phase>
</execution>
</executions>
</plugin>
<plugin> <plugin>
<groupId>org.codehaus.mojo</groupId> <groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId> <artifactId>exec-maven-plugin</artifactId>
@@ -122,13 +115,6 @@
</includes> </includes>
<filtering>false</filtering> <filtering>false</filtering>
</resource> </resource>
<!--<resource>-->
<!--<directory>src/main/java</directory>-->
<!--<includes>-->
<!--<include>log4j.properties</include>-->
<!--</includes>-->
<!--<filtering>false</filtering>-->
<!--</resource>-->
</resources> </resources>
</build> </build>
@@ -143,7 +129,6 @@
<dependency> <dependency>
<groupId>com.zdjizhi</groupId> <groupId>com.zdjizhi</groupId>
<artifactId>galaxy</artifactId> <artifactId>galaxy</artifactId>
<!-- <version>1.0.2</version>-->
<version>1.0.3</version> <version>1.0.3</version>
<exclusions> <exclusions>
<exclusion> <exclusion>
@@ -167,27 +152,13 @@
<version>1.2.70</version> <version>1.2.70</version>
</dependency> </dependency>
<!--<dependency>-->
<!--<groupId>redis.clients</groupId>-->
<!--<artifactId>jedis</artifactId>-->
<!--<version>2.8.1</version>-->
<!--</dependency>-->
<!-- <dependency>--> <dependency>
<!-- <groupId>org.apache.zookeeper</groupId>--> <groupId>junit</groupId>
<!-- <artifactId>zookeeper</artifactId>--> <artifactId>junit</artifactId>
<!-- <version>3.4.9</version>--> <version>4.12</version>
<!-- <exclusions>--> <scope>test</scope>
<!-- <exclusion>--> </dependency>
<!-- <artifactId>slf4j-log4j12</artifactId>-->
<!-- <groupId>org.slf4j</groupId>-->
<!-- </exclusion>-->
<!-- <exclusion>-->
<!-- <artifactId>log4j-over-slf4j</artifactId>-->
<!-- <groupId>org.slf4j</groupId>-->
<!-- </exclusion>-->
<!-- </exclusions>-->
<!-- </dependency>-->
<dependency> <dependency>
<groupId>cglib</groupId> <groupId>cglib</groupId>
@@ -213,19 +184,15 @@
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.apache.hbase</groupId> <groupId>org.apache.httpcomponents</groupId>
<artifactId>hbase-server</artifactId> <artifactId>httpclient</artifactId>
<version>${hbase.version}</version> <version>4.5.2</version>
<exclusions> </dependency>
<exclusion>
<artifactId>slf4j-log4j12</artifactId> <dependency>
<groupId>org.slf4j</groupId> <groupId>org.apache.httpcomponents</groupId>
</exclusion> <artifactId>httpcore</artifactId>
<exclusion> <version>4.4.1</version>
<artifactId>log4j-over-slf4j</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency> </dependency>
<dependency> <dependency>
@@ -234,79 +201,17 @@
<version>2.4.0</version> <version>2.4.0</version>
</dependency> </dependency>
<!--<dependency>--> <dependency>
<!--<groupId>org.apache.hadoop</groupId>--> <groupId>io.prometheus</groupId>
<!--<artifactId>hadoop-common</artifactId>--> <artifactId>simpleclient_pushgateway</artifactId>
<!--<version>${hadoop.version}</version>--> <version>0.9.0</version>
<!--<exclusions>--> </dependency>
<!--<exclusion>-->
<!--<artifactId>slf4j-log4j12</artifactId>-->
<!--<groupId>org.slf4j</groupId>-->
<!--</exclusion>-->
<!--<exclusion>-->
<!--<artifactId>log4j-over-slf4j</artifactId>-->
<!--<groupId>org.slf4j</groupId>-->
<!--</exclusion>-->
<!--</exclusions>-->
<!--</dependency>-->
<!--<dependency>--> <dependency>
<!--<groupId>org.apache.hadoop</groupId>--> <groupId>cn.hutool</groupId>
<!--<artifactId>hadoop-client</artifactId>--> <artifactId>hutool-all</artifactId>
<!--<version>${hadoop.version}</version>--> <version>5.5.2</version>
<!--<exclusions>--> </dependency>
<!--<exclusion>-->
<!--<artifactId>slf4j-log4j12</artifactId>-->
<!--<groupId>org.slf4j</groupId>-->
<!--</exclusion>-->
<!--<exclusion>-->
<!--<artifactId>log4j-over-slf4j</artifactId>-->
<!--<groupId>org.slf4j</groupId>-->
<!--</exclusion>-->
<!--</exclusions>-->
<!--</dependency>-->
<!--<dependency>-->
<!--<groupId>org.apache.hadoop</groupId>-->
<!--<artifactId>hadoop-hdfs</artifactId>-->
<!--<version>${hadoop.version}</version>-->
<!--<exclusions>-->
<!--<exclusion>-->
<!--<artifactId>slf4j-log4j12</artifactId>-->
<!--<groupId>org.slf4j</groupId>-->
<!--</exclusion>-->
<!--<exclusion>-->
<!--<artifactId>log4j-over-slf4j</artifactId>-->
<!--<groupId>org.slf4j</groupId>-->
<!--</exclusion>-->
<!--</exclusions>-->
<!--</dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.junit.jupiter</groupId>-->
<!-- <artifactId>junit-jupiter-api</artifactId>-->
<!-- <version>5.3.2</version>-->
<!-- <scope>compile</scope>-->
<!-- </dependency>-->
<!--<dependency>-->
<!--<groupId>com.google.guava</groupId>-->
<!--<artifactId>guava</artifactId>-->
<!--&lt;!&ndash;<version>18.0</version>&ndash;&gt;-->
<!--<version>11.0.2</version>-->
<!--</dependency>-->
<!--<dependency>-->
<!--<groupId>org.apache.httpcomponents</groupId>-->
<!--<artifactId>httpclient</artifactId>-->
<!--<version>4.5.2</version>-->
<!--</dependency>-->
<!--<dependency>-->
<!--<groupId>org.apache.httpcomponents</groupId>-->
<!--<artifactId>httpcore</artifactId>-->
<!--<version>4.4.1</version>-->
<!--</dependency>-->
</dependencies> </dependencies>

View File

@@ -1,10 +1,13 @@
package com.zdjizhi.flume.interceptor; package com.zdjizhi.flume.interceptor;
import cn.hutool.log.Log;
import cn.hutool.log.LogFactory;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.google.common.base.Preconditions; import com.google.common.base.Preconditions;
import com.jayway.jsonpath.InvalidPathException; import com.jayway.jsonpath.InvalidPathException;
import com.jayway.jsonpath.JsonPath; import com.jayway.jsonpath.JsonPath;
import com.zdjizhi.flume.interceptor.common.FlowWriteConfig; import com.zdjizhi.flume.interceptor.common.FlowWriteConfig;
import com.zdjizhi.flume.interceptor.utils.app.AppUtils;
import com.zdjizhi.flume.interceptor.utils.hbase.HBaseUtils; import com.zdjizhi.flume.interceptor.utils.hbase.HBaseUtils;
import com.zdjizhi.flume.interceptor.utils.json.JsonParseUtil; import com.zdjizhi.flume.interceptor.utils.json.JsonParseUtil;
import com.zdjizhi.utils.Encodes; import com.zdjizhi.utils.Encodes;
@@ -22,17 +25,21 @@ import java.io.UnsupportedEncodingException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/** /**
* @author qidaijie * @author qidaijie
*/ */
public class FlumeDynamicApp implements Interceptor { public class FlumeDynamicApp implements Interceptor {
private static Logger logger = Logger.getLogger(FlumeDynamicApp.class); private static final Log logger = LogFactory.get();
private static final Pattern PATTERN = Pattern.compile("[0-9]*");
private static IpLookup ipLookup; private static IpLookup ipLookup;
private static FormatUtils formatUtils; private static FormatUtils formatUtils;
private String schemaHttpUrl; private String schemaHttpUrl;
private String appIdHttpUrl;
private String uidZookeeperIp; private String uidZookeeperIp;
private long dataCenterIdNum; private long dataCenterIdNum;
private String ipDatPath; private String ipDatPath;
@@ -52,17 +59,6 @@ public class FlumeDynamicApp implements Interceptor {
formatUtils = new FormatUtils.Builder(false).build(); formatUtils = new FormatUtils.Builder(false).build();
//载入定位库 //载入定位库
ipLookup = new IpLookup.Builder(false) ipLookup = new IpLookup.Builder(false)
/**
* v1.0.2-com.zdjizhi.galaxy
*/
// .loadDataFileV4(ipDatPath + "Kazakhstan.mmdb")
// .loadDataFileV6(ipDatPath + "Kazakhstan.mmdb")
// .loadAsnDataFileV4(ipDatPath + "asn_v4.mmdb")
// .loadAsnDataFileV6(ipDatPath + "asn_v6.mmdb")
/**
* v1.0.3-com.zdjizhi.galaxy
*/
.loadDataFileV4(ipDatPath + "ip_v4.mmdb") .loadDataFileV4(ipDatPath + "ip_v4.mmdb")
.loadDataFileV6(ipDatPath + "ip_v6.mmdb") .loadDataFileV6(ipDatPath + "ip_v6.mmdb")
.loadDataFilePrivateV4(ipDatPath + "ip_private_v4.mmdb") .loadDataFilePrivateV4(ipDatPath + "ip_private_v4.mmdb")
@@ -72,8 +68,9 @@ public class FlumeDynamicApp implements Interceptor {
.build(); .build();
} }
public FlumeDynamicApp(String schemaHttpUrl, String zookeeperIp, long dataCenterIdNum, String ipDatPath, String hbaseZookeeperIp, String hbaseTableName) { public FlumeDynamicApp(String schemaHttpUrl, String appIdHttpUrl, String zookeeperIp, long dataCenterIdNum, String ipDatPath, String hbaseZookeeperIp, String hbaseTableName) {
this.schemaHttpUrl = schemaHttpUrl; this.schemaHttpUrl = schemaHttpUrl;
this.appIdHttpUrl = appIdHttpUrl;
this.uidZookeeperIp = zookeeperIp; this.uidZookeeperIp = zookeeperIp;
this.dataCenterIdNum = dataCenterIdNum; this.dataCenterIdNum = dataCenterIdNum;
this.ipDatPath = ipDatPath; this.ipDatPath = ipDatPath;
@@ -135,22 +132,24 @@ public class FlumeDynamicApp implements Interceptor {
Object name = JsonParseUtil.getValue(object, strings[0]); Object name = JsonParseUtil.getValue(object, strings[0]);
String appendToKeyName = strings[1]; String appendToKeyName = strings[1];
String functionName = strings[2]; String functionName = strings[2];
// Object param = null; Object appendTo = JsonParseUtil.getValue(object, appendToKeyName);
// if (strings[3] != null) {
// param = JsonParseUtil.getValue(object, strings[3]);
// }
String param = strings[3]; String param = strings[3];
switch (functionName) { switch (functionName) {
case "current_timestamp": case "current_timestamp":
// if (Long.parseLong(JsonParseUtil.getValue(object, appendToKeyName)) == 0L) { if ((long) appendTo == 0L) {
JsonParseUtil.setValue(object, appendToKeyName, getCurrentTime()); JsonParseUtil.setValue(object, appendToKeyName, getCurrentTime());
// } }
break; break;
case "snowflake_id": case "snowflake_id":
JsonParseUtil.setValue(object, appendToKeyName, formatUtils.getSnowflakeId(uidZookeeperIp, dataCenterIdNum)); JsonParseUtil.setValue(object, appendToKeyName, formatUtils.getSnowflakeId(uidZookeeperIp, dataCenterIdNum));
break; break;
case "set_value":
if (name != null && param != null) {
JsonParseUtil.setValue(object, appendToKeyName, setValue(param));
}
break;
case "flattenSpec": case "flattenSpec":
if (name != null && StringUtil.isNotBlank(param)) { if (name != null && StringUtil.isNotBlank(param)) {
JsonParseUtil.setValue(object, appendToKeyName, flattenSpec(name.toString(), isJsonValue(object, param))); JsonParseUtil.setValue(object, appendToKeyName, flattenSpec(name.toString(), isJsonValue(object, param)));
@@ -173,7 +172,7 @@ public class FlumeDynamicApp implements Interceptor {
break; break;
case "get_value": case "get_value":
if (name != null) { if (name != null) {
JsonParseUtil.setValue(object, appendToKeyName, name.toString()); JsonParseUtil.setValue(object, appendToKeyName, name);
} }
break; break;
case "radius_match": case "radius_match":
@@ -181,6 +180,11 @@ public class FlumeDynamicApp implements Interceptor {
JsonParseUtil.setValue(object, appendToKeyName, radiusMatch(name.toString(), hbaseZookeeperIp, hbaseTableName)); JsonParseUtil.setValue(object, appendToKeyName, radiusMatch(name.toString(), hbaseZookeeperIp, hbaseTableName));
} }
break; break;
case "app_match":
if (name != null && appendTo == null) {
JsonParseUtil.setValue(object, appendToKeyName, appMatch(appIdHttpUrl, name.toString()));
}
break;
case "geo_ip_country": case "geo_ip_country":
if (name != null && JsonParseUtil.getValue(object, appendToKeyName) == null) { if (name != null && JsonParseUtil.getValue(object, appendToKeyName) == null) {
JsonParseUtil.setValue(object, appendToKeyName, getGeoIpCountry(name.toString())); JsonParseUtil.setValue(object, appendToKeyName, getGeoIpCountry(name.toString()));
@@ -192,11 +196,8 @@ public class FlumeDynamicApp implements Interceptor {
} }
break; break;
case "sub_domain": case "sub_domain":
if (name != null) { if (appendTo == null && name != null) {
Object appendTo = JsonParseUtil.getValue(object, appendToKeyName); JsonParseUtil.setValue(object, appendToKeyName, replaceGetTopDomain(name.toString()));
if (appendTo == null || StringUtil.isBlank(appendTo.toString())) {
JsonParseUtil.setValue(object, appendToKeyName, replaceGetTopDomain(FormatUtils.getTopPrivateDomain(name.toString())));
}
} }
break; break;
default: default:
@@ -206,10 +207,9 @@ public class FlumeDynamicApp implements Interceptor {
return JSONObject.toJSONString(object); return JSONObject.toJSONString(object);
} catch (Exception e) { } catch (Exception e) {
logger.error("FlumeDynamicApp dealCommonMessage is error===>{" + e + "}<==="); logger.error("FlumeDynamicApp dealCommonMessage is error===>", e);
e.printStackTrace(); //返回原数据
// return ""; return message;
return message;//返回原数据
} }
} }
@@ -221,9 +221,8 @@ public class FlumeDynamicApp implements Interceptor {
* @return 顶级域名 * @return 顶级域名
*/ */
private static String replaceGetTopDomain(String url) { private static String replaceGetTopDomain(String url) {
// return url.replaceAll("InternetDomainName\\{name=", "").replaceAll("\\}", "");
try { try {
return FormatUtils.getTopPrivateDomain(url); return FormatUtils.getTopPrivateDomain(url).replaceAll("InternetDomainName\\{name=", "").replaceAll("\\}", "");
} catch (StringIndexOutOfBoundsException outException) { } catch (StringIndexOutOfBoundsException outException) {
logger.error("解析顶级域名异常,异常域名:" + url, outException); logger.error("解析顶级域名异常,异常域名:" + url, outException);
return ""; return "";
@@ -233,8 +232,8 @@ public class FlumeDynamicApp implements Interceptor {
/** /**
* 生成当前时间戳的操作 * 生成当前时间戳的操作
*/ */
private static int getCurrentTime() { private static long getCurrentTime() {
return (int) (System.currentTimeMillis() / 1000); return (System.currentTimeMillis() / 1000);
} }
/** /**
@@ -278,6 +277,21 @@ public class FlumeDynamicApp implements Interceptor {
return HBaseUtils.getAccount(ip, hbaseZookeeper, hbaseTable); return HBaseUtils.getAccount(ip, hbaseZookeeper, hbaseTable);
} }
/**
* appId与缓存中对应关系补全appName
*
* @param appIds id
* @return appName
*/
private static String appMatch(String appIdHttpUrl, String appIds) {
String appId = appIds.split(FlowWriteConfig.FORMAT_SPLITTER)[0];
String appName = AppUtils.getAppName(appIdHttpUrl, Integer.parseInt(appId));
if (StringUtil.isBlank(appName)) {
logger.warn("AppMap get appName is null, ID is :{}", appId);
}
return appName;
}
/** /**
* 根据编码解码base64 * 根据编码解码base64
* *
@@ -346,8 +360,7 @@ public class FlumeDynamicApp implements Interceptor {
* @param ifParam 字段名/普通字符串 * @param ifParam 字段名/普通字符串
* @return resultA or resultB or "" * @return resultA or resultB or ""
*/ */
private static String condition(Object object, String ifParam) { private static Object condition(Object object, String ifParam) {
String result = "";
try { try {
String[] split = ifParam.split(FlowWriteConfig.FORMAT_SPLITTER); String[] split = ifParam.split(FlowWriteConfig.FORMAT_SPLITTER);
String[] norms = split[0].split(FlowWriteConfig.IF_CONDITION_SPLITTER); String[] norms = split[0].split(FlowWriteConfig.IF_CONDITION_SPLITTER);
@@ -356,18 +369,46 @@ public class FlumeDynamicApp implements Interceptor {
if (split.length == FlowWriteConfig.IF_PARAM_LENGTH) { if (split.length == FlowWriteConfig.IF_PARAM_LENGTH) {
String resultA = isJsonValue(object, split[1]); String resultA = isJsonValue(object, split[1]);
String resultB = isJsonValue(object, split[2]); String resultB = isJsonValue(object, split[2]);
result = (Integer.parseInt(direction) == Integer.parseInt(norms[1])) ? resultA : resultB; String result = (Integer.parseInt(direction) == Integer.parseInt(norms[1])) ? resultA : resultB;
Matcher isNum = PATTERN.matcher(result);
if (isNum.matches()) {
return Long.parseLong(result);
} else {
return result;
}
} }
} }
} catch (Exception e) { } catch (Exception e) {
logger.error("IF 函数执行异常,异常信息:" + e); logger.error("IF 函数执行异常,异常信息:" + e);
e.printStackTrace(); e.printStackTrace();
} }
return result; return null;
}
/**
* 设置固定值函数 若为数字则转为long返回
*
* @param param 默认值
* @return 返回数字或字符串
*/
static Object setValue(String param) {
try {
Matcher isNum = PATTERN.matcher(param);
if (isNum.matches()) {
return Long.parseLong(param);
} else {
return param;
}
} catch (Exception e) {
logger.error("SetValue 函数异常,异常信息:" + e);
e.printStackTrace();
}
return null;
} }
public static class FlumeDynamicAppBuilder implements Interceptor.Builder { public static class FlumeDynamicAppBuilder implements Interceptor.Builder {
private String schemaHttpUrl; private String schemaHttpUrl;
private String appIdHttpUrl;
private String uidZookeeperIp; private String uidZookeeperIp;
private long dataCenterIdNum; private long dataCenterIdNum;
private String ipDatPath; private String ipDatPath;
@@ -378,6 +419,7 @@ public class FlumeDynamicApp implements Interceptor {
@Override @Override
public Interceptor build() { public Interceptor build() {
return new FlumeDynamicApp(this.schemaHttpUrl, return new FlumeDynamicApp(this.schemaHttpUrl,
this.appIdHttpUrl,
this.uidZookeeperIp, this.dataCenterIdNum, this.uidZookeeperIp, this.dataCenterIdNum,
this.ipDatPath, this.ipDatPath,
this.hbaseZookeeperIp, this.hbaseTableName); this.hbaseZookeeperIp, this.hbaseTableName);
@@ -395,6 +437,16 @@ public class FlumeDynamicApp implements Interceptor {
logger.error("FlumeDynamicApp Get schemaHttpUrl is error : " + e); logger.error("FlumeDynamicApp Get schemaHttpUrl is error : " + e);
} }
try {
this.appIdHttpUrl = context.getString("appIdHttpUrl", "");
Preconditions.checkNotNull("".equals(appIdHttpUrl), "appIdHttpUrl must be set!!");
logger.info("FlumeDynamicApp Read appIdHttpUrl from configuration : " + appIdHttpUrl);
} catch (IllegalArgumentException e) {
throw new IllegalArgumentException("FlumeDynamicApp appIdHttpUrl invalid", e);
} catch (Exception e) {
logger.error("FlumeDynamicApp Get appIdHttpUrl is error : " + e);
}
try { try {
this.uidZookeeperIp = context.getString("uidZookeeperIp", ""); this.uidZookeeperIp = context.getString("uidZookeeperIp", "");
Preconditions.checkNotNull("".equals(uidZookeeperIp), "uidZookeeperIp must be set!!"); Preconditions.checkNotNull("".equals(uidZookeeperIp), "uidZookeeperIp must be set!!");

View File

@@ -13,35 +13,6 @@ public class FlowWriteConfig {
public static final String IS_JSON_KEY_TAG = "$."; public static final String IS_JSON_KEY_TAG = "$.";
public static final String IF_CONDITION_SPLITTER = "="; public static final String IF_CONDITION_SPLITTER = "=";
// public static final String SEGMENTATION = ",";
/**
* System
*/
// public static final Integer DATA_CENTER_ID_NUM = FlowWriteConfigurations.getIntProperty(0, "data.center.id.num");
// public static final String CHECK_IP_SCOPE = FlowWriteConfigurations.getStringProperty(0, "check.ip.scope");
/**
* kafka
*/
// public static final String KAFKA_TOPIC = FlowWriteConfigurations.getStringProperty(0, "kafka.topic");
/**
* zookeeper
*/
// public static final String ZOOKEEPER_SERVERS = FlowWriteConfigurations.getStringProperty(0, "zookeeper.servers");
/***
* Redis
*/
// public static final String REDIS_IP = "redis.ip";
// public static final String REDIS_PORT = "redis.port";
// public static final String REDIS_TIMEOUT = "redis.timeout";
// public static final String REDIS_POOL_MAXACTIVE = "redis.pool.maxActive";
// public static final String REDIS_POOL_MAXIDLE = "redis.pool.maxIdle";
// public static final String REDIS_POOL_MAXWAIT = "redis.pool.maxWait";
// public static final String REDIS_POOL_TESTONBORROW = "redis.pool.testOnBorrow";
// public static final String REDIS_POOL_TESTONRETURN = "redis.pool.testOnReturn";
/** /**
* flume使用配置 * flume使用配置
*/ */

View File

@@ -0,0 +1,116 @@
package com.zdjizhi.flume.interceptor.utils.app;
import cn.hutool.log.Log;
import cn.hutool.log.LogFactory;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.zdjizhi.flume.interceptor.utils.http.HttpClientUtil;
import com.zdjizhi.utils.StringUtil;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
/**
* AppId 工具类
*
* @author qidaijie
*/
public class AppUtils {
private static final Log logger = LogFactory.get();
private static Map<Integer, String> appIdMap = new ConcurrentHashMap<>(128);
private static AppUtils appUtils;
private static String appIdHttpUrl;
private static void getAppInstance(String url) {
appUtils = new AppUtils(url);
}
/**
* 构造函数-新
*/
private AppUtils(String url) {
appIdHttpUrl = url;
timestampsFilter();
//定时更新
updateAppIdCache();
}
/**
* 更新变量
*/
private static void change() {
timestampsFilter();
}
/**
* 获取变更内容
*/
private static void timestampsFilter() {
try {
Long begin = System.currentTimeMillis();
String schema = HttpClientUtil.requestByGetMethod(appIdHttpUrl);
if (StringUtil.isNotBlank(schema)) {
String data = JSONObject.parseObject(schema).getString("data");
JSONArray objects = JSONArray.parseArray(data);
for (Object object : objects) {
JSONArray jsonArray = JSONArray.parseArray(object.toString());
int key = jsonArray.getInteger(0);
String value = jsonArray.getString(1);
if (appIdMap.containsKey(key)) {
if (!value.equals(appIdMap.get(key))) {
appIdMap.put(key, value);
}
} else {
appIdMap.put(key, value);
}
}
logger.warn("Updating the correspondence takes time:" + (System.currentTimeMillis() - begin));
logger.warn("Pull the length of the interface data:[" + objects.size() + "]");
}
} catch (RuntimeException e) {
logger.error("Update cache app-id failed, exception" + e);
}
}
/**
* 验证定时器,每隔一段时间验证一次-验证获取新的Cookie
*/
private void updateAppIdCache() {
ScheduledExecutorService executorService = new ScheduledThreadPoolExecutor(1);
executorService.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
try {
timestampsFilter();
} catch (RuntimeException e) {
logger.error("AppUtils update AppCache is error===>{" + e + "}<===");
}
}
}, 1, 300, TimeUnit.SECONDS);
}
/**
* 获取 appName
*
* @param appId app_id
* @return account
*/
public static String getAppName(String url, int appId) {
if (appUtils == null) {
getAppInstance(url);
}
return appIdMap.get(appId);
}
}

View File

@@ -1,6 +1,7 @@
package com.zdjizhi.flume.interceptor.utils.http; package com.zdjizhi.flume.interceptor.utils.http;
import com.alibaba.fastjson.JSON; import cn.hutool.log.Log;
import cn.hutool.log.LogFactory;
import org.apache.http.HttpEntity; import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpGet;
@@ -13,50 +14,62 @@ import java.io.InputStreamReader;
/** /**
* 获取网关schema工具类 * 获取网关schema工具类
* @author qidaijie
*/ */
public class HttpClientUtil { public class HttpClientUtil {
public static String requestByGetMethod(String s) { private static final Log logger = LogFactory.get();
/**
* 请求网关获取schema
*
* @param http 网关url
* @return schema
*/
public static String requestByGetMethod(String http) {
CloseableHttpClient httpClient = HttpClients.createDefault(); CloseableHttpClient httpClient = HttpClients.createDefault();
StringBuilder entityStringBuilder = null; StringBuilder entityStringBuilder;
HttpGet get = new HttpGet(http);
BufferedReader bufferedReader = null;
CloseableHttpResponse httpResponse = null;
try { try {
HttpGet get = new HttpGet(s);
CloseableHttpResponse httpResponse = null;
httpResponse = httpClient.execute(get); httpResponse = httpClient.execute(get);
try { HttpEntity entity = httpResponse.getEntity();
HttpEntity entity = httpResponse.getEntity(); entityStringBuilder = new StringBuilder();
entityStringBuilder = new StringBuilder(); if (null != entity) {
if (null != entity) { bufferedReader = new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent(), "UTF-8"), 8 * 1024);
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent(), "UTF-8"), 8 * 1024); int intC;
String line = null; while ((intC = bufferedReader.read()) != -1) {
while ((line = bufferedReader.readLine()) != null) { char c = (char) intC;
entityStringBuilder.append(line); if (c == '\n') {
break;
} }
entityStringBuilder.append(c);
} }
} finally {
httpResponse.close(); return entityStringBuilder.toString();
} }
} catch (Exception e) { } catch (IOException e) {
e.printStackTrace(); logger.error("Get Schema from Query engine ERROR! Exception message is:" + e);
} finally { } finally {
try { if (httpClient != null) {
if (httpClient != null) { try {
httpClient.close(); httpClient.close();
} catch (IOException e) {
logger.error("Close HTTP Client ERROR! Exception messgae is:" + e);
} }
} catch (IOException e) { }
e.printStackTrace(); if (httpResponse != null) {
try {
httpResponse.close();
} catch (IOException e) {
logger.error("Close httpResponse ERROR! Exception messgae is:" + e);
}
}
if (bufferedReader != null) {
org.apache.commons.io.IOUtils.closeQuietly(bufferedReader);
} }
} }
return entityStringBuilder.toString(); return "";
} }
// public static void main(String[] args) {
//// String s = HttpClientUtil.requestByGetMethod("http://192.168.40.224:9999/metadata/schema/v1/fields/security_event_log");
//// System.out.println(s);
//// String schemaHttpRes = HttpClientUtil.requestByGetMethod("http://192.168.40.224:9999/metadata/schema/v1/fields/security_event_log");
//// String schemaHttpRes = HttpClientUtil.requestByGetMethod("http://192.168.40.151:9999/metadata/schema/v1/fields/security_event_log");
// String schemaHttpRes = HttpClientUtil.requestByGetMethod("http://192.168.40.224:9999/metadata/schema/v1/fields/connection_record_log");
// String data = JSON.parseObject(schemaHttpRes).get("data").toString();
// System.out.println(data);
// }
} }

View File

@@ -36,6 +36,9 @@ public class JsonParseUtil {
case "long": case "long":
clazz = long.class; clazz = long.class;
break; break;
case "array":
clazz = JSONArray.class;
break;
case "Integer": case "Integer":
clazz = Integer.class; clazz = Integer.class;
break; break;
@@ -132,9 +135,6 @@ public class JsonParseUtil {
} }
public static void main(String[] args) {
System.out.println(getMapFromhttp("http://192.168.44.12:9999/metadata/schema/v1/fields/connection_record_log").toString());
}
/** /**
* 判断字段是否需要保留 * 判断字段是否需要保留
* *

View File

@@ -1,317 +0,0 @@
package com.zdjizhi.flume;
import com.alibaba.fastjson.JSONObject;
import com.jayway.jsonpath.InvalidPathException;
import com.jayway.jsonpath.JsonPath;
import com.zdjizhi.flume.interceptor.FlumeDynamicApp;
import com.zdjizhi.flume.interceptor.common.FlowWriteConfig;
import com.zdjizhi.flume.interceptor.utils.hbase.HBaseUtils;
import com.zdjizhi.flume.interceptor.utils.json.JsonParseUtil;
import com.zdjizhi.utils.Encodes;
import com.zdjizhi.utils.FormatUtils;
import com.zdjizhi.utils.IpLookup;
import com.zdjizhi.utils.StringUtil;
import org.apache.log4j.Logger;
import java.util.ArrayList;
import java.util.HashMap;
/**
* @author qidaijie
* @Package com.zdjizhi.flume
* @Description:
* @date 2020/9/229:38
*/
public class JsonTest {
private static Logger logger = Logger.getLogger(JsonTest.class);
private static IpLookup ipLookup;
private static FormatUtils formatUtils;
private static String schemaHttpUrl = "http://192.168.44.12:9999/metadata/schema/v1/fields/connection_record_log";
private static String uidZookeeperIp = "192.168.44.11:2181,192.168.44.14:2181,192.168.44.15:2181";
private static long dataCenterIdNum = 1L;
private static String ipDatPath = "D:\\workerSpace\\K18-Phase2\\tsgSpace\\dat\\";
private static String hbaseZookeeperIp = "192.168.44.11:2181,192.168.44.14:2181,192.168.44.15:2181";
private static String hbaseTableName = "subscriber_info";
private static HashMap<String, Class> map;
private static Object mapObject;
private static ArrayList<String[]> jobList;
public static void initialize() {
map = JsonParseUtil.getMapFromhttp(schemaHttpUrl);
mapObject = JsonParseUtil.generateObject(map);
jobList = JsonParseUtil.getJobListFromHttp(schemaHttpUrl);
//载入工具类
formatUtils = new FormatUtils.Builder(false).build();
//载入定位库
ipLookup = new IpLookup.Builder(false)
/**
* v1.0.2-com.zdjizhi.galaxy
*/
// .loadDataFileV4(ipDatPath + "Kazakhstan.mmdb")
// .loadDataFileV6(ipDatPath + "Kazakhstan.mmdb")
// .loadAsnDataFileV4(ipDatPath + "asn_v4.mmdb")
// .loadAsnDataFileV6(ipDatPath + "asn_v6.mmdb")
/**
* v1.0.3-com.zdjizhi.galaxy
*/
.loadDataFileV4(ipDatPath + "ip_v4.mmdb")
.loadDataFileV6(ipDatPath + "ip_v6.mmdb")
.loadDataFilePrivateV4(ipDatPath + "ip_private_v4.mmdb")
.loadDataFilePrivateV6(ipDatPath + "ip_private_v6.mmdb")
.loadAsnDataFile(ipDatPath + "asn_v4.mmdb")
.loadAsnDataFileV6(ipDatPath + "asn_v6.mmdb")
.build();
}
public static void main(String[] args) {
initialize();
String json = "{\"common_client_ip\":\"192.168.40.2\",\"common_server_ip\":\"192.168.40.1\",\"common_direction\":0,\"mail_attachment_name\":\"dGVzdA==\",\"common_device_tag\":{\"tag_sets\": [{\"tag\": \"data_center\", \"value\": \"北京/朝阳/华严北里/甲22号\"}, {\"tag\": \"isp\", \"value\": \"电信\"}]}}";
System.out.println(dealCommonMessage(json));
}
private static String dealCommonMessage(String message) {
Object object = JSONObject.parseObject(message, mapObject.getClass());
try {
for (String[] strings : jobList) {
Object name = JsonParseUtil.getValue(object, strings[0]);
String appendToKeyName = strings[1];
String functionName = strings[2];
// Object param = null;
// if (strings[3] != null) {
// param = JsonParseUtil.getValue(object, strings[3]);
// }
String param = strings[3];
switch (functionName) {
case "current_timestamp":
// if (Long.parseLong(JsonParseUtil.getValue(object, appendToKeyName)) == 0L) {
JsonParseUtil.setValue(object, appendToKeyName, getCurrentTime());
// }
break;
case "snowflake_id":
JsonParseUtil.setValue(object, appendToKeyName, formatUtils.getSnowflakeId(uidZookeeperIp, dataCenterIdNum));
break;
case "flattenSpec":
if (name != null && StringUtil.isNotBlank(param)) {
JsonParseUtil.setValue(object, appendToKeyName, flattenSpec(name.toString(), isJsonValue(object, param)));
}
break;
case "geo_ip_detail":
if (name != null && JsonParseUtil.getValue(object, appendToKeyName) == null) {
JsonParseUtil.setValue(object, appendToKeyName, getGeoIpDetail(name.toString()));
}
break;
case "geo_asn":
if (name != null && JsonParseUtil.getValue(object, appendToKeyName) == null) {
JsonParseUtil.setValue(object, appendToKeyName, getGeoAsn(name.toString()));
}
break;
case "if":
if (param != null) {
JsonParseUtil.setValue(object, appendToKeyName, condition(object, param));
}
break;
case "get_value":
if (name != null) {
JsonParseUtil.setValue(object, appendToKeyName, name.toString());
}
break;
case "radius_match":
if (name != null) {
JsonParseUtil.setValue(object, appendToKeyName, radiusMatch(name.toString(), hbaseZookeeperIp, hbaseTableName));
}
break;
case "geo_ip_country":
if (name != null && JsonParseUtil.getValue(object, appendToKeyName) == null) {
JsonParseUtil.setValue(object, appendToKeyName, getGeoIpCountry(name.toString()));
}
break;
case "decode_of_base64":
if (name != null) {
JsonParseUtil.setValue(object, appendToKeyName, decodeBase64(name.toString(), isJsonValue(object, param)));
}
break;
case "sub_domain":
if (name != null) {
Object appendTo = JsonParseUtil.getValue(object, appendToKeyName);
if (appendTo == null || StringUtil.isBlank(appendTo.toString())) {
JsonParseUtil.setValue(object, appendToKeyName, replaceGetTopDomain(FormatUtils.getTopPrivateDomain(name.toString())));
}
}
break;
default:
}
}
return JSONObject.toJSONString(object);
} catch (Exception e) {
logger.error("FlumeDynamicApp dealCommonMessage is error===>{" + e + "}<===");
e.printStackTrace();
// return "";
return message;//返回原数据
}
}
/**
* 有host根据host获取域名,有sni通过sni获取域名
* 这里是直接根据传入的获取域名
*
* @param url
* @return 顶级域名
*/
private static String replaceGetTopDomain(String url) {
// return url.replaceAll("InternetDomainName\\{name=", "").replaceAll("\\}", "");
try {
return FormatUtils.getTopPrivateDomain(url);
} catch (StringIndexOutOfBoundsException outException) {
logger.error("解析顶级域名异常,异常域名:" + url, outException);
return "";
}
}
/**
* 生成当前时间戳的操作
*/
private static int getCurrentTime() {
return (int) (System.currentTimeMillis() / 1000);
}
/**
* 根据clientIp获取location信息
*
* @param ip
* @return
*/
private static String getGeoIpDetail(String ip) {
return ipLookup.cityLookupDetail(ip);
}
/**
* 根据ip获取asn信息
*
* @param ip
* @return
*/
private static String getGeoAsn(String ip) {
// return ipLookup.asnLookup(ip, true);//v1.0.2-com.zdjizhi.galaxy
return ipLookup.asnLookup(ip);//v1.0.3-com.zdjizhi.galaxy
}
/**
* 根据ip获取country信息
*
* @param ip
* @return
*/
private static String getGeoIpCountry(String ip) {
return ipLookup.countryLookup(ip);
}
/**
* radius借助hbase补齐
*
* @param ip
* @return
*/
private static String radiusMatch(String ip, String hbaseZookeeper, String hbaseTable) {
return HBaseUtils.getAccount(ip, hbaseZookeeper, hbaseTable);
}
/**
* 根据编码解码base64
*
* @param message base64
* @param charset 编码
* @return 解码字符串
*/
private static String decodeBase64(String message, Object charset) {
String result = "";
try {
if (StringUtil.isNotBlank(message)) {
if (charset != null) {
result = Encodes.decodeBase64String(message, charset.toString());
} else {
result = Encodes.decodeBase64String(message, FlowWriteConfig.MAIL_DEFAULT_CHARSET);
}
}
} catch (Exception e) {
logger.error("解析 Base64 异常,异常信息:" + e);
}
return result;
}
/**
* 根据表达式解析json
*
* @param message json
* @param expr 解析表达式
* @return 解析结果
*/
private static String flattenSpec(String message, String expr) {
String flattenResult = "";
try {
ArrayList<String> read = JsonPath.parse(message).read(expr);
flattenResult = read.get(0);
} catch (ClassCastException | InvalidPathException e) {
logger.error("设备标签解析异常,[ " + expr + " ]解析表达式错误", e);
}
return flattenResult;
}
/**
* 判断是否为日志字段,是则返回对应value否则返回原始字符串
*
* @param object 内存实体类
* @param param 字段名/普通字符串
* @return JSON.Value or String
*/
private static String isJsonValue(Object object, String param) {
if (param.contains(FlowWriteConfig.IS_JSON_KEY_TAG)) {
Object value = JsonParseUtil.getValue(object, param.substring(2));
if (value != null) {
return value.toString();
} else {
return "";
}
} else {
return param;
}
}
/**
* IF函数实现解析日志构建三目运算
*
* @param object 内存实体类
* @param ifParam 字段名/普通字符串
* @return resultA or resultB or ""
*/
private static String condition(Object object, String ifParam) {
String result = "";
try {
String[] split = ifParam.split(FlowWriteConfig.FORMAT_SPLITTER);
String[] norms = split[0].split(FlowWriteConfig.IF_CONDITION_SPLITTER);
String direction = isJsonValue(object, norms[0]);
if (StringUtil.isNotBlank(direction)) {
if (split.length == FlowWriteConfig.IF_PARAM_LENGTH) {
String resultA = isJsonValue(object, split[1]);
String resultB = isJsonValue(object, split[2]);
result = (Integer.parseInt(direction) == Integer.parseInt(norms[1])) ? resultA : resultB;
}
}
} catch (Exception e) {
logger.error("IF 函数执行异常,异常信息:" + e);
e.printStackTrace();
}
return result;
}
}

View File

@@ -5,7 +5,7 @@
<parent> <parent>
<artifactId>dynamic_complement</artifactId> <artifactId>dynamic_complement</artifactId>
<groupId>com.zdjizhi</groupId> <groupId>com.zdjizhi</groupId>
<version>v3.20.09.22</version> <version>v3.21.06.02</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
@@ -18,24 +18,12 @@
<url>http://192.168.40.125:8099/content/groups/public</url> <url>http://192.168.40.125:8099/content/groups/public</url>
</repository> </repository>
<repository>
<id>maven-ali</id>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
<checksumPolicy>fail</checksumPolicy>
</snapshots>
</repository>
</repositories> </repositories>
<properties> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<flume.version>1.9.0</flume.version> <flume.version>1.9.0</flume.version>
<hbase.version>2.2.1</hbase.version> <hbase.version>2.2.3</hbase.version>
</properties> </properties>
<build> <build>
@@ -45,11 +33,11 @@
<artifactId>maven-shade-plugin</artifactId> <artifactId>maven-shade-plugin</artifactId>
<version>2.4.1</version> <version>2.4.1</version>
<configuration> <configuration>
<createDependencyReducedPom>true</createDependencyReducedPom> <createDependencyReducedPom>false</createDependencyReducedPom>
</configuration> </configuration>
<executions> <executions>
<execution> <execution>
<phase>package</phase> <phase>install</phase>
<goals> <goals>
<goal>shade</goal> <goal>shade</goal>
</goals> </goals>
@@ -74,6 +62,21 @@
</execution> </execution>
</executions> </executions>
</plugin> </plugin>
<plugin>
<groupId>io.github.zlika</groupId>
<artifactId>reproducible-build-maven-plugin</artifactId>
<version>0.2</version>
<executions>
<execution>
<goals>
<goal>strip-jar</goal>
</goals>
<phase>install</phase>
</execution>
</executions>
</plugin>
<plugin> <plugin>
<groupId>org.codehaus.mojo</groupId> <groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId> <artifactId>exec-maven-plugin</artifactId>

View File

@@ -25,6 +25,7 @@ public class FlumeOnOffApp implements Interceptor {
@Override @Override
public void initialize() { public void initialize() {
} }
@Override @Override

View File

@@ -5,38 +5,16 @@
<parent> <parent>
<artifactId>dynamic_complement</artifactId> <artifactId>dynamic_complement</artifactId>
<groupId>com.zdjizhi</groupId> <groupId>com.zdjizhi</groupId>
<version>v3.20.09.22</version> <version>v3.21.06.02</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>FlumeSubscriberInterceptor</artifactId> <artifactId>FlumeSubscriberInterceptor</artifactId>
<repositories>
<repository>
<id>ebi</id>
<name>www.ebi.ac.uk</name>
<url>http://www.ebi.ac.uk/intact/maven/nexus/content/groups/public/</url>
</repository>
<repository>
<id>maven-ali</id>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
<checksumPolicy>fail</checksumPolicy>
</snapshots>
</repository>
</repositories>
<properties> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<flume.version>1.9.0</flume.version> <flume.version>1.9.0</flume.version>
<hbase.version>2.2.1</hbase.version> <hbase.version>2.2.3</hbase.version>
</properties> </properties>
<build> <build>
@@ -46,11 +24,11 @@
<artifactId>maven-shade-plugin</artifactId> <artifactId>maven-shade-plugin</artifactId>
<version>2.4.1</version> <version>2.4.1</version>
<configuration> <configuration>
<createDependencyReducedPom>true</createDependencyReducedPom> <createDependencyReducedPom>false</createDependencyReducedPom>
</configuration> </configuration>
<executions> <executions>
<execution> <execution>
<phase>package</phase> <phase>install</phase>
<goals> <goals>
<goal>shade</goal> <goal>shade</goal>
</goals> </goals>
@@ -75,6 +53,21 @@
</execution> </execution>
</executions> </executions>
</plugin> </plugin>
<plugin>
<groupId>io.github.zlika</groupId>
<artifactId>reproducible-build-maven-plugin</artifactId>
<version>0.2</version>
<executions>
<execution>
<goals>
<goal>strip-jar</goal>
</goals>
<phase>install</phase>
</execution>
</executions>
</plugin>
<plugin> <plugin>
<groupId>org.codehaus.mojo</groupId> <groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId> <artifactId>exec-maven-plugin</artifactId>
@@ -154,21 +147,6 @@
</exclusions> </exclusions>
</dependency> </dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-server</artifactId>
<version>${hbase.version}</version>
<exclusions>
<exclusion>
<artifactId>slf4j-log4j12</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
<exclusion>
<artifactId>log4j-over-slf4j</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
</dependencies> </dependencies>

View File

@@ -7,7 +7,7 @@
<groupId>com.zdjizhi</groupId> <groupId>com.zdjizhi</groupId>
<artifactId>dynamic_complement</artifactId> <artifactId>dynamic_complement</artifactId>
<packaging>pom</packaging> <packaging>pom</packaging>
<version>1.0</version> <version>v3.21.06.02</version>
<modules> <modules>
<module>FlumeDynamicInterceptor</module> <module>FlumeDynamicInterceptor</module>
<module>FlumeSubscriberInterceptor</module> <module>FlumeSubscriberInterceptor</module>