#!/bin/bash
#< Check tomcat response times and generate a report

AWK="/usr/bin/awk"
BASENAME="/usr/bin/basename"
DATE="/usr/bin/date"
ECHO="/usr/bin/echo"
SORT="/usr/bin/sort"

LOG_ROOT="/var/log/tomcat5"
LOG_PREFIX="somesite_access_log"
LOG_SUFFIX="txt"
SORT_KEY=2
THIS_PROG="$( ${BASENAME} $0 )"
TMP_DIR="/tmp"
VERBOSE=0

function printv {
   (( VERBOSE )) && ${ECHO} "   : $@"
}

function print_error {
   ${ECHO} "Error: $@" >&2
}

function print_usage {
   {
      ${ECHO} "Usage: ${THIS_PROG} [-huv] [-l <logfile>]"
      ${ECHO} "       -h  Display this help message"  
      ${ECHO} "       -l  Specify log file (default is todays)"
      ${ECHO} "       -u  Sort by URL instead of response time"
      ${ECHO} "       -v  Verbose mode"
   } >&2
}

function check_logfile_exists {
   if [ -z "${LOG_FILE}" ]; then
      LOG_FILE="${LOG_ROOT}/${LOG_PREFIX}.$( ${DATE} +%Y-%m-%d ).txt"
   fi
   printv "Checking log: ${LOG_FILE}"
   if [ ! -e "${LOG_FILE}" ]; then
      print_error "${LOG_FILE} does not exist" && exit 1
   fi
   if [ ! -f "${LOG_FILE}" ]; then
      print_error "${LOG_FILE} not a regular file" && exit 1
   fi
   if [ ! -r "${LOG_FILE}" ]; then
      print_error "${LOG_FILE}: Permission denied" && exit 1
   fi

}

function parse_logfile {
   if [ "${SORT_KEY}" -eq "1" ]; then
      ${AWK} '{print $7,$12}' ${LOG_FILE} | ${SORT} -k${SORT_KEY},${SORT_KEY} -k$(( SORT_KEY + 1 )),$(( SORT_KEY + 1 ))rn
   else
      ${AWK} '{print $7,$12}' ${LOG_FILE} | ${SORT} -k${SORT_KEY},${SORT_KEY}rn
   fi
}

#
# main()
#
while getopts ":hl:uv" OPTION; do
   case ${OPTION} in
      "h")  print_usage && exit 0   ;;
      "l")  LOG_FILE="${OPTARG}"    ;;
      "u")  SORT_KEY=1              ;;
      "v")  VERBOSE=1               ;;
      *  )  print_usage && exit 1   ;;
   esac
done

shift $(( ${OPTIND} - 1 ))

if [ "$#" -ne "0" ]; then
   print_usage && exit 1
fi

check_logfile_exists
parse_logfile

exit 0