Compare commits
182 Commits
feature/sc
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
dfc8718da2 | ||
|
|
fc98fa1d64 | ||
|
|
4992cb1899 | ||
|
|
39338f7955 | ||
|
|
62515f5dff | ||
|
|
2735b8e93e | ||
|
|
c7fe7ca1cd | ||
|
|
557c6f23eb | ||
|
|
7838493fff | ||
|
|
170f495a11 | ||
|
|
b3b233172f | ||
|
|
c02a87beee | ||
|
|
8490d955f0 | ||
|
|
0d375e89d0 | ||
|
|
b73382262c | ||
|
|
5b5de41632 | ||
|
|
33a42066cf | ||
|
|
a9c1d40fdc | ||
|
|
ff5aa245bb | ||
|
|
45dafb9dbe | ||
|
|
2954275dd3 | ||
|
|
728e3407e8 | ||
|
|
16d71addda | ||
|
|
4ef6c25e69 | ||
|
|
2d5f20362b | ||
|
|
515a0ab312 | ||
|
|
9d0085a57c | ||
|
|
000436ec34 | ||
|
|
319c73ec0a | ||
|
|
9a39b814e6 | ||
|
|
522fb51195 | ||
|
|
59adef9271 | ||
|
|
7c5c71cb8e | ||
|
|
4ec71d4d6f | ||
|
|
53ffcca70d | ||
|
|
068124bf3f | ||
|
|
21a0d8c57e | ||
|
|
96a845510d | ||
|
|
6b63e26741 | ||
|
|
4ce6c1ba14 | ||
|
|
8b2f8b4fb8 | ||
|
|
9574045662 | ||
|
|
56b0600cc8 | ||
|
|
2eab8bae49 | ||
|
|
4417df5a7b | ||
|
|
bad0f118d1 | ||
|
|
05b853ce8e | ||
|
|
3c9a843572 | ||
|
|
64a0cf9ba5 | ||
|
|
1bf739af73 | ||
|
|
e106c6c6d6 | ||
|
|
db1326f582 | ||
|
|
67a40e2719 | ||
|
|
7723c48e5b | ||
|
|
c980123d55 | ||
|
|
cf98121180 | ||
|
|
e5a5331464 | ||
|
|
07125ea224 | ||
|
|
6164546dbb | ||
|
|
eab517c44f | ||
|
|
c077c16a3a | ||
|
|
1ff8c985c7 | ||
|
|
53c6c267e8 | ||
|
|
20e8421900 | ||
|
|
d01235e092 | ||
|
|
12828291a9 | ||
|
|
f21e814763 | ||
|
|
11c2c641bb | ||
|
|
59cabb4868 | ||
|
|
b7c739a955 | ||
|
|
1f6ef08a30 | ||
|
|
87abd1e2ca | ||
|
|
2542a8bfd2 | ||
|
|
1c0259a95c | ||
|
|
37f49c40d5 | ||
|
|
beef47df4c | ||
|
|
6d77d1c3c0 | ||
|
|
4179a0a887 | ||
|
|
6ebefc9026 | ||
|
|
701019c38a | ||
|
|
6ae7fdef06 | ||
|
|
e277117c6d | ||
|
|
d54c93b61d | ||
|
|
3b06d3dfd5 | ||
|
|
e718120be1 | ||
|
|
1dffb8fb6f | ||
|
|
0994219ede | ||
|
|
6f915e5162 | ||
|
|
35247d7414 | ||
|
|
64f19b528e | ||
|
|
d0c3ebd60f | ||
|
|
114c180742 | ||
|
|
e51d693fa0 | ||
|
|
757808d313 | ||
|
|
e123233af9 | ||
|
|
ad3072cc7a | ||
|
|
617ddab7ab | ||
|
|
45891bc734 | ||
|
|
19e0bce58f | ||
|
|
10ce6cfa07 | ||
|
|
9d5d99974b | ||
|
|
970977ba3c | ||
|
|
732d9f5aa9 | ||
|
|
96fa19aea1 | ||
|
|
1b7c33d078 | ||
|
|
b9463f07ac | ||
|
|
35e2807a91 | ||
|
|
2275f349d1 | ||
|
|
1fedfbe4b8 | ||
|
|
b2f15b3919 | ||
|
|
8fc8cc7c2d | ||
|
|
98bb843159 | ||
|
|
edb044596e | ||
|
|
557156af79 | ||
|
|
32a811fb1c | ||
|
|
36cbaebf0c | ||
|
|
da572f4bd0 | ||
|
|
68e91c9ae5 | ||
|
|
69004f5c02 | ||
|
|
9804b0cc52 | ||
|
|
fa619d2595 | ||
|
|
a44d434952 | ||
|
|
736bc40202 | ||
|
|
6a2e5bacb9 | ||
|
|
da69688270 | ||
|
|
a4e92c03e7 | ||
|
|
b207f8fb8e | ||
|
|
5f16a98402 | ||
|
|
43282c7163 | ||
|
|
77cdd73f02 | ||
|
|
b38f128f32 | ||
|
|
2c64391737 | ||
|
|
5481a7b9ee | ||
|
|
7e5a524eb7 | ||
|
|
255d6d9fcb | ||
|
|
4c90c27921 | ||
|
|
f4b8ba69d0 | ||
|
|
0f6fdda7f5 | ||
|
|
44eb3ed402 | ||
|
|
ebada97c22 | ||
|
|
7221f2a52f | ||
|
|
6a444d38ba | ||
|
|
7d0d185c0e | ||
|
|
c9c26f0a9c | ||
|
|
b20c33e2bd | ||
|
|
c10b8930e3 | ||
|
|
21ef68da95 | ||
|
|
33b9d61711 | ||
|
|
43dbc50a19 | ||
|
|
5bc835ec3f | ||
|
|
673d077e32 | ||
|
|
b2af6cdad8 | ||
|
|
bfd28178b0 | ||
|
|
cefc581964 | ||
|
|
c1404584c0 | ||
|
|
ef851cb187 | ||
|
|
402db73b53 | ||
|
|
cbc7c91abe | ||
|
|
14d569edfd | ||
|
|
4d3b53cbb7 | ||
|
|
112708f056 | ||
|
|
b40469ea8d | ||
|
|
b7cc87b4bc | ||
|
|
9ed0da345b | ||
|
|
559c7b287c | ||
|
|
bcd6826c56 | ||
|
|
7296c36d80 | ||
|
|
a8a6519a88 | ||
|
|
7d2b0bae29 | ||
|
|
098a196cc0 | ||
|
|
cfb56877c3 | ||
|
|
d4bc2787d4 | ||
|
|
53eca34191 | ||
|
|
a949a98a37 | ||
|
|
fe274d4da6 | ||
|
|
6d90d720fd | ||
|
|
43f10e38e7 | ||
|
|
f52376d63d | ||
|
|
1046784f3e | ||
|
|
3ff568c823 | ||
|
|
906b6e6ca4 | ||
|
|
8d5d1d9523 |
35
.gitignore
vendored
Normal file
35
.gitignore
vendored
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
target/
|
||||||
|
!.mvn/wrapper/maven-wrapper.jar
|
||||||
|
!**/src/main/**/target/
|
||||||
|
!**/src/test/**/target/
|
||||||
|
|
||||||
|
### IntelliJ IDEA ###
|
||||||
|
.idea/
|
||||||
|
*.iws
|
||||||
|
*.iml
|
||||||
|
*.ipr
|
||||||
|
|
||||||
|
### Eclipse ###
|
||||||
|
.apt_generated
|
||||||
|
.classpath
|
||||||
|
.factorypath
|
||||||
|
.project
|
||||||
|
.settings
|
||||||
|
.springBeans
|
||||||
|
.sts4-cache
|
||||||
|
|
||||||
|
### NetBeans ###
|
||||||
|
/nbproject/private/
|
||||||
|
/nbbuild/
|
||||||
|
/dist/
|
||||||
|
/nbdist/
|
||||||
|
/.nb-gradle/
|
||||||
|
build/
|
||||||
|
!**/src/main/**/build/
|
||||||
|
!**/src/test/**/build/
|
||||||
|
|
||||||
|
### VS Code ###
|
||||||
|
.vscode/
|
||||||
|
|
||||||
|
### Mac OS ###
|
||||||
|
.DS_Store
|
||||||
40
.gitlab-ci.yml
Normal file
40
.gitlab-ci.yml
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
image: 192.168.40.153:8082/common/maven:3.8.1-openjdk-11-slim
|
||||||
|
|
||||||
|
variables:
|
||||||
|
MAVEN_CLI_OPTS: "--batch-mode --errors --show-version"
|
||||||
|
|
||||||
|
stages:
|
||||||
|
- check
|
||||||
|
- test
|
||||||
|
- build
|
||||||
|
|
||||||
|
release-version-check:
|
||||||
|
stage: check
|
||||||
|
script:
|
||||||
|
- echo "$MAVEN_SETTINGS_XML" > /usr/share/maven/conf/settings.xml
|
||||||
|
- mvn $MAVEN_CLI_OPTS enforcer:enforce@release-version-check
|
||||||
|
- |-
|
||||||
|
if `mvn $MAVEN_CLI_OPTS dependency:get@release-deploy-check > /dev/null 2>&1`; then
|
||||||
|
echo "The current version has been deployed."
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
echo "The current version has not been deployed."
|
||||||
|
fi
|
||||||
|
rules:
|
||||||
|
- if: $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "master" && $CI_PIPELINE_SOURCE == "merge_request_event"
|
||||||
|
|
||||||
|
test:
|
||||||
|
stage: test
|
||||||
|
script:
|
||||||
|
- echo "$MAVEN_SETTINGS_XML" > /usr/share/maven/conf/settings.xml
|
||||||
|
- mvn $MAVEN_CLI_OPTS clean test
|
||||||
|
only:
|
||||||
|
- merge_requests
|
||||||
|
|
||||||
|
build:
|
||||||
|
stage: build
|
||||||
|
script:
|
||||||
|
- echo "$MAVEN_SETTINGS_XML" > /usr/share/maven/conf/settings.xml
|
||||||
|
- mvn clean site deploy -DskipTests
|
||||||
|
only:
|
||||||
|
- master
|
||||||
97
README.md
97
README.md
@@ -1,92 +1,25 @@
|
|||||||
# flink-voip-fusion
|
# SIP RTP Correlation
|
||||||
|
|
||||||
|
## 简介
|
||||||
|
|
||||||
|
SIP RTP Correlation 项目是一个使用 Apache Flink 实现的实时数据处理项目,旨在从 Kafka 中读取 SIP(Session Initiation Protocol)和 RTP(Real-time Transport Protocol)数据,将它们融合成完整的 VoIP(Voice over Internet Protocol)通话数据。
|
||||||
|
|
||||||
## Getting started
|
SIP RTP Correlation 项目可以用于实时监控和分析 VoIP 通话数据,提取关键指标,以及进行实时报警和诊断。
|
||||||
|
|
||||||
To make it easy for you to get started with GitLab, here's a list of recommended next steps.
|
## 编译和打包
|
||||||
|
|
||||||
Already a pro? Just edit this README.md and make it your own. Want to make it easy? [Use the template at the bottom](#editing-this-readme)!
|
使用Maven工具对项目进行编译和打包:
|
||||||
|
```shell
|
||||||
## Add your files
|
mvn clean package
|
||||||
|
|
||||||
- [ ] [Create](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#create-a-file) or [upload](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#upload-a-file) files
|
|
||||||
- [ ] [Add files using the command line](https://docs.gitlab.com/ee/gitlab-basics/add-file.html#add-a-file-using-the-command-line) or push an existing Git repository with the following command:
|
|
||||||
|
|
||||||
```
|
|
||||||
cd existing_repo
|
|
||||||
git remote add origin https://git.mesalab.cn/galaxy/tsg_olap/flink-voip-fusion.git
|
|
||||||
git branch -M main
|
|
||||||
git push -uf origin main
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## Integrate with your tools
|
## 运行Flink任务
|
||||||
|
|
||||||
- [ ] [Set up project integrations](https://git.mesalab.cn/galaxy/tsg_olap/flink-voip-fusion/-/settings/integrations)
|
使用以下命令运行Flink任务:
|
||||||
|
```shell
|
||||||
|
flink run -c com.geedgenetworks.flink.easy.core.Runner path/to/sip-rtp-correlation-<version>.jar job.yml
|
||||||
|
```
|
||||||
|
|
||||||
## Collaborate with your team
|
## 贡献
|
||||||
|
|
||||||
- [ ] [Invite team members and collaborators](https://docs.gitlab.com/ee/user/project/members/)
|
如果您发现任何问题或改进项目的想法,欢迎提交 Issue 或 Pull Request。
|
||||||
- [ ] [Create a new merge request](https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html)
|
|
||||||
- [ ] [Automatically close issues from merge requests](https://docs.gitlab.com/ee/user/project/issues/managing_issues.html#closing-issues-automatically)
|
|
||||||
- [ ] [Enable merge request approvals](https://docs.gitlab.com/ee/user/project/merge_requests/approvals/)
|
|
||||||
- [ ] [Automatically merge when pipeline succeeds](https://docs.gitlab.com/ee/user/project/merge_requests/merge_when_pipeline_succeeds.html)
|
|
||||||
|
|
||||||
## Test and Deploy
|
|
||||||
|
|
||||||
Use the built-in continuous integration in GitLab.
|
|
||||||
|
|
||||||
- [ ] [Get started with GitLab CI/CD](https://docs.gitlab.com/ee/ci/quick_start/index.html)
|
|
||||||
- [ ] [Analyze your code for known vulnerabilities with Static Application Security Testing(SAST)](https://docs.gitlab.com/ee/user/application_security/sast/)
|
|
||||||
- [ ] [Deploy to Kubernetes, Amazon EC2, or Amazon ECS using Auto Deploy](https://docs.gitlab.com/ee/topics/autodevops/requirements.html)
|
|
||||||
- [ ] [Use pull-based deployments for improved Kubernetes management](https://docs.gitlab.com/ee/user/clusters/agent/)
|
|
||||||
- [ ] [Set up protected environments](https://docs.gitlab.com/ee/ci/environments/protected_environments.html)
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
# Editing this README
|
|
||||||
|
|
||||||
When you're ready to make this README your own, just edit this file and use the handy template below (or feel free to structure it however you want - this is just a starting point!). Thank you to [makeareadme.com](https://www.makeareadme.com/) for this template.
|
|
||||||
|
|
||||||
## Suggestions for a good README
|
|
||||||
Every project is different, so consider which of these sections apply to yours. The sections used in the template are suggestions for most open source projects. Also keep in mind that while a README can be too long and detailed, too long is better than too short. If you think your README is too long, consider utilizing another form of documentation rather than cutting out information.
|
|
||||||
|
|
||||||
## Name
|
|
||||||
Choose a self-explaining name for your project.
|
|
||||||
|
|
||||||
## Description
|
|
||||||
Let people know what your project can do specifically. Provide context and add a link to any reference visitors might be unfamiliar with. A list of Features or a Background subsection can also be added here. If there are alternatives to your project, this is a good place to list differentiating factors.
|
|
||||||
|
|
||||||
## Badges
|
|
||||||
On some READMEs, you may see small images that convey metadata, such as whether or not all the tests are passing for the project. You can use Shields to add some to your README. Many services also have instructions for adding a badge.
|
|
||||||
|
|
||||||
## Visuals
|
|
||||||
Depending on what you are making, it can be a good idea to include screenshots or even a video (you'll frequently see GIFs rather than actual videos). Tools like ttygif can help, but check out Asciinema for a more sophisticated method.
|
|
||||||
|
|
||||||
## Installation
|
|
||||||
Within a particular ecosystem, there may be a common way of installing things, such as using Yarn, NuGet, or Homebrew. However, consider the possibility that whoever is reading your README is a novice and would like more guidance. Listing specific steps helps remove ambiguity and gets people to using your project as quickly as possible. If it only runs in a specific context like a particular programming language version or operating system or has dependencies that have to be installed manually, also add a Requirements subsection.
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
Use examples liberally, and show the expected output if you can. It's helpful to have inline the smallest example of usage that you can demonstrate, while providing links to more sophisticated examples if they are too long to reasonably include in the README.
|
|
||||||
|
|
||||||
## Support
|
|
||||||
Tell people where they can go to for help. It can be any combination of an issue tracker, a chat room, an email address, etc.
|
|
||||||
|
|
||||||
## Roadmap
|
|
||||||
If you have ideas for releases in the future, it is a good idea to list them in the README.
|
|
||||||
|
|
||||||
## Contributing
|
|
||||||
State if you are open to contributions and what your requirements are for accepting them.
|
|
||||||
|
|
||||||
For people who want to make changes to your project, it's helpful to have some documentation on how to get started. Perhaps there is a script that they should run or some environment variables that they need to set. Make these steps explicit. These instructions could also be useful to your future self.
|
|
||||||
|
|
||||||
You can also document commands to lint the code or run tests. These steps help to ensure high code quality and reduce the likelihood that the changes inadvertently break something. Having instructions for running tests is especially helpful if it requires external setup, such as starting a Selenium server for testing in a browser.
|
|
||||||
|
|
||||||
## Authors and acknowledgment
|
|
||||||
Show your appreciation to those who have contributed to the project.
|
|
||||||
|
|
||||||
## License
|
|
||||||
For open source projects, say how it is licensed.
|
|
||||||
|
|
||||||
## Project status
|
|
||||||
If you have run out of energy or time for your project, put a note at the top of the README saying that development has slowed down or stopped completely. Someone may choose to fork your project or volunteer to step in as a maintainer or owner, allowing your project to keep going. You can also make an explicit request for maintainers.
|
|
||||||
646
pom.xml
Normal file
646
pom.xml
Normal file
@@ -0,0 +1,646 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<groupId>com.geedgenetworks.application</groupId>
|
||||||
|
<artifactId>sip-rtp-correlation</artifactId>
|
||||||
|
<version>2.2.0</version>
|
||||||
|
|
||||||
|
<name>Flink : SIP-RTP : Correlation</name>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
<java.version>11</java.version>
|
||||||
|
<maven.compiler.source>${java.version}</maven.compiler.source>
|
||||||
|
<maven.compiler.target>${java.version}</maven.compiler.target>
|
||||||
|
<scala.version>2.12.10</scala.version>
|
||||||
|
<scala.binary.version>2.12</scala.binary.version>
|
||||||
|
<flink.version>1.13.6</flink.version>
|
||||||
|
<easy.stream.version>1.3-rc2</easy.stream.version>
|
||||||
|
<slf4j.version>1.7.32</slf4j.version>
|
||||||
|
<log4j.version>2.17.1</log4j.version>
|
||||||
|
<junit.version>5.8.0</junit.version>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
<distributionManagement>
|
||||||
|
<repository>
|
||||||
|
<id>platform-releases</id>
|
||||||
|
<url>http://192.168.40.153:8081/content/repositories/platform-release</url>
|
||||||
|
<uniqueVersion>true</uniqueVersion>
|
||||||
|
</repository>
|
||||||
|
<snapshotRepository>
|
||||||
|
<id>platform-snapshots</id>
|
||||||
|
<url>http://192.168.40.153:8081/content/repositories/platform-snapshot</url>
|
||||||
|
</snapshotRepository>
|
||||||
|
<site>
|
||||||
|
<id>platform-site</id>
|
||||||
|
<url>
|
||||||
|
dav:http://192.168.40.153:8081/content/sites/platform-site/platform/application/sip-rtp-correlate-${project.version}
|
||||||
|
</url>
|
||||||
|
</site>
|
||||||
|
</distributionManagement>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.slf4j</groupId>
|
||||||
|
<artifactId>slf4j-api</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.logging.log4j</groupId>
|
||||||
|
<artifactId>log4j-slf4j-impl</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.logging.log4j</groupId>
|
||||||
|
<artifactId>log4j-api</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.logging.log4j</groupId>
|
||||||
|
<artifactId>log4j-core</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>cn.hutool</groupId>
|
||||||
|
<artifactId>hutool-all</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>xyz.downgoon</groupId>
|
||||||
|
<artifactId>snowflake</artifactId>
|
||||||
|
<version>1.0.0</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- Easy Stream -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.geedgenetworks.flink</groupId>
|
||||||
|
<artifactId>easy-stream-common</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.geedgenetworks.flink</groupId>
|
||||||
|
<artifactId>easy-stream-core</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.geedgenetworks.flink</groupId>
|
||||||
|
<artifactId>easy-stream-grouped-exec-pipeline</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.geedgenetworks.flink</groupId>
|
||||||
|
<artifactId>easy-stream-filter-pipeline</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.geedgenetworks.flink</groupId>
|
||||||
|
<artifactId>easy-stream-console-pipeline</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.geedgenetworks.flink</groupId>
|
||||||
|
<artifactId>easy-stream-split-pipeline</artifactId>
|
||||||
|
<version>${easy.stream.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.geedgenetworks.flink</groupId>
|
||||||
|
<artifactId>easy-stream-correlate-pipeline</artifactId>
|
||||||
|
<version>${easy.stream.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.geedgenetworks.flink</groupId>
|
||||||
|
<artifactId>easy-stream-union-pipeline</artifactId>
|
||||||
|
<version>${easy.stream.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.geedgenetworks.flink</groupId>
|
||||||
|
<artifactId>easy-stream-kafka-connector</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.geedgenetworks.flink</groupId>
|
||||||
|
<artifactId>easy-stream-text-connector</artifactId>
|
||||||
|
<version>${easy.stream.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.geedgenetworks.flink</groupId>
|
||||||
|
<artifactId>easy-stream-socket-connector</artifactId>
|
||||||
|
<version>${easy.stream.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.geedgenetworks.flink</groupId>
|
||||||
|
<artifactId>easy-stream-console-connector</artifactId>
|
||||||
|
<version>${easy.stream.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.geedgenetworks.flink</groupId>
|
||||||
|
<artifactId>easy-stream-json-format</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.geedgenetworks.flink</groupId>
|
||||||
|
<artifactId>easy-stream-flink-shim</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- Flink -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.flink</groupId>
|
||||||
|
<artifactId>flink-clients_${scala.binary.version}</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.flink</groupId>
|
||||||
|
<artifactId>flink-core</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.flink</groupId>
|
||||||
|
<artifactId>flink-streaming-java_${scala.binary.version}</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.flink</groupId>
|
||||||
|
<artifactId>flink-runtime_${scala.binary.version}</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.flink</groupId>
|
||||||
|
<artifactId>flink-runtime-web_${scala.binary.version}</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.flink</groupId>
|
||||||
|
<artifactId>flink-table-common</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.flink</groupId>
|
||||||
|
<artifactId>flink-table-api-java-bridge_${scala.binary.version}</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.flink</groupId>
|
||||||
|
<artifactId>flink-table-planner-blink_${scala.binary.version}</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.flink</groupId>
|
||||||
|
<artifactId>flink-table-runtime-blink_${scala.binary.version}</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.junit.jupiter</groupId>
|
||||||
|
<artifactId>junit-jupiter-api</artifactId>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
<dependencyManagement>
|
||||||
|
<dependencies>
|
||||||
|
<!-- DEV -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.github.spotbugs</groupId>
|
||||||
|
<artifactId>spotbugs-annotations</artifactId>
|
||||||
|
<version>4.4.2</version>
|
||||||
|
</dependency>
|
||||||
|
<!-- LOG -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.slf4j</groupId>
|
||||||
|
<artifactId>slf4j-api</artifactId>
|
||||||
|
<version>${slf4j.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.logging.log4j</groupId>
|
||||||
|
<artifactId>log4j-slf4j-impl</artifactId>
|
||||||
|
<version>${log4j.version}</version>
|
||||||
|
<scope>runtime</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.logging.log4j</groupId>
|
||||||
|
<artifactId>log4j-api</artifactId>
|
||||||
|
<version>${log4j.version}</version>
|
||||||
|
<scope>runtime</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.logging.log4j</groupId>
|
||||||
|
<artifactId>log4j-core</artifactId>
|
||||||
|
<version>${log4j.version}</version>
|
||||||
|
<scope>runtime</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<!-- API bridge between log4j 1 and 2 -->
|
||||||
|
<groupId>org.apache.logging.log4j</groupId>
|
||||||
|
<artifactId>log4j-1.2-api</artifactId>
|
||||||
|
<version>${log4j.version}</version>
|
||||||
|
<scope>runtime</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- Test -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.junit.jupiter</groupId>
|
||||||
|
<artifactId>junit-jupiter-api</artifactId>
|
||||||
|
<version>${junit.version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.junit.jupiter</groupId>
|
||||||
|
<artifactId>junit-jupiter</artifactId>
|
||||||
|
<version>${junit.version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- Common -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>cn.hutool</groupId>
|
||||||
|
<artifactId>hutool-all</artifactId>
|
||||||
|
<version>5.8.32</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- Easy Stream-->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.geedgenetworks.flink</groupId>
|
||||||
|
<artifactId>easy-stream-common</artifactId>
|
||||||
|
<version>${easy.stream.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.geedgenetworks.flink</groupId>
|
||||||
|
<artifactId>easy-stream-core</artifactId>
|
||||||
|
<version>${easy.stream.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.geedgenetworks.flink</groupId>
|
||||||
|
<artifactId>easy-stream-grouped-exec-pipeline</artifactId>
|
||||||
|
<version>${easy.stream.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.geedgenetworks.flink</groupId>
|
||||||
|
<artifactId>easy-stream-filter-pipeline</artifactId>
|
||||||
|
<version>${easy.stream.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.geedgenetworks.flink</groupId>
|
||||||
|
<artifactId>easy-stream-console-pipeline</artifactId>
|
||||||
|
<version>${easy.stream.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.geedgenetworks.flink</groupId>
|
||||||
|
<artifactId>easy-stream-kafka-connector</artifactId>
|
||||||
|
<version>${easy.stream.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.geedgenetworks.flink</groupId>
|
||||||
|
<artifactId>easy-stream-json-format</artifactId>
|
||||||
|
<version>${easy.stream.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.geedgenetworks.flink</groupId>
|
||||||
|
<artifactId>easy-stream-flink-shim</artifactId>
|
||||||
|
<version>${easy.stream.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- Flink -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.flink</groupId>
|
||||||
|
<artifactId>flink-core</artifactId>
|
||||||
|
<version>${flink.version}</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.flink</groupId>
|
||||||
|
<artifactId>flink-streaming-java_${scala.binary.version}</artifactId>
|
||||||
|
<version>${flink.version}</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.flink</groupId>
|
||||||
|
<artifactId>flink-clients_${scala.binary.version}</artifactId>
|
||||||
|
<version>${flink.version}</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.flink</groupId>
|
||||||
|
<artifactId>flink-runtime_${scala.binary.version}</artifactId>
|
||||||
|
<version>${flink.version}</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.flink</groupId>
|
||||||
|
<artifactId>flink-runtime-web_${scala.binary.version}</artifactId>
|
||||||
|
<version>${flink.version}</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.flink</groupId>
|
||||||
|
<artifactId>flink-connector-kafka_${scala.binary.version}</artifactId>
|
||||||
|
<version>${flink.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.flink</groupId>
|
||||||
|
<artifactId>flink-json</artifactId>
|
||||||
|
<version>${flink.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.flink</groupId>
|
||||||
|
<artifactId>flink-table-common</artifactId>
|
||||||
|
<version>${flink.version}</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.flink</groupId>
|
||||||
|
<artifactId>flink-table-api-java-bridge_${scala.binary.version}</artifactId>
|
||||||
|
<version>${flink.version}</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.flink</groupId>
|
||||||
|
<artifactId>flink-table-runtime-blink_${scala.binary.version}</artifactId>
|
||||||
|
<version>${flink.version}</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.flink</groupId>
|
||||||
|
<artifactId>flink-table-planner-blink_${scala.binary.version}</artifactId>
|
||||||
|
<version>${flink.version}</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
</dependencyManagement>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-checkstyle-plugin</artifactId>
|
||||||
|
<version>3.1.2</version>
|
||||||
|
<configuration>
|
||||||
|
<suppressionsLocation>${basedir}/tools/maven/suppressions.xml</suppressionsLocation>
|
||||||
|
<includeTestSourceDirectory>true</includeTestSourceDirectory>
|
||||||
|
<configLocation>${basedir}/tools/maven/checkstyle.xml</configLocation>
|
||||||
|
<logViolationsToConsole>true</logViolationsToConsole>
|
||||||
|
<failOnViolation>true</failOnViolation>
|
||||||
|
</configuration>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.puppycrawl.tools</groupId>
|
||||||
|
<artifactId>checkstyle</artifactId>
|
||||||
|
<version>8.40</version>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>java-style-check</id>
|
||||||
|
<phase>compile</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>check</goal>
|
||||||
|
</goals>
|
||||||
|
<configuration>
|
||||||
|
<sourceDirectories>src/main/java</sourceDirectories>
|
||||||
|
</configuration>
|
||||||
|
</execution>
|
||||||
|
<execution>
|
||||||
|
<id>java-test-style-check</id>
|
||||||
|
<phase>test-compile</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>check</goal>
|
||||||
|
</goals>
|
||||||
|
<configuration>
|
||||||
|
<testSourceDirectories>src/test/java</testSourceDirectories>
|
||||||
|
<includeTestSourceDirectory>true</includeTestSourceDirectory>
|
||||||
|
</configuration>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>com.github.spotbugs</groupId>
|
||||||
|
<artifactId>spotbugs-maven-plugin</artifactId>
|
||||||
|
<version>4.4.2.2</version>
|
||||||
|
<configuration>
|
||||||
|
<xmlOutput>true</xmlOutput>
|
||||||
|
<!-- Low, Medium, High ('Low' is strictest) -->
|
||||||
|
<threshold>Low</threshold>
|
||||||
|
<effort>default</effort>
|
||||||
|
<spotbugsXmlOutputDirectory>${project.build.directory}/spotbugs</spotbugsXmlOutputDirectory>
|
||||||
|
<excludeFilterFile>${basedir}/tools/maven/spotbugs-exclude.xml</excludeFilterFile>
|
||||||
|
<failOnError>true</failOnError>
|
||||||
|
</configuration>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>findbugs-main</id>
|
||||||
|
<phase>compile</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>check</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
<execution>
|
||||||
|
<id>findbugs-test</id>
|
||||||
|
<phase>test-compile</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>check</goal>
|
||||||
|
</goals>
|
||||||
|
<configuration>
|
||||||
|
<includeTests>true</includeTests>
|
||||||
|
</configuration>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<version>3.8.1</version>
|
||||||
|
<configuration>
|
||||||
|
<source>${maven.compiler.source}</source>
|
||||||
|
<target>${maven.compiler.target}</target>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-shade-plugin</artifactId>
|
||||||
|
<version>3.5.1</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>default-shade</id>
|
||||||
|
<phase>package</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>shade</goal>
|
||||||
|
</goals>
|
||||||
|
<configuration>
|
||||||
|
<createDependencyReducedPom>false</createDependencyReducedPom>
|
||||||
|
<finalName>${project.artifactId}-${project.version}</finalName>
|
||||||
|
<artifactSet>
|
||||||
|
<excludes>
|
||||||
|
<exclude>org.apache.flink:force-shading</exclude>
|
||||||
|
<exclude>com.google.code.findbugs:jsr305</exclude>
|
||||||
|
<exclude>org.slf4j:*</exclude>
|
||||||
|
<exclude>org.apache.logging.log4j:*</exclude>
|
||||||
|
<exclude>org.mockito:mockito-core</exclude>
|
||||||
|
</excludes>
|
||||||
|
</artifactSet>
|
||||||
|
<filters>
|
||||||
|
<filter>
|
||||||
|
<artifact>*:*</artifact>
|
||||||
|
<excludes>
|
||||||
|
<exclude>META-INF/*.SF</exclude>
|
||||||
|
<exclude>META-INF/*.DSA</exclude>
|
||||||
|
<exclude>META-INF/*.RSA</exclude>
|
||||||
|
</excludes>
|
||||||
|
</filter>
|
||||||
|
</filters>
|
||||||
|
<transformers>
|
||||||
|
<transformer
|
||||||
|
implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
|
||||||
|
</transformers>
|
||||||
|
</configuration>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-assembly-plugin</artifactId>
|
||||||
|
<version>3.0.0</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>build-jobs</id>
|
||||||
|
<phase>package</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>single</goal>
|
||||||
|
</goals>
|
||||||
|
<configuration>
|
||||||
|
<finalName>${project.artifactId}-yml-${project.version}</finalName>
|
||||||
|
<appendAssemblyId>false</appendAssemblyId>
|
||||||
|
<descriptors>
|
||||||
|
<descriptor>tools/dist/target.xml</descriptor>
|
||||||
|
</descriptors>
|
||||||
|
</configuration>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-resources-plugin</artifactId>
|
||||||
|
<version>3.0.0</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>site-resources</id>
|
||||||
|
<phase>pre-site</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>resources</goal>
|
||||||
|
</goals>
|
||||||
|
<configuration>
|
||||||
|
<resources>
|
||||||
|
<resource>
|
||||||
|
<directory>src/site</directory>
|
||||||
|
<filtering>true</filtering>
|
||||||
|
<includes>
|
||||||
|
<include>**</include>
|
||||||
|
</includes>
|
||||||
|
</resource>
|
||||||
|
</resources>
|
||||||
|
</configuration>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-site-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<skip>false</skip>
|
||||||
|
</configuration>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>default-site</id>
|
||||||
|
<goals>
|
||||||
|
<goal>site</goal>
|
||||||
|
</goals>
|
||||||
|
<phase>site</phase>
|
||||||
|
<configuration>
|
||||||
|
<siteDirectory>${project.build.outputDirectory}</siteDirectory>
|
||||||
|
</configuration>
|
||||||
|
</execution>
|
||||||
|
<execution>
|
||||||
|
<id>site-deploy</id>
|
||||||
|
<goals>
|
||||||
|
<goal>stage-deploy</goal>
|
||||||
|
</goals>
|
||||||
|
<phase>deploy</phase>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
|
||||||
|
<pluginManagement>
|
||||||
|
<plugins>
|
||||||
|
<!-- CI plugins -->
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-dependency-plugin</artifactId>
|
||||||
|
<version>3.1.2</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>release-deploy-check</id>
|
||||||
|
<goals>
|
||||||
|
<goal>get</goal>
|
||||||
|
</goals>
|
||||||
|
<configuration>
|
||||||
|
<groupId>${project.groupId}</groupId>
|
||||||
|
<artifactId>easy-stream-common</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
<remoteRepositories>${project.distributionManagement.repository.url}
|
||||||
|
</remoteRepositories>
|
||||||
|
</configuration>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-enforcer-plugin</artifactId>
|
||||||
|
<version>3.0.0-M3</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>release-version-check</id>
|
||||||
|
<goals>
|
||||||
|
<goal>enforce</goal>
|
||||||
|
</goals>
|
||||||
|
<configuration>
|
||||||
|
<rules>
|
||||||
|
<requireReleaseVersion>
|
||||||
|
<message>SNAPSHOT versions ${project.version} are not allowed.</message>
|
||||||
|
</requireReleaseVersion>
|
||||||
|
</rules>
|
||||||
|
</configuration>
|
||||||
|
</execution>
|
||||||
|
<execution>
|
||||||
|
<id>snapshot-version-check</id>
|
||||||
|
<goals>
|
||||||
|
<goal>enforce</goal>
|
||||||
|
</goals>
|
||||||
|
<configuration>
|
||||||
|
<rules>
|
||||||
|
<requireSnapshotVersion>
|
||||||
|
<message>Non-SNAPSHOT versions ${project.version} are not allowed.</message>
|
||||||
|
</requireSnapshotVersion>
|
||||||
|
</rules>
|
||||||
|
</configuration>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-site-plugin</artifactId>
|
||||||
|
<version>3.9.1</version>
|
||||||
|
<configuration>
|
||||||
|
<outputDirectory>${project.build.directory}/site</outputDirectory>
|
||||||
|
<relativizeDecorationLinks>false</relativizeDecorationLinks>
|
||||||
|
</configuration>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.maven.wagon</groupId>
|
||||||
|
<artifactId>wagon-webdav-jackrabbit</artifactId>
|
||||||
|
<version>2.8</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.maven.doxia</groupId>
|
||||||
|
<artifactId>doxia-module-markdown</artifactId>
|
||||||
|
<version>1.9.1</version>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-deploy-plugin</artifactId>
|
||||||
|
<version>3.1.1</version>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</pluginManagement>
|
||||||
|
</build>
|
||||||
|
|
||||||
|
</project>
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
package com.geedgenetworks.flink.easy.application.voip;
|
||||||
|
|
||||||
|
import com.geedgenetworks.flink.easy.application.voip.udf.*;
|
||||||
|
import com.geedgenetworks.flink.easy.common.api.UDFFactory;
|
||||||
|
import org.apache.flink.table.functions.UserDefinedFunction;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class VoipUDFFactory implements UDFFactory {
|
||||||
|
|
||||||
|
private static final Map<String, UserDefinedFunction> R =
|
||||||
|
new HashMap<>() {{
|
||||||
|
put("IS_IP_ADDRESS", new IsIpAddress());
|
||||||
|
|
||||||
|
put("IS_INTERNAL_IP_ADDRESS", new IsInternalIpAddress());
|
||||||
|
put("IS_EXTERNAL_IP_ADDRESS", new IsExternalIpAddress());
|
||||||
|
|
||||||
|
put("HAS_IP_ADDRESS", new HasIpAddress());
|
||||||
|
put("HAS_EXTERNAL_IP_ADDRESS", new HasExternalIpAddress());
|
||||||
|
|
||||||
|
put("STREAM_DIR", new StreamDir());
|
||||||
|
put("STREAM_DIR_SET", new StreamDirSet());
|
||||||
|
put("FIND_NOT_BLANK", new FindNotBlank());
|
||||||
|
put("DISTINCT_CONCAT", new DistinctConcat());
|
||||||
|
put("SORT_ADDRESS", new SortAddress());
|
||||||
|
|
||||||
|
put("SNOWFLAKE_ID", new SnowflakeID());
|
||||||
|
}};
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<String, UserDefinedFunction> register() {
|
||||||
|
return R;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
package com.geedgenetworks.flink.easy.application.voip.udf;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.apache.flink.table.annotation.DataTypeHint;
|
||||||
|
import org.apache.flink.table.functions.ScalarFunction;
|
||||||
|
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
|
public class DistinctConcat extends ScalarFunction {
|
||||||
|
|
||||||
|
public @DataTypeHint("STRING") String eval(String s1, String s2) {
|
||||||
|
return Stream.of(s1, s2).filter(StringUtils::isNotBlank)
|
||||||
|
.map(StringUtils::trim)
|
||||||
|
.distinct()
|
||||||
|
.collect(Collectors.joining(","));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
package com.geedgenetworks.flink.easy.application.voip.udf;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.apache.flink.table.annotation.DataTypeHint;
|
||||||
|
import org.apache.flink.table.functions.ScalarFunction;
|
||||||
|
|
||||||
|
public class FindNotBlank extends ScalarFunction {
|
||||||
|
|
||||||
|
public @DataTypeHint("STRING") String eval(String s1, String s2) {
|
||||||
|
if (StringUtils.isBlank(s1) && StringUtils.isNotBlank(s2)) {
|
||||||
|
return s2;
|
||||||
|
}
|
||||||
|
return s1;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
package com.geedgenetworks.flink.easy.application.voip.udf;
|
||||||
|
|
||||||
|
import org.apache.flink.table.annotation.DataTypeHint;
|
||||||
|
import org.apache.flink.table.functions.ScalarFunction;
|
||||||
|
|
||||||
|
public class HasExternalIpAddress extends ScalarFunction {
|
||||||
|
|
||||||
|
private final IsExternalIpAddress isExternalIpAddress = new IsExternalIpAddress();
|
||||||
|
|
||||||
|
public @DataTypeHint("BOOLEAN") Boolean eval(String... ipaddr) {
|
||||||
|
if (null == ipaddr) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
for (var ip : ipaddr) {
|
||||||
|
return isExternalIpAddress.eval(ip);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
package com.geedgenetworks.flink.easy.application.voip.udf;
|
||||||
|
|
||||||
|
import org.apache.flink.table.annotation.DataTypeHint;
|
||||||
|
|
||||||
|
public class HasIpAddress extends IpAddressScalarFunction {
|
||||||
|
|
||||||
|
public @DataTypeHint("BOOLEAN") Boolean eval(String... ipaddr) {
|
||||||
|
if (null == ipaddr) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
for (var ip : ipaddr) {
|
||||||
|
if (ip != null && isIpAddress(ip)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
package com.geedgenetworks.flink.easy.application.voip.udf;
|
||||||
|
|
||||||
|
import cn.hutool.core.lang.Validator;
|
||||||
|
import cn.hutool.core.net.NetUtil;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.apache.flink.table.functions.ScalarFunction;
|
||||||
|
|
||||||
|
public abstract class IpAddressScalarFunction extends ScalarFunction {
|
||||||
|
|
||||||
|
protected static boolean isIpAddress(String ipaddr) {
|
||||||
|
return isIpv4(ipaddr) || isIpv6(ipaddr);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected static boolean isIpv4(String ipaddr) {
|
||||||
|
return Validator.isIpv4(StringUtils.trim(ipaddr));
|
||||||
|
}
|
||||||
|
|
||||||
|
protected static boolean isIpv6(String ipaddr) {
|
||||||
|
return Validator.isIpv6(StringUtils.trim(ipaddr));
|
||||||
|
}
|
||||||
|
|
||||||
|
protected static boolean isInternalIpAddress(String ipaddr) {
|
||||||
|
return NetUtil.isInnerIP(StringUtils.trim(ipaddr));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
package com.geedgenetworks.flink.easy.application.voip.udf;
|
||||||
|
|
||||||
|
import org.apache.flink.table.annotation.DataTypeHint;
|
||||||
|
|
||||||
|
public class IsExternalIpAddress extends IpAddressScalarFunction {
|
||||||
|
|
||||||
|
public @DataTypeHint("BOOLEAN") Boolean eval(String ipaddr) {
|
||||||
|
if (ipaddr == null || !isIpAddress(ipaddr)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return !isInternalIpAddress(ipaddr);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
package com.geedgenetworks.flink.easy.application.voip.udf;
|
||||||
|
|
||||||
|
import org.apache.flink.table.annotation.DataTypeHint;
|
||||||
|
|
||||||
|
public class IsInternalIpAddress extends IpAddressScalarFunction {
|
||||||
|
|
||||||
|
public @DataTypeHint("BOOLEAN") Boolean eval(String ipaddr) {
|
||||||
|
if (!isIpAddress(ipaddr)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return isInternalIpAddress(ipaddr);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
package com.geedgenetworks.flink.easy.application.voip.udf;
|
||||||
|
|
||||||
|
import org.apache.flink.table.annotation.DataTypeHint;
|
||||||
|
|
||||||
|
public class IsIpAddress extends IpAddressScalarFunction {
|
||||||
|
|
||||||
|
public @DataTypeHint("BOOLEAN") Boolean eval(String ipaddr) {
|
||||||
|
if (null == ipaddr) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return isIpAddress(ipaddr);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
package com.geedgenetworks.flink.easy.application.voip.udf;
|
||||||
|
|
||||||
|
import org.apache.flink.table.annotation.DataTypeHint;
|
||||||
|
import org.apache.flink.table.functions.ScalarFunction;
|
||||||
|
import xyz.downgoon.snowflake.Snowflake;
|
||||||
|
|
||||||
|
public class SnowflakeID extends ScalarFunction {
|
||||||
|
|
||||||
|
private static final Snowflake SNOWFLAKE = new Snowflake(1, 1);
|
||||||
|
|
||||||
|
public @DataTypeHint("BIGINT") Long eval() {
|
||||||
|
return SNOWFLAKE.nextId();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
package com.geedgenetworks.flink.easy.application.voip.udf;
|
||||||
|
|
||||||
|
import cn.hutool.core.net.NetUtil;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.apache.flink.api.java.tuple.Tuple2;
|
||||||
|
import org.apache.flink.table.annotation.DataTypeHint;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class SortAddress extends IpAddressScalarFunction {
|
||||||
|
|
||||||
|
public @DataTypeHint("STRING")
|
||||||
|
String eval(
|
||||||
|
String ip1, Integer port1, String ip2, Integer port2) {
|
||||||
|
return of(Tuple2.of(ip1, port1), Tuple2.of(ip2, port2));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String of(
|
||||||
|
Tuple2<String, Integer> a1, Tuple2<String, Integer> a2) {
|
||||||
|
var list = new ArrayList<>(List.of(a1, a2));
|
||||||
|
if (a1.f1 == null || a2.f1 == null || StringUtils.isAnyEmpty(a1.f0, a2.f0)
|
||||||
|
|| !isIpAddress(a1.f0) || !isIpAddress(a2.f0)) {
|
||||||
|
return a1.f0 + ":" + a1.f1 + "," + a2.f0 + ":" + a2.f1;
|
||||||
|
}
|
||||||
|
list.sort((a, b) -> {
|
||||||
|
if (a.f1.equals(b.f1)) {
|
||||||
|
return compareAddress(a.f0, b.f0);
|
||||||
|
} else {
|
||||||
|
return a.f1.compareTo(b.f1);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return String.format("%s:%s,%s:%s",
|
||||||
|
list.get(0).f0, list.get(0).f1, list.get(1).f0, list.get(1).f1);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static int compareAddress(String ip1, String ip2) {
|
||||||
|
try {
|
||||||
|
var v1 = isIpv4(ip1) ? NetUtil.ipv4ToLong(ip1) :
|
||||||
|
NetUtil.ipv6ToBigInteger(ip1).longValue();
|
||||||
|
var v2 = isIpv4(ip2) ? NetUtil.ipv4ToLong(ip2) :
|
||||||
|
NetUtil.ipv6ToBigInteger(ip2).longValue();
|
||||||
|
return Long.compare(v1, v2);
|
||||||
|
} catch (Exception e) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
package com.geedgenetworks.flink.easy.application.voip.udf;
|
||||||
|
|
||||||
|
import org.apache.flink.table.annotation.DataTypeHint;
|
||||||
|
import org.apache.flink.table.functions.ScalarFunction;
|
||||||
|
|
||||||
|
public class StreamDir extends ScalarFunction {
|
||||||
|
|
||||||
|
public @DataTypeHint("INT") Integer eval(Long flags) {
|
||||||
|
int v = 0;
|
||||||
|
if (flags == null) {
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
if ((flags & 8192) == 8192) {
|
||||||
|
v += 1;
|
||||||
|
}
|
||||||
|
if ((flags & 16384) == 16384) {
|
||||||
|
v += 2;
|
||||||
|
}
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
package com.geedgenetworks.flink.easy.application.voip.udf;
|
||||||
|
|
||||||
|
import org.apache.flink.table.annotation.DataTypeHint;
|
||||||
|
import org.apache.flink.table.functions.ScalarFunction;
|
||||||
|
|
||||||
|
public class StreamDirSet extends ScalarFunction {
|
||||||
|
|
||||||
|
public @DataTypeHint("BIGINT") Long eval(Long flags) {
|
||||||
|
if (flags == null) {
|
||||||
|
return 8192 + 16384L;
|
||||||
|
}
|
||||||
|
long r = 0;
|
||||||
|
if ((flags & 8192) == 0) {
|
||||||
|
r += 8192;
|
||||||
|
}
|
||||||
|
if ((flags & 16384) == 0) {
|
||||||
|
r += 16384;
|
||||||
|
}
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
com.geedgenetworks.flink.easy.application.voip.VoipUDFFactory
|
||||||
1883
src/main/resources/jobs/job.yml
Normal file
1883
src/main/resources/jobs/job.yml
Normal file
File diff suppressed because it is too large
Load Diff
25
src/main/resources/log4j2.properties
Normal file
25
src/main/resources/log4j2.properties
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
################################################################################
|
||||||
|
# Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
# or more contributor license agreements. See the NOTICE file
|
||||||
|
# distributed with this work for additional information
|
||||||
|
# regarding copyright ownership. The ASF licenses this file
|
||||||
|
# to you under the Apache License, Version 2.0 (the
|
||||||
|
# "License"); you may not use this file except in compliance
|
||||||
|
# with the License. You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
rootLogger.level = INFO
|
||||||
|
rootLogger.appenderRef.console.ref = ConsoleAppender
|
||||||
|
|
||||||
|
appender.console.name = ConsoleAppender
|
||||||
|
appender.console.type = CONSOLE
|
||||||
|
appender.console.layout.type = PatternLayout
|
||||||
|
appender.console.layout.pattern = %d{HH:mm:ss,SSS} %-5p %-60c %x - %m%n
|
||||||
5
src/site/markdown/changelogs.md
Normal file
5
src/site/markdown/changelogs.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
## Changelog
|
||||||
|
|
||||||
|
### 2.0
|
||||||
|
|
||||||
|
- [GAL-602](https://jira.geedge.net/browse/GAL-602) 基于 Easy Stream 框架的配置化改造。
|
||||||
11
src/site/markdown/deploy.md
Normal file
11
src/site/markdown/deploy.md
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
## Deploy
|
||||||
|
|
||||||
|
- 准备 JDK ${java.version} 的环境
|
||||||
|
- 准备 Flink ${flink.version} 的环境
|
||||||
|
- [下载](./download.html) 对应版本 UDF 依赖 Jar
|
||||||
|
- [下载](./download.html) 对应版本 Job 配置 (一个 yml 文件)
|
||||||
|
- 执行命令 `flink run -Dflink.rest.bind-port=8081 -c com.geedgenetworks.flink.easy.core.Runner path/to/sip-rtp-correlation-<version>.jar job.yml`
|
||||||
|
- 您将在控制台看到启动日志,同时您可以在 `http://<you-host>:8081` 看到任务 UI。
|
||||||
|
|
||||||
|
> 注意:
|
||||||
|
> SIP 和 RTP 融合作业强烈建议开启 Checkpoint 机制,否则将会由于丢失数据或重复数据导致业务数据关联错误。
|
||||||
102
src/site/markdown/download.md
Normal file
102
src/site/markdown/download.md
Normal file
@@ -0,0 +1,102 @@
|
|||||||
|
## Download
|
||||||
|
|
||||||
|
### ${project.version}
|
||||||
|
|
||||||
|
- [TSG-23852](https://jira.geedge.net/browse/TSG-23852) 适配 VoIP Records 以及 Session Records 中 Client/Server 字段重命名。
|
||||||
|
|
||||||
|
| Easy Stream | UDF Jar | Job |
|
||||||
|
|-------------| ------------------------------------------------------------ | ------------------------------------------------------------ |
|
||||||
|
| ${easy.stream.version} | [JAR](${project.distributionManagement.repository.url}/com/geedgenetworks/application/sip-rtp-correlation/${project.version}/${project.artifactId}-${project.version}.jar) ( [MD5](${project.distributionManagement.repository.url}/com/geedgenetworks/application/sip-rtp-correlation/${project.version}/${project.artifactId}-${project.version}.jar.md5) [SHA1](${project.distributionManagement.repository.url}/com/geedgenetworks/application/sip-rtp-correlation/${project.version}/${project.artifactId}-${project.version}.jar.sha1) ) | [YML](${project.distributionManagement.repository.url}/com/geedgenetworks/application/sip-rtp-correlation/${project.version}/${project.artifactId}-${project.version}.tar.gz) ( [MD5](${project.distributionManagement.repository.url}/com/geedgenetworks/application/sip-rtp-correlation/${project.version}/${project.artifactId}-${project.version}.tar.gz.md5) [SHA1](${project.distributionManagement.repository.url}/com/geedgenetworks/application/sip-rtp-correlation/${project.version}/${project.artifactId}-${project.version}.tar.gz.sha1) ) |
|
||||||
|
|
||||||
|
### 2.1.1
|
||||||
|
|
||||||
|
- 当 VoIP 融合成功时,RTP 将不再输出;同时如果 SIP 关联成功过 RTP 也将不再输出。
|
||||||
|
- VpIP 中的字节数,包数使用 RTP 侧的数据指标,不再累加计算。
|
||||||
|
- 将 SIP 五元组,RTP 四元组中所有带有空值的数据判定为异常数据不再参与关联过程。
|
||||||
|
|
||||||
|
| Easy Stream | UDF Jar | Job |
|
||||||
|
|-------------| ------------------------------------------------------------ | ------------------------------------------------------------ |
|
||||||
|
| 1.3-rc2 | [JAR](http://192.168.40.153:8081/content/repositories/platform-release/com/geedgenetworks/application/sip-rtp-correlation/2.1.1/sip-rtp-correlation-2.1.1.jar) ( [MD5](http://192.168.40.153:8081/content/repositories/platform-release/com/geedgenetworks/application/sip-rtp-correlation/2.1.1/sip-rtp-correlation-2.1.1.jar.md5) [SHA1](http://192.168.40.153:8081/content/repositories/platform-release/com/geedgenetworks/application/sip-rtp-correlation/2.1.1/sip-rtp-correlation-2.1.1.jar.sha1) ) | [YML](http://192.168.40.153:8081/content/repositories/platform-release/com/geedgenetworks/application/sip-rtp-correlation/2.1.1/sip-rtp-correlation-2.1.1.tar.gz) ( [MD5](http://192.168.40.153:8081/content/repositories/platform-release/com/geedgenetworks/application/sip-rtp-correlation/2.1.1/sip-rtp-correlation-2.1.1.tar.gz.md5) [SHA1](http://192.168.40.153:8081/content/repositories/platform-release/com/geedgenetworks/application/sip-rtp-correlation/2.1.1/sip-rtp-correlation-2.1.1.tar.gz.sha1) ) |
|
||||||
|
|
||||||
|
### 2.1
|
||||||
|
|
||||||
|
- [TSG-23174](https://jira.geedge.net/browse/TSG-23174) 测试完成,升级为稳定版本。
|
||||||
|
- 重复数据不再进行去重操作,未关联的全部输出。
|
||||||
|
|
||||||
|
| Easy Stream | UDF Jar | Job |
|
||||||
|
|-------------| ------------------------------------------------------------ | ------------------------------------------------------------ |
|
||||||
|
| 1.3-rc2 | [JAR](http://192.168.40.153:8081/content/repositories/platform-release/com/geedgenetworks/application/sip-rtp-correlation/2.1/sip-rtp-correlation-2.1.jar) ( [MD5](http://192.168.40.153:8081/content/repositories/platform-release/com/geedgenetworks/application/sip-rtp-correlation/2.1/sip-rtp-correlation-2.1.jar.md5) [SHA1](http://192.168.40.153:8081/content/repositories/platform-release/com/geedgenetworks/application/sip-rtp-correlation/2.1/sip-rtp-correlation-2.1.jar.sha1) ) | [YML](http://192.168.40.153:8081/content/repositories/platform-release/com/geedgenetworks/application/sip-rtp-correlation/2.1/sip-rtp-correlation-2.1.tar.gz) ( [MD5](http://192.168.40.153:8081/content/repositories/platform-release/com/geedgenetworks/application/sip-rtp-correlation/2.1/sip-rtp-correlation-2.1.tar.gz.md5) [SHA1](http://192.168.40.153:8081/content/repositories/platform-release/com/geedgenetworks/application/sip-rtp-correlation/2.1/sip-rtp-correlation-2.1.tar.gz.sha1) ) |
|
||||||
|
|
||||||
|
### 2.0-rc9
|
||||||
|
|
||||||
|
- 修复 sip 双向关联模块的数据丢失问题。
|
||||||
|
- [GAL-684](https://jira.geedge.net/browse/GAL-684) 调整融合后的字段映射,增加更加详细的监控指标。
|
||||||
|
|
||||||
|
| Easy Stream | UDF Jar | Job |
|
||||||
|
|-------------| ------------------------------------------------------------ | ------------------------------------------------------------ |
|
||||||
|
| 1.3-rc1 | [JAR](${project.distributionManagement.repository.url}/com/geedgenetworks/application/sip-rtp-correlation/2.0-rc9/${project.artifactId}-2.0-rc9.jar) ( [MD5](${project.distributionManagement.repository.url}/com/geedgenetworks/application/sip-rtp-correlation/2.0-rc9/${project.artifactId}-2.0-rc9.jar.md5) [SHA1](${project.distributionManagement.repository.url}/com/geedgenetworks/application/sip-rtp-correlation/2.0-rc9/${project.artifactId}-2.0-rc9.jar.sha1) ) | [YML](${project.distributionManagement.repository.url}/com/geedgenetworks/application/sip-rtp-correlation/2.0-rc9/${project.artifactId}-2.0-rc9.tar.gz) ( [MD5](${project.distributionManagement.repository.url}/com/geedgenetworks/application/sip-rtp-correlation/2.0-rc9/${project.artifactId}-2.0-rc9.tar.gz.md5) [SHA1](${project.distributionManagement.repository.url}/com/geedgenetworks/application/sip-rtp-correlation/2.0-rc9/${project.artifactId}-2.0-rc9.tar.gz.sha1) ) |
|
||||||
|
|
||||||
|
### 2.0-rc8
|
||||||
|
|
||||||
|
- 修复 Extract Key 错误,由于 IpAddress 类型数据校验导致的空指针异常。
|
||||||
|
|
||||||
|
| Easy Stream | UDF Jar | Job |
|
||||||
|
|-------------| ------------------------------------------------------------ | ------------------------------------------------------------ |
|
||||||
|
| 1.3-rc1 | [JAR](http://192.168.40.153:8081/content/repositories/platform-release/com/geedgenetworks/application/sip-rtp-correlation/2.0-rc8/sip-rtp-correlation-2.0-rc8.jar) ( [MD5](http://192.168.40.153:8081/content/repositories/platform-release/com/geedgenetworks/application/sip-rtp-correlation/2.0-rc8/sip-rtp-correlation-2.0-rc8.jar.md5) [SHA1](http://192.168.40.153:8081/content/repositories/platform-release/com/geedgenetworks/application/sip-rtp-correlation/2.0-rc8/sip-rtp-correlation-2.0-rc8.jar.sha1) ) | [YML](http://192.168.40.153:8081/content/repositories/platform-release/com/geedgenetworks/application/sip-rtp-correlation/2.0-rc8/sip-rtp-correlation-2.0-rc8.tar.gz) ( [MD5](http://192.168.40.153:8081/content/repositories/platform-release/com/geedgenetworks/application/sip-rtp-correlation/2.0-rc8/sip-rtp-correlation-2.0-rc8.tar.gz.md5) [SHA1](http://192.168.40.153:8081/content/repositories/platform-release/com/geedgenetworks/application/sip-rtp-correlation/2.0-rc8/sip-rtp-correlation-2.0-rc8.tar.gz.sha1) ) |
|
||||||
|
|
||||||
|
|
||||||
|
### 2.0-rc7
|
||||||
|
|
||||||
|
- VoIP Record 增加字段: SIP `sip_bye_reason` 相关字段。
|
||||||
|
|
||||||
|
| Easy Stream | UDF Jar | Job |
|
||||||
|
|-------------| ------------------------------------------------------------ | ------------------------------------------------------------ |
|
||||||
|
| 1.3-rc1 | [JAR](http://192.168.40.153:8081/content/repositories/platform-release/com/geedgenetworks/application/sip-rtp-correlation/2.0-rc7/sip-rtp-correlation-2.0-rc7.jar) ( [MD5](http://192.168.40.153:8081/content/repositories/platform-release/com/geedgenetworks/application/sip-rtp-correlation/2.0-rc7/sip-rtp-correlation-2.0-rc7.jar.md5) [SHA1](http://192.168.40.153:8081/content/repositories/platform-release/com/geedgenetworks/application/sip-rtp-correlation/2.0-rc7/sip-rtp-correlation-2.0-rc7.jar.sha1) ) | [YML](http://192.168.40.153:8081/content/repositories/platform-release/com/geedgenetworks/application/sip-rtp-correlation/2.0-rc7/sip-rtp-correlation-2.0-rc7.tar.gz) ( [MD5](http://192.168.40.153:8081/content/repositories/platform-release/com/geedgenetworks/application/sip-rtp-correlation/2.0-rc7/sip-rtp-correlation-2.0-rc7.tar.gz.md5) [SHA1](http://192.168.40.153:8081/content/repositories/platform-release/com/geedgenetworks/application/sip-rtp-correlation/2.0-rc7/sip-rtp-correlation-2.0-rc7.tar.gz.sha1) ) |
|
||||||
|
|
||||||
|
|
||||||
|
### 2.0-rc6
|
||||||
|
|
||||||
|
- VoIP Record 增加字段: SIP, RTP `protocol` 相关字段。
|
||||||
|
|
||||||
|
| Easy Stream | UDF Jar | Job |
|
||||||
|
|-------------| ------------------------------------------------------------ | ------------------------------------------------------------ |
|
||||||
|
| 1.3-rc1 | [JAR](http://192.168.40.153:8081/content/repositories/platform-release/com/geedgenetworks/application/sip-rtp-correlation/2.0-rc6/sip-rtp-correlation-2.0-rc6.jar) ( [MD5](http://192.168.40.153:8081/content/repositories/platform-release/com/geedgenetworks/application/sip-rtp-correlation/2.0-rc6/sip-rtp-correlation-2.0-rc6.jar.md5) [SHA1](http://192.168.40.153:8081/content/repositories/platform-release/com/geedgenetworks/application/sip-rtp-correlation/2.0-rc6/sip-rtp-correlation-2.0-rc6.jar.sha1) ) | [YML](http://192.168.40.153:8081/content/repositories/platform-release/com/geedgenetworks/application/sip-rtp-correlation/2.0-rc6/sip-rtp-correlation-2.0-rc6.tar.gz) ( [MD5](http://192.168.40.153:8081/content/repositories/platform-release/com/geedgenetworks/application/sip-rtp-correlation/2.0-rc6/sip-rtp-correlation-2.0-rc6.tar.gz.md5) [SHA1](http://192.168.40.153:8081/content/repositories/platform-release/com/geedgenetworks/application/sip-rtp-correlation/2.0-rc6/sip-rtp-correlation-2.0-rc6.tar.gz.sha1) ) |
|
||||||
|
|
||||||
|
### 2.0-rc5
|
||||||
|
|
||||||
|
- 修复 VoIP 字段错误,使用 `decoded_as` 表示 VoIP 日志。
|
||||||
|
|
||||||
|
| Easy Stream | UDF Jar | Job |
|
||||||
|
|-------------| ------------------------------------------------------------ | ------------------------------------------------------------ |
|
||||||
|
| 1.3-rc1 | [JAR](http://192.168.40.153:8081/content/repositories/platform-release/com/geedgenetworks/application/sip-rtp-correlation/2.0-rc5/sip-rtp-correlation-2.0-rc5.jar) ( [MD5](http://192.168.40.153:8081/content/repositories/platform-release/com/geedgenetworks/application/sip-rtp-correlation/2.0-rc5/sip-rtp-correlation-2.0-rc5.jar.md5) [SHA1](http://192.168.40.153:8081/content/repositories/platform-release/com/geedgenetworks/application/sip-rtp-correlation/2.0-rc5/sip-rtp-correlation-2.0-rc5.jar.sha1) ) | [YML](http://192.168.40.153:8081/content/repositories/platform-release/com/geedgenetworks/application/sip-rtp-correlation/2.0-rc5/sip-rtp-correlation-2.0-rc5.tar.gz) ( [MD5](http://192.168.40.153:8081/content/repositories/platform-release/com/geedgenetworks/application/sip-rtp-correlation/2.0-rc5/sip-rtp-correlation-2.0-rc5.tar.gz.md5) [SHA1](http://192.168.40.153:8081/content/repositories/platform-release/com/geedgenetworks/application/sip-rtp-correlation/2.0-rc5/sip-rtp-correlation-2.0-rc5.tar.gz.sha1) ) |
|
||||||
|
|
||||||
|
### 2.0-rc4
|
||||||
|
|
||||||
|
- 移除对 `log_id`, `recv_time` 字段的强制非空校验, 该字段在后续步骤中处理。
|
||||||
|
|
||||||
|
| Easy Stream | UDF Jar | Job |
|
||||||
|
|-------------| ------------------------------------------------------------ | ------------------------------------------------------------ |
|
||||||
|
| 1.3-rc1 | [JAR](http://192.168.40.153:8081/content/repositories/platform-release/com/geedgenetworks/application/sip-rtp-correlation/2.0-rc4/sip-rtp-correlation-2.0-rc4.jar) ( [MD5](http://192.168.40.153:8081/content/repositories/platform-release/com/geedgenetworks/application/sip-rtp-correlation/2.0-rc4/sip-rtp-correlation-2.0-rc4.jar.md5) [SHA1](http://192.168.40.153:8081/content/repositories/platform-release/com/geedgenetworks/application/sip-rtp-correlation/2.0-rc4/sip-rtp-correlation-2.0-rc4.jar.sha1) ) | [YML](http://192.168.40.153:8081/content/repositories/platform-release/com/geedgenetworks/application/sip-rtp-correlation/2.0-rc4/sip-rtp-correlation-2.0-rc4.tar.gz) ( [MD5](http://192.168.40.153:8081/content/repositories/platform-release/com/geedgenetworks/application/sip-rtp-correlation/2.0-rc4/sip-rtp-correlation-2.0-rc4.tar.gz.md5) [SHA1](http://192.168.40.153:8081/content/repositories/platform-release/com/geedgenetworks/application/sip-rtp-correlation/2.0-rc4/sip-rtp-correlation-2.0-rc4.tar.gz.sha1) ) |
|
||||||
|
|
||||||
|
### 2.0-rc3
|
||||||
|
|
||||||
|
- 修复由于 State 过期策略早于 Timer 触发而导致的未关联成功的 RTP 数据未正常输出的问题。
|
||||||
|
|
||||||
|
| Easy Stream | UDF Jar | Job |
|
||||||
|
|-------------| ------------------------------------------------------------ | ------------------------------------------------------------ |
|
||||||
|
| 1.3-rc1 | [JAR](http://192.168.40.153:8081/content/repositories/platform-release/com/geedgenetworks/application/sip-rtp-correlation/2.0-rc3/sip-rtp-correlation-2.0-rc3.jar) ( [MD5](http://192.168.40.153:8081/content/repositories/platform-release/com/geedgenetworks/application/sip-rtp-correlation/2.0-rc3/sip-rtp-correlation-2.0-rc3.jar.md5) [SHA1](http://192.168.40.153:8081/content/repositories/platform-release/com/geedgenetworks/application/sip-rtp-correlation/2.0-rc3/sip-rtp-correlation-2.0-rc3.jar.sha1) ) | [YML](http://192.168.40.153:8081/content/repositories/platform-release/com/geedgenetworks/application/sip-rtp-correlation/2.0-rc3/sip-rtp-correlation-2.0-rc3.tar.gz) ( [MD5](http://192.168.40.153:8081/content/repositories/platform-release/com/geedgenetworks/application/sip-rtp-correlation/2.0-rc3/sip-rtp-correlation-2.0-rc3.tar.gz.md5) [SHA1](http://192.168.40.153:8081/content/repositories/platform-release/com/geedgenetworks/application/sip-rtp-correlation/2.0-rc3/sip-rtp-correlation-2.0-rc3.tar.gz.sha1) ) |
|
||||||
|
|
||||||
|
### 2.0-rc2
|
||||||
|
|
||||||
|
- 修复由于 Flink 1.13.6 和 Flink 1.13.1 之间某些 Runtime 不兼容的问题导致的系统无法启动。
|
||||||
|
|
||||||
|
| Easy Stream | UDF Jar | Job |
|
||||||
|
|-------------| ------------------------------------------------------------ | ------------------------------------------------------------ |
|
||||||
|
| 1.3-rc1 | [JAR](http://192.168.40.153:8099/content/repositories/platform-release/com/geedgenetworks/application/sip-rtp-correlation/2.0-rc2/sip-rtp-correlation-2.0-rc2.jar) ( [MD5](http://192.168.40.153:8099/content/repositories/platform-release/com/geedgenetworks/application/sip-rtp-correlation/2.0-rc2/sip-rtp-correlation-2.0-rc2.jar.md5) [SHA1](http://192.168.40.153:8099/content/repositories/platform-release/com/geedgenetworks/application/sip-rtp-correlation/2.0-rc2/sip-rtp-correlation-2.0-rc2.jar.sha1) ) | [YML](http://192.168.40.153:8099/content/repositories/platform-release/com/geedgenetworks/application/sip-rtp-correlation/2.0-rc2/sip-rtp-correlation-2.0-rc2.tar.gz) ( [MD5](http://192.168.40.153:8099/content/repositories/platform-release/com/geedgenetworks/application/sip-rtp-correlation/2.0-rc2/sip-rtp-correlation-2.0-rc2.tar.gz.md5) [SHA1](http://192.168.40.153:8099/content/repositories/platform-release/com/geedgenetworks/application/sip-rtp-correlation/2.0-rc2/sip-rtp-correlation-2.0-rc2.tar.gz.sha1) ) |
|
||||||
|
|
||||||
|
### 2.0-rc1
|
||||||
|
|
||||||
|
| Easy Stream | UDF Jar | Job |
|
||||||
|
|-------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
|
| 1.3-rc1 | [JAR](http://192.168.40.153:8099/content/repositories/platform-release/com/geedgenetworks/application/sip-rtp-correlation/2.0-rc1/sip-rtp-correlation-2.0-rc1.jar) ( [MD5](http://192.168.40.153:8099/content/repositories/platform-release/com/geedgenetworks/application/sip-rtp-correlation/2.0-rc1/sip-rtp-correlation-2.0-rc1.jar.md5) [SHA1](http://192.168.40.153:8099/content/repositories/platform-release/com/geedgenetworks/application/sip-rtp-correlation/2.0-rc1/sip-rtp-correlation-2.0-rc1.jar.sha1) ) | [YML](http://192.168.40.153:8099/content/repositories/platform-release/com/geedgenetworks/application/sip-rtp-correlation/2.0-rc1/sip-rtp-correlation-2.0-rc1.tar.gz) ( [MD5](http://192.168.40.153:8099/content/repositories/platform-release/com/geedgenetworks/application/sip-rtp-correlation/2.0-rc1/sip-rtp-correlation-2.0-rc1.tar.gz.md5) [SHA1](http://192.168.40.153:8099/content/repositories/platform-release/com/geedgenetworks/application/sip-rtp-correlation/2.0-rc1/sip-rtp-correlation-2.0-rc1.tar.gz.sha1) ) |
|
||||||
|
|
||||||
10
src/site/markdown/index.md
Normal file
10
src/site/markdown/index.md
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
## SIP RTP Correlation
|
||||||
|
|
||||||
|
SIP RTP Correlation 项目是一个使用 Apache Flink 实现的实时数据处理项目,旨在从 Kafka 中读取 SIP(Session Initiation Protocol)和 RTP(Real-time Transport Protocol)数据,将它们融合成完整的 VoIP(Voice over Internet Protocol)通话数据。
|
||||||
|
|
||||||
|
SIP RTP Correlation 项目可以用于实时监控和分析 VoIP 通话数据,提取关键指标,以及进行实时报警和诊断。
|
||||||
|
|
||||||
|
<br/>
|
||||||
|
|
||||||
|
|
||||||
|
You can download the latest release from [Downloads](./download.html). And you can changelog from [Changelogs](./changelogs.html).
|
||||||
13
src/site/resources/css/site.css
Normal file
13
src/site/resources/css/site.css
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
#banner {
|
||||||
|
height: 108px;
|
||||||
|
background: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#bannerLeft img {
|
||||||
|
margin-left: 18px;
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.well {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
BIN
src/site/resources/images/logo.png
Normal file
BIN
src/site/resources/images/logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.8 KiB |
56
src/site/site.xml
Normal file
56
src/site/site.xml
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain maven-site.vm copy of the License at
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
<project name="SIP RTP Correlate">
|
||||||
|
<bannerLeft>
|
||||||
|
<name>Easy Stream</name>
|
||||||
|
<src>images/logo.png</src>
|
||||||
|
<href>#</href>
|
||||||
|
</bannerLeft>
|
||||||
|
|
||||||
|
<publishDate position="right"/>
|
||||||
|
<version position="right"/>
|
||||||
|
|
||||||
|
<skin>
|
||||||
|
<groupId>org.apache.maven.skins</groupId>
|
||||||
|
<artifactId>maven-fluido-skin</artifactId>
|
||||||
|
<version>1.10.0</version>
|
||||||
|
</skin>
|
||||||
|
|
||||||
|
<custom>
|
||||||
|
<fluidoSkin>
|
||||||
|
<sourceLineNumbersEnabled>true</sourceLineNumbersEnabled>
|
||||||
|
</fluidoSkin>
|
||||||
|
</custom>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<breadcrumbs position="left">
|
||||||
|
<item name="Galaxy" href="#"/>
|
||||||
|
<item name="Platform" href="#"/>
|
||||||
|
<item name="Easy Stream" href="#"/>
|
||||||
|
<item name="Application" href="#"/>
|
||||||
|
</breadcrumbs>
|
||||||
|
|
||||||
|
<menu name="OVERVIEW" inherit="top">
|
||||||
|
<item name="Introduction" href="index.html"/>
|
||||||
|
<item name="Deploy" href="deploy.html"/>
|
||||||
|
<item name="Download" href="download.html"/>
|
||||||
|
</menu>
|
||||||
|
|
||||||
|
<footer>
|
||||||
|
<![CDATA[ Copyright ©2022 <a href="#">Galaxy Platform</a>. All rights reserved.]]>
|
||||||
|
</footer>
|
||||||
|
</body>
|
||||||
|
</project>
|
||||||
3
src/test/bin/flink-per-job.sh
Normal file
3
src/test/bin/flink-per-job.sh
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
flink run -t yarn-per-job -Djobmanager.memory.process.size=1024m -Dtaskmanager.memory.process.size=4G -Dtaskmanager.numberOfTaskSlots=1 -Dtaskmanager.memory.framework.off-heap.size=256m -Dtaskmanager.memory.jvm-metaspace.size=256m -Dtaskmanager.memory.network.max=256m -Dyarn.application.name=voip-fusion -Drest.flamegraph.enabled=true -p 1 -d -c com.geedgenetworks.flink.easy.core.Runner /home/tsg/olap/flink/topology/sip-rtp-correlation/sip-rtp-correlation-2.1.jar /home/tsg/olap/flink/topology/sip-rtp-correlation/job.yml
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
package com.geedgenetworks.flink.easy.application;
|
||||||
|
|
||||||
|
import com.geedgenetworks.flink.easy.core.Runners;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
public class ApplicationTest {
|
||||||
|
|
||||||
|
static {
|
||||||
|
System.setProperty("easy.execute.mode", "validate");
|
||||||
|
System.setProperty("flink.rest.bind-port", "8081");
|
||||||
|
// System.setProperty("flink.rest.flamegraph.enabled", "true");
|
||||||
|
System.setProperty("flink.heartbeat.timeout", "1800000");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String discoverConfiguration(final String name) throws Exception {
|
||||||
|
var path = String.format("/jobs/%s.yml", name);
|
||||||
|
var resource = ApplicationTest.class.getResource(path);
|
||||||
|
if (resource == null) {
|
||||||
|
// maven
|
||||||
|
resource = ApplicationTest.class.getResource(String.format("../classes/%s", path));
|
||||||
|
}
|
||||||
|
if (resource == null) {
|
||||||
|
throw new IllegalArgumentException(
|
||||||
|
String.format("Not found job '%s' in path [%s].", name, path));
|
||||||
|
}
|
||||||
|
return resource.getPath();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testJob() throws Exception {
|
||||||
|
Runners.run(discoverConfiguration("job"));
|
||||||
|
}
|
||||||
|
}
|
||||||
69526
src/test/resources/data/M22-VOIP-RECORD.json
Normal file
69526
src/test/resources/data/M22-VOIP-RECORD.json
Normal file
File diff suppressed because it is too large
Load Diff
4
src/test/resources/data/e2e-test-execution.jsonl
Normal file
4
src/test/resources/data/e2e-test-execution.jsonl
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{"__timestamp":946681200,"__inputid":"tsg_olap","session_id":10240001,"decoded_as":"RTP","ip_protocol":"udp","address_type":4,"client_ip":"192.168.64.8","server_ip":"192.168.39.62","client_port":25524,"server_port":4580,"t_vsys_id":0,"vsys_id":1024,"data_center":"tsg_olap","device_group":"tsg_olap","device_id":"0000000000000000","sled_ip":"127.0.0.1","app":"unknown","app_transition":"","client_geolocation":"unknown","server_geolocation":"unknown","decoded_path":"ETHERNET.IPv4.UDP.rtp","server_fqdn":"","start_timestamp_ms":1721639438014,"end_timestamp_ms":1721639438014,"tcp_rtt_ms":0,"tcp_client_isn":0,"tcp_server_isn":0,"tcp_handshake_latency_ms":0,"in_link_id":0,"out_link_id":0,"duration_ms":0,"sent_pkts":0,"sent_bytes":0,"received_pkts":0,"received_bytes":0,"flags":24576,"flags_identify_info":[1,1],"fqdn_category_list":[0],"client_os_desc":"Windows","server_os_desc":"Linux","rtp_pcap_path":"123e4567-e89b-12d3-a456-426614174005"}
|
||||||
|
{"__timestamp":946681200,"__inputid":"tsg_olap","session_id":10240002,"decoded_as":"SIP","ip_protocol":"udp","address_type":4,"client_ip":"10.0.0.1","server_ip":"192.0.2.1","client_port":1000,"server_port":60000,"t_vsys_id":0,"vsys_id":1024,"data_center":"tsg_olap","device_group":"tsg_olap","device_id":"0000000000000000","sled_ip":"127.0.0.1","app":"unknown","app_transition":"","client_geolocation":"unknown","server_geolocation":"unknown","decoded_path":"ETHERNET.IPv4.UDP.sip","server_fqdn":"","start_timestamp_ms":1721639438014,"end_timestamp_ms":1721639438014,"tcp_rtt_ms":0,"tcp_client_isn":0,"tcp_server_isn":0,"tcp_handshake_latency_ms":0,"in_link_id":0,"out_link_id":0,"duration_ms":0,"sent_pkts":0,"sent_bytes":0,"received_pkts":0,"received_bytes":0,"flags":24584,"flags_identify_info":[1,1],"fqdn_category_list":[0],"client_os_desc":"Windows","server_os_desc":"Linux","sip_call_id":"NGMxZWY3Y2NmMzNlNGE3NzJhODgyZDAwM2YyMzQ4NGI.","sip_originator_description":"\"lina\"<sip:lina@192.0.2.1>;tag=1837055d","sip_responder_description":"\"1075\"<sip:1075@192.0.2.1>","sip_originator_sdp_connect_ip":"192.168.64.8","sip_originator_sdp_media_port":25524,"sip_originator_sdp_media_type":"application/sdp","sip_server":"OpenSIPS (2.4.11 (x86_64/linux))","sip_responder_sdp_connect_ip":"192.168.39.62","sip_responder_sdp_media_port":4580,"sip_responder_sdp_media_type":"application/sdp","sip_duration_s":590,"sip_bye":"responder","sip_cseq":"2 BYE","sip_via":"SIP/2.0/UDP 192.0.2.1:5060;branch=z9hG4bKbe7c.392190f1.0","sip_user_agent":"eyeBeam release 1011d stamp 40820","sip_is_request":0}
|
||||||
|
{"__timestamp":946681200,"__inputid":"tsg_olap","session_id":10240003,"decoded_as":"RTP","ip_protocol":"udp","address_type":4,"client_ip":"192.168.164.18","server_ip":"192.168.39.162","client_port":65121,"server_port":4670,"t_vsys_id":0,"vsys_id":1024,"data_center":"tsg_olap","device_group":"tsg_olap","device_id":"0000000000000000","sled_ip":"127.0.0.1","app":"unknown","app_transition":"","client_geolocation":"unknown","server_geolocation":"unknown","decoded_path":"ETHERNET.IPv4.UDP.rtp","server_fqdn":"","start_timestamp_ms":1721639438014,"end_timestamp_ms":1721639438014,"tcp_rtt_ms":0,"tcp_client_isn":0,"tcp_server_isn":0,"tcp_handshake_latency_ms":0,"in_link_id":0,"out_link_id":0,"duration_ms":0,"sent_pkts":0,"sent_bytes":0,"received_pkts":0,"received_bytes":0,"flags":24584,"flags_identify_info":[1,1],"fqdn_category_list":[0],"client_os_desc":"Windows","server_os_desc":"Linux","rtp_pcap_path":"123e4567-e89b-12d3-a456-426614174001"}
|
||||||
|
{"__timestamp":946681200,"__inputid":"tsg_olap","session_id":10240004,"decoded_as":"SIP","ip_protocol":"udp","address_type":4,"client_ip":"10.0.0.2","server_ip":"192.0.2.2","client_port":1000,"server_port":60000,"t_vsys_id":0,"vsys_id":1024,"data_center":"tsg_olap","device_group":"tsg_olap","device_id":"0000000000000000","sled_ip":"127.0.0.1","app":"unknown","app_transition":"","client_geolocation":"unknown","server_geolocation":"unknown","decoded_path":"ETHERNET.IPv4.UDP.sip","server_fqdn":"","start_timestamp_ms":1721639438014,"end_timestamp_ms":1721639438014,"tcp_rtt_ms":0,"tcp_client_isn":0,"tcp_server_isn":0,"tcp_handshake_latency_ms":0,"in_link_id":0,"out_link_id":0,"duration_ms":0,"sent_pkts":0,"sent_bytes":0,"received_pkts":0,"received_bytes":0,"flags":24584,"flags_identify_info":[1,1],"fqdn_category_list":[0],"client_os_desc":"Windows","server_os_desc":"Linux","sip_call_id":"CUMxZWY3Y2NmMzNlNGE3NzJhODgyZDAwM2YyMzQ4NGI.","sip_originator_description":"\"lina\"<sip:lina@192.0.2.1>;tag=1837055d","sip_responder_description":"\"1075\"<sip:1075@192.0.2.1>","sip_originator_sdp_connect_ip":"192.68.64.8","sip_originator_sdp_media_port":25524,"sip_originator_sdp_media_type":"application/sdp","sip_server":"OpenSIPS (2.4.11 (x86_64/linux))","sip_responder_sdp_connect_ip":"192.18.39.62","sip_responder_sdp_media_port":4580,"sip_responder_sdp_media_type":"application/sdp","sip_duration_s":590,"sip_bye":"responder","sip_cseq":"2 BYE","sip_via":"SIP/2.0/UDP 192.0.2.1:5060;branch=z9hG4bKbe7c.392190f1.0","sip_user_agent":"eyeBeam release 1011d stamp 40820","sip_is_request":0}
|
||||||
4
src/test/resources/data/session-records.jsonl
Normal file
4
src/test/resources/data/session-records.jsonl
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{"log_id": 438322402985248769,"recv_time":946681200,"__inputid":"tsg_olap","session_id":10240001,"decoded_as":"RTP","ip_protocol":"udp","address_type":4,"client_ip":"192.168.64.8","server_ip":"192.168.39.62","client_port":25524,"server_port":4580,"t_vsys_id":0,"vsys_id":1024,"data_center":"tsg_olap","device_group":"tsg_olap","device_id":"0000000000000000","sled_ip":"127.0.0.1","app":"unknown","app_transition":"","client_geolocation":"unknown","server_geolocation":"unknown","decoded_path":"ETHERNET.IPv4.UDP.rtp","server_fqdn":"","out_src_mac":"00:1A:2B:3C:4D:5E","out_dest_mac":"5E:4D:3C:2B:1A:00","start_timestamp_ms":1715830004000,"end_timestamp_ms":946681200000,"tcp_rtt_ms":0,"tcp_client_isn":0,"tcp_server_isn":0,"tcp_handshake_latency_ms":0,"in_link_id":0,"out_link_id":0,"duration_ms":0,"sent_pkts":0,"sent_bytes":0,"received_pkts":0,"received_bytes":0,"tcp_c2s_ip_fragments":0,"tcp_s2c_ip_fragments":0,"tcp_c2s_rtx_pkts":0,"tcp_c2s_rtx_bytes":0,"tcp_s2c_rtx_pkts":0,"tcp_s2c_rtx_bytes":0,"tcp_c2s_o3_pkts":0,"tcp_s2c_o3_pkts":0,"tcp_c2s_lost_bytes":0,"tcp_s2c_lost_bytes":0,"flags":57620,"flags_identify_info":[1,1],"fqdn_category_list":[0],"monitor_rule_list":[0],"security_rule_list":[0],"sc_rule_list":[0],"shaping_rule_list":[0],"proxy_rule_list":[0],"statistics_rule_list":[0],"monitor_mirrored_pkts":0,"monitor_mirrored_bytes":0,"client_os_desc":"Windows","server_os_desc":"Linux","device_tag":"{\"tags\":[{\"tag\":\"data_center\",\"value\":\"tsg_olap\"},{\"tag\":\"device_group\",\"value\":\"tsg_olap\"}]}","dup_traffic_flag":0,"sc_rsp_raw":[0],"encapsulation":"[{\"tunnels_schema_type\":\"ETHERNET\",\"source_mac\":\"00:1A:2B:3C:4D:5E\",\"destination_mac\":\"5E:4D:3C:2B:1A:00\"}]","rtp_pcap_path":"123e4567-e89b-12d3-a456-426614174005"}
|
||||||
|
{"log_id": 438322402985248769,"recv_time":946681200,"__inputid":"tsg_olap","session_id":10240002,"decoded_as":"SIP","ip_protocol":"udp","address_type":4,"client_ip":"10.0.0.1","server_ip":"192.0.2.1","client_port":1000,"server_port":60000,"t_vsys_id":0,"vsys_id":1025,"data_center":"tsg_olap","device_group":"tsg_olap","device_id":"0000000000000000","sled_ip":"127.0.0.1","app":"unknown","app_transition":"","client_geolocation":"unknown","server_geolocation":"unknown","decoded_path":"ETHERNET.IPv4.UDP.sip","server_fqdn":"","out_src_mac":"00:1A:2B:3C:4D:5E","out_dest_mac":"5E:4D:3C:2B:1A:00","start_timestamp_ms":1715830000100,"end_timestamp_ms":946681200000,"tcp_rtt_ms":0,"tcp_client_isn":0,"tcp_server_isn":0,"tcp_handshake_latency_ms":0,"in_link_id":0,"out_link_id":0,"duration_ms":0,"sent_pkts":0,"sent_bytes":0,"received_pkts":0,"received_bytes":0,"tcp_c2s_ip_fragments":0,"tcp_s2c_ip_fragments":0,"tcp_c2s_rtx_pkts":0,"tcp_c2s_rtx_bytes":0,"tcp_s2c_rtx_pkts":0,"tcp_s2c_rtx_bytes":0,"tcp_c2s_o3_pkts":0,"tcp_s2c_o3_pkts":0,"tcp_c2s_lost_bytes":0,"tcp_s2c_lost_bytes":0,"flags":8192,"flags_identify_info":[1,1],"fqdn_category_list":[0],"monitor_rule_list":[0],"security_rule_list":[0],"sc_rule_list":[0],"shaping_rule_list":[0],"proxy_rule_list":[0],"statistics_rule_list":[0],"monitor_mirrored_pkts":0,"monitor_mirrored_bytes":0,"client_os_desc":"Windows","server_os_desc":"Linux","device_tag":"{\"tags\":[{\"tag\":\"data_center\",\"value\":\"tsg_olap\"},{\"tag\":\"device_group\",\"value\":\"tsg_olap\"}]}","dup_traffic_flag":0,"sc_rsp_raw":[0],"encapsulation":"[{\"tunnels_schema_type\":\"ETHERNET\",\"source_mac\":\"00:1A:2B:3C:4D:5E\",\"destination_mac\":\"5E:4D:3C:2B:1A:00\"}]","sip_call_id":"NGMxZWY3Y2NmMzNlNGE3NzJhODgyZDAwM2YyMzQ4NGI.","sip_originator_description":"\"lina\"<sip:lina@192.0.2.1>;tag=1837055d","sip_responder_description":"\"1075\"<sip:1075@192.0.2.1>","sip_originator_sdp_connect_ip":"192.168.64.85","sip_originator_sdp_media_port":25524,"sip_originator_sdp_media_type":"application/sdp","sip_server":"OpenSIPS (2.4.11 (x86_64/linux))","sip_responder_sdp_connect_ip":"192.168.39.62","sip_responder_sdp_media_port":4580,"sip_responder_sdp_media_type":"application/sdp","sip_duration_s":590,"sip_bye":"responder","sip_cseq":"2 BYE","sip_via":"SIP/2.0/UDP 192.0.2.1:5060;branch=z9hG4bKbe7c.392190f1.0","sip_user_agent":"eyeBeam release 1011d stamp 40820","sip_is_request":0}
|
||||||
|
{"log_id": 438322402985248769,"recv_time":946681200,"__inputid":"tsg_olap","session_id":10240003,"decoded_as":"RTP","ip_protocol":"udp","address_type":4,"client_ip":"192.168.164.18","server_ip":"192.168.39.162","client_port":65121,"server_port":4670,"t_vsys_id":0,"vsys_id":1024,"data_center":"tsg_olap","device_group":"tsg_olap","device_id":"0000000000000000","sled_ip":"127.0.0.1","app":"unknown","app_transition":"","client_geolocation":"unknown","server_geolocation":"unknown","decoded_path":"ETHERNET.IPv4.UDP.rtp","server_fqdn":"","out_src_mac":"00:1A:2B:3C:4D:5E","out_dest_mac":"5E:4D:3C:2B:1A:00","start_timestamp_ms":1715830000000,"end_timestamp_ms":946681200000,"tcp_rtt_ms":0,"tcp_client_isn":0,"tcp_server_isn":0,"tcp_handshake_latency_ms":0,"in_link_id":0,"out_link_id":0,"duration_ms":0,"sent_pkts":0,"sent_bytes":0,"received_pkts":0,"received_bytes":0,"tcp_c2s_ip_fragments":0,"tcp_s2c_ip_fragments":0,"tcp_c2s_rtx_pkts":0,"tcp_c2s_rtx_bytes":0,"tcp_s2c_rtx_pkts":0,"tcp_s2c_rtx_bytes":0,"tcp_c2s_o3_pkts":0,"tcp_s2c_o3_pkts":0,"tcp_c2s_lost_bytes":0,"tcp_s2c_lost_bytes":0,"flags":57620,"flags_identify_info":[1,1],"fqdn_category_list":[0],"monitor_rule_list":[0],"security_rule_list":[0],"sc_rule_list":[0],"shaping_rule_list":[0],"proxy_rule_list":[0],"statistics_rule_list":[0],"monitor_mirrored_pkts":0,"monitor_mirrored_bytes":0,"client_os_desc":"Windows","server_os_desc":"Linux","device_tag":"{\"tags\":[{\"tag\":\"data_center\",\"value\":\"tsg_olap\"},{\"tag\":\"device_group\",\"value\":\"tsg_olap\"}]}","dup_traffic_flag":0,"sc_rsp_raw":[0],"encapsulation":"[{\"tunnels_schema_type\":\"ETHERNET\",\"source_mac\":\"00:1A:2B:3C:4D:5E\",\"destination_mac\":\"5E:4D:3C:2B:1A:00\"}]","rtp_pcap_path":"123e4567-e89b-12d3-a456-426614174005"}
|
||||||
|
{"log_id": 438322402985248769,"recv_time":946681200,"__inputid":"tsg_olap","session_id":10240004,"decoded_as":"SIP","ip_protocol":"udp","address_type":4,"client_ip":"10.0.0.2","server_ip":"192.0.2.2","client_port":1000,"server_port":60000,"t_vsys_id":0,"vsys_id":1024,"data_center":"tsg_olap","device_group":"tsg_olap","device_id":"0000000000000000","sled_ip":"127.0.0.1","app":"unknown","app_transition":"","client_geolocation":"unknown","server_geolocation":"unknown","decoded_path":"ETHERNET.IPv4.UDP.sip","server_fqdn":"","out_src_mac":"00:1A:2B:3C:4D:5E","out_dest_mac":"5E:4D:3C:2B:1A:00","start_timestamp_ms":1715830000000,"end_timestamp_ms":946681200000,"tcp_rtt_ms":0,"tcp_client_isn":0,"tcp_server_isn":0,"tcp_handshake_latency_ms":0,"in_link_id":0,"out_link_id":0,"duration_ms":0,"sent_pkts":0,"sent_bytes":0,"received_pkts":0,"received_bytes":0,"tcp_c2s_ip_fragments":0,"tcp_s2c_ip_fragments":0,"tcp_c2s_rtx_pkts":0,"tcp_c2s_rtx_bytes":0,"tcp_s2c_rtx_pkts":0,"tcp_s2c_rtx_bytes":0,"tcp_c2s_o3_pkts":0,"tcp_s2c_o3_pkts":0,"tcp_c2s_lost_bytes":0,"tcp_s2c_lost_bytes":0,"flags":24584,"flags_identify_info":[1,1],"fqdn_category_list":[0],"monitor_rule_list":[0],"security_rule_list":[0],"sc_rule_list":[0],"shaping_rule_list":[0],"proxy_rule_list":[0],"statistics_rule_list":[0],"monitor_mirrored_pkts":0,"monitor_mirrored_bytes":0,"client_os_desc":"Windows","server_os_desc":"Linux","device_tag":"{\"tags\":[{\"tag\":\"data_center\",\"value\":\"tsg_olap\"},{\"tag\":\"device_group\",\"value\":\"tsg_olap\"}]}","dup_traffic_flag":0,"sc_rsp_raw":[0],"encapsulation":"[{\"tunnels_schema_type\":\"ETHERNET\",\"source_mac\":\"00:1A:2B:3C:4D:5E\",\"destination_mac\":\"5E:4D:3C:2B:1A:00\"}]","sip_call_id":"IUMxZWY3Y2NmMzNlNGE3NzJhODgyZDAwM2YyMzQ4NGI.","sip_originator_description":"\"lina\"<sip:lina@192.0.2.1>;tag=1837055d","sip_responder_description":"\"1075\"<sip:1075@192.0.2.1>","sip_originator_sdp_connect_ip":"192.168.64.8","sip_originator_sdp_media_port":25524,"sip_originator_sdp_media_type":"application/sdp","sip_server":"OpenSIPS (2.4.11 (x86_64/linux))","sip_responder_sdp_connect_ip":"192.168.39.62","sip_responder_sdp_media_port":4580,"sip_responder_sdp_media_type":"application/sdp","sip_duration_s":590,"sip_bye":"responder","sip_cseq":"2 BYE","sip_via":"SIP/2.0/UDP 192.0.2.1:5060;branch=z9hG4bKbe7c.392190f1.0","sip_user_agent":"eyeBeam release 1011d stamp 40820","sip_is_request":0}
|
||||||
44
tools/dist/target.xml
vendored
Normal file
44
tools/dist/target.xml
vendored
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
<!--
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
or more contributor license agreements. See the NOTICE file
|
||||||
|
distributed with this work for additional information
|
||||||
|
regarding copyright ownership. The ASF licenses this file
|
||||||
|
to you under the Apache License, Version 2.0 (the
|
||||||
|
"License"); you may not use this file except in compliance
|
||||||
|
with the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing,
|
||||||
|
software distributed under the License is distributed on an
|
||||||
|
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
KIND, either express or implied. See the License for the
|
||||||
|
specific language governing permissions and limitations
|
||||||
|
under the License.
|
||||||
|
-->
|
||||||
|
<assembly
|
||||||
|
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
|
||||||
|
<id>bin</id>
|
||||||
|
|
||||||
|
<formats>
|
||||||
|
<format>tar.gz</format>
|
||||||
|
</formats>
|
||||||
|
|
||||||
|
<includeBaseDirectory>false</includeBaseDirectory>
|
||||||
|
|
||||||
|
<fileSets>
|
||||||
|
<fileSet>
|
||||||
|
<directory>src/main/resources/jobs</directory>
|
||||||
|
<includes>
|
||||||
|
<include>*.yml</include>
|
||||||
|
</includes>
|
||||||
|
<fileMode>0755</fileMode>
|
||||||
|
<lineEnding>lf</lineEnding>
|
||||||
|
<directoryMode>0644</directoryMode>
|
||||||
|
<outputDirectory>./</outputDirectory>
|
||||||
|
</fileSet>
|
||||||
|
</fileSets>
|
||||||
|
|
||||||
|
</assembly>
|
||||||
394
tools/maven/checkstyle.xml
Normal file
394
tools/maven/checkstyle.xml
Normal file
@@ -0,0 +1,394 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<!DOCTYPE module PUBLIC
|
||||||
|
"-//Puppy Crawl//DTD Check Configuration 1.3//EN"
|
||||||
|
"http://www.puppycrawl.com/dtds/configuration_1_3.dtd">
|
||||||
|
|
||||||
|
<!--
|
||||||
|
This is a checkstyle configuration file. For descriptions of
|
||||||
|
what the following rules do, please see the checkstyle configuration
|
||||||
|
page at http://checkstyle.sourceforge.net/config.html.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<module name="Checker">
|
||||||
|
|
||||||
|
<module name="RegexpSingleline">
|
||||||
|
<!-- Checks that TODOs don't have stuff in parenthesis, e.g., username. -->
|
||||||
|
<property name="format" value="((//.*)|(\*.*))TODO\("/>
|
||||||
|
<property name="message" value="TODO comments must not include usernames."/>
|
||||||
|
<property name="severity" value="error"/>
|
||||||
|
</module>
|
||||||
|
|
||||||
|
<module name="RegexpSingleline">
|
||||||
|
<property name="format" value="\s+$"/>
|
||||||
|
<property name="message" value="Trailing whitespace"/>
|
||||||
|
<property name="severity" value="error"/>
|
||||||
|
</module>
|
||||||
|
|
||||||
|
<module name="RegexpSingleline">
|
||||||
|
<property name="format" value="Throwables.propagate\("/>
|
||||||
|
<property name="message" value="Throwables.propagate is deprecated"/>
|
||||||
|
<property name="severity" value="error"/>
|
||||||
|
</module>
|
||||||
|
|
||||||
|
<!-- Prevent *Tests.java as tools may not pick them up -->
|
||||||
|
<module name="RegexpOnFilename">
|
||||||
|
<property name="fileNamePattern" value=".*Tests\.java$"/>
|
||||||
|
</module>
|
||||||
|
|
||||||
|
<module name="SuppressionFilter">
|
||||||
|
<property name="file" value="${checkstyle.suppressions.file}" default="suppressions.xml"/>
|
||||||
|
</module>
|
||||||
|
|
||||||
|
<module name="FileLength">
|
||||||
|
<property name="max" value="3000"/>
|
||||||
|
</module>
|
||||||
|
|
||||||
|
<!-- All Java AST specific tests live under TreeWalker module. -->
|
||||||
|
<module name="TreeWalker">
|
||||||
|
|
||||||
|
<!-- Allow use of comment to suppress javadocstyle -->
|
||||||
|
<module name="SuppressionCommentFilter">
|
||||||
|
<property name="offCommentFormat" value="CHECKSTYLE.OFF\: ([\w\|]+)"/>
|
||||||
|
<property name="onCommentFormat" value="CHECKSTYLE.ON\: ([\w\|]+)"/>
|
||||||
|
<property name="checkFormat" value="$1"/>
|
||||||
|
</module>
|
||||||
|
|
||||||
|
<!-- Prohibit T.getT() methods for standard boxed types -->
|
||||||
|
<module name="Regexp">
|
||||||
|
<property name="format" value="Boolean\.getBoolean"/>
|
||||||
|
<property name="illegalPattern" value="true"/>
|
||||||
|
<property name="message" value="Use System.getProperties() to get system properties."/>
|
||||||
|
</module>
|
||||||
|
|
||||||
|
<module name="Regexp">
|
||||||
|
<property name="format" value="Integer\.getInteger"/>
|
||||||
|
<property name="illegalPattern" value="true"/>
|
||||||
|
<property name="message" value="Use System.getProperties() to get system properties."/>
|
||||||
|
</module>
|
||||||
|
|
||||||
|
<module name="Regexp">
|
||||||
|
<property name="format" value="Long\.getLong"/>
|
||||||
|
<property name="illegalPattern" value="true"/>
|
||||||
|
<property name="message" value="Use System.getProperties() to get system properties."/>
|
||||||
|
</module>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
IllegalImport cannot blacklist classes so we have to fall back to Regexp.
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- forbid use of commons lang validate -->
|
||||||
|
<module name="Regexp">
|
||||||
|
<property name="format" value="org\.apache\.commons\.lang3\.Validate"/>
|
||||||
|
<property name="illegalPattern" value="true"/>
|
||||||
|
<property name="message"
|
||||||
|
value="Use Guava Checks instead of Commons Validate. Please refer to the coding guidelines."/>
|
||||||
|
</module>
|
||||||
|
<module name="Regexp">
|
||||||
|
<property name="format" value="org\.apache\.commons\.lang\."/>
|
||||||
|
<property name="illegalPattern" value="true"/>
|
||||||
|
<property name="message" value="Use commons-lang3 instead of commons-lang."/>
|
||||||
|
</module>
|
||||||
|
<module name="Regexp">
|
||||||
|
<property name="format" value="org\.codehaus\.jettison"/>
|
||||||
|
<property name="illegalPattern" value="true"/>
|
||||||
|
<property name="message" value="Use flink-shaded-jackson instead of jettison."/>
|
||||||
|
</module>
|
||||||
|
<module name="Regexp">
|
||||||
|
<property name="format" value="org\.testcontainers\.shaded"/>
|
||||||
|
<property name="illegalPattern" value="true"/>
|
||||||
|
<property name="message"
|
||||||
|
value="Use utilities from appropriate library instead of org.testcontainers."/>
|
||||||
|
</module>
|
||||||
|
|
||||||
|
<!-- Enforce Java-style array declarations -->
|
||||||
|
<module name="ArrayTypeStyle"/>
|
||||||
|
|
||||||
|
<module name="TodoComment">
|
||||||
|
<!-- Checks that disallowed strings are not used in comments. -->
|
||||||
|
<property name="format" value="(FIXME)|(XXX)"/>
|
||||||
|
</module>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
IMPORT CHECKS
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
<module name="RedundantImport">
|
||||||
|
<!-- Checks for redundant import statements. -->
|
||||||
|
<property name="severity" value="error"/>
|
||||||
|
<message key="import.redundancy"
|
||||||
|
value="Redundant import {0}."/>
|
||||||
|
</module>
|
||||||
|
|
||||||
|
<module name="IllegalImport">
|
||||||
|
<property name="illegalPkgs"
|
||||||
|
value="autovalue.shaded, avro.shaded, com.google.api.client.repackaged, com.google.appengine.repackaged"/>
|
||||||
|
</module>
|
||||||
|
<module name="IllegalImport">
|
||||||
|
<property name="illegalPkgs" value="com.fasterxml.jackson"/>
|
||||||
|
<message key="import.illegal" value="{0}; Use flink-shaded-jackson instead."/>
|
||||||
|
</module>
|
||||||
|
<module name="IllegalImport">
|
||||||
|
<property name="illegalPkgs" value="org.codehaus.jackson"/>
|
||||||
|
<message key="import.illegal" value="{0}; Use flink-shaded-jackson instead."/>
|
||||||
|
</module>
|
||||||
|
<module name="IllegalImport">
|
||||||
|
<property name="illegalPkgs" value="org.objectweb.asm"/>
|
||||||
|
<message key="import.illegal" value="{0}; Use flink-shaded-asm instead."/>
|
||||||
|
</module>
|
||||||
|
<module name="IllegalImport">
|
||||||
|
<property name="illegalPkgs" value="io.netty"/>
|
||||||
|
<message key="import.illegal" value="{0}; Use flink-shaded-netty instead."/>
|
||||||
|
</module>
|
||||||
|
|
||||||
|
<module name="RedundantModifier">
|
||||||
|
<!-- Checks for redundant modifiers on various symbol definitions.
|
||||||
|
See: http://checkstyle.sourceforge.net/config_modifier.html#RedundantModifier
|
||||||
|
|
||||||
|
We exclude METHOD_DEF to allow final methods in final classes to make them more future-proof.
|
||||||
|
-->
|
||||||
|
<property name="tokens"
|
||||||
|
value="VARIABLE_DEF, ANNOTATION_FIELD_DEF, INTERFACE_DEF, CLASS_DEF, ENUM_DEF"/>
|
||||||
|
</module>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
IllegalImport cannot blacklist classes, and c.g.api.client.util is used for some shaded
|
||||||
|
code and some useful code. So we need to fall back to Regexp.
|
||||||
|
-->
|
||||||
|
<module name="RegexpSinglelineJava">
|
||||||
|
<property name="format" value="^import com.google.common.base.Preconditions;$"/>
|
||||||
|
<property name="message" value="Static import functions from Guava Preconditions"/>
|
||||||
|
</module>
|
||||||
|
|
||||||
|
<module name="UnusedImports">
|
||||||
|
<property name="severity" value="error"/>
|
||||||
|
<property name="processJavadoc" value="true"/>
|
||||||
|
<message key="import.unused"
|
||||||
|
value="Unused import: {0}."/>
|
||||||
|
</module>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
NAMING CHECKS
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- Item 38 - Adhere to generally accepted naming conventions -->
|
||||||
|
|
||||||
|
<module name="PackageName">
|
||||||
|
<!-- Validates identifiers for package names against the
|
||||||
|
supplied expression. -->
|
||||||
|
<!-- Here the default checkstyle rule restricts package name parts to
|
||||||
|
seven characters, this is not in line with common practice at Google.
|
||||||
|
-->
|
||||||
|
<property name="format" value="^[a-z]+(\.[a-z][a-z0-9]{1,})*$"/>
|
||||||
|
<property name="severity" value="error"/>
|
||||||
|
</module>
|
||||||
|
|
||||||
|
<module name="TypeNameCheck">
|
||||||
|
<!-- Validates static, final fields against the
|
||||||
|
expression "^[A-Z][a-zA-Z0-9]*$". -->
|
||||||
|
<metadata name="altname" value="TypeName"/>
|
||||||
|
<property name="severity" value="error"/>
|
||||||
|
</module>
|
||||||
|
|
||||||
|
<module name="ConstantNameCheck">
|
||||||
|
<!-- Validates non-private, static, final fields against the supplied
|
||||||
|
public/package final fields "^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$". -->
|
||||||
|
<metadata name="altname" value="ConstantName"/>
|
||||||
|
<property name="applyToPublic" value="true"/>
|
||||||
|
<property name="applyToProtected" value="true"/>
|
||||||
|
<property name="applyToPackage" value="true"/>
|
||||||
|
<property name="applyToPrivate" value="true"/>
|
||||||
|
<property name="format" value="^([A-Z][A-Z0-9]*(_[A-Z0-9]+)*|FLAG_.*)$"/>
|
||||||
|
<message key="name.invalidPattern"
|
||||||
|
value="Variable ''{0}'' should be in ALL_CAPS (if it is a constant) or be private (otherwise)."/>
|
||||||
|
<property name="severity" value="error"/>
|
||||||
|
</module>
|
||||||
|
|
||||||
|
<module name="StaticVariableNameCheck">
|
||||||
|
<!-- Validates static, non-final fields against the supplied
|
||||||
|
expression "^[a-z][a-zA-Z0-9]*_?$". -->
|
||||||
|
<metadata name="altname" value="StaticVariableName"/>
|
||||||
|
<property name="applyToPublic" value="true"/>
|
||||||
|
<property name="applyToProtected" value="true"/>
|
||||||
|
<property name="applyToPackage" value="true"/>
|
||||||
|
<property name="applyToPrivate" value="true"/>
|
||||||
|
<property name="format" value="^[a-z][a-zA-Z0-9]*_?$"/>
|
||||||
|
<property name="severity" value="error"/>
|
||||||
|
</module>
|
||||||
|
|
||||||
|
<module name="MemberNameCheck">
|
||||||
|
<!-- Validates non-static members against the supplied expression. -->
|
||||||
|
<metadata name="altname" value="MemberName"/>
|
||||||
|
<property name="applyToPublic" value="true"/>
|
||||||
|
<property name="applyToProtected" value="true"/>
|
||||||
|
<property name="applyToPackage" value="true"/>
|
||||||
|
<property name="applyToPrivate" value="true"/>
|
||||||
|
<property name="format" value="^[a-z][a-zA-Z0-9]*$"/>
|
||||||
|
<property name="severity" value="error"/>
|
||||||
|
</module>
|
||||||
|
|
||||||
|
<module name="MethodNameCheck">
|
||||||
|
<!-- Validates identifiers for method names. -->
|
||||||
|
<metadata name="altname" value="MethodName"/>
|
||||||
|
<property name="format" value="^[a-z][a-zA-Z0-9]*(_[a-zA-Z0-9]+)*$"/>
|
||||||
|
<property name="severity" value="error"/>
|
||||||
|
</module>
|
||||||
|
|
||||||
|
<module name="ParameterName">
|
||||||
|
<!-- Validates identifiers for method parameters against the
|
||||||
|
expression "^[a-z][a-zA-Z0-9]*$". -->
|
||||||
|
<property name="severity" value="error"/>
|
||||||
|
</module>
|
||||||
|
|
||||||
|
<module name="LocalFinalVariableName">
|
||||||
|
<!-- Validates identifiers for local final variables against the
|
||||||
|
expression "^[a-z][a-zA-Z0-9]*$". -->
|
||||||
|
<property name="severity" value="error"/>
|
||||||
|
</module>
|
||||||
|
|
||||||
|
<module name="LocalVariableName">
|
||||||
|
<!-- Validates identifiers for local variables against the
|
||||||
|
expression "^[a-z][a-zA-Z0-9]*$". -->
|
||||||
|
<property name="severity" value="error"/>
|
||||||
|
</module>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
LENGTH and CODING CHECKS
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- Checks for braces around if and else blocks -->
|
||||||
|
<module name="NeedBraces">
|
||||||
|
<property name="severity" value="error"/>
|
||||||
|
<property name="tokens"
|
||||||
|
value="LITERAL_IF, LITERAL_ELSE, LITERAL_FOR, LITERAL_WHILE, LITERAL_DO"/>
|
||||||
|
</module>
|
||||||
|
|
||||||
|
<module name="UpperEll">
|
||||||
|
<!-- Checks that long constants are defined with an upper ell.-->
|
||||||
|
<property name="severity" value="error"/>
|
||||||
|
</module>
|
||||||
|
|
||||||
|
<module name="FallThrough">
|
||||||
|
<!-- Warn about falling through to the next case statement. Similar to
|
||||||
|
javac -Xlint:fallthrough, but the check is suppressed if a single-line comment
|
||||||
|
on the last non-blank line preceding the fallen-into case contains 'fall through' (or
|
||||||
|
some other variants that we don't publicized to promote consistency).
|
||||||
|
-->
|
||||||
|
<property name="reliefPattern"
|
||||||
|
value="fall through|Fall through|fallthru|Fallthru|falls through|Falls through|fallthrough|Fallthrough|No break|NO break|no break|continue on"/>
|
||||||
|
<property name="severity" value="error"/>
|
||||||
|
</module>
|
||||||
|
|
||||||
|
<!-- Checks for over-complicated boolean expressions. -->
|
||||||
|
<module name="SimplifyBooleanExpression"/>
|
||||||
|
|
||||||
|
<!-- Detects empty statements (standalone ";" semicolon). -->
|
||||||
|
<module name="EmptyStatement"/>
|
||||||
|
|
||||||
|
<!-- Detect multiple consecutive semicolons (e.g. ";;"). -->
|
||||||
|
<module name="RegexpSinglelineJava">
|
||||||
|
<property name="format" value=";{2,}"/>
|
||||||
|
<property name="message" value="Use one semicolon"/>
|
||||||
|
<property name="ignoreComments" value="true"/>
|
||||||
|
</module>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
MODIFIERS CHECKS
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
<module name="ModifierOrder">
|
||||||
|
<!-- Warn if modifier order is inconsistent with JLS3 8.1.1, 8.3.1, and
|
||||||
|
8.4.3. The prescribed order is:
|
||||||
|
public, protected, private, abstract, static, final, transient, volatile,
|
||||||
|
synchronized, native, strictfp
|
||||||
|
-->
|
||||||
|
<property name="severity" value="error"/>
|
||||||
|
</module>
|
||||||
|
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
WHITESPACE CHECKS
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
<module name="EmptyLineSeparator">
|
||||||
|
<!-- Checks for empty line separator between tokens. The only
|
||||||
|
excluded token is VARIABLE_DEF, allowing class fields to
|
||||||
|
be declared on consecutive lines.
|
||||||
|
-->
|
||||||
|
<property name="allowMultipleEmptyLines" value="false"/>
|
||||||
|
<property name="allowMultipleEmptyLinesInsideClassMembers" value="false"/>
|
||||||
|
<property name="tokens" value="PACKAGE_DEF, IMPORT, STATIC_IMPORT, CLASS_DEF,
|
||||||
|
INTERFACE_DEF, ENUM_DEF, STATIC_INIT, INSTANCE_INIT, METHOD_DEF,
|
||||||
|
CTOR_DEF"/>
|
||||||
|
</module>
|
||||||
|
|
||||||
|
<module name="SingleSpaceSeparator"/>
|
||||||
|
|
||||||
|
<module name="WhitespaceAround">
|
||||||
|
<!-- Checks that various tokens are surrounded by whitespace.
|
||||||
|
This includes most binary operators and keywords followed
|
||||||
|
by regular or curly braces.
|
||||||
|
-->
|
||||||
|
<property name="tokens" value="ASSIGN, BAND, BAND_ASSIGN, BOR,
|
||||||
|
BOR_ASSIGN, BSR, BSR_ASSIGN, BXOR, BXOR_ASSIGN, COLON, DIV, DIV_ASSIGN,
|
||||||
|
EQUAL, GE, GT, LAMBDA, LAND, LE, LITERAL_CATCH, LITERAL_DO, LITERAL_ELSE,
|
||||||
|
LITERAL_FINALLY, LITERAL_FOR, LITERAL_IF, LITERAL_RETURN,
|
||||||
|
LITERAL_SYNCHRONIZED, LITERAL_TRY, LITERAL_WHILE, LOR, LT, MINUS,
|
||||||
|
MINUS_ASSIGN, MOD, MOD_ASSIGN, NOT_EQUAL, PLUS, PLUS_ASSIGN, QUESTION,
|
||||||
|
SL, SL_ASSIGN, SR_ASSIGN, STAR, STAR_ASSIGN, TYPE_EXTENSION_AND"/>
|
||||||
|
<property name="severity" value="error"/>
|
||||||
|
</module>
|
||||||
|
|
||||||
|
<module name="WhitespaceAfter">
|
||||||
|
<!-- Checks that commas, semicolons and typecasts are followed by
|
||||||
|
whitespace.
|
||||||
|
-->
|
||||||
|
<property name="tokens" value="COMMA, SEMI, TYPECAST"/>
|
||||||
|
</module>
|
||||||
|
|
||||||
|
<module name="NoWhitespaceAfter">
|
||||||
|
<!-- Checks that there is no whitespace after various unary operators.
|
||||||
|
Linebreaks are allowed.
|
||||||
|
-->
|
||||||
|
<property name="tokens" value="BNOT, DEC, DOT, INC, LNOT, UNARY_MINUS,
|
||||||
|
UNARY_PLUS"/>
|
||||||
|
<property name="allowLineBreaks" value="true"/>
|
||||||
|
<property name="severity" value="error"/>
|
||||||
|
</module>
|
||||||
|
|
||||||
|
<module name="NoWhitespaceBefore">
|
||||||
|
<!-- Checks that there is no whitespace before various unary operators.
|
||||||
|
Linebreaks are allowed.
|
||||||
|
-->
|
||||||
|
<property name="tokens" value="SEMI, DOT, POST_DEC, POST_INC"/>
|
||||||
|
<property name="allowLineBreaks" value="true"/>
|
||||||
|
<property name="severity" value="error"/>
|
||||||
|
</module>
|
||||||
|
|
||||||
|
<module name="OperatorWrap">
|
||||||
|
<!-- Checks that assignment operators are at the end of the line. -->
|
||||||
|
<property name="option" value="eol"/>
|
||||||
|
<property name="tokens" value="ASSIGN"/>
|
||||||
|
</module>
|
||||||
|
|
||||||
|
<module name="ParenPad">
|
||||||
|
<!-- Checks that there is no whitespace before close parens or after
|
||||||
|
open parens.
|
||||||
|
-->
|
||||||
|
<property name="severity" value="error"/>
|
||||||
|
</module>
|
||||||
|
|
||||||
|
</module>
|
||||||
|
</module>
|
||||||
|
|
||||||
21
tools/maven/spotbugs-exclude.xml
Normal file
21
tools/maven/spotbugs-exclude.xml
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<FindBugsFilter>
|
||||||
|
<Match>
|
||||||
|
<Bug pattern="EI_EXPOSE_REP"/>
|
||||||
|
</Match>
|
||||||
|
<Match>
|
||||||
|
<Bug pattern="EI_EXPOSE_REP2"/>
|
||||||
|
</Match>
|
||||||
|
<Match>
|
||||||
|
<Bug pattern="REC_CATCH_EXCEPTION"/>
|
||||||
|
</Match>
|
||||||
|
<Match>
|
||||||
|
<Bug pattern="SE_NO_SERIALVERSIONID"/>
|
||||||
|
</Match>
|
||||||
|
<Match>
|
||||||
|
<Bug pattern="SE_TRANSIENT_FIELD_NOT_RESTORED"/>
|
||||||
|
</Match>
|
||||||
|
<Match>
|
||||||
|
<Bug pattern="SQL_PREPARED_STATEMENT_GENERATED_FROM_NONCONSTANT_STRING"/>
|
||||||
|
</Match>
|
||||||
|
</FindBugsFilter>
|
||||||
12
tools/maven/suppressions.xml
Normal file
12
tools/maven/suppressions.xml
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<!DOCTYPE suppressions PUBLIC
|
||||||
|
"-//Puppy Crawl//DTD Suppressions 1.1//EN"
|
||||||
|
"http://www.puppycrawl.com/dtds/suppressions_1_1.dtd">
|
||||||
|
|
||||||
|
<suppressions>
|
||||||
|
<!-- target directory is not relevant for checkstyle -->
|
||||||
|
<suppress
|
||||||
|
files="[\\/]target[\\/]"
|
||||||
|
checks=".*"/>
|
||||||
|
|
||||||
|
</suppressions>
|
||||||
Reference in New Issue
Block a user