fix swagger issue
[sdc.git] / catalog-fe / src / main / java / org / openecomp / sdc / fe / servlets / LoggingServlet.java
1 package org.openecomp.sdc.fe.servlets;
2
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;
10 import org.slf4j.MDC;
11
12
13 import javax.servlet.http.HttpServletRequest;
14 import javax.ws.rs.core.Response;
15 import java.util.concurrent.TimeUnit;
16
17 public abstract class LoggingServlet extends BasicServlet {
18
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();
21
22     /**
23      * log incoming requests
24      * @param httpRequest the http request
25      */
26     protected void logFeRequest(HttpServletRequest httpRequest) {
27
28         MDC.clear();
29
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);
33
34         if (uuid != null && uuid.length() > 0) {
35             String userId = httpRequest.getHeader(Constants.USER_ID_HEADER);
36
37             String remoteAddr = httpRequest.getRemoteAddr();
38             String localAddr = httpRequest.getLocalAddr();
39
40             mdcDataCache.put(uuid, new MdcData(serviceInstanceID, userId, remoteAddr, localAddr, transactionStartTime));
41
42             updateMdc(uuid, serviceInstanceID, userId, remoteAddr, localAddr, null);
43         }
44         inHttpRequest(httpRequest);
45     }
46
47     /**
48      * log response
49      * @param request orig request
50      * @param response returned response
51      */
52     protected void logFeResponse(HttpServletRequest request, Response response) {
53         String uuid = request.getHeader(Constants.X_ECOMP_REQUEST_ID_HEADER);
54         String transactionRoundTime = null;
55
56         if (uuid != 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);
63                 }
64                 updateMdc(uuid, mdcData.getServiceInstanceID(), mdcData.getUserId(), mdcData.getRemoteAddr(), mdcData.getLocalAddr(), transactionRoundTime);
65             }
66         }
67         outHttpResponse(response);
68
69         MDC.clear();
70     }
71
72     /**
73      * Extracted for purpose of clear method name, for logback %M parameter
74      * @param httpRequest http request
75      */
76     protected abstract void inHttpRequest(HttpServletRequest httpRequest) ;
77
78
79     /**
80      * Extracted for purpose of clear method name, for logback %M parameter
81      * @param response http response
82      */
83     protected abstract void outHttpResponse(Response response);
84
85     /**
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
93      */
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);
101     }
102 }