#!/bin/sh
echo "Content-type: text/html\n"
if [ -z "$DODBG" ]; then
DODBG="false"
fi
export DODBG
myprogname=`basename "$0"`
mytitle="Extracting Cisco Call Manager CDR Calls from Telmax21"
echo ""
echo "
"
echo "$mytitle"
echo ""
echo ""
echo "$myprogname
"
echo "$mytitle...
"
# set environment variables.
. /u/catcom/catcom_vars
#################################################################
lastdayinmonth() # Returns the last day in month, Inputs: $1=mm $2=yyyy
{
cal $1 $2 | awk '{ if ( NF > 0 ) x=$NF } END { print x }'
}
###################################
# handle params
# stdin post
if [ "$REQUEST_METHOD" = "POST" ]; then
cmd=`echo "$stdinput" | awk -f wbt_splitqstr.awk`
$DODBG && echo "cmd=[$cmd]
" >>"$dbgfile"
for cmdtok in `echo "$cmd"`
do
$DODBG && echo "cmdtok=[$cmdtok]
" >>"$dbgfile"
fixcmdtok=`echo "$cmdtok" | ./wbt_fixqstr`
$DODBG && echo "fixcmdtok=[$fixcmdtok]
" >>"$dbgfile"
eval "$fixcmdtok"
done
$DODBG && echo "
" >>"$dbgfile"
fi
# process query string
if [ ! -z "$QUERY_STRING" ]; then
$DODBG && echo "QUERY_STRING=[$QUERY_STRING]
" >>"$dbgfile"
qstr=`echo "$QUERY_STRING" | awk -f wbt_splitqstr.awk`
$DODBG && echo "qstr=[$qstr]
" >>"$dbgfile"
for qtok in `echo "$qstr"`
do
$DODBG && echo "qtok=[$qtok]
" >>"$dbgfile"
#echo "qtok=[$qtok]" >>/tmp/1
fixqtok=`echo "$qtok" | ./wbt_fixqstr`
$DODBG && echo "fixqtok=[$fixqtok]
" >>"$dbgfile"
#echo "fixqtok=[$fixqtok]" >>/tmp/1
eval $fixqtok
done
$DODBG && echo "
" >>"$dbgfile"
fi
# handle cookies
if [ ! -z "$HTTP_COOKIE" ]; then
cookie=`echo "$HTTP_COOKIE" | awk -f wbt_splitqstr.awk`
$DODBG && echo "cookie=[$cookie]
" >>"$dbgfile"
for cookietok in `echo "$cookie"`
do
$DODBG && echo "cookietok=[$cookietok]
" >>"$dbgfile"
fixcookietok=`echo "$cookietok" | ./wbt_fixqstr`
fixcookietok="conf_$fixcookietok"
$DODBG && echo "fixcookietok=[$fixcookietok]
" >>"$dbgfile"
eval $fixcookietok
done
$DODBG && echo "
" >>"$dbgfile"
fi
###################################
# get lock
#LOCKFILE="/tmp/t21websql.lok"
#while true
#do
# if [ ! -f "$LOCKFILE" ]; then
# break;
# fi
# sleep 2
#done
#touch $LOCKFILE
###################################
TMP="/tmp"
#TMP="//u/catcom/wb/tmp"
tmpfile="${TMP}/ccmcalls2_$$"
tmp1file="${TMP}/ccmcalls2_1_$$"
rm -f "$tmpfile"
rm -f "$tmp1file"
################################################
# params from QUERYSTRINg
#SDATE=$1; EDATE=$2; STIME=$3; ETIME=$4
#CALLEDPARTY
#ORIGDEVEXCLUDE
#DESTDEVICELOOKUPCSVFILE
# if MONTH set use to set SDATE / EDATE
if [ -n "$MONTH" ]; then
mm=`echo $MONTH | sed -e 's/\/....$//g'`
yyyy=`echo $MONTH | sed -e 's/^..\///g'`
ldd=`lastdayinmonth $mm $yyyy`
SDATE="01/$mm/$yyyy"
EDATE="$ldd/$mm/$yyyy"
$DODBG && echo "MONTH=[$MONTH] ldd=[$ldd] SDATE=[$SDATE] EDATE=[$EDATE]
"
fi
###############################
## Testing
#SDATE="01/09/2013"
##SDATE="30/09/2013"
###SDATE="01/10/2013"
#STIME="00:00"
##
#EDATE="02/09/2013"
##EDATE="30/09/2013"
##EDATE="02/10/2013"
###EDATE="31/10/2013"
#ETIME="24:00"
#
##CALLEDPARTY="ALL"
#CALLEDPARTY="4163"
#
##ORIGDEVEXCLUDE="NONE"
#ORIGDEVEXCLUDE="^ARC.*"
#
#DESTDEVICELOOKUPCSVFILE="SharedExtensions.csv"
#
#HEADER="0"
#DATESEP="/"
###############################
if [ -z "$SDATE" -o -z "$EDATE" ]; then
echo "You Must set either MONTH (MMM_yyyy) or SDATE and EDATE (dd/mm/yyyy)"
echo "
"
exit 1
fi
if [ -z "$STIME" ]; then
STIME="00:00"
fi
if [ -z "$ETIME" ]; then
ETIME="24:00"
fi
if [ -z "$CALLEDPARTY" ]; then
CALLEDPARTY="ALL"
fi
#if [ -z "$SITEID" ]; then
# SITEID="ALL"
#fi
if [ -z "$CALLEDPARTY" ]; then
CALLEDPARTY="ALL"
fi
if [ -z "$ORIGDEVEXCLUDE" ]; then
ORIGDEVEXCLUDE="^ARC.*"
fi
if [ "$ORIGDEVEXCLUDE" = "NONE" ]; then
ORIGDEVEXCLUDE=""
fi
if [ -z "$DESTDEVICELOOKUPCSVFILE" ]; then
DESTDEVICELOOKUPCSVFILE="SharedExtensions.csv"
fi
if [ "$DESTDEVICELOOKUPCSVFILE" = "NONE" ]; then
DESTDEVICELOOKUPCSVFILE=""
fi
if [ -n "$DESTDEVICELOOKUPCSVFILE" -a -z "FULLDESTDEVICELOOKUPCSVFILE" ]; then
FULLDESTDEVICELOOKUPCSVFILE="$HOME/system/batch/$DESTDEVICELOOKUPCSVFILE"
else
FULLDESTDEVICELOOKUPCSVFILE=""
fi
if [ "$FULLDESTDEVICELOOKUPCSVFILE" = "NONE" ]; then
FULLDESTDEVICELOOKUPCSVFILE=""
fi
if [ -z "$HEADER" ]; then
HEADER="1"
fi
if [ -z "$DATESEP" ]; then
DATESEP="/"
fi
##################################################################
if [ -n "$MONTH" ]; then
echo "MONTH=[$MONTH] "
fi
echo "SDATE=[$SDATE] EDATE=[$EDATE]
"
echo "STIME=[$STIME] ETIME=[$ETIME]
"
echo "SITEID=[$SITEID]
"
echo "CALLEDPARTY=[$CALLEDPARTY]
"
echo "ORIGDEVEXCLUDE=[$ORIGDEVEXCLUDE]
"
echo "FULLDESTDEVICELOOKUPCSVFILE=[$FULLDESTDEVICELOOKUPCSVFILE]
"
echo "HEADER=[$HEADER]
"
echo "DATESEP=[$DATESEP]
"
echo "
"
########################################################################
# from ccmcalls2t21batch
# output to csv delim in tmp1file
# T21BATCHVAR1DESC Called Party (or ALL)
# T21BATCHVAR1VALU 4163
# T21BATCHVAR2DESC origDeviceName Filter (exclude regex match)
# T21BATCHVAR2VALU ^ARC.*
# T21BATCHVAR3DESC Shared Extensions deviceName to Extension lookup csv file
# T21BATCHVAR3VALU SharedExtensions.csv
########################################################################
monthname() # Returns the month name, Inputs: $1=mm
{
awk -v "mm=$1" 'BEGIN {
monthnamearr[1] = "Jan"
monthnamearr[2] = "Feb"
monthnamearr[3] = "Mar"
monthnamearr[4] = "Apr"
monthnamearr[5] = "May"
monthnamearr[6] = "Jun"
monthnamearr[7] = "Jul"
monthnamearr[8] = "Aug"
monthnamearr[9] = "Sep"
monthnamearr[10] = "Oct"
monthnamearr[11] = "Nov"
monthnamearr[12] = "Dec"
print monthnamearr[mm + 0]
exit 0
}'
}
#################################################################
# MAIN
# log output
#exec 1>$tmpfile 2>&1
########################################################################
#sdd=`echo $SDATE | sed -e 's/\/..\/....$//g'`
#smm=`echo $SDATE | sed -e 's/^..\///g;s/\/....$//g'`
#syyyy=`echo $SDATE | sed -e 's/^..\/..\///g'`
#syy=`echo $SDATE | sed -e 's/^..\/..\/..//g'`
sdd=`echo $SDATE | sed -e 's/[\/\-]..[\/\-]....$//g'`
smm=`echo $SDATE | sed -e 's/^..[\/\-]//g;s/[\/\-]....$//g'`
syyyy=`echo $SDATE | sed -e 's/^..[\/\-]..[\/\-]//g'`
syy=`echo $SDATE | sed -e 's/^..[\/\-]..[\/\-]..//g'`
#
sHH=`echo $STIME | sed -e 's/:..$//g'`
sMM=`echo $STIME | sed -e 's/^..://g;`
sSS="00"
if [ "$STIME" = "24:00" ]; then
sHH="23"
sMM="59"
sSS="59"
fi
#edd=`echo $EDATE | sed -e 's/\/..\/....$//g'`
#emm=`echo $EDATE | sed -e 's/^..\///g;s/\/....$//g'`
#eyyyy=`echo $EDATE | sed -e 's/^..\/..\///g'`
#eyy=`echo $EDATE | sed -e 's/^..\/..\/..//g'`
edd=`echo $EDATE | sed -e 's/[\/\-]..[\/\-]....$//g'`
emm=`echo $EDATE | sed -e 's/^..[\/\-]//g;s/[\/\-]....$//g'`
eyyyy=`echo $EDATE | sed -e 's/^..[\/\-]..[\/\-]//g'`
eyy=`echo $EDATE | sed -e 's/^..[\/\-]..[\/\-]..//g'`
#
eHH=`echo $ETIME | sed -e 's/:..$//g'`
eMM=`echo $ETIME | sed -e 's/^..//g;`
eSS="00"
if [ "$ETIME" = "24:00" ]; then
eHH="23"
eMM="59"
eSS="59"
fi
# set month and year to be used in filename
MMM_YYYY="`monthname ${smm}`_${syyyy}"
#OUTFILETAG="ccmcalls2_${sdd}${smm}${syyyy}_to_${edd}${emm}${eyyyy}_"
##OUTFILETAG="ccmcalls2_${MMM_YYYY}_"
#echo "OUTFILETAG=[$OUTFILETAG]
"
#----------------------------------------------------
prodname="proc_ccm"
nodename="CM8A"
parentsiteid=103
lastpolldate="${sdd}${smm}${syy}${sHH}${sMM}${sSS}"
newdate="${edd}${emm}${eyy}${eHH}${eMM}${eSS}"
lastpollblock=0
ccmenvfile="/u/catcom/.ccmenv.${nodename}"
export ccmenvfile
ccmrawoutfile="${TMP}/$$_ccmcalls2_${nodename}.raw"
rm -f "$ccmrawoutfile"
export ccmrawoutfile
ccmlogfile="${TMP}/$$_ccmcalls2_${nodename}.log"
rm -f "$ccmlogfile"
export ccmlogfile
# set logging level 0..9
ccmloglevel="0"
export ccmloglevel
dontprocessccmcdr="1"
export dontprocessccmcdr
CCMGETDEBUG="0"
export CCMGETDEBUG
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# taken from standard Cisco Call Manager doccm module....
proc_ccm()
{
funcname="proc_ccm"
# (called from scl binary)
prodname="$1"
nodename="$2"
parentsiteid="$3"
lastpolldate="$4"
newdate="$5"
lastpollblock="$6"
#clupolllogfile="$7"
export prodname nodename parentsiteid lastpolldate newdate lastpollblock
#tmpccmrawout="${TMP}/ccmtmpraw_${nodename}_$$"
tmpccmrawout="$ccmrawoutfile"
trap proc_ccm_myexit 1 2 3 15
proc_ccm_myexit()
{
echo "proc_ccm: proc_ccm_myexit() catpid=$catpid tmpccmrawout=$tmpccmrawout"
if [ -n "$catpid" ]; then
kill $catpid >/dev/null 2>&1
fi
rm -f "$tmpccmrawout"
}
# source environment file for each Callmanager system
if [ -z "$ccmenvfile" ]; then
ccmenvfile="$CATPATH/.ccmenv.$nodename"
fi
if [ -f "$ccmenvfile" ]; then
. $ccmenvfile >${TMP}/srcccmenv$$ 2>&1
fi
if [ -z "$ccmlogfile" ]; then
ccmlogfile="ccmlogfile.log"
fi
export ccmlogfile
# default to CallManager Ver 4 CDR
if [ -z "$CCMCDRVER" ]; then
CCMCDRVER="4"
fi
export CCMCDRVER
# default to MS SQLServer based CallManager
if [ -z "$CCMCDRSQLSERVER" ]; then
CCMCDRSQLSERVER="1"
fi
export CCMCDRSQLSERVER
if [ -z "$CCMCDRDELIM" ]; then
CCMCDRDELIM="|"
fi
export CCMCDRDELIM
echo "$funcname: [$funcname]"
echo "$funcname: ccmenvfile=$ccmenvfile"
echo "$funcname: nodename=$nodename"
echo "$funcname: parentsiteid=$parentsiteid"
echo "$funcname: lastpolldate=$lastpolldate"
echo "$funcname: newdate=$newdate"
echo "$funcname: lastpollblock=$lastpollblock"
echo "$funcname: ccmrawoutfile=$ccmrawoutfile"
echo "$funcname: ccmlogfile=$ccmlogfile"
echo "$funcname: ccmloglevel=$ccmloglevel"
echo "$funcname: tstccminraw=$tstccminraw"
echo "$funcname: ccmcdruser=$ccmcdruser"
echo "$funcname: ccmsqshrcfile=$ccmsqshrcfile"
echo "$funcname: CLUDURINSECS=$CLUDURINSECS"
echo "$funcname:CCMEXCL0DURATION=$CCMEXCL0DURATION"
echo "$funcname: CCMCDRVER=$CCMCDRVER"
echo "$funcname: CCMCDRDELIM=$CCMCDRDELIM"
echo "$funcname: CCMCDRSKIPFIRST=$CCMCDRSKIPFIRST"
#exit 0
echo "---- src ccmenv output ----"
if [ -f "${TMP}/srcccmenv$$" ]; then
cat ${TMP}/srcccmenv$$
rm -f ${TMP}/srcccmenv$$
fi
echo "---------------------------"
fmdtnum=`cnvep -D $lastpolldate`
todtnum=`cnvep -D $newdate`
#########################
cp /dev/null "$tmpccmrawout"
if [ -n "$tstccminraw" ]; then
# use test raw file as input
cp "$tstccminraw" "$tmpccmrawout" 2>&1
else
if [ $CCMCDRSQLSERVER -ne 0 ]; then
# Callmanager based on MS SQLServer
if [ -z "$TDSHOST" ]; then
SQSHCMD="sqsh -S $nodename -D $ccmcdrdb -U $ccmcdruser -P $ccmpassword"
else
SQSHCMD="sqsh -r $ccmsqshrcfile -D $ccmcdrdb"
fi
$SQSHCMD $SQSHEXTRAARGS >$tmpccmrawout <$tmpccmrawout"
ccmget "$lastpolldate" "$newdate" "$lastpollblock" >$tmpccmrawout
fi
fi
}
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#echo "running: $prodname \"$prodname\" \"$nodename\" \"$parentsiteid\" \
# \"$lastpolldate\" \"$newdate\" \"$lastpollblock\" \
# #\"$ccmlogfile\" >\"$ccmoutfile\""
$prodname "$prodname" "$nodename" "$parentsiteid" \
"$lastpolldate" "$newdate" "$lastpollblock" >>"$ccmlogfile"
# #"$ccmlogfile" >"$ccmoutfile"
## Testing
#echo ""
#echo "---------------- ccmrawout: $ccmrawoutfile --------------------"
#cat "$ccmrawoutfile"
#cp "$ccmrawoutfile" "ccmrawoutfile.raw"
#exit 0
#----------------------------------------------------
# process raw ccm cdr data
if [ -z "$AWK" ]; then
AWK="awk"
fi
$AWK < "$ccmrawoutfile" >> "$ccmlogfile" -F "$CCMCDRDELIM" \
-v"HEADER=$HEADER" \
-v"DATESEP=$DATESEP" \
-v"CALLEDPARTY=$CALLEDPARTY" \
-v"ORIGDEVEXCLUDE=$ORIGDEVEXCLUDE" \
-v"FULLDESTDEVICELOOKUPCSVFILE=$FULLDESTDEVICELOOKUPCSVFILE" \
-v"ccmloglevel=$ccmloglevel" \
-v"outfile=$tmp1file" '
function trim(s)
{
sub(/^[ \t]*/,"",s)
sub(/[ \t]*$/,"",s)
return s
}
function excelquote(s)
{
return "+\"" s "\""
}
function ld_destdevicelookupfile(destdevicelookupfile) {
printf("ld_destdevicelookupfile(%s)\n", destdevicelookupfile)
fst = 1
while ( (getline aline < destdevicelookupfile) > 0 ) {
if ( fst ) { # skip header
fst = 0
continue
}
split(aline, a_arr, ",")
#printf("aline=%s\n", aline)
f = 0
destDeviceName = trim(a_arr[++f])
destExtn = trim(a_arr[++f])
if ( destDeviceName == "" ) # skip blanks
continue
destDeviceName_to_destExtn_arr[destDeviceName] = destExtn
print " destDeviceName_to_destExtn_arr[" destDeviceName "] = " destDeviceName_to_destExtn_arr[destDeviceName]
}
close(destdevicelookupfile)
}
BEGIN {
# load destDeviceName to destination extension lookup
if ( FULLDESTDEVICELOOKUPCSVFILE != "" )
ld_destdevicelookupfile(FULLDESTDEVICELOOKUPCSVFILE)
# CSV header
if ( HEADER == "1" ) {
hdr = sprintf("endDate,endTime,duration,callingPartyNumber,origDeviceName,finalCalledPartyNumber,lastRedirectDn,destDeviceName")
if ( FULLDESTDEVICELOOKUPCSVFILE != "" )
hdr = hdr sprintf(",destExtn")
if ( ccmloglevel >= 1 )
print hdr
print hdr >> outfile
}
}
function handle_partynumber(partynumberstr)
{
###gsub("[#]","",partynumberstr)
##gsub("[#*]","",partynumberstr)
#gsub("[#*+]","",partynumberstr)
gsub("[^0-9]","",partynumberstr)
partynumber = partynumberstr
if ( ccmloglevel >= 9 ) {
printf("handle_partynumber(%s) partynumber=[%s]\n", partynumberstr, partynumber)
}
if ( (partynumberstr + 0) > 9999 ) {
#fst2 = substr(partynumberstr,1,2)
#fst3 = substr(partynumberstr,1,3)
#if (length(partynumberstr) == 6) {
# if (fst3 == "382")
# partynumber = substr(partynumberstr,4,3)
# if (fst2 == "32" || fst2 == "33" || fst2 == "37")
# partynumber = substr(partynumberstr,3,4)
#}
#else {
# partynumber = 0
#}
# handle extn alter config list
for ( i = 1; i <= nextnalters; ++ i ) {
# yyyXXXzzz = passed party number string
# ndigits_before[i] = number of y X z
# digits_prefix[i] = yyy
# digits_start[i] = offset to first z (starting from 1)
# ndigits_after[i] = number of z
# return_prefix[i] = pp
# return_postfix[i] = PP
# ppzzzPP = partynumber to return
if (length(partynumberstr) == ndigits_before[i]) {
dpref = digits_prefix[i]
if (substr(partynumberstr,1,length(dpref)) == dpref) {
partynumber = return_prefix[i] substr(partynumberstr, digits_start[i], ndigits_after[i]) return_postfix[i]
if ( ccmloglevel >= 9 ) {
printf("extnalter: handle_partynumber(%s) partynumber = [%s]\n", partynumberstr, partynumber)
}
}
}
}
}
return partynumber
}
function handle_PNPartition(partynumberpartition)
{
#return ""
#PNPprefix = partynumberpartition
#re = "IDDPT|InternalPT|LocalPT|MobilePT|OnlyPT|Partition|STDMobilePT|STDPT|PT"
##re = "InternalPT"
#if ( sub(re, "", PNPprefix) <= 0 )
# PNPprefix = ""
PNPprefix = ""
if ( PartitionPrefixList != "" ) {
re = PartitionPrefixList
if ( match(partynumberpartition,re) > 0 )
PNPprefix = substr(partynumberpartition,RSTART,RLENGTH)
}
print "handle_PNPartition(" partynumberpartition ") PNPprefix=[" PNPprefix "]"
print " PartitionPrefixList=[" PartitionPrefixList "]"
return PNPprefix
}
function get_TZ_for_PartitionPrefix(destPNP)
{
pptzvar = "PPTZ_" destPNP
pptz = ENVIRON[pptzvar]
if ( pptz == "" )
pptz = "default"
print "get_TZ_for_PartitionPrefix(" destPNP ")" " pptzvar=[" pptzvar "]" " pptz=[" pptz "]"
return pptz
}
{
##print $0
#print "rawccmcdr: " $0
#next
if ( NR <= CCMCDRSKIPFIRST )
next
if ( doccmrawoutfile != "" )
print $0 >> doccmrawoutfile
####################
cdrfields = NF
# override configured version
confCCMCDRVER = CCMCDRVER
CCMCDRVER = 0
if ( cdrfields == 74 )
CCMCDRVER = 5
if ( cdrfields == 75 )
CCMCDRVER = 5.1
if ( cdrfields == 78 )
CCMCDRVER = 6
if ( cdrfields == 82 )
CCMCDRVER = 7.0
if ( cdrfields == 94 )
CCMCDRVER = 7.1
if ( cdrfields == 103 )
CCMCDRVER = 8
if ( cdrfields == 104 )
CCMCDRVER = 8.03
if ( cdrfields == 112 )
CCMCDRVER = 8.5
if ( cdrfields == 118 )
CCMCDRVER = 9.0
if ( CCMCDRVER != 0 ) { # fould a known version
nfields = cdrfields
}
else {
CCMCDRVER = confCCMCDRVER
}
####################
# fields from CDR
if ( ccmloglevel >= 1 )
print "-----------------------------------------------------"
f = 0
cdrRecordType = $(++f)
globalCallID_callManagerId = $(++f)
globalCallID_callId = $(++f)
origLegCallIdentifier = $(++f)
dateTimeOrigination = $(++f)
origNodeId = $(++f)
origSpan = $(++f)
origIpAddr = $(++f)
if ( CCMCDRVER < 5 ) {
origIpPort = $(++f)
}
callingPartyNumber = $(++f)
if ( CCMCDRVER >= 5 ) {
callingPartyUnicodeLoginUserID = $(++f)
}
origCause_location = $(++f)
origCause_value = $(++f)
if ( CCMCDRVER >= 5 ) {
origPrecedenceLevel = $(++f)
}
origMediaTransportAddress_IP = $(++f)
origMediaTransportAddress_Port = $(++f)
origMediaCap_payloadCapability = $(++f)
origMediaCap_maxFramesPerPacke = $(++f)
origMediaCap_g723BitRate = $(++f)
if ( CCMCDRVER >= 5 ) {
origVideoCap_Codec = $(++f)
origVideoCap_Bandwidth = $(++f)
origVideoCap_Resolution = $(++f)
origVideoTransportAddress_IP = $(++f)
origVideoTransportAddress_Port = $(++f)
origRSVPAudioStat = $(++f)
origRSVPVideoStat = $(++f)
}
destLegIdentifier = $(++f)
destNodeId = $(++f)
destSpan = $(++f)
destIpAddr = $(++f)
if ( CCMCDRVER < 5 ) {
destIpPort = $(++f)
}
originalCalledPartyNumber = $(++f)
finalCalledPartyNumber = $(++f)
if ( CCMCDRVER >= 5 ) {
finalCalledPartyUnicodeLoginUserID = $(++f)
}
destCause_location = $(++f)
destCause_value = $(++f)
if ( CCMCDRVER >= 5 ) {
destPrecedenceValue = $(++f)
}
destMediaTransportAddress_IP = $(++f)
destMediaTransportAddress_Port = $(++f)
destMediaCap_payloadCapability = $(++f)
destMediaCap_maxFramesPerPacke = $(++f)
destMediaCap_g723BitRate = $(++f)
if ( CCMCDRVER >= 5 ) {
destVideoCap_Codec = $(++f)
destVideoCap_Bandwidth = $(++f)
destVideoCap_Resolution = $(++f)
destVideoTransportAddress_IP = $(++f)
destVideoTransportAddress_Port = $(++f)
destRSVPAudioStat = $(++f)
destRSVPVideoStat = $(++f)
}
dateTimeConnect = $(++f)
dateTimeDisconnect = $(++f)
lastRedirectDn = $(++f)
pkid = $(++f)
originalCalledPartyNumberParti = $(++f)
callingPartyNumberPartition = $(++f)
finalCalledPartyNumberPartitio = $(++f)
lastRedirectDnPartition = $(++f)
duration = 0 + $(++f)
origDeviceName = $(++f)
destDeviceName = $(++f)
##### original cm3 code ended here #####
# from USQ 2/10/2006
if ( CCMCDRVER == 3 ) {
origCallTerminationOnBehalfOf = $(++f)
destCallTerminationOnBehalfOf = $(++f)
origCalledPartyRedirectOnBeha = $(++f)
lastRedirectRedirectOnBehalfOf = $(++f)
origCalledPartyRedirectReason = $(++f)
lastRedirectRedirectReason = $(++f)
joinOnBehalfOf = $(++f)
destConversationId = $(++f)
globalCallId_ClusterID = $(++f)
authCodeDescription = $(++f)
authorizationLevel = $(++f)
clientMatterCode = $(++f)
}
# from BOM 2/10/2006
if ( CCMCDRVER == 4 ) {
origCalledPartyRedirectReason = $(++f)
lastRedirectRedirectReason = $(++f)
destConversationId = $(++f)
origCallTerminationOnBehalfOf = $(++f)
destCallTerminationOnBehalfOf = $(++f)
origCalledPartyRedirectOnBehal = $(++f)
lastRedirectRedirectOnBehalfOf = $(++f)
globalCallId_ClusterID = $(++f)
joinOnBehalfOf = $(++f)
authCodeDescription = $(++f)
authorizationLevel = $(++f)
callingPartyLoginUserID = $(++f)
clientMatterCode = $(++f)
comment = $(++f)
destPrecedenceLevel = $(++f)
destVideoCap_Bandwidth = $(++f)
destVideoCap_Codec = $(++f)
destVideoCap_Resolution = $(++f)
destVideoTransportAddress_IP = $(++f)
destVideoTransportAddress_Port = $(++f)
finalCalledPartyLoginUserID = $(++f)
origPrecedenceLevel = $(++f)
origVideoCap_Bandwidth = $(++f)
origVideoCap_Codec = $(++f)
origVideoCap_Resolution = $(++f)
origVideoTransportAddress_IP = $(++f)
origVideoTransportAddress_Port = $(++f)
}
# from Unified Callmanager 5.0 CDR Definition pdf
# (also see other CCMCDRVER < 5 and CCMCDRVER >= 5 code above)
if ( CCMCDRVER >= 5 ) {
origCallTerminationOnBehalfOf = $(++f)
destCallTerminationOnBehalfOf = $(++f)
origCalledPartyRedirectOnBehal = $(++f)
lastRedirectRedirectOnBehalfOf = $(++f)
origCalledPartyRedirectReason = $(++f)
lastRedirectRedirectReason = $(++f)
destConversationId = $(++f)
globalCallId_ClusterID = $(++f)
joinOnBehalfOf = $(++f)
comment = $(++f)
authCodeDescription = $(++f)
authorizationLevel = $(++f)
clientMatterCode = $(++f)
origDTMFMethod = $(++f)
destDTMFMethod = $(++f)
callSecuredStatus = $(++f)
}
if ( CCMCDRVER >= 6 ) {
origConversationId = $(++f)
origMediaCap_Bandwidth = $(++f)
destMediaCap_Bandwidth = $(++f)
}
if ( CCMCDRVER >= 5.1 ) {
authorizationCodeValue = $(++f)
}
if ( CCMCDRVER >= 7.0 ) {
outpulsedCallingPartyNumber = $(++f)
outpulsedCalledPartyNumber = $(++f)
origIpv4v6Addr = $(++f)
destIpv4v6Addr = $(++f)
}
if ( CCMCDRVER >= 7.1 ) {
origVideoCap_Codec_Channel2 = $(++f)
origVideoCap_Bandwidth_Channel2 = $(++f)
origVideoCap_Resolution_Channel2 = $(++f)
origVideoTransportAddress_IP_Channel2 = $(++f)
origVideoTransportAddress_Port_Channel2 = $(++f)
origVideoChannel_Role_Channel2 = $(++f)
destVideoCap_Codec_Channel2 = $(++f)
destVideoCap_Bandwidth_Channel2 = $(++f)
destVideoCap_Resolution_Channel2 = $(++f)
destVideoTransportAddress_IP_Channel2 = $(++f)
destVideoTransportAddress_Port_Channel2 = $(++f)
destVideoChannel_Role_Channel2 = $(++f)
}
if ( CCMCDRVER >= 8 ) {
IncomingProtocolID = $(++f)
IncomingProtocolCallRef = $(++f)
OutgoingProtocolID = $(++f)
OutgoingProtocolCallRef = $(++f)
currentRoutingReason = $(++f)
origRoutingReason = $(++f)
lastRedirectingRoutingReason = $(++f)
huntPilotPartition = $(++f)
huntPilotDN = $(++f)
}
if ( CCMCDRVER >= 8.03 ) {
calledPartyPatternUsage = $(++f)
}
if ( CCMCDRVER >= 8.5 ) {
IncomingICID = $(++f)
IncomingOrigIOI = $(++f)
IncomingTermIOI = $(++f)
OutgoingICID = $(++f)
OutgoingOrigIOI = $(++f)
OutgoingTermIOI = $(++f)
outpulsedOriginalCalledPartyNumber = $(++f)
outpulsedLastRedirectingNumber = $(++f)
}
if ( CCMCDRVER >= 9.0 ) {
wasCallQueued = $(++f)
totalWaitTimeInQueue = $(++f)
callingPartyNumber_uri = $(++f)
originalCalledPartyNumber_uri = $(++f)
finalCalledPartyNumber_uri = $(++f)
lastRedirectDn_uri = $(++f)
}
#----------------------------------------------------------
# use t21 host TZ for call
call_TZ = "default"
# calling party
callingpnstr = callingPartyNumber
callingpnpartition = callingPartyNumberPartition
if ( ccmloglevel >= 1 )
print "calling party callinpnstr=[" callingpnstr "]"
callingpn = handle_partynumber(callingpnstr)
if ( ccmloglevel >= 1 )
print "callingpn=[" callingpn "]"
# called party
if ( ccmloglevel >= 1 )
print "called party finalCalledPartyNumber=[" finalCalledPartyNumber "]"
calledpn_final = handle_partynumber(finalCalledPartyNumber)
if ( ccmloglevel >= 1 )
print "calledpn_final=[" calledpn_final "]"
if ( ccmloglevel >= 1 )
print "called party lastRedirectDn=[" lastRedirectDn "]"
calledpn_last = handle_partynumber(lastRedirectDn)
if ( ccmloglevel >= 1 )
print "calledpn_last=[" calledpn_last "]"
#if ( ccmloglevel >= 1 )
# print "look for CALLEDPARTY=[" CALLEDPARTY "]"
if ( ORIGDEVEXCLUDE != "" ) { # exlusion filter for origDeviceName
if ( match(origDeviceName,ORIGDEVEXCLUDE) > 0 ) {
if ( ccmloglevel >= 1 )
print "skipping - exclide origDeviceName=[" origDeviceName "]"
next
}
}
# look for correct called party
#if ( !(toupper(CALLEDPARTY) == "ALL" || CALLEDPARTY == calledpn_final || \ CALLEDPARTY == calledpn_last ) ) {
if ( !(toupper(CALLEDPARTY) == "ALL" || \
match(calledpn_final,CALLEDPARTY) == 1 || \
match(calledpn_last,CALLEDPARTY) == 1 \
) \
) {
# skip if not CALLEDPARTY we are looking for
if ( ccmloglevel >= 1 )
print "skipping - Not for Called Party"
next
}
# get correct Time Zone for call from calling party Partition
if ( usePartition ) { # use Partition
destPNP =handle_PNPartition(callingpnpartition)
if ( ccmloglevel >= 1 )
print "destPNP=[" destPNP "]"
if ( destPNP != "" ) {
# set timezone from dest Partition
if ( usePartition == 2 || usePartition == 3 ) {
if ( ccmloglevel >= 1 )
print "use Partition prefix to SET TZ for destPNP=[" destPNP "]"
call_TZ = get_TZ_for_PartitionPrefix(destPNP)
}
}
}
# convert call date and time
if ( dateTimeDisconnect == "" ) {
printf("ERROR: dateTimeDisconnect blank");
strdatetime = ""
}
else {
cmd = ""
if ( call_TZ != "default" ) {
cmd = "TZ=\"" call_TZ "\"; export TZ;"
}
cmd = cmd "cnvep -d " dateTimeDisconnect
if ( ccmloglevel >= 1 )
print "cnvep cmd=[" cmd "]"
cmd | getline strdatetime
close(cmd)
}
if ( ccmloglevel >= 1 )
print "strdatetime=[" strdatetime "]"
dd = substr(strdatetime,1,2)
mm = substr(strdatetime,3,2)
yy = substr(strdatetime,5,2)
HH = substr(strdatetime,7,2)
MM = substr(strdatetime,9,2)
SS = substr(strdatetime,11,2)
if ( yy < 84 )
yyyy = 2000 + yy;
else
yyyy = 1900 + yy;
enddate = sprintf("%02d%s%02d%s%04d", dd, DATESEP, mm, DATESEP, yyyy)
endtime = sprintf("%02d:%02d:%02d", HH, MM, SS)
if ( ccmloglevel >= 1 )
print "enddate=[" enddate "]" " endtime=[" endtime "]"
destExtn = destDeviceName_to_destExtn_arr[destDeviceName]
durhh = int(duration / 3600)
remd = duration - (durhh * 3600)
durmm = int(remd / 60)
remd = remd - (durmm * 60)
durss = remd
duration_str = sprintf("%d:%02d:%02d", durhh, durmm, durss)
csvrec = sprintf("%s,%s,%s,%s,%s,%s,%s,%s", enddate, endtime, duration_str, callingPartyNumber, origDeviceName, finalCalledPartyNumber, lastRedirectDn, destDeviceName)
if ( FULLDESTDEVICELOOKUPCSVFILE != "" )
csvrec = sprintf(",%s", destExtn)
if ( ccmloglevel >= 1 ) {
print csvrec
print "++++++++++++++++++++++++++++++++++++++++++++++++"
}
print csvrec >> outfile
}
'
## Testing
#echo ""
#echo "$0:"
#echo " SDATE=[$SDATE] STIME=[$STIME]"
#echo " EDATE=[$EDATE] ETIME=[$ETIME] "
#echo " CALLEDPARTY=[$CALLEDPARTY]"
#echo " ORIGDEVEXCLUDE=[$ORIGDEVEXCLUDE]"
#echo " DESTDEVICELOOKUPCSVFILE=[$DESTDEVICELOOKUPCSVFILE]"
#echo " OUTFILETAG=[$OUTFILETAG]"
#echo "---------------- ccmlogfile: $ccmlogfile --------------------"
#cat "$ccmlogfile"
#echo ""
##
$DODBG && echo "---------------- tmp1file: $tmp1file --------------------
"
# output csv
$DODBG && echo ""
$DODBG && cat "$tmp1file"
$DODBG && echo "
"
$DODBG && echo "---------------------------------------------------------
"
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# output data in html table format
echo ""
if [ -s "$tmp1file" ]; then
awk -F',' '
{
printf("");
for ( i = 1; i <= NF; ++i ) {
fldval = $i;
if ( i == 1 )
printf(" %s | ", fldval)
else
printf(" %s | ", fldval)
}
printf("
\n")
}
' <"$tmp1file"
else
echo " | | | | | | | | | | | | |
"
echo " | | | | | | | | | | | | |
"
echo " | | | | | | | | | | | | |
"
echo " | | | | | | | | | | | | |
"
echo " | | | | | | | | | | | | |
"
echo " | | | | | | | | | | | | |
"
echo "No Data | | | | | | | | | | | | |
"
fi
echo "
"
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
echo ""
echo "Done."
echo ""
echo ""
## Testing
#echo "----- done -----"
#----------------------------------------------------
# send output to user
#cat "$tmpfile" | pr_rep system "$OUTFILETAG"
#cp "$tmpfile" 1
#----------------------------------------------------
###############################
# remove lock
#rm -f $LOCKFILE
###############################
rm -f "$tmpfile"
rm -f "$tmp1file"
rm -f "$ccmrawoutfile"
rm -f "$ccmlogfile"
exit 0