summaryrefslogtreecommitdiffstats
path: root/catalog-be/src/main/java/org/openecomp/sdc/be/filters/BeServletFilter.java
diff options
context:
space:
mode:
Diffstat (limited to 'catalog-be/src/main/java/org/openecomp/sdc/be/filters/BeServletFilter.java')
-rw-r--r--catalog-be/src/main/java/org/openecomp/sdc/be/filters/BeServletFilter.java348
1 files changed, 172 insertions, 176 deletions
diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/filters/BeServletFilter.java b/catalog-be/src/main/java/org/openecomp/sdc/be/filters/BeServletFilter.java
index d24743534c..60409b3ee0 100644
--- a/catalog-be/src/main/java/org/openecomp/sdc/be/filters/BeServletFilter.java
+++ b/catalog-be/src/main/java/org/openecomp/sdc/be/filters/BeServletFilter.java
@@ -20,20 +20,7 @@
package org.openecomp.sdc.be.filters;
-import java.io.IOException;
-import java.util.UUID;
-
-import javax.annotation.Priority;
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServletRequest;
-import javax.ws.rs.container.ContainerRequestContext;
-import javax.ws.rs.container.ContainerRequestFilter;
-import javax.ws.rs.container.ContainerResponseContext;
-import javax.ws.rs.container.ContainerResponseFilter;
-import javax.ws.rs.core.Context;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.ext.Provider;
-
+import com.google.gson.GsonBuilder;
import org.openecomp.sdc.be.config.BeEcompErrorManager;
import org.openecomp.sdc.be.config.Configuration;
import org.openecomp.sdc.be.config.ConfigurationManager;
@@ -50,171 +37,180 @@ import org.slf4j.LoggerFactory;
import org.slf4j.MDC;
import org.springframework.web.context.WebApplicationContext;
-import com.google.gson.GsonBuilder;
+import javax.annotation.Priority;
+import javax.servlet.ServletContext;
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.container.ContainerRequestContext;
+import javax.ws.rs.container.ContainerRequestFilter;
+import javax.ws.rs.container.ContainerResponseContext;
+import javax.ws.rs.container.ContainerResponseFilter;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.ext.Provider;
+import java.io.IOException;
+import java.util.UUID;
@Provider
@Priority(1)
public class BeServletFilter implements ContainerRequestFilter, ContainerResponseFilter {
- @Context
- private HttpServletRequest sr;
-
- private static Logger log = LoggerFactory.getLogger(BeServletFilter.class.getName());
-
- @Override
- public void filter(ContainerRequestContext requestContext) throws IOException {
- try {
-
- MDC.clear();
-
- // In case of 405 response code, this function is not entered, then
- // we'll process
- // the MDC fields and UUID during the response
- ThreadLocalsHolder.setMdcProcessed(true);
-
- // Timing HTTP request
- ThreadLocalsHolder.setRequestStartTime(System.currentTimeMillis());
-
- String uuid = processMdcFields(requestContext);
-
- ThreadLocalsHolder.setUuid(uuid);
-
- inHttpRequest();
-
- } catch (Exception e) {
- BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeRestApiGeneralError, "Error during request filter");
- BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Error during request filter");
- log.debug("Error during request filter: {} ", e);
- }
- }
-
- @Override
- public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException {
- try {
- // Formatting the response in case of 405
- if (responseContext.getStatus() == Response.Status.METHOD_NOT_ALLOWED.getStatusCode()) {
- ResponseFormat responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.NOT_ALLOWED);
- responseContext.setEntity(new GsonBuilder().setPrettyPrinting().create().toJson(responseFormat.getRequestError()));
- }
-
- if (ThreadLocalsHolder.isMdcProcessed()) {
- // filter() was executed during request - this is the regular
- // flow
- responseContext.getHeaders().add(Constants.X_ECOMP_REQUEST_ID_HEADER, ThreadLocalsHolder.getUuid());
- Long startTime = ThreadLocalsHolder.getRequestStartTime();
- if (startTime != null) {
- long endTime = System.currentTimeMillis();
- MDC.put("timer", Long.toString(endTime - startTime));
- }
- } else {
- // this is the 405 response code case
- // we have no MDC fields since filter() wasn't executed during
- // request
- String uuid = processMdcFields(requestContext);
- responseContext.getHeaders().add(Constants.X_ECOMP_REQUEST_ID_HEADER, uuid);
- }
-
- outHttpResponse(responseContext);
-
- log.debug("Close transaction from filter");
- TitanDao titanDao = getTitanDao();
- if ( titanDao != null ){
- if (responseContext.getStatus() == Response.Status.OK.getStatusCode() || responseContext.getStatus() == Response.Status.CREATED.getStatusCode() ){
- titanDao.commit();
- log.debug("Doing commit from filter");
- }else{
- titanDao.rollback();
- log.debug("Doing rollback from filter");
- }
- }
- // Cleaning up
- MDC.clear();
- ThreadLocalsHolder.cleanup();
- } catch (Exception e) {
- BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeRestApiGeneralError, "Error during request filter");
- BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Error during request filter");
- log.debug("Error during response filter: {} ", e);
- }
- }
-
- private String processMdcFields(ContainerRequestContext requestContext) {
- // UserId for logging
- String userId = requestContext.getHeaderString(Constants.USER_ID_HEADER);
- MDC.put("userId", userId);
-
- String serviceInstanceID = requestContext.getHeaderString(Constants.X_ECOMP_SERVICE_ID_HEADER);
- MDC.put("serviceInstanceID", serviceInstanceID);
-
- MDC.put("remoteAddr", sr.getRemoteAddr());
- MDC.put("localAddr", sr.getLocalAddr());
-
- // UUID
- String uuid = requestContext.getHeaderString(Constants.X_ECOMP_REQUEST_ID_HEADER);
- if (uuid == null) {
- // Generate the UUID
- uuid = UUID.randomUUID().toString();
-
- // Add to MDC for logging
- MDC.put("uuid", uuid);
-
- // This log message should already be with the UUID
- uuidGeneration(uuid);
-
- } else {
- // According to Ella, in case this header exists, we don't have to
- // perform any validations
- // since it's not our responsibilty, so we log the UUID just as it
- // was received.
- MDC.put("uuid", uuid);
- }
- return uuid;
- }
-
- private ComponentsUtils getComponentsUtils() {
- ServletContext context = this.sr.getSession().getServletContext();
-
- WebAppContextWrapper webApplicationContextWrapper = (WebAppContextWrapper) context.getAttribute(Constants.WEB_APPLICATION_CONTEXT_WRAPPER_ATTR);
- WebApplicationContext webApplicationContext = webApplicationContextWrapper.getWebAppContext(context);
- return webApplicationContext.getBean(ComponentsUtils.class);
- }
- private TitanDao getTitanDao() {
- ServletContext context = this.sr.getSession().getServletContext();
-
- WebAppContextWrapper webApplicationContextWrapper = (WebAppContextWrapper) context.getAttribute(Constants.WEB_APPLICATION_CONTEXT_WRAPPER_ATTR);
- WebApplicationContext webApplicationContext = webApplicationContextWrapper.getWebAppContext(context);
- return webApplicationContext.getBean(TitanDao.class);
- }
- // Extracted for purpose of clear method name, for logback %M parameter
- private void inHttpRequest() {
- if (isInfoLog()) {
- log.info("{} {} {}", sr.getMethod(), sr.getRequestURI(), sr.getProtocol());
- } else {
- log.debug("{} {} {}", sr.getMethod(), sr.getRequestURI(), sr.getProtocol());
- }
- }
-
- // Extracted for purpose of clear method name, for logback %M parameter
- private void outHttpResponse(ContainerResponseContext responseContext) {
- if (isInfoLog()) {
- log.info("{} {} {} SC=\"{}\"", sr.getMethod(), sr.getRequestURI(), sr.getProtocol(), responseContext.getStatus());
- } else {
- log.debug("{} {} {} SC=\"{}\"", sr.getMethod(), sr.getRequestURI(), sr.getProtocol(), responseContext.getStatus());
- }
- }
-
- private boolean isInfoLog() {
- boolean logRequest = true;
- Configuration configuration = ConfigurationManager.getConfigurationManager().getConfiguration();
- String requestURI = sr.getRequestURI();
- if (requestURI != null && configuration.getUnLoggedUrls() != null) {
- logRequest = !configuration.getUnLoggedUrls().contains(requestURI);
- }
-
- return logRequest;
- }
-
- // Extracted for purpose of clear method name, for logback %M parameter
- private void uuidGeneration(String uuid) {
- log.info("No requestID provided -> Generated UUID {}", uuid);
- }
+ @Context
+ private HttpServletRequest sr;
+
+ private static final Logger log = LoggerFactory.getLogger(BeServletFilter.class);
+
+ @Override
+ public void filter(ContainerRequestContext requestContext) throws IOException {
+ try {
+
+ MDC.clear();
+
+ // In case of 405 response code, this function is not entered, then
+ // we'll process
+ // the MDC fields and UUID during the response
+ ThreadLocalsHolder.setMdcProcessed(true);
+
+ // Timing HTTP request
+ ThreadLocalsHolder.setRequestStartTime(System.currentTimeMillis());
+
+ String uuid = processMdcFields(requestContext);
+
+ ThreadLocalsHolder.setUuid(uuid);
+
+ inHttpRequest();
+
+ } catch (Exception e) {
+ BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Error during request filter");
+ log.debug("Error during request filter: {} ", e);
+ }
+ }
+
+ @Override
+ public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException {
+ try {
+ // Formatting the response in case of 405
+ if (responseContext.getStatus() == Response.Status.METHOD_NOT_ALLOWED.getStatusCode()) {
+ ResponseFormat responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.NOT_ALLOWED);
+ responseContext.setEntity(new GsonBuilder().setPrettyPrinting().create().toJson(responseFormat.getRequestError()));
+ }
+
+ if (ThreadLocalsHolder.isMdcProcessed()) {
+ // filter() was executed during request - this is the regular
+ // flow
+ responseContext.getHeaders().add(Constants.X_ECOMP_REQUEST_ID_HEADER, ThreadLocalsHolder.getUuid());
+ Long startTime = ThreadLocalsHolder.getRequestStartTime();
+ if (startTime != null) {
+ long endTime = System.currentTimeMillis();
+ MDC.put("timer", Long.toString(endTime - startTime));
+ }
+ } else {
+ // this is the 405 response code case
+ // we have no MDC fields since filter() wasn't executed during
+ // request
+ String uuid = processMdcFields(requestContext);
+ responseContext.getHeaders().add(Constants.X_ECOMP_REQUEST_ID_HEADER, uuid);
+ }
+
+ outHttpResponse(responseContext);
+
+ log.debug("Close transaction from filter");
+ TitanDao titanDao = getTitanDao();
+ if ( titanDao != null ){
+ if (responseContext.getStatus() == Response.Status.OK.getStatusCode() || responseContext.getStatus() == Response.Status.CREATED.getStatusCode() ){
+ titanDao.commit();
+ log.debug("Doing commit from filter");
+ }else{
+ titanDao.rollback();
+ log.debug("Doing rollback from filter");
+ }
+ }
+ // Cleaning up
+ MDC.clear();
+ ThreadLocalsHolder.cleanup();
+ } catch (Exception e) {
+ BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Error during request filter");
+ log.debug("Error during response filter: {} ", e);
+ }
+ }
+
+ private String processMdcFields(ContainerRequestContext requestContext) {
+ // UserId for logging
+ String userId = requestContext.getHeaderString(Constants.USER_ID_HEADER);
+ MDC.put("userId", userId);
+
+ String serviceInstanceID = requestContext.getHeaderString(Constants.X_ECOMP_SERVICE_ID_HEADER);
+ MDC.put("serviceInstanceID", serviceInstanceID);
+
+ MDC.put("remoteAddr", sr.getRemoteAddr());
+ MDC.put("localAddr", sr.getLocalAddr());
+
+ // UUID
+ String uuid = requestContext.getHeaderString(Constants.X_ECOMP_REQUEST_ID_HEADER);
+ if (uuid == null) {
+ // Generate the UUID
+ uuid = UUID.randomUUID().toString();
+
+ // Add to MDC for logging
+ MDC.put("uuid", uuid);
+
+ // This log message should already be with the UUID
+ uuidGeneration(uuid);
+
+ } else {
+ // According to Ella, in case this header exists, we don't have to
+ // perform any validations
+ // since it's not our responsibilty, so we log the UUID just as it
+ // was received.
+ MDC.put("uuid", uuid);
+ }
+ return uuid;
+ }
+
+ private ComponentsUtils getComponentsUtils() {
+ ServletContext context = this.sr.getSession().getServletContext();
+
+ WebAppContextWrapper webApplicationContextWrapper = (WebAppContextWrapper) context.getAttribute(Constants.WEB_APPLICATION_CONTEXT_WRAPPER_ATTR);
+ WebApplicationContext webApplicationContext = webApplicationContextWrapper.getWebAppContext(context);
+ return webApplicationContext.getBean(ComponentsUtils.class);
+ }
+ private TitanDao getTitanDao() {
+ ServletContext context = this.sr.getSession().getServletContext();
+
+ WebAppContextWrapper webApplicationContextWrapper = (WebAppContextWrapper) context.getAttribute(Constants.WEB_APPLICATION_CONTEXT_WRAPPER_ATTR);
+ WebApplicationContext webApplicationContext = webApplicationContextWrapper.getWebAppContext(context);
+ return webApplicationContext.getBean(TitanDao.class);
+ }
+ // Extracted for purpose of clear method name, for logback %M parameter
+ private void inHttpRequest() {
+ if (isInfoLog()) {
+ log.info("{} {} {}", sr.getMethod(), sr.getRequestURI(), sr.getProtocol());
+ } else {
+ log.debug("{} {} {}", sr.getMethod(), sr.getRequestURI(), sr.getProtocol());
+ }
+ }
+
+ // Extracted for purpose of clear method name, for logback %M parameter
+ private void outHttpResponse(ContainerResponseContext responseContext) {
+ if (isInfoLog()) {
+ log.info("{} {} {} SC=\"{}\"", sr.getMethod(), sr.getRequestURI(), sr.getProtocol(), responseContext.getStatus());
+ } else {
+ log.debug("{} {} {} SC=\"{}\"", sr.getMethod(), sr.getRequestURI(), sr.getProtocol(), responseContext.getStatus());
+ }
+ }
+
+ private boolean isInfoLog() {
+ boolean logRequest = true;
+ Configuration configuration = ConfigurationManager.getConfigurationManager().getConfiguration();
+ String requestURI = sr.getRequestURI();
+ if (requestURI != null && configuration.getUnLoggedUrls() != null) {
+ logRequest = !configuration.getUnLoggedUrls().contains(requestURI);
+ }
+
+ return logRequest;
+ }
+
+ // Extracted for purpose of clear method name, for logback %M parameter
+ private void uuidGeneration(String uuid) {
+ log.info("No requestID provided -> Generated UUID {}", uuid);
+ }
}