API e CronJob de sincronismo de chamados entre Hubsoft e GLPI — integração com Mundiale
| src | ||
| .env.example | ||
| .gitignore | ||
| ecosystem.config.js | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
Serviço de Integração HubSoft <> GLPI
Este serviço realiza a integração e sincronização de tickets entre as plataformas HubSoft e GLPI, garantindo que as informações fluam de maneira consistente e automatizada entre os dois sistemas.
✨ Funcionalidades Principais
- Sincronização Bidirecional Parcial:
- Criação: Tickets abertos no HubSoft são automaticamente criados no GLPI.
- Fechamento: Tickets "Mundiale" fechados no GLPI disparam o fechamento do atendimento correspondente no HubSoft.
- Processamento Assíncrono: Utiliza um cron job para processar a criação de tickets em segundo plano, sem impactar a performance da API.
- Banco de Dados Intermediário: Usa um banco de dados PostgreSQL para gerenciar o estado da sincronização, garantindo resiliência e rastreabilidade.
- Mecanismo de Trava (Locking): Previne condições de corrida e processamento duplicado de webhooks.
- Configuração Flexível: Todas as chaves de API e conexões de banco de dados são gerenciadas por variáveis de ambiente.
- Logging Detalhado: Registra todas as operações e erros em arquivos de log para fácil depuração.
🏗️ Arquitetura e Fluxo de Dados
A aplicação opera com dois fluxos principais:
1. Fluxo de Criação de Tickets (Cron Job)
Este fluxo roda a cada 5 minutos para sincronizar novos atendimentos do HubSoft para o GLPI.
┌──────────────────┐ ┌───────────────────┐ ┌──────────────────┐ ┌──────────┐
│ DB do HubSoft ├─────►│ Serviço (Cron) ├─────►│ DB Intermediário├─────►│ API GLPI │
└──────────────────┘ └───────────────────┘ └──────────────────┘ └──────────┘
(Lê) (Processa dados) (Salva & Trava) (Cria Ticket)
- O Cron Job é disparado.
- O serviço consulta o banco de dados do HubSoft em busca de novos atendimentos.
- Os dados são processados e salvos no Banco de Dados Intermediário com o status
pending_create. - O serviço lê os tickets pendentes, formata os dados e os envia para a API do GLPI para criar o ticket.
- Após a criação, o status no banco intermediário é atualizado para
created_glpi.
2. Fluxo de Fechamento de Tickets (Webhook)
Este fluxo é iniciado por um evento de fechamento de ticket no GLPI.
┌──────────────┐ ┌──────────────────┐ ┌────────────────┐ ┌──────────────────┐
│ GLPI Webhook ├─────►│ Serviço (API) ├─────►│ API do HubSoft ├─────►│ DB Intermediário│
└──────────────┘ └──────────────────┘ └────────────────┘ └──────────────────┘
(Dispara) (Valida e Trava) (Fecha Atendimento) (Atualiza Status)
- O GLPI dispara um webhook quando um ticket é fechado.
- A API do serviço recebe a requisição e verifica se o ticket é elegível (contém "Mundiale" no título).
- O serviço obtém uma trava no banco de dados intermediário, mudando o status para
processing_closepara evitar processamento duplicado. - Uma chamada é feita para a API do HubSoft para fechar o atendimento correspondente.
- Após o sucesso, o status no banco intermediário é atualizado para
closed_glpi.
🚀 Instalação e Execução
Pré-requisitos
- Node.js (versão 18.x ou superior)
- NPM
- Acesso a dois bancos de dados PostgreSQL (um para o HubSoft e outro para a aplicação).
1. Clone o Repositório
git clone ssh://usuario.autorizado@10.0.120.75:60000/home/desenvolvimento/HUBXGLPI/HUBXGLPI.git
cd HUBXGLPI
2. Instale as Dependências
npm install
3. Configure as Variáveis de Ambiente
Crie um arquivo .env.production e um .env.development na raiz do projeto, copiando o exemplo de .env.example.
cp .env.example .env
Preencha o arquivo .env com as credenciais corretas:
# Configurações do Servidor
PORT=3000
# Banco de Dados da Aplicação (HubGLPI)
HUBGLPI_DB_HOST=localhost
HUBGLPI_DB_PORT=5432
HUBGLPI_DB_USER=postgres
HUBGLPI_DB_PASSWORD=sua_senha
HUBGLPI_DB_NAME=hubglpi
# Banco de Dados do HubSoft (Acesso de Leitura)
HUBSOFT_DB_HOST=ip_do_banco_hubsoft
HUBSOFT_DB_PORT=5432
HUBSOFT_DB_USER=usuario_leitura
HUBSOFT_DB_PASSWORD=senha_leitura
HUBSOFT_DB_NAME=hubsoft
# API do GLPI
GLPI_API_URL=https://seu-glpi.com/apirest.php
GLPI_APP_TOKEN=seu_app_token
GLPI_USER_TOKEN=seu_user_token
# API do HubSoft
HUBSOFT_API_URL=https://seu-hubsoft.com/api/v1
HUBSOFT_API_TOKEN=seu_token_hubsoft
4. Inicie a Aplicação
NODE_ENV=development node src/server.js
ou
NODE_ENV=production node src/server.js
O servidor será iniciado, e o cron job começará a ser executado em segundo plano.
📂 Estrutura do Projeto
src/
├── app.js # Configuração da instância do Express.
├── server.js # Ponto de entrada: inicia o servidor e o cron job.
├── routes.js # Definição das rotas da API.
│
├── config/ # Arquivos de configuração.
│ ├── apiConfig.js # Configuração das APIs externas.
│ ├── dbConfig.js # Configuração dos bancos de dados.
│ └── envLoader.js # Carregador de variáveis de ambiente.
│
├── controller/ # Camada que lida com requisições HTTP.
│ ├── ClosureController.js # Controller para o webhook de fechamento.
│ └── processController.js # Controller para o fluxo de criação via cron.
│
├── data/ # Configuração da conexão com os bancos.
│ ├── hubglpiDataBase.js # Pool de conexão para o DB da aplicação.
│ └── hubsoftDataBase.js # Pool de conexão para o DB do HubSoft.
│
├── model/ # Camada de acesso a dados.
│ ├── glpiModel.js # Funções para interagir com a API do GLPI.
│ ├── hubglpiModel.js # Funções para interagir com o DB da aplicação.
│ └── hubsoftModel.js # Funções para interagir com o DB do HubSoft.
│
├── services/ # Camada de lógica de negócio.
│ ├── hubsoftService.js # Lógica para interagir com a API do HubSoft.
│ └── ticketService.js # Lógica de negócio para o fechamento de tickets.
│
└── utils/ # Funções utilitárias.
├── commentSanitizer.js# Limpeza de texto e HTML.
└── logger.js # Configuração do sistema de logs (Winston).