You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
1.7 KiB
68 lines
1.7 KiB
#!/bin/bash
|
|
|
|
set -e
|
|
|
|
REMOVE=false
|
|
|
|
function usage() {
|
|
printf "%s [options]\n" "$(basename "$0")"
|
|
printf "\toptions\n"
|
|
printf "\t-h this help\n"
|
|
printf "\t-r remove unknown callids from redis properly\n"
|
|
}
|
|
|
|
while getopts "rh" opt; do
|
|
case $opt in
|
|
h) usage; exit 0;;
|
|
r) REMOVE=true;;
|
|
\?) usage; exit 1;;
|
|
esac
|
|
done
|
|
shift $((OPTIND-1))
|
|
|
|
if [[ $# -ne 0 ]] ; then
|
|
usage
|
|
exit 2
|
|
fi
|
|
|
|
if ! ngcp-check-active -q ; then
|
|
echo "node is not active, abort" >&2
|
|
exit 3
|
|
fi
|
|
|
|
# read kamailio.proxy.dlgcnt.pair_redis_db
|
|
REDIS_DB="$(ngcp-dlgcnt-clean -c fake 2>/dev/null|| echo 4)"
|
|
host="$(ngcp-dlgcnt-clean -C fake 2>/dev/null|| echo localhost)"
|
|
|
|
# redis full list
|
|
REDIS_CALLIDS=$(mktemp)
|
|
ngcp-redis-helper -h "$host" -n "$REDIS_DB" dumps | grep -E -v "^$" > "$REDIS_CALLIDS" || true
|
|
|
|
# kamailio full dialogs (no ngcp-kamcmd because in fails in case of large output)
|
|
KAMAILIO_DIALOGS=$(mktemp)
|
|
ngcp-kamctl proxy fifo dlg.list | awk '/"call-id":/ { print $NF}' > "$KAMAILIO_DIALOGS" || true
|
|
|
|
# 'lists:' belongs to dlglist
|
|
REDIS_CALLIDS_FILTER=$(mktemp)
|
|
grep -E -v '^\s+"list:' "$REDIS_CALLIDS" > "$REDIS_CALLIDS_FILTER" || true
|
|
|
|
while read -r i ; do
|
|
if [[ "$i" == '[' || "$i" == ']' || "$i" == "Database is empty" ]]; then
|
|
continue
|
|
fi
|
|
# remove from the existing string any comma or quote that could come from a json formatting
|
|
id=$(echo "$i" | tr -d ',\"')
|
|
if ! grep -q -- "$id" "$KAMAILIO_DIALOGS"
|
|
then
|
|
printf "CallID:[%s] unknown\n" "$id"
|
|
if $REMOVE ; then
|
|
ngcp-dlgcnt-clean "--" "$id" || true
|
|
if grep -q "list:$id" "$REDIS_CALLIDS" ; then
|
|
ngcp-dlglist-clean "--" "$id" || true
|
|
fi
|
|
fi
|
|
fi
|
|
done < "$REDIS_CALLIDS_FILTER"
|
|
|
|
rm -f "$KAMAILIO_DIALOGS" "$REDIS_CALLIDS" "$REDIS_CALLIDS_FILTER"
|