summaryrefslogtreecommitdiffstats
path: root/openecomp-be/lib/openecomp-sdc-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/servlet/jaxrs/LoggingResponseFilter.java
diff options
context:
space:
mode:
Diffstat (limited to 'openecomp-be/lib/openecomp-sdc-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/servlet/jaxrs/LoggingResponseFilter.java')
-rw-r--r--openecomp-be/lib/openecomp-sdc-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/servlet/jaxrs/LoggingResponseFilter.java133
1 files changed, 31 insertions, 102 deletions
diff --git a/openecomp-be/lib/openecomp-sdc-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/servlet/jaxrs/LoggingResponseFilter.java b/openecomp-be/lib/openecomp-sdc-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/servlet/jaxrs/LoggingResponseFilter.java
index 4609620be1..fa9e815db8 100644
--- a/openecomp-be/lib/openecomp-sdc-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/servlet/jaxrs/LoggingResponseFilter.java
+++ b/openecomp-be/lib/openecomp-sdc-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/servlet/jaxrs/LoggingResponseFilter.java
@@ -16,19 +16,22 @@
package org.openecomp.sdc.logging.servlet.jaxrs;
-import org.openecomp.sdc.logging.api.*;
+import static javax.ws.rs.core.Response.Status.Family.REDIRECTION;
+import static javax.ws.rs.core.Response.Status.Family.SUCCESSFUL;
+import static org.openecomp.sdc.logging.api.StatusCode.COMPLETE;
+import static org.openecomp.sdc.logging.api.StatusCode.ERROR;
+import static org.openecomp.sdc.logging.servlet.jaxrs.LoggingRequestFilter.LOGGING_TRACKER_KEY;
-import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerResponseContext;
import javax.ws.rs.container.ContainerResponseFilter;
-import javax.ws.rs.container.ResourceInfo;
-import javax.ws.rs.core.Context;
import javax.ws.rs.core.Response;
import javax.ws.rs.ext.Provider;
-
-import static org.openecomp.sdc.logging.api.StatusCode.COMPLETE;
-import static org.openecomp.sdc.logging.api.StatusCode.ERROR;
+import org.openecomp.sdc.logging.api.Logger;
+import org.openecomp.sdc.logging.api.LoggerFactory;
+import org.openecomp.sdc.logging.api.StatusCode;
+import org.openecomp.sdc.logging.servlet.RequestProcessingResult;
+import org.openecomp.sdc.logging.servlet.Tracker;
/**
* <p>Takes care of logging when an HTTP request leaves the application. This includes writing to audit and clearing
@@ -44,123 +47,49 @@ import static org.openecomp.sdc.logging.api.StatusCode.ERROR;
* due to unhandled application or container exceptions.</i></p>
*
* @author evitaliy
- * @since 29 Oct 17
- *
* @see ContainerResponseFilter
+ * @since 29 Oct 17
*/
@Provider
public class LoggingResponseFilter implements ContainerResponseFilter {
- private static final int UNKNOWN_START_TIME = 0;
-
private static final Logger LOGGER = LoggerFactory.getLogger(LoggingResponseFilter.class);
- /**
- * Tracks reporting configuration problems to the log. We want to report them only once, and not to write to log
- * upon every request, as the configuration will not change in runtime.
- */
- private boolean reportBadConfiguration = true;
-
- private HttpServletRequest httpRequest;
-
- private ResourceInfo resource;
-
- /**
- * Injection of HTTP request object from JAX-RS context.
- *
- * @param httpRequest automatically injected by JAX-RS container
- */
- @Context
- public void setHttpRequest(HttpServletRequest httpRequest) {
- this.httpRequest = httpRequest;
- }
-
- /**
- * Injection of a resource that matches the request from JAX-RS context.
- *
- * @param resource automatically injected by JAX-RS container
- */
- @Context
- public void setResource(ResourceInfo resource) {
- this.resource = resource;
- }
-
@Override
- public void filter(ContainerRequestContext containerRequestContext,
- ContainerResponseContext containerResponseContext) {
+ public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) {
- try {
+ Tracker tracker = (Tracker) requestContext.getProperty(LOGGING_TRACKER_KEY);
- if ((resource == null) || (resource.getResourceClass() == null)) {
- LOGGER.debug("No matching resource, skipping audit.");
- return;
- }
-
- writeAudit(containerRequestContext, containerResponseContext);
-
- } finally {
- LoggingContext.clear();
- }
- }
-
- private void writeAudit(ContainerRequestContext containerRequestContext,
- ContainerResponseContext containerResponseContext) {
-
- Logger resourceLogger = LoggerFactory.getLogger(resource.getResourceMethod().getDeclaringClass());
- if (!resourceLogger.isAuditEnabled()) {
+ if (tracker == null) {
+ LOGGER.debug("No logging tracker received");
return;
}
- long start = readStartTime(containerRequestContext);
- long end = System.currentTimeMillis();
-
- Response.StatusType statusInfo = containerResponseContext.getStatusInfo();
- int responseCode = statusInfo.getStatusCode();
- StatusCode statusCode = isSuccess(responseCode) ? COMPLETE : ERROR;
-
- AuditData auditData = AuditData.builder().startTime(start).endTime(end).statusCode(statusCode)
- .responseCode(Integer.toString(responseCode))
- .responseDescription(statusInfo.getReasonPhrase())
- .clientIpAddress(httpRequest.getRemoteAddr()).build();
- resourceLogger.audit(auditData);
+ tracker.postRequest(new ContainerResponseResult(responseContext.getStatusInfo()));
}
- private boolean isSuccess(int responseCode) {
- return responseCode > 199 && responseCode < 400;
- }
+ private static class ContainerResponseResult implements RequestProcessingResult {
- private long readStartTime(ContainerRequestContext containerRequestContext) {
+ private final Response.StatusType statusInfo;
- Object startTime = containerRequestContext.getProperty(LoggingRequestFilter.START_TIME_KEY);
- if (startTime == null) {
- return handleMissingStartTime();
+ private ContainerResponseResult(Response.StatusType statusInfo) {
+ this.statusInfo = statusInfo;
}
- return parseStartTime(startTime);
- }
-
- private long handleMissingStartTime() {
- reportConfigProblem("{} key was not found in JAX-RS request context. "
- + "Make sure you configured a request filter", LoggingRequestFilter.START_TIME_KEY);
- return UNKNOWN_START_TIME;
- }
-
- private long parseStartTime(Object startTime) {
-
- try {
- return Long.class.cast(startTime);
- } catch (ClassCastException e) {
- reportConfigProblem("{} key in JAX-RS request context contains an object of type '{}', but 'java.lang.Long'"
- + " is expected", LoggingRequestFilter.START_TIME_KEY, startTime.getClass().getName(), e);
- return 0;
+ @Override
+ public int getStatus() {
+ return statusInfo.getStatusCode();
}
- }
- private void reportConfigProblem(String message, Object... arguments) {
+ @Override
+ public StatusCode getStatusCode() {
+ Response.Status.Family family = statusInfo.getFamily();
+ return family.equals(SUCCESSFUL) || family.equals(REDIRECTION) ? COMPLETE : ERROR;
+ }
- if (reportBadConfiguration) {
- reportBadConfiguration = false;
- LOGGER.error(message, arguments);
+ @Override
+ public String getStatusPhrase() {
+ return statusInfo.getReasonPhrase();
}
}
}