9
Relatórios de impressão em PHP com CUPS + JASmine Introdução Este é meu primeiro artigo e gostaria de compartilhar com vocês uma necessidade que obtive na empresa onde trabalho, que era controlar as impressoras e enviar mensalmente um relatório para o meu gerente. O relatório continha dados como Top20 usuários e o consumo mensal de papel. Eu estava a procura de algum software ou interface que usava os logs do CUPS para poder emitir relatórios de estatísticas de uso dos usuários e impressoras, como os clientes são todos Windows, o log do CUPS contabilizava somente uma página fazendo meu relatório ser um fiasco. Procurando no site do CUPS achei esse programa em PHP, Perl, python e MySQL chamado JASmine, fiz alguns testes antes de entrar em produção e notei que ele realmente atendia minha necessidade. Você configura ele junto com o CUPS e quando sai uma impressão ele pega todos os dados e joga em uma base de dados em MySQL que posteriormente pode ser consultada em qualquer browser de internet via PHP (ex: Firefox ou Internet Explorer). Sobre o JASmine O JASmine está na versão 0.0.3 e pode ser baixado no próprio site no endereço: http://jasmine.berlios.de/dokuwiki/doku.php Ele é composto em 3 partes: A primeira parte é um banco de dados em MySQL. A segunda parte é um script em Perl para escutar as impressoras e guardar as informações de impressão na base de dados MySQL, utiliza também o programa pkpgcounter feito em python que conta números de páginas de impressão independente do formato (ex: PostScript, RAW, PCL, etc...). A última parte é a página em PHP5 que fica conectada ao banco de dados e nos fornece as informações referentes as impressões, algumas delas estão citadas abaixo: nome do usuário, quantidade de folhas, hora e data da impressão. título do arquivo impresso (receita-bolo.doc, eu_e_aninha.jpg)

Relatórios de Impressão Em PHP Com CUPS

Embed Size (px)

Citation preview

Relatrios de impresso em PHP com CUPS + JASmineIntroduo Este meu primeiro artigo e gostaria de compartilhar com vocs uma necessidade que obtive na empresa onde trabalho, que era controlar as impressoras e enviar mensalmente um relatrio para o meu gerente. O relatrio continha dados como Top20 usurios e o consumo mensal de papel.

Eu estava a procura de algum software ou interface que usava os logs do CUPS para poder emitir relatrios de estatsticas de uso dos usurios e impressoras, como os clientes so todos Windows, o log do CUPS contabilizava somente uma pgina fazendo meu relatrio ser um fiasco.

Procurando no site do CUPS achei esse programa em PHP, Perl, python e MySQL chamado JASmine, fiz alguns testes antes de entrar em produo e notei que ele realmente atendia minha necessidade.

Voc configura ele junto com o CUPS e quando sai uma impresso ele pega todos os dados e joga em uma base de dados em MySQL que posteriormente pode ser consultada em qualquer browser de internet via PHP (ex: Firefox ou Internet Explorer).

Sobre o JASmine O JASmine est na verso 0.0.3 e pode ser baixado no prprio site no endereo: http://jasmine.berlios.de/dokuwiki/doku.php

Ele composto em 3 partes: A primeira parte um banco de dados em MySQL. A segunda parte um script em Perl para escutar as impressoras e guardar as informaes de impresso na base de dados MySQL, utiliza tambm o programa pkpgcounter feito em python que conta nmeros de pginas de impresso independente do formato (ex: PostScript, RAW, PCL, etc...). A ltima parte a pgina em PHP5 que fica conectada ao banco de dados e nos fornece as informaes referentes as impresses, algumas delas esto citadas abaixo:

nome do usurio, quantidade de folhas, hora e data da impresso.ttulo do arquivo impresso (receita-bolo.doc, eu_e_aninha.jpg)total de impresso de cada usurio, cada impressora, cada servidor (se tiver mais que 1).

Bom, agora vamos com a mo na massa!

Requisitos necessrios Para a instalao do JASmine, certifique-se que o Apache, CUPS, MySQL, PHP version 5, Python e Perl esto instalados e funcionando no seu servidor.

Neste artigo no irei aprofundar a instalao do Apache, CUPS, MySQL, PHP5, Perl e Python, vou comear a explicar presumindo que est tudo instalado e configurado.

O JASmine foi instalado em um servidor openSUSE10.2, os comandos aqui citados foram feitos baseados nessa distribuio, mas nada impede de utiliz-la em outra distribuio, sendo que os passos so todos feitos em cdigo fonte, o que pode alterar a localizao dos servios ou programas.

Aconselho a ler o arquivo INSTALL que fica dentro das pastas JASmine-* caso haja dvida, eu fiz apenas um resumo desse INSTALL que acho suficiente para a instalao do programa. Baixando os arquivosFeito a verificao dos softwares necessrios vamos baixar o jasmine no site: http://jasmine.berlios.de/dokuwiki/doku.php?id=downloads

Salve os arquivos: JASmine-MySQL-0.0.3.tar.bz2 JASmine-Backend-0.0.3.tar.bz2 JASmine-Web-0.0.3.tar.bz2

JASmine-MySQL-0.0.3 Antes de descompactar o arquivo, vamos criar uma base de dados no MySQL com o nome de print ou se preferir coloque o nome que desejar. Vou mostrar utilizando o nome print.

# mysql -u root -ppassword: *****mysql> CREATE DATABASE print;

Depois de criar a base de dados, vamos criar e atribuir os privilgios do usurio que far o acesso a esse banco.

mysql> GRANT ALL ON print.* TO jasmine@CUPS_SERVER IDENTIFIED BY 'sql_password';mysql> GRANT ALL ON print.* TO jasmine@WEB_SERVER IDENTIFIED BY 'sql_password';mysql> FLUSH PRIVILEGES;

O jasmine pode ser instalado em um servidor CUPS e outro servidor web sem problemas, basta apenas setar o host para dar a permisso ao usurio jasmine. No meu servidor rodas os dois servios (CUPS e APACHE), ento o meu host ficaria s um, o localhost.

mysql> GRANT ALL ON print.* TO jasmine@localhost 'sql_password';mysql> FLUSH PRIVILEGES;

Terminamos de criar a base de dados, agora vamos descompactar o arquivo JASmine-MySQL-0.0.3.tar.bz2.

# tar -zvjf JASmine-MySQL-0.0.3.tar.bz2# cd JASmine-MySQL-0.0.3

Agora pegue o arquivo jasmine.sql e vamos importar para nosso banco de dados MySQL com o comando:

# mysql -u root -p print < jasmine.sql

Depois de terminar essa etapa vamos para o JASmine-Backend-0.0.3.

JASmine-Backend-0.0.3 Vamos descompactar o arquivo JASmine-Backend-0.0.3.tar.bz2:

# tar -xvjf JASmine-Backend-0.0.3.tar.bz2# cd JASmine-Backend-0.0.3

Dentro da pasta JASmine-Backend vamos descompactar o programa pkpgcounter-2.10.tar.gz e instalar usando o python. Lembre-se que o Python deve estar instalado no seu servidor, seno no ser possvel instalar o pkpgcounter.

# tar -xvzf pkpgcounter-2.10.tar.gz# cd pkpgcpunter-2.10# python setup.py install

Depois de instalar o pkpgcounter vamos voltar na pasta JASmine-Backend e vamos copiar o script em Perl chamado jasmine para a pasta /usr/lib/cups/backend, depois de copiado vamos na pasta backend em /usr/lib/cups/backend e vamos atribuir a permisso 755 no arquivos jasmine. Lembre-se que o Perl deve estar instalado no seu servidor seno o script no vai funcionar.

# cp jasmine /usr/lib/cups/backend/# cd /usr/lib/cups/backend# chmod 755 jasmine

Vamos editar o arquivo jasmine e configurar nosso banco de dados. Use o editor de sua preferncia, aqui estou usando o vi.

# vi jasmine

Procure pelas linhas do MySQL:

my $Dbhost="MYSQL_HOST"; ----> Host onde se encontra o banco de dados.my $Dblogin="MYSQL_LOGIN"; ----> Login do usurio que vai acessar o banco.my $Dbpassword="MYSQL_PASS"; ----> Senha do usurio que vai acessar o banco.my $DBdatabase="MYSQL_DB"; ----> Nome do banco de dados do Jasmine.

E altere para: my $DBhost="localhost";my $DBlogin="jasmine";my $DBpassword="sql_password";my $Dbdatabase="print";

Procure pela linha:

my $Debug_Mode=1;

E altere para: my $Debug_Mode=0;

Salve o arquivo e feche, reinicie o CUPS com o comando:

# /etc/init.d/cups restart

Agora vamos para etapa final, que o JASmine-Web-0.0.3.

JASmine-Web-0.0.3 Lembre-se: O Apache deve estar instalado com suporte a php5 e funcionando.

Descompacte a pasta JASmine-Web-0.0.3.tar.bz2, renomeie a pasta JASmine-Web-0.0.3 para jasmine e coloque na pasta onde o apache procura o site. ex: /srv/www/htdocs/.

# tar -xvjf Jasmine-Web-0.0.3.tar.bz2# mv Jasmine-Web-0.0.3 /srv/www/htdocs/jasmine

Entre na pasta jasmine que voc acabou de mover, procure pelo arquivo config.php.dist e copie para o mesmo diretrio com o nome config.php.

# cd /srv/www/htdocs/jasmine# cp config.php.dist config.php

Agora vamos editar o arquivo config.php e configurar nosso banco de dados. Use o editor de sua preferncia, no meu caso estou usando o vi.

# vi config.php

Procure pelas linhas:

// Database vars$DB_host="MYSQL_SERVER"; ---> nome do host onde esta o banco de dados.$DB_login="MYSQL_USER"; ----> login do usurio que vai acessar o banco.$DB_pass="MYSQL_PASSWORD"; ----> senha do usurio que vai acessar o banco.$DB_db="MYSQL_DB"; ----> nome do banco de dados.

Altere para: // Database vars$DB_host="localhost"; $DB_login="jasmine"; $DB_pass="sql_password"; $DB_db="print";

Salve o arquivo e feche. Configure o apache para que ele possa reconhecer o php5 e abrir o index.php no arquivo de configurao do apache, que fica em /etc/apache2/httpd.conf. Feito a configurao, reinicie o apache com o comando:

# /etc/init.d/apache2 restart

Praticamente a instalao terminou, agora vamos instalar uma impressora e fazer o teste.

Instalando uma impressora e testando o JASmine Agora vamos testar o JASmine instalando uma impressora e fazendo um impresso de teste. Depois da instalao o Cups fica com 2 opes, Quota Managed que utiliza o script do jasmine e o normal do cups, sem passar pelo jasmine. Abaixo veja o exemplo:

LPD/LPR Host or Printer ---> configurao do cups sem o jasmine.LPD/LPR Host or Printer (Quota Managed) ---> configurao do cups com o jasmine.

Podemos testar de duas formas. A primeira configurar uma impressora normalmente usando o jasmine e mandar imprimir para conferir se est tudo certo. A outra para quem quer aprofundar mais os testes e usar um arquivo que cria uma impressora virtual, o bom que no gasta papel. :)

Para isso voc entra na pasta JASmine-Backend-0.0.3 e copia o arquivo dummy para o diretrio /usr/lib/cups/backend .

# cp dummy /usr/lib/cups/backend# chmod 755 dummy

Feito reinicie o cups com o comando:

# /etc/init.d/cups restart

Instale a impressora normalmente e na hora de escolher o device procure pela opo Really Virtual Printer for Testing Cups (Quota managed), e depois continue a instalao normalmente.

Lembrando que no Quota Managed usado o script do jasmine.

Relatrios em PHP no Browser Se a instalao ocorreu tudo bem, voc instalou a impressora no cups e funcionou perfeitamente agora voc pode abrir o seu browser preferido (no meu caso o firefox) e digitar o endereo da pgina index.php que voc configurou no apache para comear a ver os relatrios.

A pgina est em ingls e possui poucos recursos, mas voc j pode visualizar impresso de cada usurio ou cada impressora utilizada, basta navegar nos menus.

Como eu precisava de alguns relatrios que o jasmine no fornecia eu abri os cdigos em php e fui modelando as consultas de acordo com a minha necessidade. Confesso que no precisa ser nenhum expert em php pois mesmo no sabendo programar conseguir alterar alguns filtros e inserir um relatrio de consulta por uma determinada data. Caso no agrade fique a vontade para alterar.

Abaixo estou colocando alguns screenshots das alteraes que eu fiz aqui na empresa.

Corrigindo Possveis Problemas Abaixo seguem algumas dicas para solucionar pequenos imprevistos durante a configurao do JASmine.

Verificar se os Softwares esto instalados no servidor. Apache, Cups, MySQL, Perl, Php verso 5, Perl e Python.

Verificar se o servio mysql, apache2 e cups esto rodando (startados).

Verificar se a impressora de rede esta ligada (Parece que no mas acontece muito!).

Verificar se o usurio jasmine esta conseguindo conectar no banco de dados.

Verificar o caminho do pkpgcounter (isso ocorre quando no esta somando pginas no controle de impresso jasmine). Edite o arquivo jasmine que fica dentro do diretrio /usr/lib/cups/backend e altere as seguintes linhas: # Location of the python and pkpgcounter binariesmy $path_to_pkpgcounter="/usr/bin/pkpgcounter";

Procure o pkpgcounter usando o whereis ou locate e altere o seu caminho dentro do script jasmine.

# whereis pkpgcounterpkpgcounter: /usr/local/bin/pkpgcounter

Altere a linha my $path_to_pkpgcounter="/usr/bin/pkpgcounter" para o caminho que o whereis encontrou: # Location of the python and pkpgcounter binariesmy $path_to_pkpgcounter="/usr/local/bin/pkpgcounter";

Pgina em php no abre? Verifique se o apache tem os mdulos necessrios para executar o php5. Verifique tambm se a conexo com o banco de dados do arquivo config.php esta correta, se o cups est rodando e o MySQL tambm.

Gostaria de agradecer a oportunidade de colaborar a minha experincia com vocs, embora eu seja um usurio leigo. Dvidas ou crticas so bem vindas, se gostou deixe seu recado e compartilhe conosco. Afinal Ns Amamos a Liberdade!