1 package org.openecomp.sdc.fe.servlets;
3 import com.google.common.cache.Cache;
4 import com.google.common.cache.CacheBuilder;
5 import org.openecomp.sdc.common.api.Constants;
6 import org.openecomp.sdc.common.servlets.BasicServlet;
7 import org.openecomp.sdc.fe.mdc.MdcData;
8 import org.slf4j.Logger;
9 import org.slf4j.LoggerFactory;
13 import javax.servlet.http.HttpServletRequest;
14 import javax.ws.rs.core.Response;
15 import java.util.concurrent.TimeUnit;
17 public abstract class LoggingServlet extends BasicServlet {
19 private static final Logger log = LoggerFactory.getLogger(BasicServlet.class.getName());
20 private static final Cache<String, MdcData> mdcDataCache = CacheBuilder.newBuilder().expireAfterWrite(10, TimeUnit.SECONDS).build();
23 * log incoming requests
24 * @param httpRequest the http request
26 protected void logFeRequest(HttpServletRequest httpRequest) {
30 Long transactionStartTime = System.currentTimeMillis();
31 String uuid = httpRequest.getHeader(Constants.X_ECOMP_REQUEST_ID_HEADER);
32 String serviceInstanceID = httpRequest.getHeader(Constants.X_ECOMP_SERVICE_ID_HEADER);
34 if (uuid != null && uuid.length() > 0) {
35 String userId = httpRequest.getHeader(Constants.USER_ID_HEADER);
37 String remoteAddr = httpRequest.getRemoteAddr();
38 String localAddr = httpRequest.getLocalAddr();
40 mdcDataCache.put(uuid, new MdcData(serviceInstanceID, userId, remoteAddr, localAddr, transactionStartTime));
42 updateMdc(uuid, serviceInstanceID, userId, remoteAddr, localAddr, null);
44 inHttpRequest(httpRequest);
49 * @param request orig request
50 * @param response returned response
52 protected void logFeResponse(HttpServletRequest request, Response response) {
53 String uuid = request.getHeader(Constants.X_ECOMP_REQUEST_ID_HEADER);
54 String transactionRoundTime = null;
57 MdcData mdcData = mdcDataCache.getIfPresent(uuid);
58 if (mdcData != null) {
59 Long transactionStartTime = mdcData.getTransactionStartTime();
60 if (transactionStartTime != null) {// should'n ever be null, but
61 // just to be defensive
62 transactionRoundTime = Long.toString(System.currentTimeMillis() - transactionStartTime);
64 updateMdc(uuid, mdcData.getServiceInstanceID(), mdcData.getUserId(), mdcData.getRemoteAddr(), mdcData.getLocalAddr(), transactionRoundTime);
67 outHttpResponse(response);
73 * Extracted for purpose of clear method name, for logback %M parameter
74 * @param httpRequest http request
76 protected abstract void inHttpRequest(HttpServletRequest httpRequest) ;
80 * Extracted for purpose of clear method name, for logback %M parameter
81 * @param response http response
83 protected abstract void outHttpResponse(Response response);
86 * update mdc with values from the request
87 * @param uuid service uuid
88 * @param serviceInstanceID serviceInstanceID
89 * @param userId userId
90 * @param remoteAddr remoteAddr
91 * @param localAddr localAddr
92 * @param transactionStartTime transactionStartTime
94 private void updateMdc(String uuid, String serviceInstanceID, String userId, String remoteAddr, String localAddr, String transactionStartTime) {
95 MDC.put("uuid", uuid);
96 MDC.put("serviceInstanceID", serviceInstanceID);
97 MDC.put("userId", userId);
98 MDC.put("remoteAddr", remoteAddr);
99 MDC.put("localAddr", localAddr);
100 MDC.put("timer", transactionStartTime);