Quellcode durchsuchen

comm dump logic add

shjung vor 11 Monaten
Ursprung
Commit
c412fb5dcb

+ 7 - 0
.bash_logout

@@ -0,0 +1,7 @@
+# ~/.bash_logout: executed by bash(1) when login shell exits.
+
+# when leaving the console clear the screen to increase privacy
+
+if [ "$SHLVL" = 1 ]; then
+    [ -x /usr/bin/clear_console ] && /usr/bin/clear_console -q
+fi

+ 117 - 0
.bashrc

@@ -0,0 +1,117 @@
+# ~/.bashrc: executed by bash(1) for non-login shells.
+# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
+# for examples
+
+# If not running interactively, don't do anything
+case $- in
+    *i*) ;;
+      *) return;;
+esac
+
+# don't put duplicate lines or lines starting with space in the history.
+# See bash(1) for more options
+HISTCONTROL=ignoreboth
+
+# append to the history file, don't overwrite it
+shopt -s histappend
+
+# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
+HISTSIZE=1000
+HISTFILESIZE=2000
+
+# check the window size after each command and, if necessary,
+# update the values of LINES and COLUMNS.
+shopt -s checkwinsize
+
+# If set, the pattern "**" used in a pathname expansion context will
+# match all files and zero or more directories and subdirectories.
+#shopt -s globstar
+
+# make less more friendly for non-text input files, see lesspipe(1)
+[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"
+
+# set variable identifying the chroot you work in (used in the prompt below)
+if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
+    debian_chroot=$(cat /etc/debian_chroot)
+fi
+
+# set a fancy prompt (non-color, unless we know we "want" color)
+case "$TERM" in
+    xterm-color|*-256color) color_prompt=yes;;
+esac
+
+# uncomment for a colored prompt, if the terminal has the capability; turned
+# off by default to not distract the user: the focus in a terminal window
+# should be on the output of commands, not on the prompt
+#force_color_prompt=yes
+
+if [ -n "$force_color_prompt" ]; then
+    if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
+	# We have color support; assume it's compliant with Ecma-48
+	# (ISO/IEC-6429). (Lack of such support is extremely rare, and such
+	# a case would tend to support setf rather than setaf.)
+	color_prompt=yes
+    else
+	color_prompt=
+    fi
+fi
+
+if [ "$color_prompt" = yes ]; then
+    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
+else
+    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
+fi
+unset color_prompt force_color_prompt
+
+# If this is an xterm set the title to user@host:dir
+case "$TERM" in
+xterm*|rxvt*)
+    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
+    ;;
+*)
+    ;;
+esac
+
+# enable color support of ls and also add handy aliases
+if [ -x /usr/bin/dircolors ]; then
+    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
+    alias ls='ls --color=auto'
+    #alias dir='dir --color=auto'
+    #alias vdir='vdir --color=auto'
+
+    alias grep='grep --color=auto'
+    alias fgrep='fgrep --color=auto'
+    alias egrep='egrep --color=auto'
+fi
+
+# colored GCC warnings and errors
+#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
+
+# some more ls aliases
+alias ll='ls -alF'
+alias la='ls -A'
+alias l='ls -CF'
+
+# Add an "alert" alias for long running commands.  Use like so:
+#   sleep 10; alert
+alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
+
+# Alias definitions.
+# You may want to put all your additions into a separate file like
+# ~/.bash_aliases, instead of adding them here directly.
+# See /usr/share/doc/bash-doc/examples in the bash-doc package.
+
+if [ -f ~/.bash_aliases ]; then
+    . ~/.bash_aliases
+fi
+
+# enable programmable completion features (you don't need to enable
+# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
+# sources /etc/bash.bashrc).
+if ! shopt -oq posix; then
+  if [ -f /usr/share/bash-completion/bash_completion ]; then
+    . /usr/share/bash-completion/bash_completion
+  elif [ -f /etc/bash_completion ]; then
+    . /etc/bash_completion
+  fi
+fi

+ 27 - 0
.profile

@@ -0,0 +1,27 @@
+# ~/.profile: executed by the command interpreter for login shells.
+# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
+# exists.
+# see /usr/share/doc/bash/examples/startup-files for examples.
+# the files are located in the bash-doc package.
+
+# the default umask is set in /etc/profile; for setting the umask
+# for ssh logins, install and configure the libpam-umask package.
+#umask 022
+
+# if running bash
+if [ -n "$BASH_VERSION" ]; then
+    # include .bashrc if it exists
+    if [ -f "$HOME/.bashrc" ]; then
+	. "$HOME/.bashrc"
+    fi
+fi
+
+# set PATH so it includes user's private bin if it exists
+if [ -d "$HOME/bin" ] ; then
+    PATH="$HOME/bin:$PATH"
+fi
+
+# set PATH so it includes user's private bin if it exists
+if [ -d "$HOME/.local/bin" ] ; then
+    PATH="$HOME/.local/bin:$PATH"
+fi

+ 4 - 0
broker.sh

@@ -0,0 +1,4 @@
+./kafkacat -b 172.24.0.30:9092 -L
+./kafkacat -b 172.24.0.31:9093 -L
+./kafkacat -b 172.24.0.32:9094 -L
+

+ 2 - 0
conf/tsi-comm-server-trace.cfg

@@ -0,0 +1,2 @@
+#DUMP=1610121022,...
+DUMP=1610121022

+ 2 - 0
config.yaml

@@ -0,0 +1,2 @@
+rules:
+  - pattern: ".*"

BIN
jmx_prometheus_javaagent-0.20.0.jar


+ 85 - 0
src/main/java/com/tsi/comm/server/config/TraceConfig.java

@@ -0,0 +1,85 @@
+package com.tsi.comm.server.config;
+
+import com.tsi.app.common.utils.StringUtils;
+import com.tsi.comm.server.repository.TsiNodeManager;
+import com.tsi.comm.server.vo.TsiNodeVo;
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+import lombok.Setter;
+import lombok.ToString;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import java.io.FileInputStream;
+import java.util.List;
+import java.util.Properties;
+
+@Slf4j
+@Getter
+@Setter
+@ToString
+@RequiredArgsConstructor
+@Component
+public class TraceConfig {
+
+
+    private Properties getProperties() {
+        String workingDir = System.getProperty("user.dir");
+        try {
+            FileInputStream in = new FileInputStream(workingDir + "/conf/tsi-comm-server-trace.cfg");
+            Properties props = new Properties();
+            props.load(in);
+            in.close();
+            return props;
+        }
+        catch(Exception e) {
+            log.error("{}.getTraceFileInputStream: Exception1: {}", this.getClass().getSimpleName(), e.toString());
+            return null;
+        }
+    }
+
+    private int getIntNo(String intNo) {
+        try {
+            return Integer.parseInt(intNo.trim());
+        }
+        catch (NumberFormatException e) {
+            return -1;
+        }
+    }
+
+
+    private long getNodeId(String nodeId) {
+        try {
+            return Long.parseLong(nodeId.trim());
+        }
+        catch (NumberFormatException e) {
+            return -1;
+        }
+    }
+
+    public void loadTraceInfo() {
+        try {
+            Properties props = getProperties();
+            if (props == null) {
+                return;
+            }
+
+            TsiNodeManager.getInstance().initDump();
+
+            String dumps  = props.getProperty("DUMP",  "").trim();
+            if (!dumps.isEmpty()) {
+                List<String> regionCds = StringUtils.split(dumps, ",");
+                regionCds.forEach(id -> {
+                    TsiNodeVo node = TsiNodeManager.getInstance().get(getNodeId(id.trim()));
+                    if (node != null) {
+                        node.setDump(true);
+                    }
+                });
+            }
+        }
+        catch(Exception e) {
+            log.error("{}.loadDebugInfo: Exception2: {}", this.getClass().getSimpleName(), e.toString());
+        }
+    }
+
+}

+ 7 - 0
src/main/java/com/tsi/comm/server/repository/TsiNodeManager.java

@@ -67,6 +67,13 @@ public class TsiNodeManager {
         }
     }
 
+    public void initDump() {
+        for (Map.Entry<Long, TsiNodeVo> obj : this.tsiNodeVoMap.entrySet()) {
+            TsiNodeVo node = obj.getValue();
+            node.setDump(false);
+        }
+    }
+
     public void reportNodeSessions() {
         log.info("================================================================================================================");
         log.info("Report Node Sessions: {} Nodes.", this.tsiNodeVoMap.size());

+ 11 - 7
src/main/java/com/tsi/comm/server/scheduler/TsiCommScheduler.java

@@ -2,6 +2,7 @@ package com.tsi.comm.server.scheduler;
 
 import com.tsi.app.common.utils.Elapsed;
 import com.tsi.app.common.utils.TimeUtils;
+import com.tsi.comm.server.config.TraceConfig;
 import com.tsi.comm.server.config.TsiCvimServerConfig;
 import com.tsi.comm.server.kafka.KafkaConsumerService;
 import com.tsi.comm.server.kafka.KafkaProducerService;
@@ -11,6 +12,7 @@ import com.tsi.comm.server.repository.TsiNodeManager;
 import com.tsi.comm.server.repository.TsiSessionManager;
 import com.tsi.comm.server.repository.TsiTpmsManager;
 import com.tsi.comm.server.vo.TsiAlarmConfigVo;
+import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.scheduling.annotation.EnableScheduling;
@@ -21,21 +23,16 @@ import javax.annotation.PreDestroy;
 
 @Slf4j
 @EnableScheduling
+@AllArgsConstructor
 @Component
 public class TsiCommScheduler {
 
+    private final TraceConfig trace;
     private final TsiCvimServerConfig config;
     private final TsiDatabaseService tsiDatabaseService;
     private final KafkaProducerService kafkaProducerService;
     private final KafkaConsumerService kafkaConsumerService;
 
-    public TsiCommScheduler(TsiCvimServerConfig config, TsiDatabaseService tsiDatabaseService, KafkaProducerService kafkaProducerService, KafkaConsumerService kafkaConsumerService) {
-        this.config = config;
-        this.tsiDatabaseService = tsiDatabaseService;
-        this.kafkaProducerService = kafkaProducerService;
-        this.kafkaConsumerService = kafkaConsumerService;
-    }
-
     @PreDestroy
     public void onShutDown() {
     }
@@ -93,6 +90,13 @@ public class TsiCommScheduler {
         log.info("{}", String.format("%25s: %s", "staticsForPacketMinute", TimeUtils.elapsedTimeStr(elapsed.nanoSeconds())));
     }
 
+
+    @Async
+    @Scheduled(cron = "0 * * * * *")  // 1분 주기 작업 실행
+    public void loadCommDump() {
+        this.trace.loadTraceInfo();
+    }
+
     @Async
     @Scheduled(cron = "0 0 0 * * *")  // 1일 주기 작업 실행
     public void staticsForPacketDay() {

+ 4 - 0
src/main/java/com/tsi/comm/server/tcp/codec/CvimServerByteBufMessageDecoder.java

@@ -1,6 +1,7 @@
 package com.tsi.comm.server.tcp.codec;
 
 import com.tsi.app.common.app.AppUtils;
+import com.tsi.app.common.utils.SysUtils;
 import com.tsi.app.common.utils.TimeUtils;
 import com.tsi.app.common.xnet.NettyUtils;
 import com.tsi.comm.server.mybatis.vo.AbstractDbmsVo;
@@ -108,6 +109,9 @@ public class CvimServerByteBufMessageDecoder extends MessageToMessageDecoder<Byt
 
             // 패킷 통계정보 생성
             TsiTpmsManager.getInstance().readPacket(packet);
+            if (nodeVo.isDump()) {
+                log.info("RECV: {}, {}", nodeVo.getNodeId(), SysUtils.byteArrayToHex(packet.getBuf()));
+            }
         }
         catch (Exception e) {
             log.error("decode Exception: {}", e.getMessage());

+ 3 - 0
src/main/java/com/tsi/comm/server/vo/TsiNodeVo.java

@@ -45,6 +45,8 @@ public class TsiNodeVo {
     private byte[] rawBytes = new byte[1];
     private byte[] nodePacket = new byte[1];
 
+    private boolean dump;
+
     public TsiNodeVo(long nodeId, boolean sendTest, boolean sendNode, boolean sendCvim) {
         this.nodeId = nodeId;
         this.sendTest = sendTest;
@@ -59,6 +61,7 @@ public class TsiNodeVo {
         this.connectTm = 0;
         this.disconnectTm = 0;
         this.lastCommTm = 0;
+        this.dump = false;
     }
 
     public void initPacket() {

+ 6 - 2
src/main/resources/application.yml

@@ -69,7 +69,9 @@ application:
 
 ---
 spring:
-  profiles: seoul
+  config:
+    activate:
+      on-profile: seoul
   datasource:
     mybatis:
       jdbc-url: jdbc:mariadb://10.4.4.20:3306/cvim_db?characterEncoding=UTF-8&serverTimezone=Asia/Seoul
@@ -86,7 +88,9 @@ application:
 
 ---
 spring:
-  profiles: dev
+  config:
+    activate:
+      on-profile: dev
   datasource:
     mybatis:
       jdbc-url: jdbc:mariadb://61.108.209.105:3306/cvim_db?characterEncoding=UTF-8&serverTimezone=Asia/Seoul

+ 39 - 14
start.sh

@@ -1,18 +1,40 @@
-#!/bin/sh
-
-export SERVICE_HOME=/home/cvim/test
-export SERVICE_NAME=tsi-comm-server
-export SERVICE_VERSION=0.0.1-SNAPSHOT
-export EXE_NAME=$SERVICE_NAME-$SERVICE_VERSION.jar
-export PID_NAME=$SERVICE_NAME.pid
-export SERVICE_PID=$SERVICE_HOME/conf/$PID_NAME
-
-cd $SERVICE_HOME
+#!/bin/sh
+
+ACTIVE_PROFILE=seoul
+#ACTIVE_PROFILE=seoul,mongodb
+SERVICE_HOME=$(dirname $0)
+
+usage() {
+	echo "Usage:" $0 "[comm/data]"
+	echo "RUN tsi-comm-server:" $0 "comm"
+	echo "RUN tsi-data-broker:" $0 "data"
+	exit
+}
+
+case $1 in
+  comm)
+    SERVICE_NAME=tsi-comm-server
+    SERVICE_VERSION=0.0.1
+    ;;
+  data)
+    SERVICE_NAME=tsi-data-broker
+    SERVICE_VERSION=0.0.1
+    ;;
+  *)
+    usage
+    ;;
+esac
+
+
+EXE_NAME=$SERVICE_NAME-$SERVICE_VERSION.jar
+PID_NAME=$SERVICE_NAME.pid
+SERVICE_PID=$SERVICE_HOME/conf/$PID_NAME
 
 export JAVA_OPT="-server"
-export JAVA_OPT="$JAVA_OPT -Xms4096m -Xmx4096m"
-export JAVA_OPT="$JAVA_OPT -Xlog:gc*:file=logs/gc.log"
-export CONFIG_OPT="--spring.config.location=conf//application.yml"
+#export JAVA_OPT="$JAVA_OPT -Xms4096m -Xmx4096m"
+export JAVA_OPT="$JAVA_OPT -Xlog:gc*:file=logs/${SERVICE_NAME}/${SERVICE_NAME}.gc.log"
+export CONFIG_OPT="-Dspring.profiles.active=${ACTIVE_PROFILE}"
+#export CONFIG_OPT="--spring.config.location=conf//$SERVICE_NAME.yml"
 
 if [ ! -z "$SERVICE_PID" ]; then
   if [ -f "$SERVICE_PID" ]; then
@@ -21,7 +43,9 @@ if [ ! -z "$SERVICE_PID" ]; then
   fi
 fi
 
-nohup java $JAVA_OPT -jar ./$EXE_NAME $CONFIG_OPT 1> /dev/null 2>&1 &
+#nohup java $JAVA_OPT -jar ./$EXE_NAME $CONFIG_OPT 1> /dev/null 2>&1 &
+#java $JAVA_OPT -jar ./$EXE_NAME $CONFIG_OPT &
+java $JAVA_OPT -javaagent:./jmx_prometheus_javaagent-0.20.0.jar=12345:config.yaml -jar $CONFIG_OPT ./$EXE_NAME &
 
 echo "$SERVICE_NAME is started...."
 
@@ -32,3 +56,4 @@ ps -eaf | grep $SERVICE_NAME | grep -v grep |wc -l
 sleep 1
 
 ps -eaf | grep $SERVICE_NAME | grep -v grep
+

+ 4 - 11
stat.sh

@@ -1,16 +1,9 @@
-#!/bin/sh
+#!/bin/sh
 
-export SERVICE_HOME=/home/cvim/test
-export SERVICE_NAME=tsi-comm-server
-export SERVICE_VERSION=0.0.1-SNAPSHOT
-export EXE_NAME=$SERVICE_NAME-$SERVICE_VERSION.jar
-export PID_NAME=$SERVICE_NAME.pid
-export SERVICE_PID=$SERVICE_HOME/conf/$PID_NAME
+export SERVICE_NAME=tsi-
 
-cd $SERVICE_HOME
-
-ps -eaf | grep $SERVICE_NAME | grep -v grep |wc -l
+ps -eaf | grep $SERVICE_NAME | grep -v grep | grep -v tail | grep -v kafka | grep java | wc -l
 
 sleep 1
 
-ps -eaf | grep $SERVICE_NAME | grep -v grep
+ps -eaf | grep $SERVICE_NAME | grep -v grep | grep -v tail | grep -v kafka | grep java

+ 27 - 8
stop.sh

@@ -1,13 +1,32 @@
-#!/bin/sh
+#!/bin/sh
 
-export SERVICE_HOME=/home/cvim/test
-export SERVICE_NAME=tsi-comm-server
-export SERVICE_VERSION=0.0.1-SNAPSHOT
-export EXE_NAME=$SERVICE_NAME-$SERVICE_VERSION.jar
-export PID_NAME=$SERVICE_NAME.pid
-export SERVICE_PID=$SERVICE_HOME/conf/$PID_NAME
+SERVICE_HOME=$(dirname $0)
 
-cd $SERVICE_HOME
+usage() {
+        echo "Usage:" $0 "[comm/data]"
+        echo "STOP tsi-comm-server:" $0 "comm"
+        echo "STOP tsi-data-broker:" $0 "data"
+        exit
+}
+
+case $1 in
+  comm)
+    SERVICE_NAME=tsi-comm-server
+    SERVICE_VERSION=0.0.1
+    ;;
+  data)
+    SERVICE_NAME=tsi-data-broker
+    SERVICE_VERSION=0.0.1
+    ;;
+  *)
+    usage
+    ;;
+esac
+
+
+EXE_NAME=$SERVICE_NAME-$SERVICE_VERSION.jar
+PID_NAME=$SERVICE_NAME.pid
+SERVICE_PID=$SERVICE_HOME/conf/$PID_NAME
 
 if [ ! -z "$SERVICE_PID" ]; then
   if [ -f "$SERVICE_PID" ]; then

+ 104 - 0
tsi-agent.sh

@@ -0,0 +1,104 @@
+#!/bin/bash
+
+SSIP_API_URI="http://10.4.4.40:8444/api/system-status"
+SSIP_API_TIMEOUT=3
+HEADER_CONTEXT_TYPE="Content-Type: application/json"
+
+# Check hostname
+name=$HOSTNAME
+echo -e "Hostname:" $name
+
+# Check OS Type
+otype=$(uname -o)
+echo -e "Operating System Type:" $otype
+
+# Check OS Release Version and Name
+oname=`cat /etc/os-release | grep 'NAME' | grep -v 'PRETTY_NAME' | grep -v 'CODENAME' | cut -f2 -d\"`
+over=`cat /etc/os-release | grep 'VERSION' | grep -v '_' | cut -f2 -d\"`
+echo "OS Name:" $oname
+echo "OS Version:" $over
+
+# Check Architecture
+oarch=$(uname -m)
+echo "Architecture:" $oarch
+
+# Check Kernel Release
+kernel=$(uname -r)
+echo "Kernel Release:" $kernel
+
+# Check Internal IP
+iip=$(hostname -I)
+echo "Internal IP:" $iip
+
+# Check Internal IP
+#eip=$(dig +short myip.opendns.com @resolver1.opendns.com)
+eip=1.1.1.1
+echo "External IP:" $eip
+
+run_monitoring() {
+    totalmem=`free -m | grep ^Mem | awk '{print $2}'`
+    usedmem=`free -m | grep ^Mem | awk '{print $3}'`
+    freemem=`free -m | grep ^Mem | awk '{print $4}'`
+    cachemem=`free -m | grep ^Mem | awk '{print $6}'`
+    availablemem=`free -m | grep ^Mem | awk '{print $7}'`
+
+    swapmem=`free -m | grep ^Swap | awk '{print $2}'`
+    usedswap=`free -m | grep ^Swap | awk '{print $3}'`
+
+    cpucnt=`cat /proc/cpuinfo | grep 'processor' | wc -l`
+    uptimes=`uptime -s`
+
+    echo "cpuCnt:" ${cpucnt}
+
+    #usecpurate=`top -b -n 1 | grep Cpu | awk '{print $8}' | tr -d "%id," | awk '{print 100-$1}'`
+    usecpurate=`mpstat 1 1 | tail -1 | awk '{print 100-$NF}'`
+    echo "useCpuRate:" ${usecpurate}
+    tasks=`ps aux | grep -v ps | wc -l`
+    threads=200
+
+    #loadavg=`uptime | awk '{print $10}' | cut -f 1 -d ','`
+    loadavg=`cat /proc/loadavg | awk '{print $1}'`
+    echo "loadAvg:" ${loadavg}
+    
+    #DISK 사용율
+    totaldisk=`df -P | grep -v ^Filesystem | awk '{sum += $2} END { print sum; }'`
+    useddisk=`df -P | grep -v ^Filesystem | awk '{sum += $3} END { print sum; }'`
+    useddiskrate=$((100*$useddisk/$totaldisk))
+    echo DISK: $(($totaldisk/1024/1024)) GB, Used DISK: $(($useddisk/1024/1024)) GB, Rate: $useddiskrate %
+
+    # Call System Status Save REST API
+    PAYLOAD='{"hostName"      : "'${name}'", 
+              "osType"        : "'${otype}'", 
+              "osName"        : "'${oname}'", 
+              "osVersion"     : "'${over}'", 
+              "osArch"        : "'${oarch}'", 
+              "kernelRelease" : "'${kernel}'", 
+              "internalIp"    : "'${iip}'", 
+              "externalIp"    : "'${eip}'",
+              "totalMem"      : "'${totalmem}'",
+              "swapMem"       : "'${swapmem}'",
+              "totalDisk"     : "'${totaldisk}'",
+              "cpuCnt"        : "'${cpucnt}'",
+              "upTimes"       : "'${uptimes}'",
+              "usedDisk"      : "'${useddisk}'",
+              "usedMem"       : "'${usedmem}'",
+              "freeMem"       : "'${freemem}'",
+              "cacheMem"      : "'${cachemem}'",
+              "availableMem"  : "'${availablemem}'",
+              "usedSwap"      : "'${usedswap}'",
+              "tasks"         : "'${tasks}'",
+              "threads"       : "'${threads}'",
+              "useCpuRate"    : "'${usecpurate}'",
+              "loadAvg"       : "'${loadavg}'"
+	    }'
+
+    api_result=$(curl -d "${PAYLOAD}" -X POST $SSIP_API_URI -H "$HEADER_CONTEXT_TYPE" --connect-timeout $SSIP_API_TIMEOUT)
+
+    # Result
+    echo ""
+    echo ${api_result}
+    echo ""
+}
+
+run_monitoring
+

BIN
tsi-comm-server-20240830-0.0.1.jar