#! /bin/sh
# The script is used for test log collection.
#usage step:
#1 configure db's info. (./logcollect.sh db)
#2 run script to copy DB log to current server
#3 start to collect log for each feature/testcase
#used for copy db log to current server
dbIP="192.168.107.35"
dbNodeUser="admin"
dbPassword="!QAZ2wsx3edc4rfv"
dbLog="/var/postgres/log/postgresql*.csv"
#cp application log
cpAccessLog="/var/log/access.log"
cpEventLog="/var/event.log"
cpPerformanceLog="/var/log/performance.log"
#up application log
upSessionLog="/var/log/session.log"
upTrafficLog="/var/log/traffic.log"
upMonitorLog="/var/log/event.log"
#copy db log to here for collecting
dbTmpLog="/tmp/dbLog"
#vcs log
vcsLog="/var/VRTSvcs/log/engine_A.log"
#system log
messageLog="/var/log/messages"
cronLog="/var/log/cron"
secureLog="/var/log/secure"
CPAppLog=($cpAccessLog $cpEventLog $cpPerformanceLog )
UPAppLog=($upSessionLog $upTrafficLog )
sysLog=($messageLog $cronLog $secureLog)
ARRAY=
CURRENT_LINE=0
START_TIME=
STOP_TIME=
TIME=0
createDirectory()
{
logDirectory=$1"-"`date +%Y%m%d%H%M`
mkdir $logDirectory
if [ $? -ne 0 ]; then
echo "create log directory $logDirectory failed, exit!"
exit
else
echo "the logs are stored in ./$logDirectory"
fi
}
timeConvert()
{
tmpTIME=`date -d "$1" +%s 2>/dev/null`
if [[ ! -z tmpTIME ]] ; then
TIME=$tmpTIME
fi
}
timeConvert "$3"
target_start_time=$TIME
timeConvert "$4"
target_stop_time=$TIME
getTime()
{
logFileName=`echo $2|awk -F '/' '{print $NF}'`
echo "############## reading $2 #############################"
tmp_start_time=0
tmp_stop_time=
FOUND_START_TIME=0
LETTER="[a-z\|A-Z]"
while read LINE
do
if [ -z "$LINE" ] || [ "${LINE:0:1}" == "#" ] ; then
continue
fi
time_string=`expr substr "$LINE" 1 $1`
#echo $time_string
#if [[ $time_string =~ $LETTER ]]; then
# continue
#fi
timeConvert "$time_string"
time_in_line=$TIME
if [ $FOUND_START_TIME -eq 0 ];then
if [ $time_in_line -lt $target_start_time ]; then
continue
elif [ $time_in_line -eq $target_start_time ]; then
FOUND_START_TIME=1
tmp_start_time=`expr substr "$LINE" 1 23`
elif [ $time_in_line -gt $target_start_time ] && [ $time_in_line -le $target_stop_time ]; then
FOUND_START_TIME=1
tmp_start_time=`expr substr "$LINE" 1 23`
elif [ -z $time_in_line ]; then
continue
else
#echo "can't find log in "$2" for the required time perid"
break 1
fi
else
if [ $time_in_line -eq $target_stop_time ]; then
tmp_stop_time=`expr substr "$LINE" 1 23`
elif [ $time_in_line -gt $target_stop_time ]; then
tmp_stop_time=`expr substr "$LINE" 1 23`
break 1
elif [ -z $time_in_line ]; then
continue
fi
fi
done <$2
if [ $FOUND_START_TIME -eq 1 ];then
sed -n "/^$tmp_start_time/,/^$tmp_stop_time/p" $2 >> $logDirectory"/"$logFileName
echo "Found required log in $2"
fi
}
copyDBLog()
{
rm -rf "$dbTmpLog"
mkdir -p "$dbTmpLog"
expect -c "
spawn scp -o StrictHostKeyChecking=no $dbNodeUser@$dbIP:$dbLog $dbTmpLog
expect \"assword\"
send \"$dbPassword\r\"
expect eof
"
}
case "$1" in
CP| cp| MDFCP| mdfcp)
createDirectory $2
for i in ${CPAppLog[@]}
do
getTime 19 $i
done
for i in `ls "$dbTmpLog"/*""`
do
getTime 19 $i
done
for i in ${sysLog[@]}
do
getTime 15 $i
done
;;
UP| up| MDFUP| mdfup)
createDirectory $2
for i in ${UPAppLog[@]}
do
getTime 19 $i
done
for i in ${sysLog[@]}
do
getTime 15 $i
done
;;
DB| db| MDFDB| mdfdb)
echo "copy DB log to current server $dbTmpLog"
copyDBLog
;;
*)
echo " Usage: $0 NodeType caseNumber StartTime StopTime"
echo " Example: $0 cp createDeliverySession \"2017-09-06 11:26:06\" \"2017-09-06 11:36:06\" "
echo " NOTE: please execute command '$0 db' first to copy DB log to current server before collecting CP/UP log, please configure DB ip/usr/passwd in this script."
esac