Skip to content

fix: corrige 3 bugs criticos em search, stats e filtro de status#1

Open
FabricioZacchi wants to merge 1 commit into
GMS64260:mainfrom
FabricioZacchi:fix/search-limit-and-ticket-stats
Open

fix: corrige 3 bugs criticos em search, stats e filtro de status#1
FabricioZacchi wants to merge 1 commit into
GMS64260:mainfrom
FabricioZacchi:fix/search-limit-and-ticket-stats

Conversation

@FabricioZacchi

Copy link
Copy Markdown

Descrição

Este PR corrige 3 bugs críticos identificados em produção com mais de 10.000 tickets no GLPI.


🐛 Bug 1 — retorna dados errados

Sintoma em produção:

Causa raiz: carregava os primeiros 10.000 tickets () e filtrava em memória. Em bases com mais de 10.000 tickets, a API GLPI ordena por ID ASC, retornando apenas os mais antigos (todos ). Tickets ativos ficam além da posição 10.000 e nunca são contabilizados.

Correção: 6 requisições paralelas à API de search com por status, consumindo apenas o campo — sem transferir dados dos tickets.


🐛 Bug 2 — retorna respostas de 8MB+

Sintoma em produção: nos logs do MCP.

Causa raiz: O método não passava o parâmetro à API GLPI, que retornava até 150 itens com todos os campos (incluindo conteúdo HTML completo dos tickets).

Correção: Adicionado ao método com aplicação de . Padrão de 20 itens. A tool agora retorna e informação de paginação.


🐛 Bug 3 — ignora o filtro de

Sintoma em produção: Filtrar por (New) retornava tickets com status Solved e Processing.

Causa raiz: O parâmetro era recebido pela tool mas nunca passado para . O endpoint não suporta filtro de status, que era silenciosamente ignorado.

Correção: Quando é fornecido, usa a API de search com (campo status no GLPI), garantindo filtro correto no servidor.


Arquivos modificados

Arquivo Bugs corrigidos
Bug 1 + Bug 2
Bug 2 + Bug 3

Testado em GLPI com mais de 10.000 tickets, mcp-glpi v2.0.0, Node.js 20.

Bug 1 – getTicketStats() com dados errados em bases com >10.000 tickets:
A implementação anterior carregava os primeiros 10.000 tickets (range 0-9999)
e filtrava em memória. Em ambientes com muitos tickets, os registros mais antigos
(todos com status 'closed') preenchiam o range, zerando new/processing/pending/solved.
Corrigido usando a API de search com range=0-0 por status, consumindo apenas o
campo totalcount — sem transferir dados dos tickets.

Bug 2 – glpi_search retornando respostas massivas (8MB+):
O método search() não aplicava range na requisição, fazendo o GLPI retornar
até 150 itens com todos os campos (incluindo conteúdo HTML), gerando respostas
de 8MB que inviabilizavam o uso com LLMs. Corrigido adicionando suporte a
options.limit no método search() e aplicando range=0-{limit-1}. A tool
glpi_search agora tem limit padrão de 20 itens e retorna totalcount + paginação.

Bug 3 – glpi_list_tickets ignorando o filtro de status:
O parâmetro status era recebido pela tool mas nunca passado para getTickets(),
que por sua vez não suporta filtro de status via getItems(). A consulta retornava
tickets de qualquer status independente do filtro informado. Corrigido usando
a API de search com field=12 (status) quando o parâmetro status é fornecido.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant