re base code
[sdc.git] / common-app-api / src / main / java / org / openecomp / sdc / common / log / wrappers / LoggerSdcAudit.java
1 package org.openecomp.sdc.common.log.wrappers;
2
3 import org.apache.commons.lang3.StringUtils;
4 import org.openecomp.sdc.common.api.Constants;
5 import org.openecomp.sdc.common.log.elements.LoggerAudit;
6 import org.openecomp.sdc.common.log.elements.LoggerFactory;
7 import org.openecomp.sdc.common.log.enums.LogLevel;
8 import org.openecomp.sdc.common.log.enums.Severity;
9 import org.openecomp.sdc.common.util.ThreadLocalsHolder;
10 import org.slf4j.MDC;
11
12 import javax.ws.rs.container.ContainerRequestContext;
13 import javax.ws.rs.core.Response;
14
15
16 /**
17  * Created by dd4296 on 12/19/2017.
18  *
19  * audit log for asdc using the log library
20  * this is adapted for filter classes
21  */
22 public class LoggerSdcAudit extends LoggerSdcUtilBase {
23
24     private static String AUDIT_ON = "auditOn";
25     private String className;
26     private final LoggerAudit ecompLoggerAudit;
27
28     public LoggerSdcAudit(Class<?> clazz) {
29         this.className = clazz.getName();
30         ecompLoggerAudit = LoggerFactory.getMdcLogger(LoggerAudit.class, org.slf4j.LoggerFactory.getLogger(clazz));
31     }
32
33     public void startLog(ContainerRequestContext requestContext) {
34         ecompLoggerAudit.clear()
35                 .startTimer()
36                 .setPartnerName(getPartnerName(
37                         requestContext.getHeaderString("user-agent"),
38                         requestContext.getHeaderString("USER_ID"),
39                         getUrl(requestContext)))
40                 .setServiceName(getServiceName(requestContext))
41                 .setKeyRequestId(ThreadLocalsHolder.getUuid());
42         MDC.put(AUDIT_ON, "true");
43     }
44
45     public static boolean isFlowBeingTakenCare() {
46         String auditOn = MDC.get(AUDIT_ON);
47         return !StringUtils.isEmpty(auditOn) && "true".equals(auditOn);
48     }
49
50     //this function clears the MDC data that relevant for this class
51     public void clearMyData(){
52         ecompLoggerAudit.clear();
53     }
54
55     public void log(String remoteAddress,
56                     ContainerRequestContext requestContext,
57                     Response.StatusType statusInfo,
58                     LogLevel logLevel,
59                     Severity securityLevel,
60                     String message) {
61
62         try {
63
64             String msg = ecompLoggerAudit.getAuditMessage() == null ?
65                     message : ecompLoggerAudit.getAuditMessage();
66             ecompLoggerAudit.stopTimer()
67                     .setRemoteHost(remoteAddress)
68                     .setResponseCode(convertHttpCodeToErrorCode(statusInfo.getStatusCode()))
69                     .setStatusCode(Integer.toString(statusInfo.getStatusCode()))
70                     .setResponseDesc(statusInfo.getReasonPhrase())
71                     .setInstanceUUID(requestContext.getHeaderString(Constants.X_ECOMP_INSTANCE_ID_HEADER))
72                     .setOptServiceInstanceId(requestContext.getHeaderString(Constants.X_ECOMP_SERVICE_ID_HEADER))
73                     .setOptClassName(className)
74                     .setOptAlertSeverity(securityLevel)
75                     .setOptCustomField1(requestContext.getMethod() + ": " + getUrl(requestContext))
76                     .setOptCustomField2(Integer.toString(statusInfo.getStatusCode()))
77                     .log(logLevel, msg);
78         }
79         catch (Exception e) {
80             log.warn("Failed to write to Audit Log. Original Message: {}", message, e);
81         }
82         finally {
83             MDC.put(AUDIT_ON,"false");
84         }
85     }
86 }