From c638391d22999bd61243794a1981d7476bfdbd5f Mon Sep 17 00:00:00 2001 From: Eylon Malin Date: Tue, 29 Oct 2019 15:01:17 +0200 Subject: use onap logging 1.6.1 with needed workarounds Issue-ID: VID-253 Onap logging 1.6.1 has some mismatches regards invocationId. This commit fix these mismatches by fixing the MDC when needed. Change-Id: Ic8d35318ae511667dfa6f9c4297d562fd976a717 Signed-off-by: Eylon Malin --- vid-app-common/pom.xml | 2 +- .../java/org/onap/vid/controller/WebConfig.java | 4 +- .../vid/logging/ApacheClientMetricInterceptor.java | 8 ++++ .../org/onap/vid/logging/LoggingFilterHelper.java | 49 ++++++++++++++++++++++ .../onap/vid/logging/VidLoggingInterceptor.java | 46 ++++++++++++++++++++ .../onap/vid/logging/VidMetricLogClientFilter.java | 38 +++++++++++++++++ .../org/onap/vid/mso/RestMsoImplementation.java | 4 +- .../logging/ApacheClientMetricInterceptorTest.java | 16 +++++++ .../vid/logging/VidLoggingInterceptorTest.java | 48 +++++++++++++++++++++ .../vid/logging/VidMetricLogClientFilterTest.java | 49 ++++++++++++++++++++++ 10 files changed, 259 insertions(+), 5 deletions(-) create mode 100644 vid-app-common/src/main/java/org/onap/vid/logging/LoggingFilterHelper.java create mode 100644 vid-app-common/src/main/java/org/onap/vid/logging/VidLoggingInterceptor.java create mode 100644 vid-app-common/src/main/java/org/onap/vid/logging/VidMetricLogClientFilter.java create mode 100644 vid-app-common/src/test/java/org/onap/vid/logging/VidLoggingInterceptorTest.java create mode 100644 vid-app-common/src/test/java/org/onap/vid/logging/VidMetricLogClientFilterTest.java (limited to 'vid-app-common') diff --git a/vid-app-common/pom.xml b/vid-app-common/pom.xml index fc267a62d..9e5f58dd3 100755 --- a/vid-app-common/pom.xml +++ b/vid-app-common/pom.xml @@ -34,7 +34,7 @@ 4.3.11.Final 2.9.9 2.9.9.3 - 1.5.1 + 1.6.1 2.29 2.22.1 3.141.59 diff --git a/vid-app-common/src/main/java/org/onap/vid/controller/WebConfig.java b/vid-app-common/src/main/java/org/onap/vid/controller/WebConfig.java index 6c5595ca3..91fb94231 100644 --- a/vid-app-common/src/main/java/org/onap/vid/controller/WebConfig.java +++ b/vid-app-common/src/main/java/org/onap/vid/controller/WebConfig.java @@ -29,7 +29,6 @@ import java.io.File; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import javax.servlet.ServletContext; -import org.onap.logging.filter.spring.LoggingInterceptor; import org.onap.portalsdk.core.util.SystemProperties; import org.onap.vid.aai.AaiClient; import org.onap.vid.aai.AaiClientInterface; @@ -53,6 +52,7 @@ import org.onap.vid.asdc.parser.ToscaParserImpl2; import org.onap.vid.asdc.parser.VidNotionsBuilder; import org.onap.vid.asdc.rest.SdcRestClient; import org.onap.vid.client.SyncRestClient; +import org.onap.vid.logging.VidLoggingInterceptor; import org.onap.vid.properties.AsdcClientConfiguration; import org.onap.vid.properties.VidProperties; import org.onap.vid.scheduler.SchedulerService; @@ -222,6 +222,6 @@ public class WebConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { - registry.addInterceptor(new LoggingInterceptor()); + registry.addInterceptor(new VidLoggingInterceptor()); } } diff --git a/vid-app-common/src/main/java/org/onap/vid/logging/ApacheClientMetricInterceptor.java b/vid-app-common/src/main/java/org/onap/vid/logging/ApacheClientMetricInterceptor.java index 51e684456..6e125b4e6 100644 --- a/vid-app-common/src/main/java/org/onap/vid/logging/ApacheClientMetricInterceptor.java +++ b/vid-app-common/src/main/java/org/onap/vid/logging/ApacheClientMetricInterceptor.java @@ -25,6 +25,7 @@ import org.apache.http.HttpMessage; import org.apache.http.HttpRequest; import org.apache.http.HttpResponse; import org.onap.logging.filter.base.AbstractMetricLogFilter; +import org.onap.logging.ref.slf4j.ONAPLogConstants; public abstract class ApacheClientMetricInterceptor extends AbstractMetricLogFilter { @@ -59,4 +60,11 @@ public abstract class ApacheClientMetricInterceptor extends AbstractMetricLogFil //fallback to default value that provided by AbstractMetricLogFilter return null; } + + @Override + protected void additionalPre(HttpRequest request, HttpMessage message) { + LoggingFilterHelper.updateInvocationIDInMdcWithHeaderValue( + ()->message.getFirstHeader(ONAPLogConstants.Headers.INVOCATION_ID).getValue()); + } + } diff --git a/vid-app-common/src/main/java/org/onap/vid/logging/LoggingFilterHelper.java b/vid-app-common/src/main/java/org/onap/vid/logging/LoggingFilterHelper.java new file mode 100644 index 000000000..1447e828c --- /dev/null +++ b/vid-app-common/src/main/java/org/onap/vid/logging/LoggingFilterHelper.java @@ -0,0 +1,49 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * Copyright (C) 2017 - 2019 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.vid.logging; + +import java.util.function.Supplier; +import org.onap.logging.filter.base.AbstractMetricLogFilter; +import org.onap.logging.ref.slf4j.ONAPLogConstants; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.slf4j.MDC; + +public class LoggingFilterHelper { + + protected static final Logger logger = LoggerFactory.getLogger(AbstractMetricLogFilter.class); + + /** + * set invocationId in MDC with actual header value, + * due to bug in AbstractMetricLogFilter + * + * @param headerSupplier - return the InvocationId header value + */ + static void updateInvocationIDInMdcWithHeaderValue(Supplier headerSupplier) { + try { + String invocationId = headerSupplier.get(); + MDC.put(ONAPLogConstants.MDCs.INVOCATION_ID, invocationId); + } + catch (Exception e) { + logger.debug("Failed to retrieve "+ONAPLogConstants.Headers.INVOCATION_ID+" header", e); + } + } +} diff --git a/vid-app-common/src/main/java/org/onap/vid/logging/VidLoggingInterceptor.java b/vid-app-common/src/main/java/org/onap/vid/logging/VidLoggingInterceptor.java new file mode 100644 index 000000000..cdeb20737 --- /dev/null +++ b/vid-app-common/src/main/java/org/onap/vid/logging/VidLoggingInterceptor.java @@ -0,0 +1,46 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * Copyright (C) 2017 - 2019 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.vid.logging; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.onap.logging.filter.spring.LoggingInterceptor; +import org.onap.logging.ref.slf4j.ONAPLogConstants; +import org.slf4j.MDC; +import org.springframework.web.servlet.ModelAndView; + +public class VidLoggingInterceptor extends LoggingInterceptor { + + static final String INBOUND_INVO_ID = "InboundInvoId"; + + @Override + protected void additionalPreHandling(HttpServletRequest request) { + super.additionalPreHandling(request); + MDC.put(INBOUND_INVO_ID, MDC.get(ONAPLogConstants.MDCs.INVOCATION_ID)); + } + + @Override + public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { + MDC.put(ONAPLogConstants.MDCs.INVOCATION_ID, MDC.get(INBOUND_INVO_ID)); + super.postHandle(request, response, handler, modelAndView); + } + +} diff --git a/vid-app-common/src/main/java/org/onap/vid/logging/VidMetricLogClientFilter.java b/vid-app-common/src/main/java/org/onap/vid/logging/VidMetricLogClientFilter.java new file mode 100644 index 000000000..6b9222ef3 --- /dev/null +++ b/vid-app-common/src/main/java/org/onap/vid/logging/VidMetricLogClientFilter.java @@ -0,0 +1,38 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * Copyright (C) 2017 - 2019 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.vid.logging; + +import static org.onap.vid.logging.LoggingFilterHelper.updateInvocationIDInMdcWithHeaderValue; + +import javax.ws.rs.client.ClientRequestContext; +import javax.ws.rs.core.MultivaluedMap; +import org.onap.logging.filter.base.MetricLogClientFilter; +import org.onap.logging.ref.slf4j.ONAPLogConstants; + +public class VidMetricLogClientFilter extends MetricLogClientFilter { + + @Override + protected void additionalPre(ClientRequestContext clientRequestContext, MultivaluedMap stringObjectMultivaluedMap) { + updateInvocationIDInMdcWithHeaderValue( + ()->(String)stringObjectMultivaluedMap.getFirst(ONAPLogConstants.Headers.INVOCATION_ID) + ); + } +} diff --git a/vid-app-common/src/main/java/org/onap/vid/mso/RestMsoImplementation.java b/vid-app-common/src/main/java/org/onap/vid/mso/RestMsoImplementation.java index 0585a4736..a2d71d900 100644 --- a/vid-app-common/src/main/java/org/onap/vid/mso/RestMsoImplementation.java +++ b/vid-app-common/src/main/java/org/onap/vid/mso/RestMsoImplementation.java @@ -36,11 +36,11 @@ import javax.ws.rs.core.Response; import org.apache.commons.codec.binary.Base64; import org.eclipse.jetty.util.security.Password; import org.glassfish.jersey.client.ClientProperties; -import org.onap.logging.filter.base.MetricLogClientFilter; import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate; import org.onap.vid.aai.util.HttpClientMode; import org.onap.vid.aai.util.HttpsAuthClient; import org.onap.vid.client.HttpBasicClient; +import org.onap.vid.logging.VidMetricLogClientFilter; import org.onap.vid.utils.Logging; import org.onap.vid.utils.SystemPropertiesWrapper; import org.springframework.beans.factory.annotation.Autowired; @@ -131,7 +131,7 @@ public class RestMsoImplementation { } private void registerClientToMetricLogClientFilter(Client client) { - MetricLogClientFilter metricLogClientFilter = new MetricLogClientFilter(); + VidMetricLogClientFilter metricLogClientFilter = new VidMetricLogClientFilter(); client.register(metricLogClientFilter); } diff --git a/vid-app-common/src/test/java/org/onap/vid/logging/ApacheClientMetricInterceptorTest.java b/vid-app-common/src/test/java/org/onap/vid/logging/ApacheClientMetricInterceptorTest.java index 43f986501..0463581dc 100644 --- a/vid-app-common/src/test/java/org/onap/vid/logging/ApacheClientMetricInterceptorTest.java +++ b/vid-app-common/src/test/java/org/onap/vid/logging/ApacheClientMetricInterceptorTest.java @@ -27,6 +27,8 @@ import org.apache.http.HttpResponse; import org.apache.http.ProtocolVersion; import org.apache.http.client.methods.HttpGet; import org.apache.http.message.BasicHttpResponse; +import org.onap.logging.ref.slf4j.ONAPLogConstants; +import org.slf4j.MDC; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; @@ -42,6 +44,7 @@ public class ApacheClientMetricInterceptorTest { interceptor = new ApacheClientMetricInterceptor() {}; request = new HttpGet(path); response = new BasicHttpResponse(new ProtocolVersion("a",1,2), 200, "ok"); + MDC.clear(); } @Test @@ -74,4 +77,17 @@ public class ApacheClientMetricInterceptorTest { public void testGetTargetEntity() { assertNull(interceptor.getTargetEntity(request)); } + + @Test + protected void testAdditionalPre() { + request.addHeader(ONAPLogConstants.Headers.INVOCATION_ID, "123"); + interceptor.additionalPre(request, request); + assertEquals(MDC.get(ONAPLogConstants.MDCs.INVOCATION_ID), "123"); + } + + @Test + protected void whenThereIsNoInvocationIdHeader_thenMdcValueIsNull() { + interceptor.additionalPre(request, request); + assertNull(MDC.get(ONAPLogConstants.MDCs.INVOCATION_ID)); + } } diff --git a/vid-app-common/src/test/java/org/onap/vid/logging/VidLoggingInterceptorTest.java b/vid-app-common/src/test/java/org/onap/vid/logging/VidLoggingInterceptorTest.java new file mode 100644 index 000000000..fc78ed714 --- /dev/null +++ b/vid-app-common/src/test/java/org/onap/vid/logging/VidLoggingInterceptorTest.java @@ -0,0 +1,48 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * Copyright (C) 2017 - 2019 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.vid.logging; + +import static org.onap.vid.logging.VidLoggingInterceptor.INBOUND_INVO_ID; +import static org.testng.Assert.assertEquals; + +import org.onap.logging.ref.slf4j.ONAPLogConstants; +import org.slf4j.MDC; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; + +public class VidLoggingInterceptorTest { + + private VidLoggingInterceptor interceptor; + + @BeforeMethod + public void setup() { + interceptor = new VidLoggingInterceptor(); + MDC.clear(); + } + + @Test + public void testAdditionalPreHandling() { + MDC.put(ONAPLogConstants.MDCs.INVOCATION_ID, "987"); + interceptor.additionalPreHandling(null); + assertEquals(MDC.get(INBOUND_INVO_ID), "987"); + } + +} diff --git a/vid-app-common/src/test/java/org/onap/vid/logging/VidMetricLogClientFilterTest.java b/vid-app-common/src/test/java/org/onap/vid/logging/VidMetricLogClientFilterTest.java new file mode 100644 index 000000000..aaf8eaf01 --- /dev/null +++ b/vid-app-common/src/test/java/org/onap/vid/logging/VidMetricLogClientFilterTest.java @@ -0,0 +1,49 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * Copyright (C) 2017 - 2019 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.vid.logging; + +import static org.testng.Assert.assertEquals; + +import javax.ws.rs.core.MultivaluedHashMap; +import javax.ws.rs.core.MultivaluedMap; +import org.onap.logging.ref.slf4j.ONAPLogConstants; +import org.slf4j.MDC; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; + +public class VidMetricLogClientFilterTest { + + VidMetricLogClientFilter metricLogClientFilter; + + @BeforeMethod + public void setup() { + this.metricLogClientFilter = new VidMetricLogClientFilter(); + MDC.clear(); + } + + @Test + public void testAdditionalPre() { + MultivaluedMap headers = new MultivaluedHashMap<>(); + headers.add(ONAPLogConstants.Headers.INVOCATION_ID, "xyz"); + metricLogClientFilter.additionalPre(null, headers); + assertEquals(MDC.get(ONAPLogConstants.MDCs.INVOCATION_ID), "xyz"); + } +} -- cgit 1.2.3-korg