# +----+----+----+----+ # | | | | | # Author: Mark David Scott Cunningham | M | D | S | C | # +----+----+----+----+ # Created: 2014-04-18 # Updated: 2014-08-11 # # #!/bin/bash ## COLORS BLACK=$(tput setaf 0); RED=$(tput setaf 1) GREEN=$(tput setaf 2); YELLOW=$(tput setaf 3) BLUE=$(tput setaf 4); MAGENTA=$(tput setaf 5) CYAN=$(tput setaf 6); WHITE=$(tput setaf 7) BRIGHT=$(tput bold); NORMAL=$(tput sgr0) BLINK=$(tput blink); REVERSE=$(tput smso) UNDERLINE=$(tput smul) echo; FMT=" %5s" ## Add extended globbing shopt -s extglob ## Header printf "${BRIGHT} %15s" "User/Hour" for hour in $(seq -w 0 23); do printf "$FMT" "$hour:00"; done printf "%8s %-s${NORMAL}\n" "Total" " Domain Name" ## Initializations hourtotal=($(for ((i=0;i<23;i++)); do echo 0; done)); grandtotal=0 # Caclulate filname suffix of previous logs if [[ $1 == '-d' ]]; then DECOMP='zgrep' DATE="-$(date --date="-$2 day" +%m%d%Y).zip"; shift; shift; else DECOMP='grep' DATE=''; fi ## Data gathering and display for logfile in /usr/local/apache/domlogs/*/*[^_log$]; do total=0; i=0; if [[ $1 != '-n' && $1 != '--nocolor' ]]; then color="${BLUE}"; else color=''; fi printf "${color} %15s" "$(echo $logfile | cut -d/ -f6)" for hour in $(seq -w 0 23); do count=$($DECOMP -Ec "[0-9]{4}:$hour:" $logfile); hourtotal[$i]=$((${hourtotal[$i]}+$count)) ## COLOR VERSION (HEAT MAP) if [[ $1 != '-n' && $1 != '--nocolor' ]]; then if [[ $count -gt 20000 ]]; then color="${BRIGHT}${RED}"; elif [[ $count -gt 2000 ]]; then color="${RED}"; elif [[ $count -gt 200 ]]; then color="${YELLOW}"; else color="${GREEN}"; fi else color=''; fi printf "${color}$FMT${NORMAL}" "$count" total=$((${total}+${count})); i=$(($i+1)) done grandtotal=$(($grandtotal+$total)) if [[ $1 != '-n' && $1 != '--nocolor' ]]; then ## Color version printf "${CYAN}%8s ${PURPLE}%-s${NORMAL}\n" "$total" "$(echo $logfile | cut -d/ -f7)" else printf "%8s %-s\n" "$total" "$(echo $logfile | cut -d/ -f7)"; fi done ## Footer printf "${BRIGHT} %15s" "Total" for i in $(seq 0 23); do printf "$FMT" "${hourtotal[$i]}"; done printf "%8s %-s${NORMAL}\n" "$grandtotal" "<< Grand Total" echo