Menu Principal

quinta-feira, 13 de outubro de 2011

Filtrar o arquivo de log do CUPS

###########################
Script INICIADO em  DATA HORA BRT 2011
###########################
Para extrair do log do cups o arquivo de impresso, o usuário que imprimiu e a impressora deve-se:

1) Configurar o /etc/cups/cupsd.conf  com LogLeve Debug
2) As informações estão contidas no /var/log/cups/error_log
3)
for linha in  `egrep -n D /var/log/cups/error_log | egrep -i "argv.3.=\"smbprn" | egrep -i -v "Java|https|http" | cut -d ":"  -f 1`; do inicio=`expr $linha - 3`; fim=`expr $linha + 1`  ;  awk 'NR>='$inicio' && NR<='$fim' {print}' /var/log/cups/error_log ; done >> /PATHlog_completo``$DATA_ARQUIVO``.txt

Descrição: a variável linha recebe o nr da linha que contém a expressão argv?3?="smbprn. Esse número é utilizado para enviar para o comando awk que extrai do arquivo as linhas entre $linha -3 e $linha + 1 do arquivo /var/log/cups/error_log

O formato do arquivo gerado fica assim:

D [03/Oct/2011:09:11:02 -0300] [Job 221789] argv[0]="NOME DA IMPRESSORA"
D [03/Oct/2011:09:11:02 -0300] [Job 221789] argv[1]="NR DO JOB"
D [03/Oct/2011:09:11:02 -0300] [Job 221789] argv[2]="NOME DO USUÁRIO"
D [03/Oct/2011:09:11:02 -0300] [Job 221789] argv[3]="NOME DO ARQUIVO IMPRESSO"
D [03/Oct/2011:09:11:02 -0300] [Job 221789] argv[4]="1"





Pode-se também fazer um filtro usando o error_log e concatenando com o page_log. Esse script ganha em performance, pois é executado em duas etapas:


Esta primeira linha cria um arquivo intemediário extraindo as informações do error_log

cut -d ":"  -f 1-5  /var/log/cups/error_log | egrep -i "argv.2.|argv.3.|Get-Jobs ipp:\/\/localhost\/printers" | egrep -i -v "Java|https|http" >> /PATH``$DATA_ARQUIVO``.txt



Esta segunda linha de comando concatena, pelo número do JOB, do arquivo page_log
com o error_log

for nrjob in `awk -F: '/argv.3./ {print $4}' /PATHlog_cups$DATA_ARQUIVO.txt | awk '{ print substr ($4, 0,6)}'`; do  awk -F: '/'$nrjob'/  {print}' /var/log/cups/page_log |tr -d '\n' >> /PATH``$DATA_ARQUIVO``.txt; echo " DOC: " | tr -d '\n' >> /PATH``$DATA_ARQUIVO``.txt; awk -F: '/'$nrjob'/ && /smbprn/ {print}' /PATH``$DATA_ARQUIVO``.txt |awk '{print $6,$7,$8,$9, $10, $11, $12}' >> /PATHteste_cups``$DATA_ARQUIVO``.txt ; echo "###################################" >> /PATHteste_cups``$DATA_ARQUIVO``.txt; done

rm /PATHlog_cups``$DATA_ARQUIVO``.txt


O formato do arquivo fica assim:
NOME DA IMPRESSORA USUÁRIO JOB [DATA:HORA -0300] 1 1 - IP DA MÁQUINA DOC: NOME DO DOCUMENTO"
###################################
NOME DA IMPRESSORA USUÁRIO JOB [DATA:HORA -0300] 1 1 - IP DA MÁQUINA DOC: NOME DO DOCUMENTO"


###################################
NOME DA IMPRESSORA USUÁRIO JOB [DATA:HORA -0300] 1 1 - IP DA MÁQUINA DOC: NOME DO DOCUMENTO"
###################################
###########################
Script TERMINADO em  DATA HORA BRT 2011
###########################






Este Script Gera arquivos de log por impressora

#!/bin/bash
DATA_ARQUIVO=`date +%d-%m-%Y`

echo "###########################" >> /path/log_``$IMPRESSORA``_``$DATA_ARQUIVO``.txt
echo "Script INICIADO em " `date` >> /path/log_``$IMPRESSORA``_``$DATA_ARQUIVO``.txt
echo "###########################" >> /path/log_``$IMPRESSORA``_``$DATA_ARQUIVO``.txt


Esta linha gera o arquivo intermediário

cut -d ":" -f 1-5 /var/log/cups/error_log | egrep -i "argv.0.|argv.1.|argv.2.|argv.3.|Get-Jobs ipp:\/\/localhost\/printers" | egrep -i -v "Java|https|http" >> /root/log_cups.txt


O restante do script extrai do arquivo intermediário as informações por impressora

for IMPRESSORA in `awk {print} impressora.txt`;
do for linha in `egrep -n D /root/log_cups.txt | egrep -i "argv.0.=\"$IMPRESSORA" | egrep -i -v "Java|https|http" | cut -d ":" -f 1`;
do fim=`expr $linha + 3` ;
awk 'NR>='$linha' && NR<='$fim' {print}' /root/log_cups.txt ; done >> /root/log_``$IMPRESSORA``_``$DATA_ARQUIVO``.txt;
done


Esta linha deleta o arquivo intermediário e o resto é firula.

rm /root/log_cups.txt

echo "###########################" >> /root/log_``$IMPRESSORA``_``$DATA_ARQUIVO``.txt
echo "Script TERMINADO em " `date` >> /root/log_``$IMPRESSORA``_``$DATA_ARQUIVO``.txt
echo "###########################" >> /root/log_``$IMPRESSORA``_``$DATA_ARQUIVO``.txt

Nenhum comentário:

Postar um comentário