#!/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(" ", fldval) else printf(" ", fldval) } printf("\n") } ' <"$tmp1file" else echo "" echo "" echo "" echo "" echo "" echo "" echo "" fi echo "
%s%s
No Data
" #+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 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