<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[insoft-report-executor]]></title><description><![CDATA[<p dir="auto">API destina a servir como executor de relatórios, solicitados pelas aplicações.</p>
<p dir="auto">Pode existir N instâncias.</p>
<h2>Compatibilidade</h2>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Sistema</th>
<th>Versão</th>
</tr>
</thead>
<tbody>
<tr>
<td>GTSoft</td>
<td>3.0.0.0 &gt; *</td>
</tr>
<tr>
<td>Pontosoft Enterprise</td>
<td>7.0.0.0 &gt; *</td>
</tr>
<tr>
<td>Akitasoft</td>
<td>7.0.0.0 &gt; *</td>
</tr>
<tr>
<td>Pontosoft Express</td>
<td>-</td>
</tr>
</tbody>
</table>
<h2>Informações técnicas</h2>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th></th>
<th>Descrição</th>
</tr>
</thead>
<tbody>
<tr>
<td>Versão</td>
<td>1.2.0</td>
</tr>
<tr>
<td>Deploy</td>
<td>O:\Sistemas_Java\Insoft-Report-Executor</td>
</tr>
<tr>
<td>Repositório</td>
<td><a href="https://gitlab.insoft4.com.br/apis/insoft-report-executor" rel="nofollow ugc">https://gitlab.insoft4.com.br/apis/insoft-report-executor</a></td>
</tr>
</tbody>
</table>
<h2>Tecnologias usadas</h2>
<blockquote>
<p dir="auto">JDK 11<br />
Grails 5.2.2</p>
</blockquote>
<h2>Instalação</h2>
<p dir="auto">Para que o sistema funcione é necessário realizar as configurações descritas abaixo e que as aplicações codependentes (<a href="https://gitlab.insoft4.com.br/apis/insoft-report-gateway" rel="nofollow ugc">Gateway</a> e aplicação final com os plugins <a href="https://gitlab.insoft4.com.br/plugins/insoft-report-generator" rel="nofollow ugc">Insoft Report Generator</a> e <a href="https://gitlab.insoft4.com.br/insoft4/npm/insoft-report-generator" rel="nofollow ugc">Insoft Report Generator UI</a>) estejam instaladas.</p>
<h3>Configuração externalizada</h3>
<p dir="auto">Para realizar a configuração externalizada basta criar um arquivo com o nome <code>application.yml</code> em uma das seguintes opções:</p>
<ul>
<li><em>home do usuário</em>/.grails/insoft-report-executorConfig/application.yml</li>
<li><em>diretório base de configurações</em>/insoft-report-executorConfig/application.yml</li>
</ul>
<h3>Configuração</h3>
<p dir="auto">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.</p>
<pre><code class="language-yml">insoftReportExecutor.totalThreads: recebe um valor inteiro para indicar quantos relatórios podem ser executados simultaneamente na instancia do Executor. Por padrão assume 1;
insoftReportExecutor.gateway: recebe uma string para indicar o link do sistema Gateway;
insoftReportExecutor.implementation: recebe um valor do ReportExecutorImplementationEnum para indicar se tomará a abordagem padrão ou referente ao Express. Por padrão assume ReportExecutorImplementationEnum.DEFAULT.getValue();
insoftReportExecutor.intervalRegister: recebe um valor inteiro para indicar o tempo de intervalo, em minutos, para tentar registrar-se no Gateway;
insoftReportExecutor.intervalStillRegistered: recebe um valor inteiro para indicar o tempo de intervalo, em minutos, para validar se ainda permanece registrado no Gateway;
insoftReportExecutor.intervalIsAlive: recebe um valor inteiro para indicar o tempo de intervalo, em minutos, para certificar-se que o Gateway permanece em execução;  
</code></pre>
<h3>Banco de Dados</h3>
<p dir="auto">Informar valores para realizar a conexão com o banco no arquivo application.yml.</p>
<p dir="auto">Deve ser o mesmo da Aplicação e Gateway.</p>
<pre><code class="language-yml">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: false
</code></pre>
<p dir="auto">Após isso basta que o Gateway esteja acessível, ou seja, com um link onde o Executor consiga realizar as requisições necessárias para o funcionamento.</p>
<h2>Funcionamento</h2>
<p dir="auto">O sistema funciona em conjunto com o <a href="https://gitlab.insoft4.com.br/apis/insoft-report-gateway" rel="nofollow ugc">Gateway</a> e Aplicação final com os plugins <a href="https://gitlab.insoft4.com.br/plugins/insoft-report-generator" rel="nofollow ugc">Insoft Report Generator</a> e <a href="https://gitlab.insoft4.com.br/insoft4/npm/insoft-report-generator" rel="nofollow ugc">Insoft Report Generator UI</a> instalados.</p>
<p dir="auto">O Executor consiste em uma API que realiza a execução de um relatório de maneira Agendada, não sendo necessário ficar esperando pela execução do mesmo pelo navegador, visto que ao solicitar a execução o sistema disparará uma série de ações que levarão ao recebimento de execução nesta aplicação aqui.</p>
<p dir="auto">Após o termino da execução é criada uma notificação da aplicação e informado ao Gateway do fim da execução, este por sua vez realiza o salvamento do arquivo e disponibiliza para o download do usuário.</p>
<h3>Cadastro no Gateway</h3>
<p dir="auto">Para o funcionamento das execuções as seguintes Tasks serão inicializadas.</p>
<h4>IsAliveTask</h4>
<p dir="auto">Nesse passo o Executar realiza uma requisição simples para o Gateway, caso a resposta seja de sucesso, significa que o Gateway está rodando perfeitamente, se não for de sucesso o Executor identificará que o Gateway está fora de execução e tentará o contato novamente após o intervalo de execução passar.</p>
<p dir="auto">O tempo de intervalo da tarefa é definido conforme valor configurado em <code>insoftReportExecutor.intervalIsAlive</code> (valor em minutos);</p>
<h4>RegisterTask</h4>
<p dir="auto">Nesse passo o Executor irá enviar as suas informações para o Gateway onde o mesmo receberá a instância e registrará como disponível para execução conforme totalidade de processos que podem ser executados simultaneamente.</p>
<p dir="auto">Dados enviados para o registro</p>
<ul>
<li>URL Atual: URL onde o executor está rodando, o valor deve ser configurado em <code>grails.serverURL</code>;</li>
<li>Total de execuções simultâneas: número de execuções que um executor pode realizar de maneira simultânea, valor configurado em <code>insoftReportExecutor.totalThreads</code>.</li>
</ul>
<p dir="auto">O tempo de intervalo da tarefa é definido conforme valor configurado em <code>insoftReportExecutor.intervalRegister</code> (valor em minutos);</p>
<h4>StillRegisteredTask</h4>
<p dir="auto">Nesse passo o Executor faz uma requisição para Gateway buscando validar se ainda está registrado, para isso a URL atual e o total de execuções simultâneas permitidas são enviadas, caso a referência que o Gateway tinha tenha sido perdida o Executar tentará realizar o registro novamente na próxima execução de <a href="#RegisterTask">RegisterTask</a>.</p>
<p dir="auto">O tempo de intervalo da tarefa é definido conforme valor configurado em <code>insoftReportExecutor.intervalStillRegistered</code> (valor em minutos);</p>
<h3>Execução</h3>
<p dir="auto">A execução de um relatório se da quando é recebida uma requisição no endpoint <code>/v1/reportExecutor</code> informando o <code>id</code> do registro da <code>in4gr_agendamentos</code>, com isso o Executor põe em usa fila interna a execução do relatório e atualiza o status do registro de banco para GERANDO.</p>
<h4>ReportQueueTask</h4>
<p dir="auto">Tarefa interna que busca os registros da fila interna do executor para realizar a execução, dispara a cada 5 segundos.</p>
<p dir="auto">Quando a tarefa acima encontra um registro ela realiza a chamada do método de execução que realizará toda a lógica de execução do relatório.</p>
<p dir="auto">Após isso uma notificação é criada para que o usuário saiba que seu agendamento terminou e o status do registro na <code>in4gr_agendamentos</code> é atualizado para DISPONÍVEL ou ERRO, de acordo com a situação da execução.</p>
<p dir="auto">Após criar a notificação uma requisição é realizada para o Gateway, informando que a execução do Agendamento foi finalizada e para o mesmo salvar o arquivo gerado.</p>
<h2>Log</h2>
<p dir="auto">Salvas informações das ações tomadas no sistema, como, por exemplo, o registro realizado no Gateway.</p>
]]></description><link>http://insoft-docker1:4567/topic/229/insoft-report-executor</link><generator>RSS for Node</generator><lastBuildDate>Fri, 23 Oct 2026 07:24:42 GMT</lastBuildDate><atom:link href="http://insoft-docker1:4567/topic/229.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 09 May 2023 14:41:05 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to insoft-report-executor on Fri, 20 Oct 2023 13:39:28 GMT]]></title><description><![CDATA[<p dir="auto"><img src="http://insoft-docker1:4567/assets/plugins/nodebb-plugin-emoji/emoji/android/1f680.png?v=an5iprggue4" class="not-responsive emoji emoji-android emoji--rocket" title=":rocket:" alt="🚀" /> 1.2.0<br />
<img src="http://insoft-docker1:4567/assets/plugins/nodebb-plugin-emoji/emoji/android/2728.png?v=an5iprggue4" class="not-responsive emoji emoji-android emoji--sparkles" title=":sparkles:" alt="✨" /> OS10469</p>
<ul>
<li>Adicionar relatórios JRXML do Pontosoft Enterprise.</li>
<li>Melhorar tratativa  que evita a criação de relatórios em branco.</li>
<li>Usar logs conforme padrão definido.</li>
</ul>
]]></description><link>http://insoft-docker1:4567/post/374</link><guid isPermaLink="true">http://insoft-docker1:4567/post/374</guid><dc:creator><![CDATA[jhartmann]]></dc:creator><pubDate>Fri, 20 Oct 2023 13:39:28 GMT</pubDate></item><item><title><![CDATA[Reply to insoft-report-executor on Fri, 15 Sep 2023 13:08:43 GMT]]></title><description><![CDATA[<p dir="auto"><img src="http://insoft-docker1:4567/assets/plugins/nodebb-plugin-emoji/emoji/android/1f680.png?v=an5iprggue4" class="not-responsive emoji emoji-android emoji--rocket" title=":rocket:" alt="🚀" /> v1.1.0</p>
<p dir="auto"><img src="http://insoft-docker1:4567/assets/plugins/nodebb-plugin-emoji/emoji/android/2728.png?v=an5iprggue4" class="not-responsive emoji emoji-android emoji--sparkles" title=":sparkles:" alt="✨" /> <strong>OS10102</strong></p>
<ul>
<li>Aplicar funcionalidade de de execução de relatórios JRXML.</li>
<li>Adicionar tratativa de erros.</li>
<li>Atualizar plugins insoft-gr e insoft-db-objects.</li>
<li>Utilizar plugins insoft-fw-domains.
<ul>
<li>Para evitar recriar classes de dominio do in4fw_*.</li>
</ul>
</li>
<li>Utilizar plugin Barbecue da Sourceforge.
<ul>
<li>Para fazer uso de código de barras nos relatórios JRXML.</li>
</ul>
</li>
<li>Criar Job para realizar atualização das mensagens internacionalizadas.</li>
<li>Validação para evitar criar relatórios vazio.</li>
<li>Adicionar relatórios JRXML do GTSoft.</li>
<li>Adicionar relatórios JRXML do Akitasoft.</li>
</ul>
]]></description><link>http://insoft-docker1:4567/post/350</link><guid isPermaLink="true">http://insoft-docker1:4567/post/350</guid><dc:creator><![CDATA[jhartmann]]></dc:creator><pubDate>Fri, 15 Sep 2023 13:08:43 GMT</pubDate></item></channel></rss>