summaryrefslogtreecommitdiffstats
path: root/catalog-fe/src/main/java/org/openecomp/sdc/fe/servlets/LoggingServlet.java
diff options
context:
space:
mode:
Diffstat (limited to 'catalog-fe/src/main/java/org/openecomp/sdc/fe/servlets/LoggingServlet.java')
-rw-r--r--catalog-fe/src/main/java/org/openecomp/sdc/fe/servlets/LoggingServlet.java102
1 files changed, 102 insertions, 0 deletions
diff --git a/catalog-fe/src/main/java/org/openecomp/sdc/fe/servlets/LoggingServlet.java b/catalog-fe/src/main/java/org/openecomp/sdc/fe/servlets/LoggingServlet.java
new file mode 100644
index 0000000000..af07810f87
--- /dev/null
+++ b/catalog-fe/src/main/java/org/openecomp/sdc/fe/servlets/LoggingServlet.java
@@ -0,0 +1,102 @@
+package org.openecomp.sdc.fe.servlets;
+
+import com.google.common.cache.Cache;
+import com.google.common.cache.CacheBuilder;
+import org.openecomp.sdc.common.api.Constants;
+import org.openecomp.sdc.common.servlets.BasicServlet;
+import org.openecomp.sdc.fe.mdc.MdcData;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.slf4j.MDC;
+
+
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.core.Response;
+import java.util.concurrent.TimeUnit;
+
+public abstract class LoggingServlet extends BasicServlet {
+
+ private static final Logger log = LoggerFactory.getLogger(BasicServlet.class.getName());
+ private static final Cache<String, MdcData> mdcDataCache = CacheBuilder.newBuilder().expireAfterWrite(10, TimeUnit.SECONDS).build();
+
+ /**
+ * log incoming requests
+ * @param httpRequest the http request
+ */
+ protected void logFeRequest(HttpServletRequest httpRequest) {
+
+ MDC.clear();
+
+ Long transactionStartTime = System.currentTimeMillis();
+ String uuid = httpRequest.getHeader(Constants.X_ECOMP_REQUEST_ID_HEADER);
+ String serviceInstanceID = httpRequest.getHeader(Constants.X_ECOMP_SERVICE_ID_HEADER);
+
+ if (uuid != null && uuid.length() > 0) {
+ String userId = httpRequest.getHeader(Constants.USER_ID_HEADER);
+
+ String remoteAddr = httpRequest.getRemoteAddr();
+ String localAddr = httpRequest.getLocalAddr();
+
+ mdcDataCache.put(uuid, new MdcData(serviceInstanceID, userId, remoteAddr, localAddr, transactionStartTime));
+
+ updateMdc(uuid, serviceInstanceID, userId, remoteAddr, localAddr, null);
+ }
+ inHttpRequest(httpRequest);
+ }
+
+ /**
+ * log response
+ * @param request orig request
+ * @param response returned response
+ */
+ protected void logFeResponse(HttpServletRequest request, Response response) {
+ String uuid = request.getHeader(Constants.X_ECOMP_REQUEST_ID_HEADER);
+ String transactionRoundTime = null;
+
+ if (uuid != null) {
+ MdcData mdcData = mdcDataCache.getIfPresent(uuid);
+ if (mdcData != null) {
+ Long transactionStartTime = mdcData.getTransactionStartTime();
+ if (transactionStartTime != null) {// should'n ever be null, but
+ // just to be defensive
+ transactionRoundTime = Long.toString(System.currentTimeMillis() - transactionStartTime);
+ }
+ updateMdc(uuid, mdcData.getServiceInstanceID(), mdcData.getUserId(), mdcData.getRemoteAddr(), mdcData.getLocalAddr(), transactionRoundTime);
+ }
+ }
+ outHttpResponse(response);
+
+ MDC.clear();
+ }
+
+ /**
+ * Extracted for purpose of clear method name, for logback %M parameter
+ * @param httpRequest http request
+ */
+ protected abstract void inHttpRequest(HttpServletRequest httpRequest) ;
+
+
+ /**
+ * Extracted for purpose of clear method name, for logback %M parameter
+ * @param response http response
+ */
+ protected abstract void outHttpResponse(Response response);
+
+ /**
+ * update mdc with values from the request
+ * @param uuid service uuid
+ * @param serviceInstanceID serviceInstanceID
+ * @param userId userId
+ * @param remoteAddr remoteAddr
+ * @param localAddr localAddr
+ * @param transactionStartTime transactionStartTime
+ */
+ private void updateMdc(String uuid, String serviceInstanceID, String userId, String remoteAddr, String localAddr, String transactionStartTime) {
+ MDC.put("uuid", uuid);
+ MDC.put("serviceInstanceID", serviceInstanceID);
+ MDC.put("userId", userId);
+ MDC.put("remoteAddr", remoteAddr);
+ MDC.put("localAddr", localAddr);
+ MDC.put("timer", transactionStartTime);
+ }
+}