Enhancements for the aai-common library
[aai/aai-common.git] / aai-els-onap-logging / src / main / java / org / onap / aai / aailog / filter / AaiAuditLogContainerFilter.java
1 /**
2  * ============LICENSE_START=======================================================
3  * org.onap.aai
4  * ================================================================================
5  * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *    http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.onap.aai.aailog.filter;
22
23 import org.onap.aai.aailog.logs.ServiceName;
24 import org.onap.logging.filter.base.AuditLogContainerFilter;
25 import org.onap.logging.filter.base.Constants;
26 import org.onap.logging.filter.base.SimpleMap;
27 import org.onap.logging.ref.slf4j.ONAPLogConstants;
28 import org.slf4j.MDC;
29
30 import javax.annotation.Priority;
31 import javax.servlet.http.HttpServletRequest;
32 import javax.ws.rs.container.ContainerRequestContext;
33 import javax.ws.rs.container.PreMatching;
34 import javax.ws.rs.core.HttpHeaders;
35 import javax.ws.rs.core.UriInfo;
36
37 @PreMatching
38 @Priority(1)
39 public class AaiAuditLogContainerFilter extends AuditLogContainerFilter {
40     @Override
41     public void setMDCPartnerName(SimpleMap headers) {
42         logger.trace("Checking X-ONAP-PartnerName header for partnerName.");
43         String partnerName = headers.get(ONAPLogConstants.Headers.PARTNER_NAME);
44         if (partnerName == null || partnerName.isEmpty()) {
45             logger.trace("No valid X-ONAP-PartnerName header value. Checking X-FromAppId header for partnerName.");
46             partnerName = headers.get (Constants.HttpHeaders.HEADER_FROM_APP_ID);
47             if (partnerName == null || partnerName.isEmpty()) {
48                 logger.trace("No valid X-FromAppId header value. Checking User-Agent header for partnerName.");
49                 partnerName = headers.get(HttpHeaders.USER_AGENT);
50                 if (partnerName == null || partnerName.isEmpty()) {
51                     logger.trace("No valid User-Agent header value. Checking X-ClientID header for partnerName.");
52                     partnerName = headers.get(Constants.HttpHeaders.CLIENT_ID);
53                     if (partnerName == null || partnerName.isEmpty()) {
54                         logger.trace("No valid partnerName headers. Defaulting partnerName to UNKNOWN.");
55                         partnerName = Constants.DefaultValues.UNKNOWN;
56                     }
57                 }
58             }
59         }
60         MDC.put(ONAPLogConstants.MDCs.PARTNER_NAME, partnerName);
61     }
62     @Override
63     protected void setServiceName(ContainerRequestContext containerRequest) {
64         UriInfo uriInfo = containerRequest.getUriInfo();
65         String serviceName = ServiceName.extractServiceName(uriInfo.getAbsolutePath().getRawPath());
66         MDC.put(ONAPLogConstants.MDCs.SERVICE_NAME, serviceName);
67     }
68
69     @Override
70     protected void pre(SimpleMap headers, ContainerRequestContext request, HttpServletRequest httpServletRequest) {
71         try {
72             String requestId = getRequestId(headers);
73             MDC.put(ONAPLogConstants.MDCs.REQUEST_ID, requestId);
74             // handle the case where the request ID value was invalid and we had to generate a new one
75             addRequestIdHeader(request, requestId);
76             setInvocationId(headers);
77             setServiceName(request);
78             setMDCPartnerName(headers);
79             setServerFQDN();
80             setClientIPAddress(httpServletRequest);
81             setInstanceID();
82             setEntryTimeStamp();
83             MDC.put(ONAPLogConstants.MDCs.RESPONSE_STATUS_CODE, ONAPLogConstants.ResponseStatus.INPROGRESS.toString());
84             additionalPreHandling(request);
85             setLogTimestamp();
86             setElapsedTime();
87             logger.info(ONAPLogConstants.Markers.ENTRY, "Entering");
88         } catch (Exception e) {
89             logger.warn("Error in AaiAuditContainerFilter pre", e);
90         }
91     }
92
93     protected void addRequestIdHeader(ContainerRequestContext containerRequest, String requestId) {
94         if (containerRequest.getHeaders().get(ONAPLogConstants.Headers.REQUEST_ID) != null) {
95             containerRequest.getHeaders().get(ONAPLogConstants.Headers.REQUEST_ID).clear();
96         }
97         containerRequest.getHeaders().add(ONAPLogConstants.Headers.REQUEST_ID, requestId);
98     };
99 }