Cet article s’adresse aux connaisseurs de free-sa ayant utilisé les scripts de génération de rapport free-sa vus dans un article précédent.

Je propose un script qui envoie par mail automatiquement un fichier zip contenant les analyses du mois de tous vos servers Squid. C’est envoyé au format CSV et cela contient le topsites. Pratique pour savoir qui pompe le plus sur le réseau chaque mois et pouvoir backlister les sites en question 😉

Script d’envoi de rapport free-sa par mail

Ce script est a exécuter dans une tâche cron le premier du mois pour bien faire :

0 4 1 * *    root    /usr/local/sbin/send_csv_mail.sh >/dev/null

Lien de téléchargement du script : send-csv-mail.sh

#!/bin/bash
# Auteur : Belgotux
# Site : www.monlinux.net
# Adresse : 
# Version : 1.0
# Date : 24/09/2014
# Description : extract data from free-sa analyses, all package in a zip file and send by mail
# Required : free-sa-genere-report.sh

servers_list="server1 server2 server3 server4"
temp_dir="/tmp"
log_root_directory="/var/www"
    #example topsite : /var/www/server1/01_08_14-31_08_14-1/topsites.html
date_range=$(date +01_%m_%y-%d_%m_%y-1 -d -1day)
    #example date +01_%m_%y-%d_%m_%y-1 -d -1day : execute the cronjob the 1st month day
month_date=$(date +"%m-%Y" -d -1day)
first_month_date=$(date +01_%m_%y -d -1day)
MAILTO="root"

#Cronjob :
# 0 4 1 * *    root    /usr/local/sbin/send_csv_mail.sh >/dev/null

if [ ! -d $temp_dir/$(basename $0 .sh) ] ; then
    mkdir $temp_dir/$(basename $0 .sh) && echo "Create temp directory $temp_dir/$(basename $0 .sh)" || echo "Error creating temp directory $temp_dir/$(basename $0 .sh)"
fi

#generate the csv files
for server in $servers_list ; do
    echo $server
    #sometime no trafic last day of month
    if [ -e "$log_root_directory/$server/$date_range/topsites.html" ] ; then
        topsites_file="$log_root_directory/$server/$date_range/topsites.html"
    else
        topsites_file="$(ls -1dR /var/www/bratislava/$first_month_date* | tail -n 1)/topsites.html"
    fi
    echo "No,URL,Requetes,Octets,Utilisateurs" > $temp_dir/$(basename $0 .sh)/$server.csv && cat $topsites_file | tail -n +22 | head -n -5 | sed -e 's/<tr><td>\([^<]*\)<td class=lt><a href="\([^"]*\)">\([^"]*\)<\/a><td>\([^<]*\)<td>\([^<]*\)<td class=lt>\([^<]*\).*/"\1","\2",\4,"\5","\6"/g'  >> $temp_dir/$(basename $0 .sh)/$server.csv
done

# zip them to send by mutt mail
if [ ! -x /usr/bin/zip ] ; then
    echo "Error zip program not installed!" 1>&2
    exit 1
fi
/usr/bin/zip -r $temp_dir/topsites_$month_date.zip $temp_dir/$(basename $0 .sh)/

#remove temp files
    rm -f $temp_dir/$(basename $0 .sh)/*

# send mail
echo "In attachment the reports for month $month_date" | /usr/bin/mutt -s "CSV report free-sa log analyses $month_date" -a $temp_dir/topsites_$month_date.zip -- $MAILTO

exit $?

 Topsites anonyme

Pour avoir le topsite de manière anonyme, voici le filtre sed à remplacer :

s/<tr><td>\([^<]*\)<td class=lt><a href="\([^"]*\)">\([^"]*\)<\/a><td>\([^<]*\)<td>\([^<]*\).*/"\1","\2",\4,"\5"/g'

Avec cela vous pouvez envoyer uniquement le top 100 anonyme des sites les plus consultés pour faire réagir pacifiquement les collègues un peu trop souvent sur le web 😉