755d18b5eea819520a9fd9cc9d2852860587bca6
[so.git] / common / src / main / java / org / onap / so / logging / spring / interceptor / LoggingInterceptor.java
1 package org.onap.so.logging.spring.interceptor;
2
3 import java.util.Collections;
4 import java.util.Map;
5 import java.util.UUID;
6 import java.util.stream.Collectors;
7 import javax.servlet.http.HttpServletRequest;
8 import javax.servlet.http.HttpServletResponse;
9 import javax.ws.rs.core.Context;
10 import javax.ws.rs.core.Response;
11 import javax.ws.rs.ext.Providers;
12 import org.onap.logging.ref.slf4j.ONAPLogConstants;
13 import org.onap.so.logging.jaxrs.filter.MDCSetup;
14 import org.slf4j.Logger;
15 import org.slf4j.LoggerFactory;
16 import org.slf4j.MDC;
17 import org.springframework.beans.factory.annotation.Autowired;
18 import org.springframework.stereotype.Component;
19 import org.springframework.web.servlet.ModelAndView;
20 import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
21
22 @Component
23 public class LoggingInterceptor extends HandlerInterceptorAdapter {
24
25     Logger logger = LoggerFactory.getLogger(LoggingInterceptor.class);
26
27     @Autowired
28     MDCSetup mdcSetup;
29     
30     @Context 
31     private Providers providers;
32
33     @Override
34     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
35             throws Exception {
36         Map<String, String> headers = Collections.list(((HttpServletRequest) request).getHeaderNames())
37                 .stream()
38                 .collect(Collectors.toMap(h -> h, request::getHeader));
39         setRequestId(headers);
40         setInvocationId(headers);
41         setServiceName(request);
42         setMDCPartnerName(headers);
43         mdcSetup.setClientIPAddress(request);
44         mdcSetup.setEntryTimeStamp();
45         mdcSetup.setInstanceUUID();
46         mdcSetup.setServerFQDN();
47         MDC.put(ONAPLogConstants.MDCs.RESPONSE_STATUS_CODE, "INPROGRESS");
48         logger.info(ONAPLogConstants.Markers.ENTRY, "Entering");
49         return true;
50     }
51     
52     @Override
53     public void postHandle(
54             HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
55             throws Exception {
56         setResponseStatusCode(response);
57         MDC.put(ONAPLogConstants.MDCs.RESPONSE_DESCRIPTION,"");      
58         MDC.put(ONAPLogConstants.MDCs.RESPONSE_CODE,String.valueOf(response.getStatus()));
59         logger.info(ONAPLogConstants.Markers.EXIT, "Exiting.");
60         MDC.clear();
61     }
62
63     private void setResponseStatusCode(HttpServletResponse response) {
64         String statusCode;
65         if(Response.Status.Family.familyOf(response.getStatus()).equals(Response.Status.Family.SUCCESSFUL)){     
66             statusCode=ONAPLogConstants.ResponseStatus.COMPLETED.toString();
67         }else{                          
68             statusCode= ONAPLogConstants.ResponseStatus.ERROR.toString();               
69         }           
70         MDC.put(ONAPLogConstants.MDCs.RESPONSE_STATUS_CODE, statusCode);
71     }
72
73     private void setServiceName(HttpServletRequest request) {
74         MDC.put(ONAPLogConstants.MDCs.SERVICE_NAME, request.getRequestURI());
75     }
76
77     private void setRequestId(Map<String, String> headers) {
78         String requestId=headers.get(ONAPLogConstants.Headers.REQUEST_ID);
79         if(requestId == null || requestId.isEmpty())
80             requestId = UUID.randomUUID().toString();
81         MDC.put(ONAPLogConstants.MDCs.REQUEST_ID,requestId);
82     }
83
84     private void setInvocationId(Map<String, String> headers) {
85         String invocationId = headers.get(ONAPLogConstants.Headers.INVOCATION_ID);
86         if(invocationId == null || invocationId.isEmpty())
87             invocationId =UUID.randomUUID().toString();
88         MDC.put(ONAPLogConstants.MDCs.INVOCATION_ID, invocationId);
89     }
90
91     private void setMDCPartnerName(Map<String, String> headers) {
92         String partnerName=headers.get(ONAPLogConstants.Headers.PARTNER_NAME);
93         if(partnerName == null || partnerName.isEmpty())
94             partnerName = "";
95         MDC.put(ONAPLogConstants.MDCs.PARTNER_NAME,partnerName);
96     }
97     
98
99 }