Add hangup_channels script
This commit is contained in:
parent
1017b27c1c
commit
efc1e8a4e7
1 changed files with 91 additions and 0 deletions
91
hangup_channels
Executable file
91
hangup_channels
Executable file
|
@ -0,0 +1,91 @@
|
|||
#!/bin/bash
|
||||
# Hangup channels whose duration exceeds a timeout
|
||||
# It's also possible to handle only a specific peer's channels
|
||||
|
||||
VERBOSE=0
|
||||
DEBUG=0
|
||||
PEER=""
|
||||
HANGUP_TIMEOUT=""
|
||||
|
||||
function usage() {
|
||||
[ -n "$1" ] && echo "$1" && echo
|
||||
echo "Usage : $0 [-cX] [-wX] [-d] [peer]"
|
||||
echo " -h Show this help message"
|
||||
echo " -v Enable verbose mode"
|
||||
echo " -d Enable debug mode"
|
||||
echo " -t[X] Specify hangup timeout (in s)"
|
||||
echo " [peer] Specify the peer name"
|
||||
}
|
||||
|
||||
function log() {
|
||||
case "$1" in
|
||||
INFO)
|
||||
[ $VERBOSE -ne 1 -a $DEBUG -ne 1 ] && return
|
||||
;;
|
||||
DEBUG)
|
||||
[ $DEBUG -ne 1 ] && return
|
||||
;;
|
||||
esac
|
||||
echo -e "$( date "+%Y/%m/%d %H:%M:%S" ) - $2"
|
||||
}
|
||||
|
||||
# Parse arguments
|
||||
for arg in $@
|
||||
do
|
||||
if [ $( echo $arg|egrep -c '^-[tvdh][0-9]*$' ) -gt 0 ]
|
||||
then
|
||||
a=$( echo $arg|sed 's/^-\([tvdh]\).*$/\1/' )
|
||||
v=$( echo $arg|sed 's/^-[tvdh]//' )
|
||||
case $a in
|
||||
t)
|
||||
HANGUP_TIMEOUT=$v
|
||||
;;
|
||||
v)
|
||||
VERBOSE=1
|
||||
;;
|
||||
d)
|
||||
DEBUG=1
|
||||
;;
|
||||
h)
|
||||
usage
|
||||
exit 0;
|
||||
;;
|
||||
esac
|
||||
elif [ -z "$PEER" ]
|
||||
then
|
||||
PEER="$arg"
|
||||
else
|
||||
echo "Only one peer can be specified (or invalid '$arg' parameter)"
|
||||
fi
|
||||
done
|
||||
|
||||
[ -z "$HANGUP_TIMEOUT" ] && usage "You must specify the hangup timeout using -t parameter." && exit 1
|
||||
|
||||
if [ -n "$PEER" ]
|
||||
then
|
||||
log DEBUG "Specified peer name : $PEER"
|
||||
CHANNELS=$( asterisk -rx 'core show channels concise'|grep -E "^$PEER-[0-9a-f]+!" )
|
||||
log DEBUG "Channels :\n$CHANNELS"
|
||||
[ -z "$CHANNELS" ] && log INFO "No current channels found for this peer" && exit 0
|
||||
else
|
||||
CHANNELS=$( asterisk -rx 'core show channels concise' )
|
||||
log DEBUG "Channels :\n$CHANNELS"
|
||||
[ -z "$CHANNELS" ] && log INFO "No current channels found" && exit 0
|
||||
fi
|
||||
|
||||
total=0
|
||||
count=0
|
||||
IFS="
|
||||
"
|
||||
for line in $CHANNELS
|
||||
do
|
||||
let total=total+1
|
||||
chan=$( echo "$line"|cut -d'!' -f 1 )
|
||||
duration=$( echo "$line"|cut -d'!' -f 12 )
|
||||
log DEBUG "Channel '$chan' duration : ${duration}s"
|
||||
[ $duration -le $HANGUP_TIMEOUT ] && log DEBUG "This channel duration do not exceed the timeout." && continue
|
||||
log INFO "Channel '$chan' duration is ${duration}s : hangup this channel"
|
||||
asterisk -rx "hangup request $chan"
|
||||
let count=count+1
|
||||
done
|
||||
log INFO "$count/$total channels hangup"
|
Loading…
Reference in a new issue