mirror of
				https://github.com/Telecominfraproject/wlan-lanforge-scripts.git
				synced 2025-10-31 02:38:03 +00:00 
			
		
		
		
	script compares the endpoints of a voip call and points out disparity
This commit is contained in:
		
							
								
								
									
										163
									
								
								track_call.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										163
									
								
								track_call.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,163 @@ | |||||||
|  | #!/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 | ||||||
		Reference in New Issue
	
	Block a user
	 Jed Reynolds
					Jed Reynolds