1
0
mirror of https://github.com/mariadb-corporation/mariadb-columnstore-engine.git synced 2025-10-20 00:09:21 +03:00
Files
mariadb-columnstore-engine/utils/prat/getps.sh
2016-05-31 16:40:30 -05:00

141 lines
4.4 KiB
Bash

#!/bin/sh
#
#/*******************************************************************************
#* Script Name: getps.sh
#* Date Created: 2009.03.09
#* Author: Calpont Corp.
#* Purpose: Retrieve the appropriate ps files on all servers in the stack
#*
#* Parameters: date - day of month in question (dd)
#* starttime - start of ps period (hh:mm)
#* endtime - end of ps period (hh:mm)
#*
#******************************************************************************/
CTOOLS=/usr/local/mariadb/columnstore/tools
date=$1
starttime=$2
endtime=$3
hostdir=$4
localhost=$(hostname -s)
modulename=`cat /usr/local/mariadb/columnstore/local/module`
if [ -f /tmp/.prat/.hostlist2.txt ]; then
sc=`wc -l < /tmp/.prat/.hostlist2.txt`
else
sc=0
fi
rc=1
#
readserverlist ()
{ cat /tmp/hostlist.txt |
while read moduletype hostname hostdir; do
if [ $hostname = $localhost ]; then
echo Extracting system activity data from local host $localhost
getpslocal $date $starttime $endtime $hostdir
elif [ $rc -lt $sc ]; then
rc=$sc
cat /tmp/.prat/.hostlist2.txt |
while read servername srvpwd hostdir; do
if [ $servername != $localhost ]; then
echo Extracting system activity data from remote host $servername
getpsremote $servername $srvpwd $date $starttime $endtime $hostdir
fi
done
fi
done
}
#
getpsremote ()
{ # Send the command to the remote module(s) to extract ps data
/usr/local/mariadb/columnstore/bin/remote_command.sh $servername $srvpwd "$CTOOLS/getps.sh $date $starttime $endtime $hostdir"
}
#
getpslocal ()
{ mkdir -p $CTOOLS/data/$hostdir/ps
# create the beginning and ending time search variables
st=`echo $starttime | awk -F":" '{ printf "%.4d\n", $1$2 }'`
sh=`echo $starttime | awk -F":" '{ print $1 }'`
sm=`echo $starttime | awk -F":" '{ print $2 }'`
et=`echo $endtime | awk -F":" '{ printf "%.4d\n", $1$2 }'`
eh=`echo $endtime | awk -F":" '{ print $1 }'`
em=`echo $endtime | awk -F":" '{ print $2 }'`
start="Start $sh:$sm"
end="End $eh:$em"
foundstart="no"
foundend="no"
#
# Find the proper daily log to search
curdate=`date +%d`
logdate=`expr $curdate - $date`
if [ $date == $curdate ]; then
logfile="pslog"
elif [ $logdate -gt 7 ]; then
echo "ps daily logs are available for one week only"
exit
else
logfile="pslog.$logdate"
fi
#
#-----------------------------------------------------------------------------
# Search through the file looking for start and end time matches
#-----------------------------------------------------------------------------
#
# Look for beginning time
k=$st
while [ $k -ge $st ] && [ $k -le $et ] && [ $foundstart == "no" ]; do
if [ $sm -ge 60 ]; then
k=`expr $k + 39`
sm=`expr $sm - 61`
elif [ $k -ge $st ] && [ $k -le $et ]; then
grep -q "Start $sh:$sm" /var/log/prat/ps/$logfile
if [ "$?" -eq "0" ] && [ $foundstart == "no" ]; then
start="Start $sh:$sm"
foundstart="yes"
fi
fi
if [ $foundstart == "no" ]; then
k=`expr $k + 0`
k=$((k + 1))
((sm++))
fi
done
#
# Look for ending time
while [ $k -ge $st ] && [ $k -le $et ] && [ $foundend == "no" ]; do
if [ $em -ge 60 ]; then
k=`expr $k + 39`
em=`expr $em - 61`
elif [ $k -ge $st ] && [ $k -le $et ]; then
grep -q "End $eh:$em" /var/log/prat/ps/$logfile
if [ "$?" -eq "0" ] && [ $foundend == "no" ]; then
end="End $eh:$em"
foundend="yes"
fi
fi
if [ $foundend == "no" ]; then
k=`expr $k + 0`
k=$((k + 1))
((em++))
fi
done
#
# create the awk command and write it to a temporary run file
cmd="/$start/,/$end/ {print \$0} "
echo $cmd >> /tmp/cmd.$$
#
# execute the command
awk -f /tmp/cmd.$$ /var/log/prat/ps/$logfile > $CTOOLS/data/$hostdir/ps/pslog
#
rm -rf /tmp/cmd.$$
}
#
if [ $modulename = "dm1" ]; then
# Read through the host list and process each module in the stack
readserverlist
else
getpslocal $date $starttime $endtime $hostdir
fi
#
exit 0