From 1cfb08779ea0e00be69e072a940b3063e049fe6b Mon Sep 17 00:00:00 2001 From: Ofir Sonsino Date: Wed, 31 Jan 2018 17:19:00 +0200 Subject: org.onap migration Change-Id: I52f0b2851f2c765752b6d21f49b32136d7d72a3d Issue-ID: VID-86 Signed-off-by: Ofir Sonsino --- .../java/org/onap/vid/logging/VidLoggerAspect.java | 85 ++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 vid-app-common/src/main/java/org/onap/vid/logging/VidLoggerAspect.java (limited to 'vid-app-common/src/main/java/org/onap/vid/logging') diff --git a/vid-app-common/src/main/java/org/onap/vid/logging/VidLoggerAspect.java b/vid-app-common/src/main/java/org/onap/vid/logging/VidLoggerAspect.java new file mode 100644 index 000000000..e4e0edb8c --- /dev/null +++ b/vid-app-common/src/main/java/org/onap/vid/logging/VidLoggerAspect.java @@ -0,0 +1,85 @@ +package org.onap.vid.logging; + +import org.apache.commons.lang3.StringUtils; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.openecomp.portalsdk.core.logging.aspect.EELFLoggerAdvice; +import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate; +import org.openecomp.portalsdk.core.util.SystemProperties; +import org.springframework.beans.factory.annotation.Autowired; + +import java.net.InetAddress; +import java.net.UnknownHostException; + +import static com.att.eelf.configuration.Configuration.MDC_SERVER_FQDN; + + +@Aspect +@org.springframework.context.annotation.Configuration +public class VidLoggerAspect { + + private String canonicalHostName; + @Autowired + EELFLoggerAdvice advice; + + public VidLoggerAspect() { + try { + final InetAddress localHost = InetAddress.getLocalHost(); + canonicalHostName = localHost.getCanonicalHostName(); + } catch (UnknownHostException e) { + // YOLO + canonicalHostName = null; + } + } + + @Pointcut("execution(public * org.onap.vid.controller.*Controller.*(..))") + public void vidControllers() {} + + @Around("vidControllers() && (" + + " @within(org.openecomp.portalsdk.core.logging.aspect.AuditLog)" + + " || @annotation(org.openecomp.portalsdk.core.logging.aspect.AuditLog)" + + " || @annotation(org.springframework.web.bind.annotation.RequestMapping)" + + ")") + public Object logAuditMethodClassAround(ProceedingJoinPoint joinPoint) throws Throwable { + return logAroundMethod(joinPoint, SystemProperties.SecurityEventTypeEnum.INCOMING_REST_MESSAGE); + } + + private Object logAroundMethod(ProceedingJoinPoint joinPoint, SystemProperties.SecurityEventTypeEnum securityEventType) throws Throwable { + //Before + Object[] passOnArgs = new Object[] {joinPoint.getSignature().getDeclaringType().getName(),joinPoint.getSignature().getName()}; + Object[] returnArgs = advice.before(securityEventType, joinPoint.getArgs(), passOnArgs); + + fixServerFqdnInMDC(); + + //Execute the actual method + Object result; + String restStatus = "COMPLETE"; + try { + result = joinPoint.proceed(); + } catch(Exception e) { + restStatus = "ERROR"; + throw e; + } finally { + fixStatusCodeInMDC(restStatus); + advice.after(securityEventType, restStatus, joinPoint.getArgs(), returnArgs, passOnArgs); + } + + return result; + } + + // Set the status code into MDC *before* the metrics log is written by advice.after() + private void fixStatusCodeInMDC(String restStatus) { + EELFLoggerDelegate.mdcPut(SystemProperties.STATUS_CODE, restStatus); + } + + // Override the non-canonical hostname set by EELFLoggerDelegate::setGlobalLoggingContext() + // that was invoked by advice.before() (and some other SDK cases) + private void fixServerFqdnInMDC() { + if (!StringUtils.isBlank(canonicalHostName)) { + EELFLoggerDelegate.mdcPut(MDC_SERVER_FQDN, canonicalHostName); + } + } + +} -- cgit 1.2.3-korg