diff options
Diffstat (limited to 'common-app-api/src/main/java/org/openecomp/sdc/common/ecomplogwrapper')
5 files changed, 423 insertions, 0 deletions
diff --git a/common-app-api/src/main/java/org/openecomp/sdc/common/ecomplogwrapper/EcompLoggerSdcAudit.java b/common-app-api/src/main/java/org/openecomp/sdc/common/ecomplogwrapper/EcompLoggerSdcAudit.java new file mode 100644 index 0000000000..57499b340d --- /dev/null +++ b/common-app-api/src/main/java/org/openecomp/sdc/common/ecomplogwrapper/EcompLoggerSdcAudit.java @@ -0,0 +1,92 @@ +package org.openecomp.sdc.common.ecomplogwrapper; + +import javax.servlet.http.HttpServletRequest; +import javax.ws.rs.container.ContainerRequestContext; +import javax.ws.rs.core.MultivaluedMap; +import javax.ws.rs.core.Response; + +import org.openecomp.sdc.common.api.Constants; +import org.openecomp.sdc.common.ecomplog.EcompLoggerAudit; +import org.openecomp.sdc.common.ecomplog.Enums.LogLevel; +import org.openecomp.sdc.common.ecomplog.Enums.Severity; +import org.slf4j.MDC; + + +/** + * Created by dd4296 on 12/19/2017. + * + * audit log for asdc using the ecomplog library + * this is adapted for filter classes + */ +public class EcompLoggerSdcAudit extends EcompLoggerSdcUtilBase { + + private static String AUDIT_ON = "auditOn"; + private String className; + + public EcompLoggerSdcAudit(String className) { + this.className = className; + } + + public void startLog() { + EcompLoggerAudit + .getInstance() + .clear() + .startTimer(); + MDC.put(AUDIT_ON, "true"); + } + + public static boolean isFlowBeingTakenCare(){ + try + { + if (MDC.get(AUDIT_ON).equals("true")){ + return true; + } + return false; + } + catch (Exception E) + { + return false; + } + } + + public void log(HttpServletRequest sr, + ContainerRequestContext requestContext, + Response.StatusType statusInfo, + MultivaluedMap<String, Object> responseHeaders, + LogLevel errorLevel, + Severity securityLevel, + String message) { + + try { + EcompLoggerAudit.getInstance() + .stopTimer() + .setRemoteHost(sr.getRemoteAddr()) + .setServiceName(getServiceName(requestContext)) + .setResponseCode(convertHttpCodeToErrorCode(statusInfo.getStatusCode())) + .setStatusCode(Integer.toString(statusInfo.getStatusCode())) + .setResponseDesc(statusInfo.getReasonPhrase()) + .setKeyRequestId(getRequestIDfromHeaders(responseHeaders.get(Constants.X_ECOMP_REQUEST_ID_HEADER))) + + .setPartnerName(getPartnerName( + requestContext.getHeaderString("user-agent"), + requestContext.getHeaderString("USER_ID"), + getUrl(requestContext))) + + .setInstanceUUID(requestContext.getHeaderString(Constants.X_ECOMP_INSTANCE_ID_HEADER)) + + .setOptServiceInstanceId(requestContext.getHeaderString(Constants.X_ECOMP_SERVICE_ID_HEADER)) + .setOptClassName(className) + .setOptAlertSeverity(securityLevel) + .setOptCustomField1(requestContext.getMethod() + ": " + getUrl(requestContext)) + .setOptCustomField2(Integer.toString(statusInfo.getStatusCode())) + .log(errorLevel, message); + } + catch (Exception E) + { + log.warn("Faild to write to Audit Log. Original Message: {}", message); + } + finally { + MDC.put(AUDIT_ON,"false"); + } + } +} diff --git a/common-app-api/src/main/java/org/openecomp/sdc/common/ecomplogwrapper/EcompLoggerSdcDebug.java b/common-app-api/src/main/java/org/openecomp/sdc/common/ecomplogwrapper/EcompLoggerSdcDebug.java new file mode 100644 index 0000000000..57e9e8c5a0 --- /dev/null +++ b/common-app-api/src/main/java/org/openecomp/sdc/common/ecomplogwrapper/EcompLoggerSdcDebug.java @@ -0,0 +1,35 @@ +package org.openecomp.sdc.common.ecomplogwrapper; + +import java.util.Arrays; + +import org.openecomp.sdc.common.ecomplog.EcompLoggerDebug; +import org.openecomp.sdc.common.ecomplog.Enums.LogLevel; + +public class EcompLoggerSdcDebug { + + public void log(LogLevel errorLevel, + String uuid, + String message, + Exception ex) { + + StringBuilder stackTrack = new StringBuilder(); + Arrays.asList(ex.getStackTrace()).forEach(item -> stackTrack.append(item.toString()).append("\n")); + + EcompLoggerDebug.getInstance() + .clear() + .startTimer() + .setKeyRequestId(uuid) + .log(errorLevel, String.format("%s %s", message, stackTrack.toString())); + } + + public void log(LogLevel errorLevel, + String uuid, + String message) { + + EcompLoggerDebug.getInstance() + .clear() + .startTimer() + .setKeyRequestId(uuid) + .log(errorLevel, message); + } +} diff --git a/common-app-api/src/main/java/org/openecomp/sdc/common/ecomplogwrapper/EcompLoggerSdcError.java b/common-app-api/src/main/java/org/openecomp/sdc/common/ecomplogwrapper/EcompLoggerSdcError.java new file mode 100644 index 0000000000..a2478c40eb --- /dev/null +++ b/common-app-api/src/main/java/org/openecomp/sdc/common/ecomplogwrapper/EcompLoggerSdcError.java @@ -0,0 +1,27 @@ +package org.openecomp.sdc.common.ecomplogwrapper; + +import org.openecomp.sdc.common.ecomplog.EcompLoggerError; +import org.openecomp.sdc.common.ecomplog.Enums.EcompLoggerErrorCode; +import org.openecomp.sdc.common.ecomplog.Enums.LogLevel; + +public class EcompLoggerSdcError { + + public void log(LogLevel errorLevel, + EcompLoggerErrorCode errorCodeEnum, + String uuid, + String errorDescription, + String partnerName, + String targetEntity, + String message) { + + EcompLoggerError.getInstance() + .clear() + .startTimer() + .setErrorDescription(errorDescription) + .setErrorCode(errorCodeEnum) + .setKeyRequestId(uuid) + .setServiceName(partnerName) + .setTargetEntity(targetEntity) + .log(errorLevel, message); + } +} diff --git a/common-app-api/src/main/java/org/openecomp/sdc/common/ecomplogwrapper/EcompLoggerSdcMetric.java b/common-app-api/src/main/java/org/openecomp/sdc/common/ecomplogwrapper/EcompLoggerSdcMetric.java new file mode 100644 index 0000000000..8603a77d08 --- /dev/null +++ b/common-app-api/src/main/java/org/openecomp/sdc/common/ecomplogwrapper/EcompLoggerSdcMetric.java @@ -0,0 +1,71 @@ +package org.openecomp.sdc.common.ecomplogwrapper; + +import javax.servlet.http.HttpServletRequest; +import javax.ws.rs.container.ContainerRequestContext; +import javax.ws.rs.core.Response; + +import org.openecomp.sdc.common.api.Constants; +import org.openecomp.sdc.common.ecomplog.EcompLoggerAudit; +import org.openecomp.sdc.common.ecomplog.EcompLoggerMetric; +import org.openecomp.sdc.common.ecomplog.Enums.LogLevel; +import org.openecomp.sdc.common.ecomplog.Enums.Severity; +import org.openecomp.sdc.common.util.ThreadLocalsHolder; + +/** + * Created by dd4296 on 12/20/2017. + * + * METRIC log for asdc using the ecomplog library + */ +public class EcompLoggerSdcMetric extends EcompLoggerSdcUtilBase { + + private String className; + + public EcompLoggerSdcMetric(String className) { + this.className = className; + } + + public void startLog() { + EcompLoggerAudit + .getInstance() + .clear() + .startTimer(); + } + + public void writeToLog(HttpServletRequest sr, + ContainerRequestContext requestContext, + Response.StatusType statusInfo, + LogLevel errorLevel, + Severity securityLevel, + String targetEntity, + String targetServiceName, + String targetVirtualEntity, + String message) { + + EcompLoggerMetric.getInstance() + .stopTimer() + .setRemoteHost(sr.getRemoteAddr()) + .setServiceName(getServiceName(requestContext)) + .setResponseCode(statusInfo.getStatusCode()) + .setStatusCode(Integer.toString(statusInfo.getStatusCode())) + .setResponseDesc(statusInfo.getReasonPhrase()) + .setKeyRequestId(ThreadLocalsHolder.getUuid()) + + .setPartnerName(getPartnerName( + requestContext.getHeaderString("user-agent"), + requestContext.getHeaderString("USER_ID"), + getUrl(requestContext))) + + .setInstanceUUID(requestContext.getHeaderString(Constants.X_ECOMP_INSTANCE_ID_HEADER)) + + .setOptServiceInstanceId(requestContext.getHeaderString(Constants.X_ECOMP_SERVICE_ID_HEADER)) + .setOptClassName(className) + .setOptAlertSeverity(securityLevel) + .setOptCustomField1(getUrl(requestContext) + "/" + requestContext.getMethod()) + + .setTargetEntity(targetEntity) + .setTargetServiceName(targetServiceName) + .setTargetVirtualEntity(targetVirtualEntity) + + .log(errorLevel, message); + } +} diff --git a/common-app-api/src/main/java/org/openecomp/sdc/common/ecomplogwrapper/EcompLoggerSdcUtilBase.java b/common-app-api/src/main/java/org/openecomp/sdc/common/ecomplogwrapper/EcompLoggerSdcUtilBase.java new file mode 100644 index 0000000000..3fe49c17e6 --- /dev/null +++ b/common-app-api/src/main/java/org/openecomp/sdc/common/ecomplogwrapper/EcompLoggerSdcUtilBase.java @@ -0,0 +1,198 @@ +package org.openecomp.sdc.common.ecomplogwrapper; + +import static java.net.HttpURLConnection.HTTP_BAD_METHOD; +import static java.net.HttpURLConnection.HTTP_BAD_REQUEST; +import static java.net.HttpURLConnection.HTTP_CLIENT_TIMEOUT; +import static java.net.HttpURLConnection.HTTP_CONFLICT; +import static java.net.HttpURLConnection.HTTP_ENTITY_TOO_LARGE; +import static java.net.HttpURLConnection.HTTP_FORBIDDEN; +import static java.net.HttpURLConnection.HTTP_GONE; +import static java.net.HttpURLConnection.HTTP_LENGTH_REQUIRED; +import static java.net.HttpURLConnection.HTTP_NOT_ACCEPTABLE; +import static java.net.HttpURLConnection.HTTP_NOT_FOUND; +import static java.net.HttpURLConnection.HTTP_PAYMENT_REQUIRED; +import static java.net.HttpURLConnection.HTTP_PRECON_FAILED; +import static java.net.HttpURLConnection.HTTP_PROXY_AUTH; +import static java.net.HttpURLConnection.HTTP_REQ_TOO_LONG; +import static java.net.HttpURLConnection.HTTP_UNAUTHORIZED; +import static java.net.HttpURLConnection.HTTP_UNSUPPORTED_TYPE; + +import java.util.List; +import java.util.StringTokenizer; + +import javax.ws.rs.container.ContainerRequestContext; + +import org.openecomp.sdc.common.ecomplog.Enums.EcompLoggerErrorCode; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Created by dd4296 on 12/20/2017. + * + * base class for metric and audit ecomplog logging + * holding the specific logic for data extraction + */ +public class EcompLoggerSdcUtilBase { + + protected static Logger log = LoggerFactory.getLogger(EcompLoggerSdcUtilBase.class.getName()); + + String getRequestIDfromHeaders(List<Object> requestHeader) { + // this method gets list of type object. + // toString method returns the RequestId with brackets. + String requestHeaderString = requestHeader.toString(); + return requestHeaderString.replace("[","").replace("]",""); + } + + + // this method translates http error code to ECOMP Logger Error code + // this is a naive translation and is not a result of any documented format ECOMP specification + protected EcompLoggerErrorCode convertHttpCodeToErrorCode(int httpResponseCode) { + if (isSuccessError(httpResponseCode)) + return EcompLoggerErrorCode.SUCCESS; + + if (isSchemaError(httpResponseCode)) + return EcompLoggerErrorCode.SCHEMA_ERROR; + + if (isDataError(httpResponseCode)) + return EcompLoggerErrorCode.DATA_ERROR; + + if (isPermissionsError(httpResponseCode)) + return EcompLoggerErrorCode.PERMISSION_ERROR; + + if (isTimeoutOrAvailabilityError(httpResponseCode)) + return EcompLoggerErrorCode.AVAILABILITY_TIMEOUTS_ERROR; + + if (isBusinessProcessError(httpResponseCode)) + return EcompLoggerErrorCode.BUSINESS_PROCESS_ERROR; + + + return EcompLoggerErrorCode.UNKNOWN_ERROR; + } + + private boolean isTimeoutOrAvailabilityError(int httpResponseCode) { + + switch (httpResponseCode) { + case HTTP_BAD_REQUEST: + case HTTP_UNAUTHORIZED: + case HTTP_NOT_FOUND: + case HTTP_CLIENT_TIMEOUT: + case HTTP_GONE: + return true; + } + + return false; + } + + private boolean isPermissionsError(int httpResponseCode) { + + switch (httpResponseCode) { + case HTTP_PAYMENT_REQUIRED: + case HTTP_FORBIDDEN: + case HTTP_BAD_METHOD: + case HTTP_PROXY_AUTH: + return true; + } + + return false; + } + + private boolean isDataError(int httpResponseCode) { + + switch (httpResponseCode) { + case HTTP_NOT_ACCEPTABLE: + case HTTP_LENGTH_REQUIRED: + case HTTP_PRECON_FAILED: + case HTTP_REQ_TOO_LONG: + case HTTP_ENTITY_TOO_LARGE: + case HTTP_UNSUPPORTED_TYPE: + return true; + } + + return false; + } + + private boolean isSchemaError(int httpResponseCode) { + return HTTP_CONFLICT == httpResponseCode; + } + + private boolean isSuccessError(int httpResponseCode) { + return httpResponseCode < 399; + } + + private boolean isBusinessProcessError(int httpResponseCode) { + return httpResponseCode > 499; + } + + protected String getPartnerName(String userAgent, String userId, String url) { + + if (!isNullOrEmpty(userId)) { + return userId; + } + + String urlUser = getUserIdFromUrl(url); + + if (!isNullOrEmpty(urlUser)) + return urlUser; + + String userAgentName = getUserIdFromUserAgent(userAgent); + + if (!isNullOrEmpty(userAgentName)) + return userAgentName; + + return ""; + } + + private String getUserIdFromUserAgent(String userAgent) { + if (userAgent != null && userAgent.length() > 0) { + if (userAgent.toLowerCase().contains("firefox")) { + return "fireFox_FE"; + } + + if (userAgent.toLowerCase().contains("msie")) { + return "explorer_FE"; + } + + if (userAgent.toLowerCase().contains("chrome")) { + return "chrome_FE"; + } + + return userAgent; + } + return null; + } + + private String getUserIdFromUrl(String url) { + if (url != null && url.toLowerCase().contains("user")) { + StringTokenizer st = new StringTokenizer(url, "/"); + while (st.hasMoreElements()) { + if ("user".equalsIgnoreCase(st.nextToken())) { + return st.nextToken(); + } + } + } + return null; + } + + protected String getUrl(ContainerRequestContext requestContext) { + String url = ""; + + try { + if (requestContext.getUriInfo() != null && requestContext.getUriInfo().getRequestUri() != null) { + url = requestContext.getUriInfo().getRequestUri().toURL().toString(); + } + } catch (Exception ex) { + log.error("failed to get url from request context ", ex); + } + + return url; + } + + private boolean isNullOrEmpty(String str) { + return (str == null || str.isEmpty()); + } + + protected String getServiceName(ContainerRequestContext requestContext) { + return (requestContext.getUriInfo().getRequestUri().toString()) + .replace(requestContext.getUriInfo().getBaseUri().toString(), "/"); + } +}
\ No newline at end of file |