From 938f55a3b10e98572b6c3a97a2e0c3363775afc3 Mon Sep 17 00:00:00 2001 From: andre.guimaraes Date: Thu, 26 Apr 2018 09:31:20 -0300 Subject: [PATCH] Interrompe o registro de log do InfoResource --- src/main/java/br/gov/ans/filters/LogRequestFilter.java | 22 ++++++++++++++++++++-- src/main/java/br/gov/ans/integracao/sei/dao/LogIntegracaoSistemicaDAO.java | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/br/gov/ans/integracao/sei/rest/InfoResource.java | 44 ++++++++++++++++++++++++++++++++++---------- src/main/java/br/gov/ans/integracao/sei/utils/Util.java | 8 ++++++++ src/main/java/br/gov/ans/utils/LogIgnore.java | 15 +++++++++++++++ src/main/webapp/WEB-INF/sei-broker-ds.xml | 2 +- src/main/webapp/api-docs/api_data.js | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/webapp/api-docs/api_data.json | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/webapp/api-docs/api_project.js | 2 +- src/main/webapp/api-docs/api_project.json | 2 +- 10 files changed, 282 insertions(+), 15 deletions(-) create mode 100644 src/main/java/br/gov/ans/integracao/sei/dao/LogIntegracaoSistemicaDAO.java create mode 100644 src/main/java/br/gov/ans/utils/LogIgnore.java diff --git a/src/main/java/br/gov/ans/filters/LogRequestFilter.java b/src/main/java/br/gov/ans/filters/LogRequestFilter.java index 7e1e70d..193ca9e 100644 --- a/src/main/java/br/gov/ans/filters/LogRequestFilter.java +++ b/src/main/java/br/gov/ans/filters/LogRequestFilter.java @@ -6,6 +6,7 @@ import javax.inject.Inject; import javax.servlet.http.HttpServletRequest; import javax.ws.rs.container.ContainerRequestContext; import javax.ws.rs.container.ContainerRequestFilter; +import javax.ws.rs.container.ResourceInfo; import javax.ws.rs.core.Context; import javax.ws.rs.core.SecurityContext; import javax.ws.rs.core.UriInfo; @@ -14,6 +15,7 @@ import javax.ws.rs.ext.Provider; import org.jboss.logging.Logger; import org.jboss.resteasy.core.ResourceMethodInvoker; +import br.gov.ans.utils.LogIgnore; import br.gov.ans.utils.LogIntegracaoUtil; import br.gov.ans.utils.MessageUtils; @@ -30,6 +32,9 @@ public class LogRequestFilter implements ContainerRequestFilter{ private UriInfo uriInfo; @Context + private ResourceInfo resourceInfo; + + @Context private HttpServletRequest request; @Context @@ -41,8 +46,10 @@ public class LogRequestFilter implements ContainerRequestFilter{ @Override public void filter(ContainerRequestContext context) throws IOException{ request.setCharacterEncoding("UTF-8"); - - audit.registrarLog(getUserName(),uriInfo.getAbsolutePath().toString(), getMethodName(context)); + + if(isLoggable()){ + audit.registrarLog(getUserName(),uriInfo.getAbsolutePath().toString(), getMethodName(context)); + } } public String getMethodName(ContainerRequestContext context){ @@ -60,4 +67,15 @@ public class LogRequestFilter implements ContainerRequestFilter{ } } + private boolean isLoggable(){ + if(resourceInfo.getResourceClass().isAnnotationPresent(LogIgnore.class)){ + return false; + } + + if(resourceInfo.getResourceMethod().isAnnotationPresent(LogIgnore.class)){ + return false; + } + + return true; + } } diff --git a/src/main/java/br/gov/ans/integracao/sei/dao/LogIntegracaoSistemicaDAO.java b/src/main/java/br/gov/ans/integracao/sei/dao/LogIntegracaoSistemicaDAO.java new file mode 100644 index 0000000..a9ca995 --- /dev/null +++ b/src/main/java/br/gov/ans/integracao/sei/dao/LogIntegracaoSistemicaDAO.java @@ -0,0 +1,50 @@ +package br.gov.ans.integracao.sei.dao; + +import static br.gov.ans.integracao.sei.utils.Util.setPaginacaoQuery; +import static br.gov.ans.integracao.sei.utils.Util.setQueryParameters; +import static br.gov.ans.integracao.sei.utils.Util.andOrWhere; + +import java.util.HashMap; +import java.util.List; + +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; +import javax.persistence.PersistenceContextType; +import javax.persistence.Query; + +import org.apache.commons.lang3.StringUtils; + +import br.gov.ans.modelo.LogIntegracaoSistemica; + +public class LogIntegracaoSistemicaDAO { + + @PersistenceContext(unitName = "sei_broker_pu", type = PersistenceContextType.EXTENDED) + private EntityManager em; + + @SuppressWarnings("unchecked") + public List getLogs(String operacao, String origem, Integer pagina, Integer qtdRegistros){ + HashMap parametros = new HashMap(); + StringBuilder sql = new StringBuilder("SELECT l FROM LogIntegracaoSistemica l "); + + if(StringUtils.isNotBlank(operacao)){ + sql.append(andOrWhere(sql)); + sql.append("l.operacao = :operacao "); + parametros.put("operacao", operacao); + } + + if(StringUtils.isNotBlank(origem)){ + sql.append(andOrWhere(sql)); + sql.append("l.origem = :origem "); + parametros.put("origem", origem); + } + + sql.append("order by l.data desc "); + + Query query = em.createQuery(sql.toString()); + + setPaginacaoQuery(query, pagina, qtdRegistros); + setQueryParameters(query, parametros); + + return query.getResultList(); + } +} diff --git a/src/main/java/br/gov/ans/integracao/sei/rest/InfoResource.java b/src/main/java/br/gov/ans/integracao/sei/rest/InfoResource.java index f3c9ba8..b41b66a 100644 --- a/src/main/java/br/gov/ans/integracao/sei/rest/InfoResource.java +++ b/src/main/java/br/gov/ans/integracao/sei/rest/InfoResource.java @@ -1,7 +1,6 @@ package br.gov.ans.integracao.sei.rest; import static br.gov.ans.integracao.sei.utils.Util.parseInt; -import static br.gov.ans.integracao.sei.utils.Util.setPaginacaoQuery; import java.util.List; @@ -18,15 +17,17 @@ import javax.ws.rs.core.MediaType; import org.jboss.logging.Logger; -import br.gov.ans.dao.DAO; import br.gov.ans.exceptions.BusinessException; import br.gov.ans.factories.qualifiers.PropertiesInfo; import br.gov.ans.integracao.sei.client.SeiPortTypeProxy; +import br.gov.ans.integracao.sei.dao.LogIntegracaoSistemicaDAO; import br.gov.ans.integracao.sei.modelo.Operacao; import br.gov.ans.integracao.sei.utils.Constantes; import br.gov.ans.modelo.LogIntegracaoSistemica; +import br.gov.ans.utils.LogIgnore; import br.gov.ans.utils.MessageUtils; +@LogIgnore @Path("/info") public class InfoResource { @@ -49,8 +50,8 @@ public class InfoResource { @PersistenceContext(unitName = "sei_broker_pu", type = PersistenceContextType.EXTENDED) private EntityManager emOracle; - @Inject - private DAO dao; + @Inject + private LogIntegracaoSistemicaDAO dao; /** * @api {get} /info/versao Consultar versão @@ -181,16 +182,39 @@ public class InfoResource { } } - @SuppressWarnings("unchecked") + /** + * @api {get} /info/requests Listar Requests + * @apiName getUltimosRequests + * @apiGroup Info + * @apiVersion 2.0.0 + * + * @apiDescription Lista os requests recebidos pelo broker. + * + * + * @apiParam (Query Parameters) {String} [operacao] nome do método acessado + * @apiParam (Query Parameters) {String} [origem] usuário que originou a requisição + * @apiParam (Query Parameters) {int} [pag=1] número da página + * @apiParam (Query Parameters) {int} [itens=50] quantidade de itens listados por página + * + * @apiExample {curl} Exemplo de requisição: + * curl -i http:///sei-broker/service/info/requests + * + * @apiSuccess {String} mensagem Mensagem de sucesso. + * + * @apiErrorExample {json} Error-Response: + * HTTP/1.1 500 Internal Server Error + * { + * "error":"Mensagem de erro." + * "code":"código do erro" + * } + */ @GET @Path("/requests") @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) - public List getUltimosRequests(@QueryParam("pag") String pagina, @QueryParam("itens") String qtdRegistros) throws BusinessException{ - Query query = dao.createNamedQuery("LogIntegracaoSistemica.ultimosRequests", null); - - setPaginacaoQuery(query, pagina == null? null:parseInt(pagina), qtdRegistros == null? null : parseInt(qtdRegistros)); + public List getUltimosRequests(@QueryParam("pag") String pagina, @QueryParam("itens") String qtdRegistros, + @QueryParam("operacao") String operacao, @QueryParam("origem") String origem) throws BusinessException{ - return query.getResultList(); + return dao.getLogs(operacao, origem, pagina == null? null:parseInt(pagina), qtdRegistros == null? null : parseInt(qtdRegistros)); } } diff --git a/src/main/java/br/gov/ans/integracao/sei/utils/Util.java b/src/main/java/br/gov/ans/integracao/sei/utils/Util.java index 08e9114..616f92c 100644 --- a/src/main/java/br/gov/ans/integracao/sei/utils/Util.java +++ b/src/main/java/br/gov/ans/integracao/sei/utils/Util.java @@ -160,6 +160,14 @@ public class Util { query.setMaxResults(qtdRegistros); } + public static String andOrWhere(StringBuilder sql){ + if(sql.toString().contains("WHERE ")){ + return "AND "; + } + + return "WHERE "; + } + public static String getOnlyNumbers(String string) throws Exception{ return string.replaceAll(REGEX_SOMENTE_NUMEROS,""); } diff --git a/src/main/java/br/gov/ans/utils/LogIgnore.java b/src/main/java/br/gov/ans/utils/LogIgnore.java new file mode 100644 index 0000000..6a4e42b --- /dev/null +++ b/src/main/java/br/gov/ans/utils/LogIgnore.java @@ -0,0 +1,15 @@ +package br.gov.ans.utils; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + + +@Documented +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.TYPE, ElementType.METHOD}) +public @interface LogIgnore { + +} \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/sei-broker-ds.xml b/src/main/webapp/WEB-INF/sei-broker-ds.xml index 483ead2..578b6ff 100644 --- a/src/main/webapp/WEB-INF/sei-broker-ds.xml +++ b/src/main/webapp/WEB-INF/sei-broker-ds.xml @@ -25,7 +25,7 @@ false - + ${br.gov.ans.seiBroker.db.mysql.connectionUrl} com.mysql.jdbc.Driver com.mysql diff --git a/src/main/webapp/api-docs/api_data.js b/src/main/webapp/api-docs/api_data.js index 03a2b1e..12263f7 100644 --- a/src/main/webapp/api-docs/api_data.js +++ b/src/main/webapp/api-docs/api_data.js @@ -4933,6 +4933,82 @@ define({ "api": [ }, { "type": "get", + "url": "/info/requests", + "title": "Listar Requests", + "name": "getUltimosRequests", + "group": "Info", + "version": "2.0.0", + "description": "

Lista os requests recebidos pelo broker.

", + "parameter": { + "fields": { + "Query Parameters": [ + { + "group": "Query Parameters", + "type": "String", + "optional": true, + "field": "operacao", + "description": "

nome do método acessado

" + }, + { + "group": "Query Parameters", + "type": "String", + "optional": true, + "field": "origem", + "description": "

usuário que originou a requisição

" + }, + { + "group": "Query Parameters", + "type": "int", + "optional": true, + "field": "pag", + "defaultValue": "1", + "description": "

número da página

" + }, + { + "group": "Query Parameters", + "type": "int", + "optional": true, + "field": "itens", + "defaultValue": "50", + "description": "

quantidade de itens listados por página

" + } + ] + } + }, + "examples": [ + { + "title": "Exemplo de requisição:", + "content": "curl -i http:///sei-broker/service/info/requests", + "type": "curl" + } + ], + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "mensagem", + "description": "

Mensagem de sucesso.

" + } + ] + } + }, + "error": { + "examples": [ + { + "title": "Error-Response:", + "content": "HTTP/1.1 500 Internal Server Error\n{\n\t\"error\":\"Mensagem de erro.\"\n\t\"code\":\"código do erro\"\n}", + "type": "json" + } + ] + }, + "filename": "sei-broker/src/main/java/br/gov/ans/integracao/sei/rest/InfoResource.java", + "groupTitle": "Info" + }, + { + "type": "get", "url": "/info/conexoes/mysql", "title": "Testar conexão MySQL", "name": "testMySQLConnection", diff --git a/src/main/webapp/api-docs/api_data.json b/src/main/webapp/api-docs/api_data.json index b332f3c..04785dd 100644 --- a/src/main/webapp/api-docs/api_data.json +++ b/src/main/webapp/api-docs/api_data.json @@ -4933,6 +4933,82 @@ }, { "type": "get", + "url": "/info/requests", + "title": "Listar Requests", + "name": "getUltimosRequests", + "group": "Info", + "version": "2.0.0", + "description": "

Lista os requests recebidos pelo broker.

", + "parameter": { + "fields": { + "Query Parameters": [ + { + "group": "Query Parameters", + "type": "String", + "optional": true, + "field": "operacao", + "description": "

nome do método acessado

" + }, + { + "group": "Query Parameters", + "type": "String", + "optional": true, + "field": "origem", + "description": "

usuário que originou a requisição

" + }, + { + "group": "Query Parameters", + "type": "int", + "optional": true, + "field": "pag", + "defaultValue": "1", + "description": "

número da página

" + }, + { + "group": "Query Parameters", + "type": "int", + "optional": true, + "field": "itens", + "defaultValue": "50", + "description": "

quantidade de itens listados por página

" + } + ] + } + }, + "examples": [ + { + "title": "Exemplo de requisição:", + "content": "curl -i http:///sei-broker/service/info/requests", + "type": "curl" + } + ], + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "mensagem", + "description": "

Mensagem de sucesso.

" + } + ] + } + }, + "error": { + "examples": [ + { + "title": "Error-Response:", + "content": "HTTP/1.1 500 Internal Server Error\n{\n\t\"error\":\"Mensagem de erro.\"\n\t\"code\":\"código do erro\"\n}", + "type": "json" + } + ] + }, + "filename": "sei-broker/src/main/java/br/gov/ans/integracao/sei/rest/InfoResource.java", + "groupTitle": "Info" + }, + { + "type": "get", "url": "/info/conexoes/mysql", "title": "Testar conexão MySQL", "name": "testMySQLConnection", diff --git a/src/main/webapp/api-docs/api_project.js b/src/main/webapp/api-docs/api_project.js index 6fc8b96..46cec10 100644 --- a/src/main/webapp/api-docs/api_project.js +++ b/src/main/webapp/api-docs/api_project.js @@ -8,7 +8,7 @@ define({ "apidoc": "0.2.0", "generator": { "name": "apidoc", - "time": "2018-04-25T13:34:37.392Z", + "time": "2018-04-26T12:30:30.895Z", "url": "http://apidocjs.com", "version": "0.15.1" } diff --git a/src/main/webapp/api-docs/api_project.json b/src/main/webapp/api-docs/api_project.json index b1cd6bc..2dd97e5 100644 --- a/src/main/webapp/api-docs/api_project.json +++ b/src/main/webapp/api-docs/api_project.json @@ -8,7 +8,7 @@ "apidoc": "0.2.0", "generator": { "name": "apidoc", - "time": "2018-04-25T13:34:37.392Z", + "time": "2018-04-26T12:30:30.895Z", "url": "http://apidocjs.com", "version": "0.15.1" } -- libgit2 0.21.2