https://github.com/igorcarmona-git/csvtodb_printeraudition
Solução interna para realizar uma auditoria de impressão no servidor de PrintServer.
https://github.com/igorcarmona-git/csvtodb_printeraudition
postgres printerservice python python-script sql windowsserver
Last synced: 5 months ago
JSON representation
Solução interna para realizar uma auditoria de impressão no servidor de PrintServer.
- Host: GitHub
- URL: https://github.com/igorcarmona-git/csvtodb_printeraudition
- Owner: igorcarmona-git
- Created: 2024-08-24T15:51:05.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-01-22T19:06:05.000Z (11 months ago)
- Last Synced: 2025-04-11T14:13:34.864Z (8 months ago)
- Topics: postgres, printerservice, python, python-script, sql, windowsserver
- Language: Python
- Homepage:
- Size: 221 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Solução interna para realizar uma auditoria de impressão no servidor de PrintServer.
Segue link de vídeo apresentando a solução: https://youtu.be/C8vHhR_xC4w
Para complementar a inserção de dados no banco, utilizo o software gratuito da PaperCut (https://www.papercut.com/pt-br/). Embora ofereça informações básicas de auditoria de impressão, ele se limita a gerar um arquivo .csv a cada impressão no servidor e não possui suporte para banco de dados ou criação de indicadores. Devido ao alto custo das soluções automatizadas, a empresa optou por não investir em software pago. Assim, decidi desenvolver uma solução gratuita que possa automatizar a auditoria e gerar indicadores relevantes para a empresa juntamente com a separação de Centro de Custos.
**- Configurações:**
- O código deve ser executado em um servidor de impressão Windows como administrador. Pode ser ajustado via Agendador Tarefas, executado por um período de tempo que se enquadra com sua realidade.
- Deve ter um banco de dados Postgres já funcionando.
- Python 3.12 deve estar instalado no servidor.
- Configurar corretamente o Local da impressora para cada impressora no PrintServer, deve estar igualzinho ao `namecdc` cadastrado na tabela CenterCostPrinters no banco.

- Criar uma pasta para receber as cópias dos arquivos novos para guardar no banco. No meu caso foi (\\192.168.0.193\Sistemas\PaperCut-logs\):

- Configurar as variáveis de ambiente dentro servidor conforme a descrição abaixo para o seu databank:
```bash
DB_HOST = ''
DB_NAME = ''
DB_USER = ''
DB_PASSWORD = ''
```
- Criar as tabelas no banco de dados
**printJobs:**
```sql
CREATE TABLE printJobs (
id SERIAL PRIMARY KEY,
cdcid INTEGER,
timedoc TIMESTAMP NOT NULL,
username VARCHAR(255) NOT NULL,
pages INTEGER NOT NULL,
copies INTEGER NOT NULL,
printer VARCHAR(255) NOT NULL,
documentName VARCHAR(255) NOT NULL,
clientPC VARCHAR(255) NOT NULL,
paperSize VARCHAR(50),
languageMethod VARCHAR(50),
height VARCHAR(50),
width VARCHAR(50),
duplex VARCHAR(50),
grayscale VARCHAR(50),
fileSize VARCHAR(50),
FOREIGN KEY (cdcid) REFERENCES centercostprinters(id)
);
```
**CenterCostPrinters**
```sql
CREATE TABLE centercostprinters(
id PRIMARY KEY,
namecdc VARCHAR(255) NOT NULL,
gestao VARCHAR(255) NOT NULL,
status BOOLEAN NOT NULL
);
```
Caminho do arquivo gerado pelo PaperCut pela instalação padrão: C:\Program Files (x86)\PaperCut Print Logger\logs\csv\papercut-print-log-all-time.csv

## Funcionalidades
Este código ele faz a conexão com um banco de dados Postgres, se conecta ao WMI(Windows Management Instrumentation) do servidor de impressão.
Busca pelas informações de impressoras instaladas no servidor, verifica pelas tabelas `printJobs` e `centerCostPrinters` se o Local da impressora retornado para cada nome de impressora é igual ao `cdcid` da tabela `CenterCostPrinters` se for igual, é setado o ID do Centro de Custo juntamente com os dados que irão para a tabela `printJobs`.
Como o ID está referenciado a tabela de Centro de Custo, é possível criar indicadores e separar por Centros de Custos suas atividades para auditoria.
**1. Clone o repositório:**
```bash
git clone https://github.com/igorcarmona-git/CSVtoDB_PrinterAudition.git
cd CSVtoDB_PrinterAudition
```
**2. Instale as dependências:**
`pip install pywin32 pandas psycopg2`
**3. Como executar:**
- Agendar no Agendador de Tarefas do windows com privilégios de administrador.
- Executar conforme sua necessidade
## Exemplo de indicador 1 (Análise de Quantidade de impressões por Centro de Custo)
```sql
--Conta a quantidade total de páginas para cada CDC
SELECT c.namecdc, p.cdcid, sum(COALESCE(p.pages * p.copies, 0)) AS totalPages
FROM printjobs p
INNER JOIN centercostprinters c ON c.id = p.cdcid
WHERE p.timedoc BETWEEN '2024-09-01' AND '2024-09-30'
GROUP BY c.namecdc, p.cdcid
ORDER BY totalPages DESC;
```
Resultado da consulta SQL:

## Exemplo de indicador 2 (Análise de impressões feitas por usuário/hostname)
```sql
SELECT p.timedoc, p.username, p.documentname, p.clientPC FROM printjobs p
WHERE p.username LIKE 'italopavao%' ORDER BY timedoc DESC;
```
Resultado da consulta SQL:

## Contribuição
Contribuições são bem-vindas! Sinta-se à vontade para abrir issues ou pull requests para melhorar o projeto.
**Para mais informações, entrar em contato via redes sociais.**