1 package org.openecomp.sdc.common.log.elements;
3 import org.apache.commons.lang3.StringUtils;
4 import org.openecomp.sdc.common.log.api.ILogConfiguration;
5 import org.openecomp.sdc.common.log.api.ILogFieldsHandler;
6 import org.openecomp.sdc.common.log.enums.Severity;
7 import org.slf4j.Logger;
8 import org.slf4j.LoggerFactory;
11 import java.net.InetAddress;
12 import java.time.Duration;
13 import java.time.Instant;
14 import java.time.LocalDateTime;
15 import java.time.ZoneOffset;
16 import java.time.format.DateTimeFormatter;
18 import static java.lang.Integer.valueOf;
20 public class LogFieldsMdcHandler implements ILogFieldsHandler {
22 private static LogFieldsMdcHandler instanceMdcWrapper = new LogFieldsMdcHandler();
24 public static LogFieldsMdcHandler getInstance() {
25 return instanceMdcWrapper;
28 private final static String dateFormatPattern = "yyyy-MM-dd HH:mm:ss.SSSz";
29 private final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(dateFormatPattern);
30 protected static Logger log = LoggerFactory.getLogger(LogFieldsMdcHandler.class.getName());
31 protected static String hostAddress;
32 protected static String fqdn;
36 hostAddress = InetAddress.getLocalHost().getHostAddress();
37 fqdn = InetAddress.getByName(hostAddress).getCanonicalHostName();
38 } catch (Exception ex) {
39 log.error("failed to get machine parameters", ex);
44 public void startAuditTimer() {
45 if (StringUtils.isEmpty(MDC.get(ILogConfiguration.MDC_AUDIT_BEGIN_TIMESTAMP))) {
46 MDC.put(ILogConfiguration.MDC_AUDIT_BEGIN_TIMESTAMP, generatedTimeNow());
51 public void startMetricTimer() {
52 if (StringUtils.isEmpty(MDC.get(ILogConfiguration.MDC_METRIC_BEGIN_TIMESTAMP))) {
53 MDC.put(ILogConfiguration.MDC_METRIC_BEGIN_TIMESTAMP, generatedTimeNow());
58 public void stopAuditTimer() {
59 //set start time if it is not set yet
61 MDC.put(ILogConfiguration.MDC_END_TIMESTAMP, generatedTimeNow());
62 setElapsedTime(MDC.get(ILogConfiguration.MDC_AUDIT_BEGIN_TIMESTAMP));
66 public void stopMetricTimer() {
67 //set start time if it is not set yet
69 MDC.put(ILogConfiguration.MDC_END_TIMESTAMP, generatedTimeNow());
70 setElapsedTime(MDC.get(ILogConfiguration.MDC_METRIC_BEGIN_TIMESTAMP));
74 public void setClassName(String className) {
75 MDC.put(ILogConfiguration.MDC_CLASS_NAME, className);
79 public void setServerFQDN(String serverFQDN) {
80 MDC.put(ILogConfiguration.MDC_SERVER_FQDN, serverFQDN);
84 public void setServerIPAddress(String serverIPAddress) {
85 MDC.put(ILogConfiguration.MDC_SERVER_IP_ADDRESS, serverIPAddress);
89 public void setServerFQDNInternally() {
94 public void setServerIPAddressInternally() {
95 setServerIPAddress(hostAddress);
99 public void setInstanceUUID(String instanceUUID) {
100 MDC.put(ILogConfiguration.MDC_INSTANCE_UUID, instanceUUID);
104 public void setProcessKey(String processKey) {
105 MDC.put(ILogConfiguration.MDC_PROCESS_KEY, processKey);
109 public void setAlertSeverity(Severity alertSeverity) {
110 MDC.put(ILogConfiguration.MDC_ALERT_SEVERITY, String.valueOf(alertSeverity.getSeverityType()));
114 public void setOptCustomField1(String customField1) {
115 MDC.put(ILogConfiguration.MDC_OPT_FIELD1, customField1);
119 public void setOptCustomField2(String customField2) {
120 MDC.put(ILogConfiguration.MDC_OPT_FIELD2, customField2);
124 public void setOptCustomField3(String customField3) {
125 MDC.put(ILogConfiguration.MDC_OPT_FIELD3, customField3);
129 public void setOptCustomField4(String customField4) {
130 MDC.put(ILogConfiguration.MDC_OPT_FIELD4, customField4);
134 public void setKeyRequestId(String keyRequestId) {
135 MDC.put(ILogConfiguration.MDC_KEY_REQUEST_ID, keyRequestId); // eg. servletRequest.getSession().getId()
139 public void setRemoteHost(String remoteHost) {
140 MDC.put(ILogConfiguration.MDC_REMOTE_HOST, remoteHost);
144 public void setServiceName(String serviceName) {
145 MDC.put(ILogConfiguration.MDC_SERVICE_NAME, serviceName);
149 public void setStatusCode(String statusCode) {
150 MDC.put(ILogConfiguration.MDC_STATUS_CODE, statusCode);
154 public void setPartnerName(String partnerName) {
155 MDC.put(ILogConfiguration.MDC_PARTNER_NAME, partnerName);
159 public void setResponseCode(int responseCode) {
160 MDC.put(ILogConfiguration.MDC_RESPONSE_CODE, Integer.toString(responseCode));
164 public void setResponseDesc(String responseDesc) {
165 MDC.put(ILogConfiguration.MDC_RESPONSE_DESC, responseDesc);
169 public void setServiceInstanceId(String serviceInstanceId) {
170 MDC.put(ILogConfiguration.MDC_SERVICE_INSTANCE_ID, serviceInstanceId);
174 public void setTargetEntity(String targetEntity) {
175 MDC.put(ILogConfiguration.MDC_TARGET_ENTITY, targetEntity);
179 public void setTargetServiceName(String targetServiceName) {
180 MDC.put(ILogConfiguration.MDC_TARGET_SERVICE_NAME, targetServiceName);
184 public void setTargetVirtualEntity(String targetVirtualEntity) {
185 MDC.put(ILogConfiguration.MDC_TARGET_VIRTUAL_ENTITY, targetVirtualEntity);
189 public void setErrorCode(int errorCode) {
190 MDC.put(ILogConfiguration.MDC_ERROR_CODE, valueOf(errorCode).toString());
194 public void setErrorCategory(String errorCategory) {
195 MDC.put(ILogConfiguration.MDC_ERROR_CATEGORY, errorCategory);
199 public String getErrorCode() {
200 return MDC.get(ILogConfiguration.MDC_ERROR_CODE);
204 public String getServiceName() {
205 return MDC.get(ILogConfiguration.MDC_SERVICE_NAME);
209 public String getErrorCategory() {
210 return MDC.get(ILogConfiguration.MDC_ERROR_CATEGORY);
214 public void clear() {
219 public boolean isMDCParamEmpty(String mdcKeyName) {
220 return StringUtils.isEmpty(MDC.get(mdcKeyName));
224 public String getFqdn() {
229 public String getHostAddress() {
234 public String getKeyRequestId() {
235 return MDC.get(ILogConfiguration.MDC_KEY_REQUEST_ID);
239 public void removeStatusCode() {
240 MDC.remove(ILogConfiguration.MDC_STATUS_CODE);
244 public void removePartnerName(){
245 MDC.remove(ILogConfiguration.MDC_PARTNER_NAME);
249 public void removeResponseCode(){
250 MDC.remove(ILogConfiguration.MDC_RESPONSE_CODE);
254 public void removeResponseDesc(){
255 MDC.remove(ILogConfiguration.MDC_RESPONSE_DESC);
259 public void removeServiceInstanceId(){
260 MDC.remove(ILogConfiguration.MDC_SERVICE_INSTANCE_ID);
264 public void removeTargetEntity(){
265 MDC.remove(ILogConfiguration.MDC_TARGET_ENTITY);
269 public void removeTargetServiceName(){
270 MDC.remove(ILogConfiguration.MDC_TARGET_SERVICE_NAME);
274 public void removeTargetVirtualEntity(){
275 MDC.remove(ILogConfiguration.MDC_TARGET_VIRTUAL_ENTITY);
279 public void removeErrorCode(){
280 MDC.remove(ILogConfiguration.MDC_ERROR_CODE);
284 public void removeErrorCategory(){
285 MDC.remove(ILogConfiguration.MDC_ERROR_CATEGORY);
289 public void removeErrorDescription(){
290 MDC.remove(ILogConfiguration.MDC_ERROR_DESC);
294 public void setAuditMessage(String message) {
295 MDC.put(ILogConfiguration.MDC_AUDIT_MESSAGE, message);
299 public String getAuditMessage() {
300 return MDC.get(ILogConfiguration.MDC_AUDIT_MESSAGE);
303 private void setElapsedTime(String beginTimestamp) {
305 final LocalDateTime startTime = LocalDateTime.parse(beginTimestamp, dateTimeFormatter);
306 final LocalDateTime endTime = LocalDateTime.parse(MDC.get(ILogConfiguration.MDC_END_TIMESTAMP), dateTimeFormatter);
307 final Duration timeDifference = Duration.between(startTime, endTime);
309 MDC.put(ILogConfiguration.MDC_ELAPSED_TIME, String.valueOf(timeDifference.toMillis()));
311 } catch(Exception ex) {
312 log.error("failed to calculate elapsed time",ex);
316 private String generatedTimeNow() {
317 return dateTimeFormatter
318 .withZone(ZoneOffset.UTC)
319 .format(Instant.now());