2 * ============LICENSE_START=======================================================
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
20 package org.onap.aai.aailog.filter;
22 import java.io.IOException;
23 import java.util.List;
24 import java.util.UUID;
25 import org.onap.aai.aailog.logs.ServiceName;
26 import org.onap.logging.filter.base.AbstractMetricLogFilter;
27 import org.onap.logging.filter.base.Constants;
28 import org.onap.logging.ref.slf4j.ONAPLogConstants;
30 import org.springframework.http.HttpHeaders;
31 import org.springframework.http.HttpRequest;
32 import org.springframework.http.client.ClientHttpRequestExecution;
33 import org.springframework.http.client.ClientHttpRequestInterceptor;
34 import org.springframework.http.client.ClientHttpResponse;
36 public class RestClientLoggingInterceptor extends AbstractMetricLogFilter<HttpRequest, ClientHttpResponse, HttpHeaders> implements ClientHttpRequestInterceptor {
38 public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution)
41 this.setInvocationId(request.getHeaders());
42 pre(request, request.getHeaders());
43 ClientHttpResponse resp = execution.execute(request, body);
48 protected void pre(HttpRequest request, HttpHeaders requestHeaders) {
51 setupHeaders(request, requestHeaders);
53 } catch (Exception e) {
54 logger.warn("Error in RestClientLoggingInterceptor pre", e);
57 protected void setupHeaders(HttpRequest clientRequest, HttpHeaders requestHeaders) {
58 String requestId = extractRequestID(requestHeaders);
59 addHeader(requestHeaders, ONAPLogConstants.Headers.REQUEST_ID, requestId);
60 addHeader(requestHeaders, Constants.HttpHeaders.HEADER_REQUEST_ID, requestId);
61 String transactionId = requestHeaders.getFirst(Constants.HttpHeaders.TRANSACTION_ID);
62 if (transactionId == null || transactionId.isEmpty()) {
63 addHeader(requestHeaders, Constants.HttpHeaders.TRANSACTION_ID, requestId);
65 addHeader(requestHeaders, Constants.HttpHeaders.ECOMP_REQUEST_ID, requestId);
66 addHeader(requestHeaders, ONAPLogConstants.Headers.INVOCATION_ID, MDC.get(ONAPLogConstants.MDCs.INVOCATION_ID));
67 String pName = getProperty(Constants.Property.PARTNER_NAME);
68 if (pName != null && (!pName.isEmpty())) {
69 addHeader(requestHeaders, ONAPLogConstants.Headers.PARTNER_NAME, pName);
72 protected String extractRequestID(HttpHeaders requestHeaders) {
73 String requestId = MDC.get(ONAPLogConstants.MDCs.REQUEST_ID);
74 if (requestId == null || requestId.isEmpty()) {
75 requestId = requestHeaders.getFirst(Constants.HttpHeaders.TRANSACTION_ID);
76 if (requestId == null || requestId.isEmpty()) {
77 requestId = UUID.randomUUID().toString();
79 MDC.put(ONAPLogConstants.MDCs.REQUEST_ID, requestId);
83 public void setInvocationId(HttpHeaders headers) {
84 String invocationId = null;
86 List<String> headerList = headers.get(ONAPLogConstants.Headers.INVOCATION_ID);
87 if (headerList != null && (!headerList.isEmpty())) {
88 for (String h : headerList) {
89 if ( h != null && (!h.isEmpty()) ) {
94 headers.remove(ONAPLogConstants.Headers.INVOCATION_ID);
96 if (invocationId == null) {
97 invocationId = UUID.randomUUID().toString();
99 MDC.put(ONAPLogConstants.MDCs.INVOCATION_ID, invocationId);
102 protected void addHeader(HttpHeaders requestHeaders, String headerName, String headerValue) {
103 requestHeaders.add(headerName, headerValue);
106 protected String getTargetServiceName(HttpRequest request) {
107 return (getServiceName(request));
109 protected String getServiceName(HttpRequest request){
110 String path = request.getURI().getRawPath();
111 return(ServiceName.extractServiceName(path));
114 protected int getHttpStatusCode(ClientHttpResponse response) {
116 if (response != null ) {
118 result = response.getStatusCode().value();
120 catch (IOException e) {
121 logger.warn("Error in RestClientLoggingInterceptor getHttpStatusCode {}", e.getMessage());
127 protected String getResponseCode(ClientHttpResponse response) {
129 if (response != null ) {
131 result = response.getStatusCode().toString();
133 catch (IOException e) {
134 logger.warn("Error in RestClientLoggingInterceptor getResponseCode {}", e.getMessage());
140 protected String getTargetEntity(HttpRequest request) {
141 //TODO where do we get this from?
142 return Constants.DefaultValues.UNKNOWN_TARGET_ENTITY;