* ============LICENSE_START==========================================
* ONAP Portal
* ===================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
* ===================================================================
*
* Unless otherwise specified, all software contained herein is licensed
package org.onap.portalapp.portal.logging.aop;
import java.net.InetAddress;
-import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;
import javax.servlet.http.HttpServletRequest;
+import org.onap.portalapp.portal.domain.EPApp;
import org.onap.portalapp.portal.domain.EPUser;
+import org.onap.portalapp.portal.service.AppsCacheService;
import org.onap.portalapp.portal.utils.EPCommonSystemProperties;
+import org.onap.portalapp.portal.utils.EcompPortalUtils;
import org.onap.portalapp.util.EPUserUtils;
import org.onap.portalsdk.core.exception.SessionExpiredException;
import org.onap.portalsdk.core.logging.format.AlarmSeverityEnum;
import org.onap.portalsdk.core.util.SystemProperties.SecurityEventTypeEnum;
import org.onap.portalsdk.core.web.support.UserUtils;
import org.slf4j.MDC;
+import org.springframework.beans.factory.annotation.Autowired;
import com.att.eelf.configuration.Configuration;
public class EPEELFLoggerAdvice {
private EELFLoggerDelegate adviceLogger = EELFLoggerDelegate.getLogger(EPEELFLoggerAdvice.class);
+
+ @Autowired
+ AppsCacheService appCacheService;
/**
* DateTime Format according to the ONAP Application Logging Guidelines.
}
EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(className);
+ logger.debug(EELFLoggerDelegate.debugLogger, "EPEELFLoggerAdvice#after: finished {}", methodName);
+ // add the metrics log
+ logger.info(EELFLoggerDelegate.metricsLogger, methodName + " operation is completed.");
+
+ // Log security message, if necessary
+ if (securityEventType != null) {
+ MDC.put(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP,getCurrentDateTimeUTC());
+ MDC.put(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP, getCurrentDateTimeUTC());
+ this.calculateDateTimeDifference(MDC.get(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP),MDC.get(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP));
+ MDC.put(EPCommonSystemProperties.STATUS_CODE, "INPROGRESS");
+ MDC.put("CustomField1", "ENTRY");
+ MDC.put("CustomField2", "InvocationID="+MDC.get(Configuration.MDC_KEY_REQUEST_ID));
+ try {
+ MDC.put(Configuration.MDC_SERVER_FQDN, InetAddress.getLocalHost().getCanonicalHostName());
+ } catch (Exception e) {
+ adviceLogger.error(EELFLoggerDelegate.errorLogger,
+ " while setting the IP address ", e);
+ }
+ this.logSecurityMessage(logger, securityEventType, methodName);
+
+ // Outgoing & LDAP messages are part of Incoming requests so,
+ // keep "RequestId", "PartnerName", "ServiceName", "LoginId" &
+ // "ResponseCode" etc. in memory and remove it only when
+ // finished processing the parent incoming message.
+ if (securityEventType != SecurityEventTypeEnum.OUTGOING_REST_MESSAGE
+ && securityEventType != SecurityEventTypeEnum.LDAP_PHONEBOOK_USER_SEARCH) {
+ MDC.remove(Configuration.MDC_KEY_REQUEST_ID);
+ MDC.remove(EPCommonSystemProperties.PARTNER_NAME);
+ MDC.remove(Configuration.MDC_SERVICE_NAME);
+ MDC.remove(EPCommonSystemProperties.MDC_LOGIN_ID);
+ MDC.remove(EPCommonSystemProperties.EXTERNAL_API_RESPONSE_CODE);
+ }else{
+ MDC.remove(Configuration.MDC_KEY_REQUEST_ID);
+ MDC.remove(EPCommonSystemProperties.PARTNER_NAME);
+ MDC.remove(Configuration.MDC_SERVICE_NAME);
+ }
+
+ MDC.remove(Configuration.MDC_SERVER_FQDN);
+ }
logger.debug(EELFLoggerDelegate.debugLogger, "EPEELFLoggerAdvice#before: entering {}", methodName);
return new Object[] { "" };
}
String requestId = UUID.randomUUID().toString();
MDC.put(Configuration.MDC_KEY_REQUEST_ID, requestId);
}
- MDC.put(EPCommonSystemProperties.PARTNER_NAME, "Unknown");
+
+ if (MDC.get(EPCommonSystemProperties.PARTNER_NAME) == null|| MDC.get(EPCommonSystemProperties.PARTNER_NAME).isEmpty()){
+ MDC.put(EPCommonSystemProperties.PARTNER_NAME, "Unknown");
+ }
+
MDC.put(Configuration.MDC_SERVICE_NAME, EPCommonSystemProperties.ECOMP_PORTAL_BE);
MDC.put(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP, getCurrentDateTimeUTC());
this.calculateDateTimeDifference(MDC.get(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP),
MDC.get(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP));
-
+ MDC.put("CustomField1", "EXIT");
+ MDC.put("CustomField2", "InvocationID="+MDC.get(Configuration.MDC_KEY_REQUEST_ID));
+ try {
+ MDC.put(Configuration.MDC_SERVER_FQDN, InetAddress.getLocalHost().getCanonicalHostName());
+ } catch (Exception e) {
+ adviceLogger.error(EELFLoggerDelegate.errorLogger,
+ " while setting the IP address ", e);
+ }
this.logSecurityMessage(logger, securityEventType, methodName);
// Outgoing & LDAP messages are part of Incoming requests so,
}
// clear when finishes audit logging
+ MDC.remove(Configuration.MDC_SERVER_FQDN);
MDC.remove(EPCommonSystemProperties.FULL_URL);
MDC.remove(EPCommonSystemProperties.PROTOCOL);
MDC.remove(EPCommonSystemProperties.STATUS_CODE);
MDC.remove(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP);
MDC.remove(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP);
MDC.remove(EPCommonSystemProperties.RESPONSE_CODE);
+
}
+ MDC.remove("CustomField1");
+ MDC.remove("CustomField2");
MDC.remove(className + methodName + EPCommonSystemProperties.METRICSLOG_BEGIN_TIMESTAMP);
MDC.remove(EPCommonSystemProperties.METRICSLOG_BEGIN_TIMESTAMP);
MDC.remove(EPCommonSystemProperties.METRICSLOG_END_TIMESTAMP);
&& securityEventType != SecurityEventTypeEnum.LDAP_PHONEBOOK_USER_SEARCH
&& securityEventType != SecurityEventTypeEnum.INCOMING_UEB_MESSAGE) {
// Load the RequestID (aka TrasactionId) into MDC context.
- String requestId = UserUtils.getRequestId(req);
- if (requestId == null||requestId.trim().length()==0) {
- requestId = UUID.randomUUID().toString();
- }
- MDC.put(Configuration.MDC_KEY_REQUEST_ID, requestId);
-
- // Load user agent into MDC context, if available.
- String accessingClient = req.getHeader(SystemProperties.USERAGENT_NAME);
- accessingClient = (accessingClient == null || accessingClient.trim().length()==0)?"Unknown":accessingClient;
- if (accessingClient != null && accessingClient.trim().length()==0 && (accessingClient.contains("Mozilla")
- || accessingClient.contains("Chrome") || accessingClient.contains("Safari"))) {
- accessingClient = EPCommonSystemProperties.ECOMP_PORTAL_FE;
- }
- MDC.put(EPCommonSystemProperties.PARTNER_NAME, accessingClient);
-
- // Load loginId into MDC context.
- EPUser user = null;
- try {
- user = EPUserUtils.getUserSession(req);
- } catch (SessionExpiredException se) {
- adviceLogger.debug(EELFLoggerDelegate.debugLogger,
- "setHttpRequestBasedDefaultsIntoGlobalLoggingContext: No user found in session");
- }
+ loadRequestId(req);
+
+ loadPartnerName(req);
- MDC.put(EPCommonSystemProperties.MDC_LOGIN_ID, (user != null ? user.getOrgUserId() : "NoUser"));
-
- // Rest URL & Protocol
- String restURL = "";
- MDC.put(EPCommonSystemProperties.FULL_URL, EPCommonSystemProperties.UNKNOWN);
- MDC.put(EPCommonSystemProperties.PROTOCOL, EPCommonSystemProperties.HTTP);
- restURL = UserUtils.getFullURL(req);
- //if (restURL != null && restURL != "") {
- if (restURL != null && restURL.trim().length()>0) {
- MDC.put(EPCommonSystemProperties.FULL_URL, restURL);
- if (restURL.toLowerCase().contains("https")) {
- MDC.put(EPCommonSystemProperties.PROTOCOL, EPCommonSystemProperties.HTTPS);
- }
- }
+ loadLoginId(req);
- // Rest Path
- MDC.put(Configuration.MDC_SERVICE_NAME, restMethod);
- String restPath = req.getServletPath();
- //if (restPath != null && restPath != "") {
- if (restPath != null && restPath.trim().length()>0) {
+ loadUrlProtocol(req);
- MDC.put(Configuration.MDC_SERVICE_NAME, restPath);
- }
+ loadServicePath(req, restMethod);
- // Client IPAddress i.e. IPAddress of the remote host who is
- // making this request.
- String clientIPAddress = "";
- clientIPAddress = req.getHeader("X-FORWARDED-FOR");
- if (clientIPAddress == null) {
- clientIPAddress = req.getRemoteAddr();
- }
- MDC.put(EPCommonSystemProperties.CLIENT_IP_ADDRESS, clientIPAddress);
+ loadClientAddress(req);
+
} else if (securityEventType == SecurityEventTypeEnum.LDAP_PHONEBOOK_USER_SEARCH) {
MDC.put(EPCommonSystemProperties.TARGET_ENTITY, "Phonebook");
MDC.put(EPCommonSystemProperties.TARGET_SERVICE_NAME, "search");
}
}
+ private void loadClientAddress(HttpServletRequest req) {
+ // Client IPAddress i.e. IPAddress of the remote host who is
+ // making this request.
+ String clientIPAddress = "";
+ clientIPAddress = req.getHeader("X-FORWARDED-FOR");
+ if (clientIPAddress == null) {
+ clientIPAddress = req.getRemoteAddr();
+ }
+ MDC.put(EPCommonSystemProperties.CLIENT_IP_ADDRESS, clientIPAddress);
+ }
+
+ private void loadServicePath(HttpServletRequest req, String restMethod) {
+ // Rest Path
+ MDC.put(Configuration.MDC_SERVICE_NAME, restMethod);
+ String restPath = req.getServletPath();
+ //if (restPath != null && restPath != "") {
+ if (restPath != null && restPath.trim().length()>0) {
+
+ MDC.put(Configuration.MDC_SERVICE_NAME, restPath);
+ }
+ }
+
+ private void loadUrlProtocol(HttpServletRequest req) {
+ // Rest URL & Protocol
+ String restURL = "";
+ MDC.put(EPCommonSystemProperties.FULL_URL, EPCommonSystemProperties.UNKNOWN);
+ MDC.put(EPCommonSystemProperties.PROTOCOL, EPCommonSystemProperties.HTTP);
+ restURL = UserUtils.getFullURL(req);
+ //if (restURL != null && restURL != "") {
+ if (restURL != null && restURL.trim().length()>0) {
+ MDC.put(EPCommonSystemProperties.FULL_URL, restURL);
+ if (restURL.toLowerCase().contains("https")) {
+ MDC.put(EPCommonSystemProperties.PROTOCOL, EPCommonSystemProperties.HTTPS);
+ }
+ }
+ }
+
+ private void loadRequestId(HttpServletRequest req) {
+ String requestId = UserUtils.getRequestId(req);
+ if (requestId == null||requestId.trim().length()==0) {
+ requestId = UUID.randomUUID().toString();
+ }
+ MDC.put(Configuration.MDC_KEY_REQUEST_ID, requestId);
+ }
+
+ private void loadLoginId(HttpServletRequest req) {
+ // Load loginId into MDC context.
+ String loginId = "NoUser";
+
+ try {
+ EPUser user = EPUserUtils.getUserSession(req);
+ loginId = (user != null ? user.getOrgUserId(): loginId);
+ } catch (SessionExpiredException se) {
+ adviceLogger.debug(EELFLoggerDelegate.debugLogger,
+ "setHttpRequestBasedDefaultsIntoGlobalLoggingContext: No user found in session");
+ }
+
+ // try fetching from username in header
+ final String nameHeader = req.getHeader(EPCommonSystemProperties.USERNAME);
+ if (nameHeader != null) {
+ loginId = nameHeader;
+ }
+
+ // try fetching from BasicAuth info
+ final String authHeader = req.getHeader(EPCommonSystemProperties.AUTHORIZATION);
+ if (authHeader != null) {
+ String[] accountNamePassword = EcompPortalUtils.getUserNamePassword(authHeader);
+ if (accountNamePassword != null && accountNamePassword.length == 2) {
+ loginId = accountNamePassword[0];
+ }
+
+ }
+
+ MDC.put(EPCommonSystemProperties.MDC_LOGIN_ID, loginId );
+
+ }
+
+ private void loadPartnerName(HttpServletRequest req) {
+
+
+ // Load user agent into MDC context, if available.
+ String accessingClient = req.getHeader(SystemProperties.USERAGENT_NAME);
+ accessingClient = (accessingClient == null || accessingClient.trim().length()==0)?"Unknown":accessingClient;
+ if (accessingClient != null && accessingClient.trim().length()==0 && (accessingClient.contains("Mozilla")
+ || accessingClient.contains("Chrome") || accessingClient.contains("Safari"))) {
+ accessingClient = EPCommonSystemProperties.ECOMP_PORTAL_FE;
+ }
+ MDC.put(EPCommonSystemProperties.PARTNER_NAME, accessingClient);
+
+ // try get the Partner name from uebkey
+ String uebVal = req.getHeader(EPCommonSystemProperties.UEB_KEY);
+ if(uebVal != null) {
+ EPApp appRecord = appCacheService.getAppFromUeb(uebVal);
+ MDC.put(EPCommonSystemProperties.PARTNER_NAME, appRecord.getName());
+ }
+
+
+ }
+
/**
*
* @param beginDateTime