mirror of
https://github.com/Telecominfraproject/wlan-lanforge-scripts.git
synced 2025-10-28 17:32:35 +00:00
164 lines
4.6 KiB
Bash
Executable File
164 lines
4.6 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
#------------------------------------------------------------
|
|
# Use this script to track traffic on a voip call
|
|
#------------------------------------------------------------
|
|
|
|
function usage() {
|
|
echo "$0 {manager} {resource} {CX name} {poll time}"
|
|
echo " Use poll time 0 to run just once"
|
|
echo " Poll time is an argument to sleep(1)"
|
|
}
|
|
|
|
RtpPktsTx="RTP Pkts Tx"
|
|
RtpPktsRx="RTP Pkts Rx"
|
|
# pass this the file name
|
|
function study_call() {
|
|
[ ! -r "$1" ] && echo "Unable to find Endpoint record: $1" && exit 1
|
|
local call_state="unknown"
|
|
local actual_state="unknown"
|
|
local running_for=0
|
|
local idx=0
|
|
local line
|
|
if [[ $endp = *-B ]]; then
|
|
idx=1
|
|
fi
|
|
|
|
while IFS= read -r line ; do
|
|
local chunks
|
|
local shunks=($line)
|
|
IFS=: read -r -a chunks <<< "$line"
|
|
#for h in "${hunks[@]}"; do
|
|
# echo -n "$h,"
|
|
#done
|
|
#echo ""
|
|
local lasthunk="${line:63}"
|
|
local lr=($lasthunk)
|
|
local fields=($(echo "${line:34:+12}") "${lr[0]}" "${lr[1]}")
|
|
|
|
first=`echo ${chunks[0]}`;
|
|
#echo "first[$first]"
|
|
case $first in
|
|
RegisterState)
|
|
call_state=${shunks[3]}
|
|
#echo "call_state ${call_state}"
|
|
;;
|
|
RptTimer)
|
|
running_for=${shunks[3]}
|
|
running_for=${running_for:0:-1} # chop 's' off
|
|
#echo "running_for ${running_for}"
|
|
;;
|
|
CallsAttempted)
|
|
results_attempted[$endp]=${fields[0]}
|
|
#echo "$endp attempted: ${fields[0]}"
|
|
;;
|
|
CallsCompleted)
|
|
results_completed[$endp]=${fields[0]}
|
|
#echo "$endp completed: ${fields[0]}"
|
|
;;
|
|
$RtpPktsTx)
|
|
#echo "Tx $line"
|
|
#echo "[${fields[0]}][${fields[1]}][${fields[2]}]"
|
|
results_tx[$endp]=${fields[0]}
|
|
;;
|
|
$RtpPktsRx)
|
|
#echo "Rx $line"
|
|
#echo "[${fields[0]}][${fields[1]}][${fields[2]}]"
|
|
results_rx[$endp]=${fields[0]}
|
|
;;
|
|
esac
|
|
done < "$1"
|
|
|
|
if [[ $call_state = ON_HOOK ]]; then
|
|
actual_state=$call_state
|
|
elif [[ $running_for -gt 65535 ]]; then
|
|
actual_state="ON_HOOK"
|
|
elif [[ $running_for -le 65535 ]]; then
|
|
actual_state=$call_state
|
|
fi
|
|
# echo "$endp $actual_state Tx ${results_tx[$endp]} Rx ${results_rx[$endp]}"
|
|
}
|
|
|
|
[ -z "$1" ] && usage && exit 1
|
|
[ -z "$2" ] && usage && exit 1
|
|
[ -z "$3" ] && usage && exit 1
|
|
[ -z "$4" ] && usage && exit 1
|
|
|
|
|
|
cd /home/lanforge/scripts
|
|
q="--quiet yes"
|
|
m="--mgr $1"
|
|
r="--resource $2"
|
|
|
|
fire=$( echo ./lf_firemod.pl $m $q $r )
|
|
# find endpoint name
|
|
$fire --action list_endp > /tmp/list_endp.$$
|
|
|
|
# example:
|
|
# ./lf_firemod.pl --mgr idtest --quiet yes --action list_endp | grep VoipEndp \
|
|
# | while read -r line ; do hunks=($line); echo "${hunks[1]}"; done
|
|
# [v3v2-30000-B]
|
|
# [v3v2-30000-A]
|
|
|
|
declare -A results_tx
|
|
declare -A results_rx
|
|
declare -A results_attempted
|
|
declare -A results_completed
|
|
|
|
declare -A cx_names=()
|
|
voip_endp_names=()
|
|
while IFS= read -r line ; do
|
|
jhunks=($line)
|
|
[[ "${jhunks[0]}" != "VoipEndp" ]] && continue
|
|
name=${jhunks[1]:1:-1} # that trims the brackets
|
|
[[ $name != ${3}-* ]] && continue
|
|
voip_endp_names+=($name)
|
|
cx_n="${name%-[AB]}"
|
|
#echo "CX_N: $cx_n"
|
|
[[ -z "${cx_names[$cx_n]+unset}" ]] && cx_names+=(["$cx_n"]=1)
|
|
done < /tmp/list_endp.$$
|
|
#echo "Matching voip endpoints: ${voip_endp_names[@]}"
|
|
|
|
while true; do
|
|
for endp in "${voip_endp_names[@]}"; do
|
|
$fire --action show_endp --endp_name $endp > /tmp/endp_$$
|
|
if [ -z "${results_tx[$endp]+unset}" ]; then
|
|
results_tx[$endp]="0"
|
|
fi
|
|
if [ -z "${results_rx[$endp]+unset}" ]; then
|
|
results_rx[$endp]="0"
|
|
fi
|
|
if [ -z "${results_attempted[$endp]+unset}" ]; then
|
|
results_attempted[$endp]="0"
|
|
fi
|
|
if [ -z "${results_completed[$endp]+unset}" ]; then
|
|
results_completed[$endp]="0"
|
|
fi
|
|
|
|
study_call /tmp/endp_$$
|
|
rm /tmp/endp_$$
|
|
done
|
|
for cx in "${!cx_names[@]}"; do
|
|
enda="${cx}-A"
|
|
endb="${cx}-B"
|
|
|
|
if [[ ${results_attempted[$enda]} -gt 1 ]] ; then
|
|
if [[ ${results_completed[$endb]} < $(( ${results_attempted[$enda]} -1 )) ]]; then
|
|
echo -n " fewer calls recieved: "
|
|
echo " attempted ${results_attempted[$enda]} completed ${results_completed[$endb]}"
|
|
fi
|
|
fi
|
|
if [[ ${results_tx[$enda]} -gt 1 ]] ; then
|
|
if [[ ${results_rx[$endb]} < $(( ${results_tx[$enda]} / 2 )) ]]; then
|
|
echo -n " fewer packets recieved: "
|
|
echo " tx ${results_tx[$enda]} rx ${results_rx[$endb]}"
|
|
fi
|
|
fi
|
|
done
|
|
sleep "$4"
|
|
[ $4 -eq 0 ] && exit
|
|
done
|
|
|
|
|
|
# eof
|