Commit 938f55a3b10e98572b6c3a97a2e0c3363775afc3
1 parent
6f66ac4b
Exists in
master
and in
1 other branch
Interrompe o registro de log do InfoResource
Os serviços contidos na classe InfoResource não serão mais registrados no log de requests, esses serviços são consultados pelo zabbix para identificar problemas no broker. O serviço listar requests agora consta na documentação do broker e com mais opções de filtros.
Showing
10 changed files
with
282 additions
and
15 deletions
Show diff stats
src/main/java/br/gov/ans/filters/LogRequestFilter.java
... | ... | @@ -6,6 +6,7 @@ import javax.inject.Inject; |
6 | 6 | import javax.servlet.http.HttpServletRequest; |
7 | 7 | import javax.ws.rs.container.ContainerRequestContext; |
8 | 8 | import javax.ws.rs.container.ContainerRequestFilter; |
9 | +import javax.ws.rs.container.ResourceInfo; | |
9 | 10 | import javax.ws.rs.core.Context; |
10 | 11 | import javax.ws.rs.core.SecurityContext; |
11 | 12 | import javax.ws.rs.core.UriInfo; |
... | ... | @@ -14,6 +15,7 @@ import javax.ws.rs.ext.Provider; |
14 | 15 | import org.jboss.logging.Logger; |
15 | 16 | import org.jboss.resteasy.core.ResourceMethodInvoker; |
16 | 17 | |
18 | +import br.gov.ans.utils.LogIgnore; | |
17 | 19 | import br.gov.ans.utils.LogIntegracaoUtil; |
18 | 20 | import br.gov.ans.utils.MessageUtils; |
19 | 21 | |
... | ... | @@ -30,6 +32,9 @@ public class LogRequestFilter implements ContainerRequestFilter{ |
30 | 32 | private UriInfo uriInfo; |
31 | 33 | |
32 | 34 | @Context |
35 | + private ResourceInfo resourceInfo; | |
36 | + | |
37 | + @Context | |
33 | 38 | private HttpServletRequest request; |
34 | 39 | |
35 | 40 | @Context |
... | ... | @@ -41,8 +46,10 @@ public class LogRequestFilter implements ContainerRequestFilter{ |
41 | 46 | @Override |
42 | 47 | public void filter(ContainerRequestContext context) throws IOException{ |
43 | 48 | request.setCharacterEncoding("UTF-8"); |
44 | - | |
45 | - audit.registrarLog(getUserName(),uriInfo.getAbsolutePath().toString(), getMethodName(context)); | |
49 | + | |
50 | + if(isLoggable()){ | |
51 | + audit.registrarLog(getUserName(),uriInfo.getAbsolutePath().toString(), getMethodName(context)); | |
52 | + } | |
46 | 53 | } |
47 | 54 | |
48 | 55 | public String getMethodName(ContainerRequestContext context){ |
... | ... | @@ -60,4 +67,15 @@ public class LogRequestFilter implements ContainerRequestFilter{ |
60 | 67 | } |
61 | 68 | } |
62 | 69 | |
70 | + private boolean isLoggable(){ | |
71 | + if(resourceInfo.getResourceClass().isAnnotationPresent(LogIgnore.class)){ | |
72 | + return false; | |
73 | + } | |
74 | + | |
75 | + if(resourceInfo.getResourceMethod().isAnnotationPresent(LogIgnore.class)){ | |
76 | + return false; | |
77 | + } | |
78 | + | |
79 | + return true; | |
80 | + } | |
63 | 81 | } | ... | ... |
src/main/java/br/gov/ans/integracao/sei/dao/LogIntegracaoSistemicaDAO.java
0 → 100644
... | ... | @@ -0,0 +1,50 @@ |
1 | +package br.gov.ans.integracao.sei.dao; | |
2 | + | |
3 | +import static br.gov.ans.integracao.sei.utils.Util.setPaginacaoQuery; | |
4 | +import static br.gov.ans.integracao.sei.utils.Util.setQueryParameters; | |
5 | +import static br.gov.ans.integracao.sei.utils.Util.andOrWhere; | |
6 | + | |
7 | +import java.util.HashMap; | |
8 | +import java.util.List; | |
9 | + | |
10 | +import javax.persistence.EntityManager; | |
11 | +import javax.persistence.PersistenceContext; | |
12 | +import javax.persistence.PersistenceContextType; | |
13 | +import javax.persistence.Query; | |
14 | + | |
15 | +import org.apache.commons.lang3.StringUtils; | |
16 | + | |
17 | +import br.gov.ans.modelo.LogIntegracaoSistemica; | |
18 | + | |
19 | +public class LogIntegracaoSistemicaDAO { | |
20 | + | |
21 | + @PersistenceContext(unitName = "sei_broker_pu", type = PersistenceContextType.EXTENDED) | |
22 | + private EntityManager em; | |
23 | + | |
24 | + @SuppressWarnings("unchecked") | |
25 | + public List<LogIntegracaoSistemica> getLogs(String operacao, String origem, Integer pagina, Integer qtdRegistros){ | |
26 | + HashMap<String,Object> parametros = new HashMap<String,Object>(); | |
27 | + StringBuilder sql = new StringBuilder("SELECT l FROM LogIntegracaoSistemica l "); | |
28 | + | |
29 | + if(StringUtils.isNotBlank(operacao)){ | |
30 | + sql.append(andOrWhere(sql)); | |
31 | + sql.append("l.operacao = :operacao "); | |
32 | + parametros.put("operacao", operacao); | |
33 | + } | |
34 | + | |
35 | + if(StringUtils.isNotBlank(origem)){ | |
36 | + sql.append(andOrWhere(sql)); | |
37 | + sql.append("l.origem = :origem "); | |
38 | + parametros.put("origem", origem); | |
39 | + } | |
40 | + | |
41 | + sql.append("order by l.data desc "); | |
42 | + | |
43 | + Query query = em.createQuery(sql.toString()); | |
44 | + | |
45 | + setPaginacaoQuery(query, pagina, qtdRegistros); | |
46 | + setQueryParameters(query, parametros); | |
47 | + | |
48 | + return query.getResultList(); | |
49 | + } | |
50 | +} | ... | ... |
src/main/java/br/gov/ans/integracao/sei/rest/InfoResource.java
1 | 1 | package br.gov.ans.integracao.sei.rest; |
2 | 2 | |
3 | 3 | import static br.gov.ans.integracao.sei.utils.Util.parseInt; |
4 | -import static br.gov.ans.integracao.sei.utils.Util.setPaginacaoQuery; | |
5 | 4 | |
6 | 5 | import java.util.List; |
7 | 6 | |
... | ... | @@ -18,15 +17,17 @@ import javax.ws.rs.core.MediaType; |
18 | 17 | |
19 | 18 | import org.jboss.logging.Logger; |
20 | 19 | |
21 | -import br.gov.ans.dao.DAO; | |
22 | 20 | import br.gov.ans.exceptions.BusinessException; |
23 | 21 | import br.gov.ans.factories.qualifiers.PropertiesInfo; |
24 | 22 | import br.gov.ans.integracao.sei.client.SeiPortTypeProxy; |
23 | +import br.gov.ans.integracao.sei.dao.LogIntegracaoSistemicaDAO; | |
25 | 24 | import br.gov.ans.integracao.sei.modelo.Operacao; |
26 | 25 | import br.gov.ans.integracao.sei.utils.Constantes; |
27 | 26 | import br.gov.ans.modelo.LogIntegracaoSistemica; |
27 | +import br.gov.ans.utils.LogIgnore; | |
28 | 28 | import br.gov.ans.utils.MessageUtils; |
29 | 29 | |
30 | +@LogIgnore | |
30 | 31 | @Path("/info") |
31 | 32 | public class InfoResource { |
32 | 33 | |
... | ... | @@ -49,8 +50,8 @@ public class InfoResource { |
49 | 50 | @PersistenceContext(unitName = "sei_broker_pu", type = PersistenceContextType.EXTENDED) |
50 | 51 | private EntityManager emOracle; |
51 | 52 | |
52 | - @Inject | |
53 | - private DAO<LogIntegracaoSistemica> dao; | |
53 | + @Inject | |
54 | + private LogIntegracaoSistemicaDAO dao; | |
54 | 55 | |
55 | 56 | /** |
56 | 57 | * @api {get} /info/versao Consultar versão |
... | ... | @@ -181,16 +182,39 @@ public class InfoResource { |
181 | 182 | } |
182 | 183 | } |
183 | 184 | |
184 | - @SuppressWarnings("unchecked") | |
185 | + /** | |
186 | + * @api {get} /info/requests Listar Requests | |
187 | + * @apiName getUltimosRequests | |
188 | + * @apiGroup Info | |
189 | + * @apiVersion 2.0.0 | |
190 | + * | |
191 | + * @apiDescription Lista os requests recebidos pelo broker. | |
192 | + * | |
193 | + * | |
194 | + * @apiParam (Query Parameters) {String} [operacao] nome do método acessado | |
195 | + * @apiParam (Query Parameters) {String} [origem] usuário que originou a requisição | |
196 | + * @apiParam (Query Parameters) {int} [pag=1] número da página | |
197 | + * @apiParam (Query Parameters) {int} [itens=50] quantidade de itens listados por página | |
198 | + * | |
199 | + * @apiExample {curl} Exemplo de requisição: | |
200 | + * curl -i http://<host>/sei-broker/service/info/requests | |
201 | + * | |
202 | + * @apiSuccess {String} mensagem Mensagem de sucesso. | |
203 | + * | |
204 | + * @apiErrorExample {json} Error-Response: | |
205 | + * HTTP/1.1 500 Internal Server Error | |
206 | + * { | |
207 | + * "error":"Mensagem de erro." | |
208 | + * "code":"código do erro" | |
209 | + * } | |
210 | + */ | |
185 | 211 | @GET |
186 | 212 | @Path("/requests") |
187 | 213 | @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) |
188 | - public List<LogIntegracaoSistemica> getUltimosRequests(@QueryParam("pag") String pagina, @QueryParam("itens") String qtdRegistros) throws BusinessException{ | |
189 | - Query query = dao.createNamedQuery("LogIntegracaoSistemica.ultimosRequests", null); | |
190 | - | |
191 | - setPaginacaoQuery(query, pagina == null? null:parseInt(pagina), qtdRegistros == null? null : parseInt(qtdRegistros)); | |
214 | + public List<LogIntegracaoSistemica> getUltimosRequests(@QueryParam("pag") String pagina, @QueryParam("itens") String qtdRegistros, | |
215 | + @QueryParam("operacao") String operacao, @QueryParam("origem") String origem) throws BusinessException{ | |
192 | 216 | |
193 | - return query.getResultList(); | |
217 | + return dao.getLogs(operacao, origem, pagina == null? null:parseInt(pagina), qtdRegistros == null? null : parseInt(qtdRegistros)); | |
194 | 218 | } |
195 | 219 | |
196 | 220 | } | ... | ... |
src/main/java/br/gov/ans/integracao/sei/utils/Util.java
... | ... | @@ -160,6 +160,14 @@ public class Util { |
160 | 160 | query.setMaxResults(qtdRegistros); |
161 | 161 | } |
162 | 162 | |
163 | + public static String andOrWhere(StringBuilder sql){ | |
164 | + if(sql.toString().contains("WHERE ")){ | |
165 | + return "AND "; | |
166 | + } | |
167 | + | |
168 | + return "WHERE "; | |
169 | + } | |
170 | + | |
163 | 171 | public static String getOnlyNumbers(String string) throws Exception{ |
164 | 172 | return string.replaceAll(REGEX_SOMENTE_NUMEROS,""); |
165 | 173 | } | ... | ... |
... | ... | @@ -0,0 +1,15 @@ |
1 | +package br.gov.ans.utils; | |
2 | + | |
3 | +import java.lang.annotation.Documented; | |
4 | +import java.lang.annotation.ElementType; | |
5 | +import java.lang.annotation.Retention; | |
6 | +import java.lang.annotation.RetentionPolicy; | |
7 | +import java.lang.annotation.Target; | |
8 | + | |
9 | + | |
10 | +@Documented | |
11 | +@Retention(RetentionPolicy.RUNTIME) | |
12 | +@Target({ElementType.TYPE, ElementType.METHOD}) | |
13 | +public @interface LogIgnore { | |
14 | + | |
15 | +} | |
0 | 16 | \ No newline at end of file | ... | ... |
src/main/webapp/WEB-INF/sei-broker-ds.xml
... | ... | @@ -25,7 +25,7 @@ |
25 | 25 | <share-prepared-statements>false</share-prepared-statements> |
26 | 26 | </statement> |
27 | 27 | </datasource> |
28 | - <datasource jta="false" jndi-name="java:/jdbc/sei-mysql" pool-name="jdbc/sei-mysql" enabled="true" use-java-context="true" use-ccm="false" statistics-enabled="true"> | |
28 | + <datasource jta="true" jndi-name="java:/jdbc/sei-mysql" pool-name="jdbc/sei-mysql" enabled="true" use-java-context="true" use-ccm="false" statistics-enabled="true"> | |
29 | 29 | <connection-url>${br.gov.ans.seiBroker.db.mysql.connectionUrl}</connection-url> |
30 | 30 | <driver-class>com.mysql.jdbc.Driver</driver-class> |
31 | 31 | <driver>com.mysql</driver> | ... | ... |
src/main/webapp/api-docs/api_data.js
... | ... | @@ -4933,6 +4933,82 @@ define({ "api": [ |
4933 | 4933 | }, |
4934 | 4934 | { |
4935 | 4935 | "type": "get", |
4936 | + "url": "/info/requests", | |
4937 | + "title": "Listar Requests", | |
4938 | + "name": "getUltimosRequests", | |
4939 | + "group": "Info", | |
4940 | + "version": "2.0.0", | |
4941 | + "description": "<p>Lista os requests recebidos pelo broker.</p>", | |
4942 | + "parameter": { | |
4943 | + "fields": { | |
4944 | + "Query Parameters": [ | |
4945 | + { | |
4946 | + "group": "Query Parameters", | |
4947 | + "type": "String", | |
4948 | + "optional": true, | |
4949 | + "field": "operacao", | |
4950 | + "description": "<p>nome do método acessado</p>" | |
4951 | + }, | |
4952 | + { | |
4953 | + "group": "Query Parameters", | |
4954 | + "type": "String", | |
4955 | + "optional": true, | |
4956 | + "field": "origem", | |
4957 | + "description": "<p>usuário que originou a requisição</p>" | |
4958 | + }, | |
4959 | + { | |
4960 | + "group": "Query Parameters", | |
4961 | + "type": "int", | |
4962 | + "optional": true, | |
4963 | + "field": "pag", | |
4964 | + "defaultValue": "1", | |
4965 | + "description": "<p>número da página</p>" | |
4966 | + }, | |
4967 | + { | |
4968 | + "group": "Query Parameters", | |
4969 | + "type": "int", | |
4970 | + "optional": true, | |
4971 | + "field": "itens", | |
4972 | + "defaultValue": "50", | |
4973 | + "description": "<p>quantidade de itens listados por página</p>" | |
4974 | + } | |
4975 | + ] | |
4976 | + } | |
4977 | + }, | |
4978 | + "examples": [ | |
4979 | + { | |
4980 | + "title": "Exemplo de requisição:", | |
4981 | + "content": "curl -i http://<host>/sei-broker/service/info/requests", | |
4982 | + "type": "curl" | |
4983 | + } | |
4984 | + ], | |
4985 | + "success": { | |
4986 | + "fields": { | |
4987 | + "Success 200": [ | |
4988 | + { | |
4989 | + "group": "Success 200", | |
4990 | + "type": "String", | |
4991 | + "optional": false, | |
4992 | + "field": "mensagem", | |
4993 | + "description": "<p>Mensagem de sucesso.</p>" | |
4994 | + } | |
4995 | + ] | |
4996 | + } | |
4997 | + }, | |
4998 | + "error": { | |
4999 | + "examples": [ | |
5000 | + { | |
5001 | + "title": "Error-Response:", | |
5002 | + "content": "HTTP/1.1 500 Internal Server Error\n{\n\t\"error\":\"Mensagem de erro.\"\n\t\"code\":\"código do erro\"\n}", | |
5003 | + "type": "json" | |
5004 | + } | |
5005 | + ] | |
5006 | + }, | |
5007 | + "filename": "sei-broker/src/main/java/br/gov/ans/integracao/sei/rest/InfoResource.java", | |
5008 | + "groupTitle": "Info" | |
5009 | + }, | |
5010 | + { | |
5011 | + "type": "get", | |
4936 | 5012 | "url": "/info/conexoes/mysql", |
4937 | 5013 | "title": "Testar conexão MySQL", |
4938 | 5014 | "name": "testMySQLConnection", | ... | ... |
src/main/webapp/api-docs/api_data.json
... | ... | @@ -4933,6 +4933,82 @@ |
4933 | 4933 | }, |
4934 | 4934 | { |
4935 | 4935 | "type": "get", |
4936 | + "url": "/info/requests", | |
4937 | + "title": "Listar Requests", | |
4938 | + "name": "getUltimosRequests", | |
4939 | + "group": "Info", | |
4940 | + "version": "2.0.0", | |
4941 | + "description": "<p>Lista os requests recebidos pelo broker.</p>", | |
4942 | + "parameter": { | |
4943 | + "fields": { | |
4944 | + "Query Parameters": [ | |
4945 | + { | |
4946 | + "group": "Query Parameters", | |
4947 | + "type": "String", | |
4948 | + "optional": true, | |
4949 | + "field": "operacao", | |
4950 | + "description": "<p>nome do método acessado</p>" | |
4951 | + }, | |
4952 | + { | |
4953 | + "group": "Query Parameters", | |
4954 | + "type": "String", | |
4955 | + "optional": true, | |
4956 | + "field": "origem", | |
4957 | + "description": "<p>usuário que originou a requisição</p>" | |
4958 | + }, | |
4959 | + { | |
4960 | + "group": "Query Parameters", | |
4961 | + "type": "int", | |
4962 | + "optional": true, | |
4963 | + "field": "pag", | |
4964 | + "defaultValue": "1", | |
4965 | + "description": "<p>número da página</p>" | |
4966 | + }, | |
4967 | + { | |
4968 | + "group": "Query Parameters", | |
4969 | + "type": "int", | |
4970 | + "optional": true, | |
4971 | + "field": "itens", | |
4972 | + "defaultValue": "50", | |
4973 | + "description": "<p>quantidade de itens listados por página</p>" | |
4974 | + } | |
4975 | + ] | |
4976 | + } | |
4977 | + }, | |
4978 | + "examples": [ | |
4979 | + { | |
4980 | + "title": "Exemplo de requisição:", | |
4981 | + "content": "curl -i http://<host>/sei-broker/service/info/requests", | |
4982 | + "type": "curl" | |
4983 | + } | |
4984 | + ], | |
4985 | + "success": { | |
4986 | + "fields": { | |
4987 | + "Success 200": [ | |
4988 | + { | |
4989 | + "group": "Success 200", | |
4990 | + "type": "String", | |
4991 | + "optional": false, | |
4992 | + "field": "mensagem", | |
4993 | + "description": "<p>Mensagem de sucesso.</p>" | |
4994 | + } | |
4995 | + ] | |
4996 | + } | |
4997 | + }, | |
4998 | + "error": { | |
4999 | + "examples": [ | |
5000 | + { | |
5001 | + "title": "Error-Response:", | |
5002 | + "content": "HTTP/1.1 500 Internal Server Error\n{\n\t\"error\":\"Mensagem de erro.\"\n\t\"code\":\"código do erro\"\n}", | |
5003 | + "type": "json" | |
5004 | + } | |
5005 | + ] | |
5006 | + }, | |
5007 | + "filename": "sei-broker/src/main/java/br/gov/ans/integracao/sei/rest/InfoResource.java", | |
5008 | + "groupTitle": "Info" | |
5009 | + }, | |
5010 | + { | |
5011 | + "type": "get", | |
4936 | 5012 | "url": "/info/conexoes/mysql", |
4937 | 5013 | "title": "Testar conexão MySQL", |
4938 | 5014 | "name": "testMySQLConnection", | ... | ... |
src/main/webapp/api-docs/api_project.js
src/main/webapp/api-docs/api_project.json