{"id":15104877,"url":"https://github.com/igorcarmona-git/csvtodb_printeraudition","last_synced_at":"2026-02-07T05:33:04.036Z","repository":{"id":254622655,"uuid":"847014526","full_name":"igorcarmona-git/CSVtoDB_PrinterAudition","owner":"igorcarmona-git","description":"Solução interna para realizar uma auditoria de impressão no servidor de PrintServer.","archived":false,"fork":false,"pushed_at":"2025-01-22T19:06:05.000Z","size":226,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-11T14:13:34.864Z","etag":null,"topics":["postgres","printerservice","python","python-script","sql","windowsserver"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/igorcarmona-git.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-08-24T15:51:05.000Z","updated_at":"2025-01-22T19:06:09.000Z","dependencies_parsed_at":"2025-01-18T19:26:33.939Z","dependency_job_id":"da85adf9-831e-4ead-b23d-15068481c067","html_url":"https://github.com/igorcarmona-git/CSVtoDB_PrinterAudition","commit_stats":{"total_commits":6,"total_committers":3,"mean_commits":2.0,"dds":0.5,"last_synced_commit":"3fc5c8039675eb491270681a67fe316d87bb8e62"},"previous_names":["igorcarmona-git/csvtodb_printeraudition"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/igorcarmona-git/CSVtoDB_PrinterAudition","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/igorcarmona-git%2FCSVtoDB_PrinterAudition","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/igorcarmona-git%2FCSVtoDB_PrinterAudition/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/igorcarmona-git%2FCSVtoDB_PrinterAudition/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/igorcarmona-git%2FCSVtoDB_PrinterAudition/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/igorcarmona-git","download_url":"https://codeload.github.com/igorcarmona-git/CSVtoDB_PrinterAudition/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/igorcarmona-git%2FCSVtoDB_PrinterAudition/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263940262,"owners_count":23533009,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["postgres","printerservice","python","python-script","sql","windowsserver"],"created_at":"2024-09-25T20:03:23.481Z","updated_at":"2026-02-07T05:33:04.003Z","avatar_url":"https://github.com/igorcarmona-git.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Solução interna para realizar uma auditoria de impressão no servidor de PrintServer.\r\nSegue link de vídeo apresentando a solução: https://youtu.be/C8vHhR_xC4w\r\n\r\nPara 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.\r\n\r\n**- Configurações:**\r\n- 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.\r\n- Deve ter um banco de dados Postgres já funcionando.\r\n- Python 3.12 deve estar instalado no servidor.\r\n- Configurar corretamente o Local da impressora para cada impressora no PrintServer, deve estar igualzinho ao `namecdc` cadastrado na tabela CenterCostPrinters no banco.\r\n![localPrinter](imagesMD/locationPrinter.png)\r\n\r\n- 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\\):\r\n![remoteFolder](imagesMD/remoteFolder.png)\r\n\r\n- Configurar as variáveis de ambiente dentro servidor conforme a descrição abaixo para o seu databank:\r\n  ```bash\r\n  DB_HOST = ''\r\n  DB_NAME = ''\r\n  DB_USER = ''\r\n  DB_PASSWORD = ''\r\n  ```\r\n- Criar as tabelas no banco de dados\r\n  \r\n**printJobs:**\r\n  ```sql\r\n    CREATE TABLE printJobs (\r\n    id SERIAL PRIMARY KEY,\r\n    cdcid INTEGER,\r\n    timedoc TIMESTAMP NOT NULL,\r\n    username VARCHAR(255) NOT NULL,\r\n    pages INTEGER NOT NULL,\r\n    copies INTEGER NOT NULL,\r\n    printer VARCHAR(255) NOT NULL,\r\n    documentName VARCHAR(255) NOT NULL,\r\n    clientPC VARCHAR(255) NOT NULL,\r\n    paperSize VARCHAR(50),\r\n    languageMethod VARCHAR(50),\r\n    height VARCHAR(50),\r\n    width VARCHAR(50),\r\n    duplex VARCHAR(50),\r\n    grayscale VARCHAR(50),\r\n    fileSize VARCHAR(50),\r\n    FOREIGN KEY (cdcid) REFERENCES centercostprinters(id)\r\n  );\r\n  ```\r\n**CenterCostPrinters**\r\n```sql\r\nCREATE TABLE centercostprinters(\r\n\tid PRIMARY KEY,\r\n\tnamecdc VARCHAR(255) NOT NULL,\r\n\tgestao VARCHAR(255) NOT NULL,\r\n\tstatus BOOLEAN NOT NULL\r\n);\r\n```\r\n\r\nCaminho 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\r\n![pathFile](imagesMD/path-file-papercut.png)\r\n\r\n## Funcionalidades\r\n\r\nEste 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. \r\nBusca 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`.\r\n\r\nComo o ID está referenciado a tabela de Centro de Custo, é possível criar indicadores e separar por Centros de Custos suas atividades para auditoria.\r\n\r\n**1. Clone o repositório:**\r\n\r\n```bash\r\ngit clone https://github.com/igorcarmona-git/CSVtoDB_PrinterAudition.git\r\ncd CSVtoDB_PrinterAudition\r\n```\r\n\r\n**2. Instale as dependências:**\r\n`pip install pywin32 pandas psycopg2`\r\n\r\n**3. Como executar:**\r\n- Agendar no Agendador de Tarefas do windows com privilégios de administrador.\r\n- Executar conforme sua necessidade\r\n\r\n## Exemplo de indicador 1 (Análise de Quantidade de impressões por Centro de Custo)\r\n```sql\r\n--Conta a quantidade total de páginas para cada CDC\r\nSELECT c.namecdc, p.cdcid, sum(COALESCE(p.pages * p.copies, 0)) AS totalPages\r\nFROM printjobs p\r\nINNER JOIN centercostprinters c ON c.id = p.cdcid\r\nWHERE p.timedoc BETWEEN '2024-09-01' AND '2024-09-30'\r\nGROUP BY c.namecdc, p.cdcid \r\nORDER BY totalPages DESC;\r\n```\r\nResultado da consulta SQL:\r\n![pathFile](imagesMD/querySQL.png)\r\n\r\n## Exemplo de indicador 2 (Análise de impressões feitas por usuário/hostname)\r\n```sql\r\nSELECT p.timedoc, p.username, p.documentname, p.clientPC FROM printjobs p \r\nWHERE p.username LIKE 'italopavao%' ORDER BY timedoc DESC;\r\n```\r\nResultado da consulta SQL:\r\n![pathFile](imagesMD/querySQL2.png)\r\n\r\n## Contribuição\r\nContribuições são bem-vindas! Sinta-se à vontade para abrir issues ou pull requests para melhorar o projeto.\r\n\r\n**Para mais informações, entrar em contato via redes sociais.**\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Figorcarmona-git%2Fcsvtodb_printeraudition","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Figorcarmona-git%2Fcsvtodb_printeraudition","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Figorcarmona-git%2Fcsvtodb_printeraudition/lists"}