insoft-report-gateway
-
Insoft Report Gateway
API destina a servir como comunicador entre as aplicações que solicitarem agendamento ou execução de relatórios e os Executores.
Deve existir somente uma instância por banco.
Compatibilidade
Sistema Versão GTSoft 3.0.0.0 > * Pontosoft Enterprise 7.0.0.0 > * Akitasoft 7.0.0.0 > * Pontosoft Express - Informações técnicas
Descrição Versão 1.0.3 Deploy O:\Sistemas_Java\Insoft-Report-Gateway Repositório https://gitlab.insoft4.com.br/apis/insoft-report-gateway Tecnologias usadas
JDK 11
Grails 5.2.2Instalação
Para que o sistema funcione é necessário realizar as configurações descritas abaixo e que as aplicações codependentes (Executor e aplicação final com os plugins Insoft Report Generator e Insoft Report Generator UI) estejam instaladas.
Configuração externalizada
Para realizar a configuração externalizada basta criar um arquivo com o nome
application.ymlem uma das seguintes opções:- home do usuário/.grails/insoft-report-gatewayConfig/application.yml
- diretório base de configurações/insoft-report-gatewayConfig/application.yml
Configuração
Configurações que são utilizadas para o correto funcionamento da geração dos relatórios. Para o funcionamento correto, todos os itens abaixo devem ser configurados.
insoftReportGateway.clearCron: Recebe uma cron que indicará o tempo em que deve buscaros registros e arquivos antigos para apagá-los. insoftReportGateway.daysToKeep: Funciona em paralelo com a Cron, servido de data de corte para apagar os registros e arquivos. Por padrão assume 0. Quando zerado não deleta arquivos. insoftReportGateway.scheduleTime: Valor inteiro que indica o intervalo de tempo, em minutos, que realizará a busca por novos registros de agendamento. Por padrão assume 1. insoftReportGateway.executeTime: Valor inteiro que indica o intervalo de tempo, em segundos, do disparo da execução para um Executor. Por padrão assume 10. insoftReportGateway.isAliveTime: Valor inteiro que indica o intervalo de tempo, em minutos, para a verificação de conexão com os Executores e Aplicações registradas. Por padrão assume 2. insoftReportGateway.directory: Valor em String que indica o diretório que os arquivos gerados serão salvos. insoftReportGateway.imageAppReport.PONTOSOFT: Valor em String, informando o caminho para a imagem da aplicação Pontosoft. Esta só será usada por Agendamentos realizados através do sistema Pontosoft Enterprise. Imagem localizada no canto direito do cabeçalho dos relatórios PDF. insoftReportGateway.imageAppReport.AKITASOFT: Valor em String, informando o caminho para a imagem da aplicação Akitasoft. Esta só será usada por Agendamentos realizados através do sistema Akitasoft. Imagem localizada no canto direito do cabeçalho dos relatórios PDF. insoftReportGateway.imageAppReport.GTSOFT: Valor em String, informando o caminho para a imagem da aplicação GTSoft. Esta só será usada por Agendamentos realizados através do sistema GTSoft. Imagem localizada no canto direito do cabeçalho dos relatórios PDF. insoftReportGateway.imageAppReport.PSEXPRESS: Valor em String, informando o caminho para a imagem da aplicação Pontosoft Express. Esta só será usada por Agendamentos realizados através do sistema Pontosoft Express. Imagem localizada no canto direito do cabeçalho dos relatórios PDF. insoftReportGateway.imageReport: Valor em String, informando o caminho para a imagem do cliente. Imagem localizada no canto esquerdo do cabeçalho dos relatórios PDF. insoftReportGateway.scheduling.enabled: Valor booleano informando se o Gateway está preparado para agendamentos. insoftReportGateway.execution.enabled: Valor booleano informando se o Gateway está preparado para execuções imediadas de agendamentos. api.authenticator.url: Valor em String, apontando para o insoft-auth para que o download dos arquivos gerados sejam liberados somente para quem tiver a devida permissão.Banco de Dados
Informar valores para realizar a conexão com o banco no arquivo application.yml.
Deve ser o mesmo da Aplicação e Executores conectados.
dataSource: url: url.para.banco.de.dados username: "usuario" password: "senha" properties: initialSize: 3 maxActive: 10 minIdle: 3 maxIdle: 5 maxWait: 15000 maxAge: 3600000 timeBetweenEvictionRunsMillis: 30000 minEvictableIdleTimeMillis: 90000 validationQuery: "SELECT 1 FROM DUAL" validationQueryTimeout: 3 validationInterval: 60000 testOnBorrow: true testWhileIdle: true testOnReturn: falseApós isso basta subir o projeto e configurar a URL nas aplicações e Executores, que estes irão iniciar a comunicação.
Funcionamento
O sistema funciona em conjunto com o Executor (uma ou mais instâncias) e Aplicação final (uma ou mais instâncias) com os plugins Insoft Report Generator e Insoft Report Generator UI instalados.
O gateway consistem em uma API que realiza a busca de registros na
in4gr_agendamentospara distribuir para os Executores realizarem a execução do relatório agendado, dessa forma não sendo necessário esperar o mesmo gerar durante a utilização da Aplicação Final.O Gateway mantém salvo instâncias das Aplicações e Executores.
Registro de Aplicações
Nesse passo o Gateway recebe informações sobre a aplicação que está se cadastrando, como URL em que ela está rodando, o nome do sistema e a versão do sistema.
Esses valores são armazenados para serem informados aos Executores que se registraram para buscar as mensagens internacionalizadas para os relatórios.
Registro de Executores
Nesse passo o Gateway recebe informações sobre o Executor, como a URL em que ele está rodando e o total de relatórios que podem ser executados simultaneamente por ele.
Com isso é adicionado uma referência interna para esse Executor, que posteriormente receberá os relatórios para executá-los.
Aqui é retornado uma lista com todas as aplicações cadastradas no Gateway, caso existam.
Validação de Conexão
ExecutorIsAliveTask
Essa tarefa consiste em realizar uma checagem de conexão com todos os Executores e Aplicações cadastrados no Gateway, caso de erro em alguma requisição esse perderá a conexão.
O tempo de intervalo da tarefa é definido conforme valor configurado em
insoftReportGateway.isAliveTime(valor em minutos);Execução de Agendamentos
ScheduleTask
Essa tarefa consiste em realizar a busca dos registros da tabela
in4gr_agendamentosonde o status seja PENDENTE, com isso eles são adicionados em uma fila de execução e seu status é atualizado para AGUARDANDO_GERACAO.O tempo de intervalo da tarefa é definido conforme valor configurado em
insoftReportGateway.scheduleTime(valor em segundos);ExecuteTask
Essa tarefa irá realizar um request para um executor livre passando o
iddo próximo agendamento da fila.O tempo de intervalo da tarefa é definido conforme valor configurado em
insoftReportGateway.executeTime(valor em segundos);Limpeza de Agendamentos Antigos
ClearTask
Essa tarefa realiza uma varredura nos arquivos e registros antigos, para realizar a limpeza de dados obsoletos, usando o tempo máximo de vida de cada arquivo/registro definido em
insoftReportGateway.daysToKeep.O tempo de intervalo da tarefa é definido conforme valor configurado em
insoftReportGateway.clearCron(valor é uma CRON).Caso o valor de
insoftReportGateway.daysToKeepseja igual a ZERO ou não haja uma cron definida eminsoftReportGateway.clearCronnão haverá limpeza de Agendamentos Antigos.Verificação de Registro
Executor
Nessa etapa o Gateway recebe uma requisição do Executor informando a URL e total de relatórios que pode executar simultaneamente para validar se ele ainda continua registrado.
Aplicação
Nessa etapa o Gateway recebe uma requisição da Aplicação Final informando a URL, nome do sistema e versão para validar se ela ainda continua registrada.
Busca de Imagens para execução
Possui 2 endpoints direcionados para a utilização do Executor, eles retornam as imagens que devem ser usadas nos arquivos de relatórios gerados em PDF.
São disponibilizados em 2 endpoints
/v1/reportScheduling/imageAppReporte/v1/reportScheduling/imageReportimageAppReport
Recebe o nome do sistema do relatório que está sendo executado para retornar a imagem correta, o valor da busca será
insoftReportGateway.imageAppReport.NOME_DO_SISTEMA.Essa imagem fica no canto direito do cabeçalho.
imageReport
Retorno a imagem definida na configuração
insoftReportGateway.imageReport.Essa imagem fica no canto esquerdo do cabeçalho.
Disparo de Scheduling
Nessa etapa a Aplicação Final, após salvar o registro de agendamento no banco, realiza uma requisição para o Gateway, para que seja realizado o disparo da ScheduleTask, evitando tempo de ociosidade.
Save dos arquivos
Após o fim da execução de um Agendamento pelo Executor, o Gateway recebe uma request do Executor informando a finalização.
Aqui o Gateway realiza a limpeza do Executor em questão, tornando disponpível novamente para a execução de novos relatórios e também realiza o save do arquivo recebido pelo Executor.
O nome do arquivo se monta da seguinte forma DATA_HORA_DA_GERACAO + _ + ID + EXTENSAO, o resultado fica 20230516_163105_123.pdf.
Download de Arquivos
Possui um endpoint para realizar o download dos arquivos gerados, esse endpoint é protegido via token, o mesmo da aplicação, dessa forma somente quem mandou executar o relatório ou um administrador pode realizar o download do arquivo.
-
1.0.1
OS10461-
Adicionar utilização do plugin insoft-fw-domains, para evitar repetição de código.
-
Corrigir imports para o plugin correto.
-
Atualização dos plugins insoft-core, insoft-api-security e insoft-gr.
-
-
v1.0.2
OS10102- Atualizar versão do plugin insoft-gr.
- Corrigir README.
- Implementar disparo imediato de exeução de agendamentos.
- Retornar status correto caso não tenha acesso ao relatório solicitado para download.
Segundo as RFCs dos dois status (401 e 403), para uma solicitação onde as credenciais são insuficientes o status correto para retorno é 403. Isso resolve o problema de deslogar do sistema, quando a request feita pelo frontend.
-
1.0.3
OS10469- Aumentar limite de tamanho para relatórios recebidos na request.
- Usar logs conforme padrão definido.