Rel. de Impressão: PHP+CUPS+JASmine
Gostaria de compartilhar com vocês uma necessidade que obtive na empresa onde trabalhei, 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)
total de impressão de cada usuário, cada impressora, cada servidor (se tiver mais que 1).
Bom, agora vamos com a mão na massa!
Requisitos necessários
Para a instalação do JASmine, certifique-se que o Apache, CUPS, MySQL, PHP version 5, Python e Perl estão instalados e funcionando no seu servidor.
Neste artigo não irei aprofundar a instalação do Apache, CUPS, MySQL, PHP5, Perl e Python, vou começar 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 distribuição, mas nada impede de utilizá-la em outra distribuição, sendo que os passos são todos feitos em código fonte, o que pode alterar é a localização dos serviços ou programas.
Aconselho a ler o arquivo INSTALL que fica dentro das pastas JASmine-* caso haja dúvida, eu fiz apenas um resumo desse INSTALL que acho suficiente para a instalação do programa.
Baixando os arquivos
Feito a verificação dos softwares necessários 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 -p
password: *****
mysql> CREATE DATABASE print;
Depois de criar a base de dados, vamos criar e atribuir os privilégios do usuário que fará o acesso a esse banco.
mysql> GRANT ALL ON print.* TO jasmine@localhost IDENTIFIED BY ‘sql_password’;
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 permissão ao usuário jasmine. No meu servidor rodas os dois serviços (CUPS e APACHE), então 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, senão não será possível 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 permissão 755 no arquivo jasmine. Lembre-se que o Perl deve estar instalado no seu servidor senão o script não vai funcionar.
# cp jasmine /usr/lib/cups/backend/
# cd /usr/lib/cups/backend
# chmod 755 jasmine
# chown root jasmine
Vamos editar o arquivo jasmine e configurar nosso banco de dados. Use o editor de sua preferência, 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 usuário que vai acessar o banco.
my $Dbpassword=”MYSQL_PASS”; —-> Senha do usuário 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 diretório 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 preferência, 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 usuário que vai acessar o banco.
$DB_pass=”MYSQL_PASSWORD”; —-> senha do usuário 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 configuração do apache, que fica em /etc/apache2/httpd.conf. Feito a configuração, reinicie o apache com o comando:
# /etc/init.d/apache2 restart
Praticamente a instalação 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 impressão de teste. Depois da instalação o Cups fica com 2 opções, 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 —> configuração do cups sem o jasmine.
LPD/LPR Host or Printer (Quota Managed) —> configuração 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 não gasta papel.
Para isso você entra na pasta JASmine-Backend-0.0.3 e copia o arquivo dummy para o diretório /usr/lib/cups/backend .
# cp dummy /usr/lib/cups/backend
# chmod 755 dummy
#chown root 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 opção Really Virtual Printer for Testing Cups (Quota managed), e depois continue a instalação normalmente.
Lembrando que no Quota Managed é usado o script do jasmine.
Relatórios em PHP no Browser
Se a instalação 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 endereço da página index.php que você configurou no apache para começar a ver os relatórios.
A página está em inglês e possui poucos recursos, mas você já pode visualizar impressão de cada usuário ou cada impressora utilizada, basta navegar nos menus.
Como eu precisava de alguns relatórios que o jasmine não fornecia eu abri os códigos em php e fui modelando as consultas de acordo com a minha necessidade. Confesso que não precisa ser nenhum expert em php pois mesmo não sabendo programar conseguir alterar alguns filtros e inserir um relatório de consulta por uma determinada data. Caso não agrade fique a vontade para alterar.
Abaixo estou colocando alguns screenshots das alterações que eu fiz:
Corrigindo Possíveis Problemas
baixo seguem algumas dicas para solucionar pequenos imprevistos durante a configuração do JASmine.
Verificar se os Softwares estão instalados no servidor. Apache, Cups, MySQL, Perl, Php versão 5, Perl e Python.
Verificar se o serviço mysql, apache2 e cups estão rodando (startados).
Verificar se a impressora de rede esta ligada (Parece que não mas acontece muito!).
Verificar se o usuário jasmine esta conseguindo conectar no banco de dados.
Verificar o caminho do pkpgcounter (isso ocorre quando não esta somando páginas no controle de impressão jasmine). Edite o arquivo jasmine que fica dentro do diretório /usr/lib/cups/backend e altere as seguintes linhas:
# Location of the python and pkpgcounter binaries
my $path_to_pkpgcounter=”/usr/bin/pkpgcounter”;
Procure o pkpgcounter usando o whereis ou locate e altere o seu caminho dentro do script jasmine.
# whereis pkpgcounter
pkpgcounter: /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 binaries
my $path_to_pkpgcounter=”/usr/local/bin/pkpgcounter”;
Página em php não abre? Verifique se o apache tem os módulos necessários para executar o php5. Verifique também se a conexão com o banco de dados do arquivo config.php esta correta, se o cups está rodando e o MySQL também.
Gostaria de agradecer a oportunidade de colaborar a minha experiência com vocês. Dúvidas ou críticas são bem vindas, se gostou deixe seu recado e compartilhe conosco. Até a próxima.
Últimos 5 artigos de Bruno Neves
4 Comentários »
RSS feed para os comentários deste artigo. TrackBack URL


CORREÇÃO: na linha onde diz:
mysql> GRANT ALL ON print.* TO jasmine@localhost ’sql_password’;
TROCAR POR:
mysql> GRANT ALL ON print.* TO jasmine@localhost IDENTIFIED BY ’sql_password’;
Responder
Prezado,
Instalei o JASmine e funcionou tudo muito bem, mas fiquei com uma dúvida no sreenshot que não apreceu para mim, buscar por data.
Como deixo isso disponibilizado para mim.
Grato
Responder
Meu caro,
Seria possível disponibilizar como fez as alterações nos relatórios?
Estou com o cups + jasmine funcionando. Porém, gostaria de relatórios por data e por departamento.
grato
Responder
olá estou começando a customizar os relatórios do Jasmine , para que atenda a minha necessidade,gostaria de saber como faço para o jasmine gerar os relatórios também por departamento(onde preciso editar)já que não adianta apenas criar um campo a mais na tabela do banco de dados , e como buscar por data.
Grato
Responder