From: Eylon Malin Date: Tue, 29 Oct 2019 13:01:17 +0000 (+0200) Subject: use onap logging 1.6.1 with needed workarounds X-Git-Tag: 6.0.1~226 X-Git-Url: https://gerrit.onap.org/r/gitweb?a=commitdiff_plain;h=c638391d22999bd61243794a1981d7476bfdbd5f;p=vid.git 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 --- diff --git a/epsdk-app-onap/src/main/java/org/onap/portalapp/conf/ExternalAppInitializer.java b/epsdk-app-onap/src/main/java/org/onap/portalapp/conf/ExternalAppInitializer.java index e4386c150..0a4e87ed5 100644 --- a/epsdk-app-onap/src/main/java/org/onap/portalapp/conf/ExternalAppInitializer.java +++ b/epsdk-app-onap/src/main/java/org/onap/portalapp/conf/ExternalAppInitializer.java @@ -44,6 +44,7 @@ import javax.servlet.ServletContext; import javax.servlet.ServletException; import org.onap.logging.filter.base.AbstractAuditLogFilter; import org.onap.logging.filter.base.AbstractMetricLogFilter; +import org.onap.logging.ref.slf4j.ONAPLogConstants; import org.onap.portalsdk.core.conf.AppInitializer; import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate; import org.slf4j.LoggerFactory; @@ -70,8 +71,8 @@ public class ExternalAppInitializer extends AppInitializer { //mark in logs that vid is started. private void logVidIsStarted() { - LoggerFactory.getLogger(AbstractMetricLogFilter.class).info(VID_IS_STARTED); - LoggerFactory.getLogger(AbstractAuditLogFilter.class).info(VID_IS_STARTED); + LoggerFactory.getLogger(AbstractMetricLogFilter.class).info(ONAPLogConstants.Markers.INVOKE, VID_IS_STARTED); + LoggerFactory.getLogger(AbstractAuditLogFilter.class).info(ONAPLogConstants.Markers.ENTRY, VID_IS_STARTED); } private void setPartnerName() { 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"); + } +} diff --git a/vid-automation/src/main/java/org/onap/simulator/presetGenerator/presets/BasePresets/BaseSDCPreset.java b/vid-automation/src/main/java/org/onap/simulator/presetGenerator/presets/BasePresets/BaseSDCPreset.java index ba35299a8..4a1da9e27 100644 --- a/vid-automation/src/main/java/org/onap/simulator/presetGenerator/presets/BasePresets/BaseSDCPreset.java +++ b/vid-automation/src/main/java/org/onap/simulator/presetGenerator/presets/BasePresets/BaseSDCPreset.java @@ -15,7 +15,7 @@ public abstract class BaseSDCPreset extends BasePreset { public Map getRequestHeaders() { Map map = super.getRequestHeaders(); map.put("X-ONAP-PartnerName", "VID.VID"); - map.put("X-ONAP-InvocationID", "[0-9a-fA-F]{8}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{12}"); + map.put("X-InvocationID", "[0-9a-fA-F]{8}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{12}"); map.put("X-ONAP-RequestID", "[0-9a-fA-F]{8}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{12}"); return map; } diff --git a/vid-automation/src/test/java/org/onap/vid/more/LoggerFormatTest.java b/vid-automation/src/test/java/org/onap/vid/more/LoggerFormatTest.java index 50c3db861..11a6932f4 100644 --- a/vid-automation/src/test/java/org/onap/vid/more/LoggerFormatTest.java +++ b/vid-automation/src/test/java/org/onap/vid/more/LoggerFormatTest.java @@ -145,7 +145,7 @@ public class LoggerFormatTest extends BaseApiTest { underTestRequests.forEach(request->{ - List invocationIds = request.headers.get("X-ONAP-InvocationID"); + List invocationIds = request.headers.get("X-InvocationID"); assertThat(invocationIds, hasSize(1)); String invocationId = invocationIds.get(0);