Merge "[AAI] Fix doc config files"
[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 javax.annotation.Priority;
24 import javax.servlet.http.HttpServletRequest;
25 import javax.ws.rs.container.ContainerRequestContext;
26 import javax.ws.rs.container.PreMatching;
27 import javax.ws.rs.core.HttpHeaders;
28 import javax.ws.rs.core.UriInfo;
29
30 import org.onap.aai.aailog.logs.ServiceName;
31 import org.onap.logging.filter.base.AuditLogContainerFilter;
32 import org.onap.logging.filter.base.Constants;
33 import org.onap.logging.filter.base.SimpleMap;
34 import org.onap.logging.ref.slf4j.ONAPLogConstants;
35 import org.slf4j.MDC;
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
63     @Override
64     protected void setServiceName(ContainerRequestContext containerRequest) {
65         UriInfo uriInfo = containerRequest.getUriInfo();
66         String serviceName = ServiceName.extractServiceName(uriInfo.getAbsolutePath().getRawPath());
67         MDC.put(ONAPLogConstants.MDCs.SERVICE_NAME, serviceName);
68     }
69
70     @Override
71     protected void pre(SimpleMap headers, ContainerRequestContext request, HttpServletRequest httpServletRequest) {
72         try {
73             String requestId = getRequestId(headers);
74             MDC.put(ONAPLogConstants.MDCs.REQUEST_ID, requestId);
75             // handle the case where the request ID value was invalid and we had to generate a new one
76             addRequestIdHeader(request, requestId);
77             setInvocationId(headers);
78             setServiceName(request);
79             setMDCPartnerName(headers);
80             setServerFQDN();
81             setClientIPAddress(httpServletRequest);
82             setInstanceID();
83             setEntryTimeStamp();
84             MDC.put(ONAPLogConstants.MDCs.RESPONSE_STATUS_CODE, ONAPLogConstants.ResponseStatus.INPROGRESS.toString());
85             additionalPreHandling(request);
86             setLogTimestamp();
87             setElapsedTime();
88             logger.info(ONAPLogConstants.Markers.ENTRY, "Entering");
89         } catch (Exception e) {
90             logger.warn("Error in AaiAuditContainerFilter pre", e);
91         }
92     }
93
94     protected void addRequestIdHeader(ContainerRequestContext containerRequest, String requestId) {
95         if (containerRequest.getHeaders().get(ONAPLogConstants.Headers.REQUEST_ID) != null) {
96             containerRequest.getHeaders().get(ONAPLogConstants.Headers.REQUEST_ID).clear();
97         }
98         containerRequest.getHeaders().add(ONAPLogConstants.Headers.REQUEST_ID, requestId);
99     };
100 }