ზ3በંવવხްុլRxስសلçໂH℅૩/usr/local/bin/
Upload File :
Current File : //usr/local/bin/logs
#!/bin/bash

RED_COLOR=$'\033[31;1m'
GREEN_COLOR=$'\033[32;1m'
YELLOW_COLOR=$'\033[33;1m'
PURPLE_COLOR=$'\033[35;1m'
CYAN_COLOR=$'\033[36;1m'
DEFAULT_COLOR=$'\033[0m'

export LC_ALL=C

while (true); do

 read -e -r -p $'\e[36mTimeframe(10 seconds, 5 minutes, 3 hours 1 day, ect. or none to review all entries in the logs):\e[0m ' timeframe;

 if [ "$timeframe" != 'none' ]; then

 time_num=$( echo $timeframe | tr -dc '0-9' )
 time_unit=$( echo $timeframe | tr -dc 'a-zA-Z' )

  case $time_unit in
   
#   second | seconds)
 #   timevar="$time_num"
  #  break 2
   # ;;

   minute | minutes)
    timevar=$time_num
    break 2
    ;;

   hour | hours )
    timevar=$(( time_num * 60 ))
    break 2
    ;;

   day | days)
    timevar=$(( time_num * 1440 ))
    break 2
    ;;

  *)
    echo "incorrect timeframe. Try Again"
    ;;

  esac

 else

  break

 fi

done

declare -a arr=()

for log in $(find /home*/*/access-logs/* | sed -e "s/-ssl_log//" | uniq); do 

 if [ "$timeframe" = 'none' ]; then
 
  log_entries=$(cat "$log"* | wc -l)
  
 else
   
  if [ -f "$log" ]; then
   
   minutes=$timevar
   while [ "$minutes" -gt 0 ]; do  

    line_num_non_ssl=$(grep -nm 1 "$(date -d -"$minutes"minutes +'%d/%b/%Y:%H:%M')" "$log" | cut -d ':' -f1)

    if [ -n "$line_num_non_ssl" ]; then
    
     break

    fi

    ((minutes--)); 

    if [ "$minutes" -eq 0 ]; then

     (( line_num_non_ssl= $(cat "$log" | wc -l) + 1 ));
     log_entries_non_ssl=0
     break

    fi

   done
  
   if [ $minutes -gt 0 ]; then
   
    log_entries_non_ssl=$(tail -n +"$line_num_non_ssl" "$log" | grep . | grep -v '==>' | wc -l)
   
   else

    log_entries_non_ssl=0

   fi

  else 

   line_num_non_ssl=0
   log_entries_non_ssl=0

  fi

  if [ -f "$log"-ssl_log ]; then
   
   minutes=$timevar
   while [ "$minutes" -gt 0 ]; do 

    line_num_ssl=$(grep -nm 1 "$(date -d -"$minutes"minutes +'%d/%b/%Y:%H:%M')" "$log"-ssl_log | cut -d ':' -f1)

    if [ ! -z "$line_num_ssl" ]; then

     break

    fi

    ((minutes--));

    if [ "$minutes" -eq 0 ]; then
    
     (( line_num_ssl= $(cat "$log"-ssl_log | wc -l) + 1 ));
     log_entries_ssl=0
     break

    fi

   done

   if [ $minutes -gt 0 ]; then

    log_entries_ssl=$(tail -n +"$line_num_ssl" "$log"-ssl_log | grep . | grep -v '==>' | wc -l)

   else

    log_entries_ssl=0

   fi

  else

   line_num_ssl=0
   log_entries_ssl=0

  fi

  log_entries=$((log_entries_non_ssl + log_entries_ssl))

 fi

 if [ "$log_entries" -gt 0 ]; then 
  
  domain=$(echo "$log" | rev | cut -d '/' -f 1 | rev )
  user=$(echo "$log" | cut -d '/' -f 3 )
  
  if [ "$(whoami)" = 'root' ]; then

   if [ "$(uapi --user="$user" DomainInfo list_domains | grep 'main_domain' | awk '{print$2}')" != "$domain" ]; then

    if [ ! -z $(uapi --user="$user" DomainInfo single_domain_data domain="$domain" | grep serveralias | awk '{print $2"\n"$3"\n",$4"\n",$5}' | grep -v "www\|mail") ]; then

     domain=$(uapi --user="$user" DomainInfo single_domain_data domain="$domain" | grep serveralias | awk '{print $2"\n"$3"\n",$4"\n",$5}' | grep -v "$domain\|www\|mail")

    fi
   fi

  else

   if [ "$(uapi DomainInfo list_domains | grep 'main_domain' | awk '{print$2}')" != "$domain" ]; then

    if [ ! -z $(uapi DomainInfo single_domain_data domain="$domain" | grep serveralias | awk '{print $2"\n"$3"\n",$4"\n",$5}' | grep -v "www\|mail") ]; then
  
     domain=$(uapi DomainInfo single_domain_data domain="$domain" | grep serveralias | awk '{print $2"\n"$3"\n",$4"\n",$5}' | grep -v "$domain\|www\|mail")
    
    fi
   fi
  fi

  if [ "$timeframe" = 'none' ]; then 
 
   arr+=( "$(echo "$log_entries $domain $log")" )

  else

  arr+=( "$(echo "$log_entries $domain $log $line_num_non_ssl $line_num_ssl")" )
  
  fi  
 fi
done

printf '%s\n'  "${arr[@]}" | awk '{print$1,$2}' | sort -rh

read -e -r -p $'\e[36mWold you like to review the top IPs in the logs?(y/n)\e[0m ' ip_entries;

if [ "$ip_entries" = y ]; then

printf '%s\n' "${arr[@]}" | sort -rh | while read line; do

  domain=$(echo "$line" | awk '{print$2}')
  log=$(echo "$line" | awk '{print$3}')
  line_num_non_ssl=$(echo "$line" | awk '{print$4}')
  line_num_ssl=$(echo "$line" | awk '{print$5}')
 
  printf "%sDomain: $domain%s\\n" "$RED_COLOR" "$DEFAULT_COLOR"
 
  if [ "$timeframe" = 'none' ]; then

   cat "$log"* | cut -d ' ' -f 1 | sort | uniq -c | sed 's/^ *//g' | sort -rh | head -n 10

  else
   
   if [ -f "$log" ] && [ -f "$log"-ssl_log ]; then

    ( tail -n +"$line_num_non_ssl" "$log" | grep . | grep -v '==>'; tail -n +"$line_num_ssl" "$log"-ssl_log | grep . | grep -v '==>' ) | cut -d ' ' -f 1 | sort | uniq -c | sed 's/^ *//g' | sort -rh | head -n 10 
  
   elif [ -f "$log" ] && [ ! -f "$log"-ssl_log ]; then 

    tail -n +"$line_num_non_ssl" "$log" | grep . | grep -v '==>' | cut -d ' ' -f 1 | sort | uniq -c | sed 's/^ *//g' | sort -rh | head -n 10

   elif [ ! -f "$log" ] && [ -f "$log"-ssl_log ]; then

    tail -n +"$line_num_ssl" "$log"-ssl_log | grep . | grep -v '==>' | cut -d ' ' -f 1 | sort | uniq -c | sed 's/^ *//g' | sort -rh | head -n 10

   fi
  fi
 done
fi