#!/bin/bash
# Skrypt webaccess przetwarzający plik access_log zapisany
# w formacie serwera Apache i wyliczający na jego podstawie
# przydatne i ciekawe statystyki.

bytes_in_gb=1048576
# W poniższym wierszu wpisz nazwę swojego serwera, aby w analizie
# nie były uwzględniane wewnętrzne odwołania.
host="mojserwer.pl"

if [ $# -eq 0 ] ; then
  echo "Użycie: $(basename $0) plik_dziennika" >&2
  exit 1
fi

if [ ! -r "$1" ] ; then
  echo "Błąd: plik $1 nie istnieje." >&2
  exit 1
fi

logdate="$(head -1 "$1" | awk '{print $4}' | sed 's/\[//')"
firsttime=$(echo $logdate | cut -d':' -f2-4)
firstdate=$(date -d "$(echo $logdate | cut -d':' -f1 | sed 's/\// /g')" +%Y-%m-%d)
logdate="$(tail -1 "$1" | awk '{print $4}' | sed 's/\[//')"
lasttime=$(echo $logdate | cut -d':' -f2-4)
lastdate=$(date -d "$(echo $logdate | cut -d':' -f1 | sed 's/\// /g')" +%Y-%m-%d)

echo "Wyniki analizy pliku $1"
echo ""
echo "Data początkowa: $firstdate, godz. $firsttime"
echo "   Data końcowa: $lastdate, godz. $lasttime"

hits="$(wc -l < "$1" | sed 's/[^[:digit:]]//g')"
echo "           Liczba odwołań: $(nicenumber $hits)"

pages="$(grep -ivE '(.txt|.gif|.jpg|.png)' "$1" | wc -l | sed 's/[^[:digit:]]//g')"
echo "      Liczba odsłon stron: $(nicenumber $pages) (z wyjątkiem obrazów)"

totalbytes="$(awk '{sum+=$10} END {print sum}' "$1")"
echo -n "Liczba przesłanych bajtów: $(nicenumber $totalbytes) "

if [ $totalbytes -gt $bytes_in_gb ] ; then
  echo "($(nicenumber $(scriptbc $totalbytes / $bytes_in_gb)) GB)"
elif [ $totalbytes -gt 1024 ] ; then
  echo "($(nicenumber $(scriptbc $totalbytes / 1024)) MB)"
else
  echo ""
fi

# Teraz poszukajmy w pliku interesujących danych.

echo ""
echo "Dziesięć najpopularniejszych stron:"

awk '{print $7}' "$1" | grep -ivE '(.gif|.jpg|.png)' | \
  sed 's/\/$//g' | sort | \
  uniq -c | sort -rn | head -10

echo ""

echo "Dziesięć najczęściej przekierowujących adresów URL:"

awk '{print $11}' "$1" | \
  grep -vE "(^\"-\"$|/www.$host|/$host)" | \
  sort | uniq -c | sort -rn | head -10

echo ""
exit 0
