#!/bin/sh

LOGFILE="/var/www/logs/access.log"
RESPONSE_CODE="200"

filters() {
	grep $RESPONSE_CODE \
	| grep -v "<UNKNOWN>" \
	| grep -v "favicon.ico" \
	| grep -v "logfile turned over"
}

filter_response_codes()
{
	grep -v "<UNKNOWN>" \
			  | grep -v "logfile turned over" \
			  | awk '{print $10}'
}

filter_404_response() {
	grep "404"
}

ips() {
	awk '{print $2}'
}

pages() {
	awk '{print $8}'
}

domain() {
	awk '{print $1}'
}

methods() {
	awk '{print $7}' | cut -d'"' -f2
}

sort_count() {
	sort | uniq -c
}

sort_desc() {
	sort -rn
}

top_ten() {
	head -10
}

sep() {
	echo "=================================================="
}

##
# Actions
##
action_request_ips() {
	echo ""
	echo "Top requests from IPs"
	sep
	cat $LOGFILE \
		  | filters \
		  | ips \
		  | sort_count \
		  | sort_desc \
		  | top_ten
	echo ""
}

action_request_methods() {
	echo ""
	echo "Count requests methods"
	sep
	cat $LOGFILE \
			  | filters \
			  | methods \
			  | sort_count
	echo ""
}

action_pages() {
	echo ""
	echo "Top requested pages"
	sep
	cat $LOGFILE \
			  | filters \
			  | pages \
			  | sort_count \
			  | sort_desc \
			  | top_ten
	echo ""
}

action_404() {
	echo ""
	echo "Top requests 404"
	sep
	cat $LOGFILE \
		| filter_404_response \
		| pages \
		| sort_count \
		| sort_desc \
		| top_ten
	echo ""
}

action_response_codes() {
	echo ""
	echo "Response code"
	sep
	cat $LOGFILE \
		| filter_response_codes \
		| sort_count \
		| sort_desc
	echo ""
}

action_request_ips
action_request_methods
action_response_codes
action_pages
action_404