Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- #
- # Relatório de emails enviados do postfix.
- #
- # Gera relatório de quantos emails o usuário enviou
- # e para quem foram enviados, além de contar individualmente
- # quantos emails foram enviados por remetente.
- #
- # Maicon Radeschi - 17/08/2012
- # radeschi@gmail.com
- #
- #Gerar log simplicado com maillogconvert
- AWSTATS="/var/www/maicon/maillogconvert.pl"
- LOG_FULL="/var/www/maicon/mail.log.zimbra"
- LOG="/var/www/maicon/mail.log.converted"
- F_FROM=$(mktemp)
- F_TO=$(mktemp)
- DIR_REPORT="/var/www/maicon/report/report"
- INDEX_HTML="/var/www/maicon/report/report.html"
- TMP_NUM_FILES=$(mktemp)
- TMP_USERS_TO_GO=$(mktemp)
- DOMAIN="@tjmt.jus.br"
- #Conta quantos emails foram enviados para cada destinatario
- function COUNT_LINES(){
- awk '{
- for (w = 1; w <= NF; w++) conta[$w] ++
- }
- END {
- for (w in conta) print conta[w], w | "sort -nr"
- }' $1
- }
- function START() {
- echo -en "> Convertendo LOG para formato AWSTATS... \t\t"
- $AWSTATS standard $LOG_FULL > $LOG 2>/dev/null
- echo "|OK|"
- #FROM
- echo -en "> Criando lista de usuarios... \t\t\t"
- egrep -v "<>|bounce-" $LOG | cut -d' ' -f3 > $F_FROM
- TOTAL_FROM=$(wc -l $F_FROM | cut -d' ' -f1)
- echo "|OK|"
- #TO
- echo -en "> Criando lista de destinatarios... \t\t"
- egrep -v "<>|bounce-" $LOG | cut -d' ' -f4 > $F_TO
- TOTAL_TO=$(wc -l $F_TO | cut -d' ' -f1)
- echo "|$TOTAL_TO Encontrados|"
- COUNTER=1
- cat $LOG | egrep -v "<>|bounce-" | awk -F" " '{print $3, $4 }' | while read email;
- do
- FROM_A=`echo $email | cut -d' ' -f1`;
- TO_A=`echo $email | cut -d' ' -f2`;
- let COUNTER++;
- echo -en "Gerando arquivo de email => $FROM_A => $TO_A - $COUNTER de $TOTAL_FROM\n" ;
- echo "$TO_A" >> $DIR_REPORT/$FROM_A.tmp ;
- done
- COUNT_FILES
- }
- #Conta quantos arquivos individuais de usuario do domínio
- #existem dentro do diretorio
- function COUNT_FILES() {
- TMP_REMOVE_DIR=$(echo $DIR_REPORT | sed 's/\///g')
- for FILES in $DIR_REPORT/*
- do
- echo "$FILES" >> $TMP_NUM_FILES
- done
- grep "$DOMAIN" $TMP_NUM_FILES | sed 's/\///g' | sed "s/^$TMP_REMOVE_DIR//g" > $TMP_USERS_TO_GO
- TMP_TOTAL_USERS_TO_GO=$(cat $TMP_USERS_TO_GO | wc -l)
- MAKE_INDEX
- }
- #Cria uma pagina HTML com o nome de todos usuarios que enviaram email
- function MAKE_INDEX() {
- DATA=$(awk -v linha=1 -F "\n" 'NR<=linha{ print }END{ print }' $LOG | cut -d' ' -f1)
- echo "<FONT FACE=ARIAL SIZE=4>Relatório dos dias entre: $DATA</FONT><BR>" > $INDEX_HTML
- echo "<FONT FACE=ARIAL SIZE=4>Total de usuarios: $TMP_TOTAL_USERS_TO_GO</FONT>" >> $INDEX_HTML
- echo "<BR>" >> $INDEX_HTML
- echo "<TABLE>" >> $INDEX_HTML
- COUNTER=1
- while [ $COUNTER -le $TMP_TOTAL_USERS_TO_GO ];
- do
- USER_A=$(sed -n $COUNTER' p;' $TMP_USERS_TO_GO | sed 's/.tmp//g')
- echo "Adicionando usuario $USER_A a index.html - $COUNTER de $TMP_TOTAL_USERS_TO_GO"
- echo "<TR>" >> $INDEX_HTML
- echo "<TD><A HREF=user.php?user=$USER_A><FONT FACE=ARIAL SIZE=3>$USER_A</FONT></A></TD>" >> $INDEX_HTML
- echo "</TR>" >> $INDEX_HTML
- COUNTER=$(($COUNTER+1))
- done
- echo "</TABLE>" >> $INDEX_HTML
- MAKE_PAGE_USER
- }
- #Cria uma pagina para cada usuario que enviou email, contendo o endereco de
- #email dos destinatarios
- function MAKE_PAGE_USER() {
- COUNTER=1
- while [ $COUNTER -le $TMP_TOTAL_USERS_TO_GO ];
- do
- USER_A=$(sed -n $COUNTER' p;' $TMP_USERS_TO_GO)
- USER_DEST=$(sed -n $COUNTER' p;' $TMP_USERS_TO_GO | sed 's/.tmp//g')
- echo "Gerando pagina individual dos usuarios: $COUNTER de $TMP_TOTAL_USERS_TO_GO"
- COUNT_LINES $DIR_REPORT/$USER_A > $DIR_REPORT/$USER_DEST
- rm -rf $DIR_REPORT/$USER_A
- COUNTER=$(($COUNTER+1))
- done
- echo ""
- echo "Relatorio gerado com sucesso!"
- }
- #Compara se o arquivo contendo os remetentes tem o
- #mesmo numero de linhas do arquivo com os destinatarios
- function COMP_FILES() {
- if [ "$TOTAL_FROM" = "$TOTAL_TO" ];
- then
- START
- else
- echo "Alguma coisa esta errada!"
- fi
- }
- #Verifica se o awstats esta instalado
- function CHECK_AWSTATS() {
- if [ -e $AWSTATS ];
- then
- COMP_FILES
- else
- echo "AWStats não instalado, impossível continuar."
- fi
- }
- CHECK_AWSTATS
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement