Rel. de Impressão: PHP+CUPS+JASmine 4


Introdução

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 [email protected]alhost 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 [email protected] ‘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

Sobre Bruno Neves

De Campinas-SP, bacharel em Sistemas de Informação e pós graduando em Redes e Telecomunicações. Trabalha atualmente como Especialista Unix na IBM em Hortolândia-SP. Teve contato com Linux pela primeira vez em Novembro de 2004 através de um curso de Extensão que a Faculdade oferecia. Se tornou membro da comunidade Viva o Linux e desde então foi aprendendo e conhecendo este sistema operacional flexível, robusto e estável. Atualmente tem conhecimento nos Sistemas Operacionais Solaris 9 e 10, AIX 5.3 e 6.1, HP-UX, Red-Hat Enterprise 4 e 5. Utiliza a distribuição Slackware 11, mas sua jornada começou com Red-hat 9, Fedora Core 1, 2, 3, Slackware 10.1, 10.2 e 11.

Deixe uma resposta

4 pensamentos em “Rel. de Impressão: PHP+CUPS+JASmine

  • Luiz Augusto

    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

  • Odair

    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

  • Ivam

    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