From e5a5331464d6116538bb3e32bc94703c6ce83d0a Mon Sep 17 00:00:00 2001
From: chaochaoc <13051077615@126.com>
Date: Fri, 28 Jun 2024 18:45:53 +0800
Subject: [PATCH] [GAL-602] feat: add docs and fix some bugs
---
.gitlab-ci.yml | 47 +++++
pom.xml | 182 ++++++++++++++++--
src/main/java/Application.java | 9 -
src/main/resources/application.properties | 7 -
src/main/resources/{ => jobs}/job.yml | 13 +-
.../site/markdown/changelogs.md | 4 +-
src/site/markdown/deploy.md | 13 ++
src/site/markdown/download.md | 8 +
src/site/markdown/index.md | 10 +
src/site/resources/css/site.css | 13 ++
src/site/resources/images/logo.png | Bin 0 -> 4877 bytes
src/site/site.xml | 56 ++++++
.../easy/application/ApplicationTest.java | 33 ++++
src/test/resources/data/session-records.txt | 4 +
src/test/resources/data/session.json | 43 +++++
tools/maven/checkstyle.xml | 4 -
16 files changed, 402 insertions(+), 44 deletions(-)
create mode 100644 .gitlab-ci.yml
delete mode 100644 src/main/java/Application.java
delete mode 100644 src/main/resources/application.properties
rename src/main/resources/{ => jobs}/job.yml (99%)
rename CHANGELOG.md => src/site/markdown/changelogs.md (80%)
create mode 100644 src/site/markdown/deploy.md
create mode 100644 src/site/markdown/download.md
create mode 100644 src/site/markdown/index.md
create mode 100644 src/site/resources/css/site.css
create mode 100644 src/site/resources/images/logo.png
create mode 100644 src/site/site.xml
create mode 100644 src/test/java/com/geedgenetworks/flink/easy/application/ApplicationTest.java
create mode 100644 src/test/resources/data/session-records.txt
create mode 100644 src/test/resources/data/session.json
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000..2959ffc
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,47 @@
+image: 192.168.40.153:9080/common/maven:3.8.1-openjdk-11-slim-with-git
+
+variables:
+ MAVEN_CLI_OPTS: "--batch-mode --errors --show-version"
+
+stages:
+ - check
+ - test
+ - build
+
+snapshot-version:
+ stage: check
+ script:
+ - mvn $MAVEN_CLI_OPTS enforcer:enforce@snapshot-version-check
+ rules:
+ - if: $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop" && $CI_PIPELINE_SOURCE == "merge_request_event"
+
+non-snapshot-version:
+ stage: check
+ script:
+ - 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$|^release\/)/ && $CI_PIPELINE_SOURCE == "merge_request_event"
+
+test:
+ stage: test
+ script:
+ - mvn $MAVEN_CLI_OPTS clean test
+ only:
+ - merge_requests
+
+# Used for building snapshot versions on the develop branch.
+build:
+ stage: build
+ script:
+ - echo "$MAVEN_SETTINGS_XML" > /usr/share/maven/conf/settings.xml
+ - mvn clean site deploy -DskipTests
+ only:
+ - master
+ - /^release\//
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 04639d7..c922d1e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,9 +5,9 @@
4.0.0
- com.zdjizhi
+ com.geedgenetworks.application
sip-rtp-correlation
- 2.0
+ 2.0-SNAPSHOT
Flink : SIP-RTP : Correlation
@@ -25,6 +25,24 @@
5.8.0
+
+
+ platform-releases
+ http://192.168.40.153:8099/content/repositories/platform-release
+ true
+
+
+ platform-snapshots
+ http://192.168.40.153:8099/content/repositories/platform-snapshot
+
+
+ platform-site
+
+ dav:http://192.168.40.153:8099/content/sites/platform-site/platform/application/sip-rtp-correlate-${project.version}
+
+
+
+
central
@@ -39,18 +57,6 @@
-
-
- platform-releases
- http://192.168.40.153:8099/content/repositories/platform-release
- true
-
-
- platform-snapshots
- http://192.168.40.153:8099/content/repositories/platform-snapshot
-
-
-
org.slf4j
@@ -131,6 +137,11 @@
easy-stream-socket-connector
${easy.stream.version}
+
+ com.geedgenetworks.flink
+ easy-stream-console-connector
+ ${easy.stream.version}
+
com.geedgenetworks.flink
@@ -178,6 +189,12 @@
org.apache.flink
flink-table-runtime-blink_${scala.binary.version}
+
+
+ org.junit.jupiter
+ junit-jupiter-api
+ test
+
@@ -444,6 +461,39 @@
+
+ org.apache.maven.plugins
+ maven-enforcer-plugin
+ 3.0.0-M3
+
+
+ release-version-check
+
+ enforce
+
+
+
+
+ SNAPSHOT versions ${project.version} are not allowed.
+
+
+
+
+
+ snapshot-version-check
+
+ enforce
+
+
+
+
+ Non-SNAPSHOT versions ${project.version} are not allowed.
+
+
+
+
+
+
org.apache.maven.plugins
maven-compiler-plugin
@@ -486,11 +536,115 @@
+
+
+
+
+ org.apache.maven.plugins
+ maven-resources-plugin
+ 3.0.0
+
+
+ jobs-copy-resources
+ pre-site
+
+ copy-resources
+
+
+ ${project.build.directory}/site/jobs
+
+
+ src/main/resources/jobs
+
+ *.yml
+
+
+
+
+
+
+ site-resources
+ pre-site
+
+ resources
+
+
+
+
+ src/site
+ true
+
+ **
+
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-site-plugin
+
+ false
+
+
+
+ default-site
+
+ site
+
+ site
+
+ ${project.build.outputDirectory}
+
+
+
+ site-deploy
+
+ stage-deploy
+
+ deploy
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-site-plugin
+ 3.9.1
+
+ ${project.build.directory}/site
+ false
+
+
+
+ org.apache.maven.wagon
+ wagon-webdav-jackrabbit
+ 2.8
+
+
+ org.apache.maven.doxia
+ doxia-module-markdown
+ 1.9.1
+
+
+
+
+ org.apache.maven.plugins
+ maven-deploy-plugin
+ 3.1.1
+
+
+
\ No newline at end of file
diff --git a/src/main/java/Application.java b/src/main/java/Application.java
deleted file mode 100644
index 237c2b7..0000000
--- a/src/main/java/Application.java
+++ /dev/null
@@ -1,9 +0,0 @@
-import com.geedgenetworks.flink.easy.core.Runners;
-
-public class Application {
-
- public static void main(String[] args) throws Exception {
-
- Runners.run("E:\\java-workspace\\sip-rtp-correlation\\feature\\easy-refactor\\src\\main\\resources\\job.yml");
- }
-}
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
deleted file mode 100644
index 7cc9d25..0000000
--- a/src/main/resources/application.properties
+++ /dev/null
@@ -1,7 +0,0 @@
-sink.kafka.topic=VOIP-CONVERSATION-RECORD
-sink.kafka.props.bootstrap.servers=localhost:9292
-
-
-source.kafka.topic=VOIP-RECORD
-source.kafka.props.bootstrap.servers=localhost:9292
-source.kafka.props.group.id=flink-voip-fusion
\ No newline at end of file
diff --git a/src/main/resources/job.yml b/src/main/resources/jobs/job.yml
similarity index 99%
rename from src/main/resources/job.yml
rename to src/main/resources/jobs/job.yml
index e777f17..52aba5e 100644
--- a/src/main/resources/job.yml
+++ b/src/main/resources/jobs/job.yml
@@ -1,6 +1,6 @@
job:
name: correlation_sip_rtp_session
- parallelism: 10
+ parallelism: 1
active-pipeline:
- only-voip-records
- fusion-fail-records
@@ -1077,6 +1077,7 @@ pipeline:
data-type: INT
- name: rtp
type: LIST
+ ttl: 6 minute
schema:
## General
- name: recv_time
@@ -1350,10 +1351,8 @@ pipeline:
key-by: vsys_id, SORT_ADDRESS( sip_originator_sdp_connect_ip, sip_originator_sdp_media_port, sip_responder_sdp_connect_ip, sip_responder_sdp_media_port )
# SIP
process:
- - if: '@sip.isNull'
- then:
- - SET sip FROM withColumns(recv_time to rtp_originator_dir)
- - if: '@sip.isNotNull && @rtp.isNotNull && @rtp.cardinality() > 0'
+ - SET sip FROM withColumns(recv_time to rtp_originator_dir)
+ - if: '@rtp.isNotNull'
then:
- |-
FLAT OUTPUT ok FOR i IN rtp FROM
@@ -1436,9 +1435,7 @@ pipeline:
- on: rtp-records
key-by: vsys_id, SORT_ADDRESS( client_ip, client_port, server_ip, server_port )
process:
- - if: '@sip.isNull'
- then:
- - APPEND rtp FROM withColumns(recv_time to rtp_originator_dir)
+ - APPEND rtp FROM withColumns(recv_time to rtp_originator_dir)
- if: '@sip.isNotNull'
then:
- |-
diff --git a/CHANGELOG.md b/src/site/markdown/changelogs.md
similarity index 80%
rename from CHANGELOG.md
rename to src/site/markdown/changelogs.md
index 73e84e8..aab7b60 100644
--- a/CHANGELOG.md
+++ b/src/site/markdown/changelogs.md
@@ -1,5 +1,5 @@
-# Changelog
+## Changelog
-### Feature
+### 2.0
- [GAL-602](https://jira.geedge.net/browse/GAL-602) 基于 Easy Stream 框架的配置化改造。
\ No newline at end of file
diff --git a/src/site/markdown/deploy.md b/src/site/markdown/deploy.md
new file mode 100644
index 0000000..5114e9e
--- /dev/null
+++ b/src/site/markdown/deploy.md
@@ -0,0 +1,13 @@
+## 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-.jar job.yml`
+
+- 您将在控制台看到启动日志,同时您可以在 `http://:8081` 看到任务 UI。
\ No newline at end of file
diff --git a/src/site/markdown/download.md b/src/site/markdown/download.md
new file mode 100644
index 0000000..d85bc18
--- /dev/null
+++ b/src/site/markdown/download.md
@@ -0,0 +1,8 @@
+## Download
+
+### Easy Stream ${project.version}
+
+| UDF Jar | Job |
+|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| --------------- |
+| [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) ) | [YAML](./jobs/job.yml) |
+
diff --git a/src/site/markdown/index.md b/src/site/markdown/index.md
new file mode 100644
index 0000000..2bf785c
--- /dev/null
+++ b/src/site/markdown/index.md
@@ -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 通话数据,提取关键指标,以及进行实时报警和诊断。
+
+
+
+
+You can download the latest release from [Job Yml](./jobs/job.yml). And you can changelog from [CHANGELOG.md](./changelogs.html).
\ No newline at end of file
diff --git a/src/site/resources/css/site.css b/src/site/resources/css/site.css
new file mode 100644
index 0000000..11a3d99
--- /dev/null
+++ b/src/site/resources/css/site.css
@@ -0,0 +1,13 @@
+#banner {
+ height: 108px;
+ background: none;
+}
+
+#bannerLeft img {
+ margin-left: 18px;
+ margin-top: 10px;
+}
+
+div.well {
+ display: none;
+}
\ No newline at end of file
diff --git a/src/site/resources/images/logo.png b/src/site/resources/images/logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..da2277a5a9f0f0af9d778ee4973b1b061f39406b
GIT binary patch
literal 4877
zcmaJ_c{r5&+kZ&NAtPjGn$XBH#y*psu@AEE`(T*GGBJ~V2`N-0jk1i8A5pfFHKGLx
zM`6m6XqB}P^3FJ?^Lzhz&pX##&+@%K_vgO9pZk8U>-jwAZLLjtxJ0=C0N^nyg8J{X;P%upcG}OVEKVwRS?l*Z>`fvpQNC9cF|H
z#+sdtz}TO)cJMzN>W>J3=;?yB$w&qP9z*g4lkqr0B$BKH+2=(vu9?d)2zVbt3e|!9
zRg??b7HmX}z<|}2R2BV|;c&2qh7w#&T|)z|09H|ktH6{Qe+@;r8d6;YsiFz~`v+lU
ziwFor+8LYtor`g&0|_RP!jLdnbab>*w5k#@A_xXYAP`Ir6%|DWLNSs;Ao-FN36aNt
zGZ-!d@-gOPp1U~na6=9Yc~(dhpl
zipT$hjwIP({#)<=NgU}w3B$nbFpDw1ein+
z@!>|JCTF6i`N2m}@fRa5{um&X1r48=zC`jaeUD;BYB<
z)u*SBWB3MYXOelc0rg4hCvU4Q`=x#bQGJ6jXR9Owcm6LI1Etv1NkXg)=!KL4m
zc+sp$&z3y=p#|qYA?Y7;10QEcF0o?;0AH>d1WwBTR2H5unXH)#`gLQ`sd)^f4*;Cr
z!1U878Tuzqryxn6Z3vwRP6Pl@1yJ-fN{s%9b7bIafP3E$eoim|q{<{dxrg_0Pn^MB
zn8Rop0xSR+#Ihqs=i_|dOi7{{7!5Jkx)NA+ROo_om6@k=V36BbUHWCY4<5Z501F!c
zbRJxW{)*J2C*|AMRtDP+u+jTDKRZ)S&{4QzGp!Fmb}p7p5C8=FZ)ntd=7Zy>gH9FG
zwg{k35y^m4HfLXGSQ{v_0EyGA55`w_%W%a8FJ)KpR}Oe_i>J>pbm=@82J7GOyP}D_
zH_|e_x?9RA3INOQfRI~9!jVUxQ|}blWtQyY?mBkq#GJS23p)q^Gv|Ro#c>uk5C8-=
z0SvtWrZfz3nF{MOw#3j0%sA}t0ALCP08B8D_+K#ikF|%JHKM3Lf-mf{Y?K7UKPDhM
z=7w=}sGBa1k6!$=V`!#u+)KW9S7htr2m7M%OKpMjbk^oU9GdbKlzH@avyM&MXjEoY
z`<~_%0cP4WqPQNM`}jh`?#0EP!>`Zt1k~lTYMFXP*G9cy!3ovJr7pV2U6Dq8!8V6C
zhfch5En0DGhC$!8r7qrIEqL%D`u$oiTi6AG@6!#Q-9MbAVGJd%5j2v16)XyVI>Xu_^a!PTm!3
zxd+7Z+lRiB=Qq#egv@i`ykEv8Rbvyh=-cYyN6}4s#wrIG4vOfS@06_t&^;_
z_4+Q}=|x;Nt-?rb1G^Dl81Yr1r$H~cWhiTsVuS7esk69wD$l=oEc<5Oaz}Mj=lXLjG#qMM|P(XfZw+(otL;+hKhw
z{?-qKIpFQr>bOlXXX#uNVYFe+6J%z>Uq(6s6@8qW{+|JlIGJB*jw2Ox1?jU%Y24N5
z`Vo7c_w6x?*-sS1uU%tF-%fvCjV-gQvT8t-XQ{A->Clh61$-lF*(jRb$9A{yE+Usv
z}eh+_k`?0)@8wo7eBwPVm-rwTHEqFd>InF
z)@Fr+v)M@&nQ28OIaQJKq9hvUA_vWbGVv`kDco{sfjB$;+>pEW76o4hoy#oPiO9Au
zT$Xp51GnNWDAP2N(U1?8mP$TWzK#uKYjru<-NPHof;Azc!N@dv8OAA
z=%P8ZM^m9E*5Vf$A3?OnLYltLIv7fo%m^=1-5ck;hqGa$*~K*y(;t@yR2xI%%f31=if8Grod3a68?RB?`(M{ZF<*w1zq3fcrRT|3wtk%W
zI7B4fyEJgbDZKni-mlMyA|0HW9;)p=Z@5RkY1!VwdGU>cSN&9_UuiXzX*oP}-o6d_`DY3A6d`$!c}k2DAp@ywe*6+_J(z(X28K5NR3Vs*Kq6u#7l0?>#Dhj
zPjAI>RmfgJvbgv5I@t3XwCzt3E&o1^ZUySn{e+O=2@$&l(VBG~53&%$aLwdEMca-<
zX79x0M@^}xg;q8V`6L$&me%Eki$GSY2(zqe_A;VKjL%3G3=xVU2j!S&@
z>vys6SxTMio8!DRr$+0JYPZXvWt}*sbMT
zO%J)X&hDM5&-qVQD+-r#J2hCTIq!sL*;t6W{MF30EzA-JxqY=WxUbD4(z&j|rSX_>uQV`G%kK*No~w1_;lUy^gCVu;iiVp(l^Rkt6z}{@z+O8CRm|In}5~qc-NGy
z%1~WJ(NVa|
zY)R%fbom}4o+EY=ioN>h!_sc$5WZ*B*|vDg>%O94D*E%$#Q}`Q{4ukp*3jA`z8II9
zzCrG8@>42(2yGHJTMNxR`f|#hD!jR>o>`%EJHydegFnMutX=NN8Acj6OUd;COL4V7
zqjHhkF`hf@+*8F%{ADpZ*{0k@&LchrX=NuSg5-oop7UJWCiQQtR%AI)-@
zi7xw|_t@EJ{*E-6qH8ffU%btn8%{n6+{7i{&tjK2v%ZSbgOB>MoAw^56FJ|dnPsmTBo%+N__w0DPLt0FyyhXxstF^Jx-#V*9SzXlMx3XU^
zR7VS5q|PF0mqyVn19=)poRdmd3-u4uxi3ewzUwUyZ|7bYJHi^&y3Rd~UdZ@b}#QApL)>@LzP+d>QjTtD>pY%zjRuj-kZHp
zZ&y+jlWxWBeoJ}kwf}Ye)8z!C$&y}oQQE2rfA;h4*c*u#HYNCO1M3muIl?EYacLF<
ziO1ehMMg|+Up+9pg(&CoX0x@zbv`_>K}n5zi|xM36Hr8ilFdX5d_Aa7!~E0Syvy`+
z{7{BziXq^~(k+TycXE=&!l7oFIHgz96x-^>C);{IV)8qlXZX|J3aKs$n37y<{cLJ&
z`Xkln5tMvg%QdccYccZ_&sZUSP%X!?w)R=2z#*h2Ra|ZdbJsOd
zM;o#@8b57NOFT_^pMa?IYhyR(zDX|aLF-gZT9xhwJfh_zqT!yn=*
z8;1#79K0YBZLmYG{Sdb|Z;qVG(1DuEbUQ-H&Zgz(h^Ld%Eo!FMedy}lG2ldfwVVu@
zq5KaZt^M15dgIxFF^8Ch
zpf2l31-g-BI$Z>(caA}-|6pKcy}kLYBmo9yevi`bqJhL7|DXs5ewmnZe}7BnSZJh$u74R4=C!Re~Z!attgFOiuM(D&J~Nn`=MbH?(H?TyPYRseI9
LwQ;SXPxAi&tj$b?
literal 0
HcmV?d00001
diff --git a/src/site/site.xml b/src/site/site.xml
new file mode 100644
index 0000000..497fe49
--- /dev/null
+++ b/src/site/site.xml
@@ -0,0 +1,56 @@
+
+
+
+
+ Easy Stream
+ images/logo.png
+ #
+
+
+
+
+
+
+ org.apache.maven.skins
+ maven-fluido-skin
+ 1.10.0
+
+
+
+
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/test/java/com/geedgenetworks/flink/easy/application/ApplicationTest.java b/src/test/java/com/geedgenetworks/flink/easy/application/ApplicationTest.java
new file mode 100644
index 0000000..c9eac46
--- /dev/null
+++ b/src/test/java/com/geedgenetworks/flink/easy/application/ApplicationTest.java
@@ -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"));
+ }
+}
diff --git a/src/test/resources/data/session-records.txt b/src/test/resources/data/session-records.txt
new file mode 100644
index 0000000..821e859
--- /dev/null
+++ b/src/test/resources/data/session-records.txt
@@ -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\";tag=1837055d","sip_responder_description":"\"1075\"","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\";tag=1837055d","sip_responder_description":"\"1075\"","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}
\ No newline at end of file
diff --git a/src/test/resources/data/session.json b/src/test/resources/data/session.json
new file mode 100644
index 0000000..683609c
--- /dev/null
+++ b/src/test/resources/data/session.json
@@ -0,0 +1,43 @@
+{
+ "device_id": "9800165603247024",
+ "sled_ip": "92.168.40.26",
+ "tcp_handshake_latency_ms": 1034,
+ "out_link_id": 41612,
+ "in_link_id": 60995,
+ "address_type": 4,
+ "vsys_id": 2048,
+ "flags": 91784,
+ "device_group": "OLAP-MOCK-DG-3",
+ "data_center": "OLAP-MOCK-DC-2",
+ "direction": "Inbound",
+ "client_ip": "16.176.21.112",
+ "server_ip": "103.144.108.239",
+ "c2s_ttl": 46,
+ "s2c_ttl": 128,
+ "client_port": 57690,
+ "server_port": 443,
+ "subscriber_id": "Abdul Kunze",
+ "phone_number": "+1 424-760-9979 x1322",
+ "decoded_as": "SSL",
+ "ssl_sni": "schumm.name",
+ "app": "ssl",
+ "ip_protocol": "udp",
+ "sent_pkts": 101,
+ "received_pkts": 18,
+ "sent_bytes": 2838,
+ "received_bytes": 23465,
+ "start_timestamp_ms": 1719400532424,
+ "end_timestamp_ms": 1719400532424,
+ "duration_ms": 5624,
+ "tcp_rtt_ms": 12,
+ "log_id": 438322402985248769,
+ "recv_time": 1719400532,
+ "session_id": 438322402985773057,
+ "ingestion_time": 1719400532,
+ "server_domain": "schumm.name",
+ "server_asn": "139742",
+ "client_administrative_area": "Unknown",
+ "client_country": "United States",
+ "client_super_administrative_area": "Unknown",
+ "processing_time": 1719400532
+}
\ No newline at end of file
diff --git a/tools/maven/checkstyle.xml b/tools/maven/checkstyle.xml
index ae5a148..78f2137 100644
--- a/tools/maven/checkstyle.xml
+++ b/tools/maven/checkstyle.xml
@@ -143,10 +143,6 @@ page at http://checkstyle.sourceforge.net/config.html.
-
-
-
-