re base code
[sdc.git] / catalog-be / src / main / java / org / openecomp / sdc / be / filters / BeServletFilter.java
index 9a46514..c60a8d6 100644 (file)
 
 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;
@@ -42,14 +29,28 @@ import org.openecomp.sdc.be.dao.jsongraph.TitanDao;
 import org.openecomp.sdc.be.impl.ComponentsUtils;
 import org.openecomp.sdc.be.impl.WebAppContextWrapper;
 import org.openecomp.sdc.common.api.Constants;
+import org.openecomp.sdc.common.log.elements.LogFieldsMdcHandler;
+import org.openecomp.sdc.common.log.enums.LogLevel;
+import org.openecomp.sdc.common.log.enums.Severity;
+import org.openecomp.sdc.common.log.wrappers.Logger;
+import org.openecomp.sdc.common.log.wrappers.LoggerSdcAudit;
 import org.openecomp.sdc.common.util.ThreadLocalsHolder;
 import org.openecomp.sdc.exception.ResponseFormat;
-import org.slf4j.Logger;
-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)
@@ -57,8 +58,8 @@ public class BeServletFilter implements ContainerRequestFilter, ContainerRespons
 
     @Context
     private HttpServletRequest sr;
-
-    private static final Logger log = LoggerFactory.getLogger(BeServletFilter.class);
+    private static final Logger log = Logger.getLogger(BeServletFilter.class);
+    private static LoggerSdcAudit audit = new LoggerSdcAudit(BeServletFilter.class);
 
     @Override
     public void filter(ContainerRequestContext requestContext) throws IOException {
@@ -66,6 +67,8 @@ public class BeServletFilter implements ContainerRequestFilter, ContainerRespons
 
             MDC.clear();
 
+            audit.startLog(requestContext);
+
             // In case of 405 response code, this function is not entered, then
             // we'll process
             // the MDC fields and UUID during the response
@@ -109,28 +112,50 @@ public class BeServletFilter implements ContainerRequestFilter, ContainerRespons
                 // 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);
+                // call to start-log method to fill mandatory fields
+                audit.startLog(requestContext);
+            }
+
+            writeToTitan(responseContext);
+
+            //write to Audit log in case it's valuable action
+            // (e.g. ignoring healthCheck and any other unlogged urls as in yaml
+            if (isInfoLog()) {
+                audit.log(sr.getRemoteAddr(),
+                        requestContext,
+                        responseContext.getStatusInfo(),
+                        LogLevel.INFO,
+                        Severity.OK,
+                        LogFieldsMdcHandler.getInstance()
+                                .getAuditMessage());
             }
 
             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);
+        } finally {
+            // Cleaning up
+            MDC.clear();
+            ThreadLocalsHolder.cleanup();
+        }
+    }
+
+    private void writeToTitan(ContainerResponseContext 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");
+            }
         }
     }
 
@@ -174,6 +199,7 @@ public class BeServletFilter implements ContainerRequestFilter, ContainerRespons
         WebApplicationContext webApplicationContext = webApplicationContextWrapper.getWebAppContext(context);
         return webApplicationContext.getBean(ComponentsUtils.class);
     }
+
     private TitanDao getTitanDao() {
         ServletContext context = this.sr.getSession().getServletContext();
 
@@ -181,6 +207,7 @@ public class BeServletFilter implements ContainerRequestFilter, ContainerRespons
         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()) {
@@ -206,7 +233,6 @@ public class BeServletFilter implements ContainerRequestFilter, ContainerRespons
         if (requestURI != null && configuration.getUnLoggedUrls() != null) {
             logRequest = !configuration.getUnLoggedUrls().contains(requestURI);
         }
-
         return logRequest;
     }