Fix logging date format to avoid parse error
[sdc.git] / common-app-logging / src / main / java / org / openecomp / sdc / common / log / elements / LogFieldsMdcHandler.java
1 package org.openecomp.sdc.common.log.elements;
2
3 import org.apache.commons.lang3.StringUtils;
4 import org.onap.logging.ref.slf4j.ONAPLogConstants;
5 import org.openecomp.sdc.common.log.enums.ConstantsLogging;
6 import org.openecomp.sdc.common.log.api.ILogConfiguration;
7 import org.openecomp.sdc.common.log.api.ILogFieldsHandler;
8 import org.openecomp.sdc.common.log.enums.Severity;
9 import org.slf4j.Logger;
10 import org.slf4j.LoggerFactory;
11 import org.slf4j.MDC;
12 import javax.servlet.http.HttpServletRequest;
13 import java.net.InetAddress;
14 import java.time.Duration;
15 import java.time.Instant;
16 import java.time.LocalDateTime;
17 import java.time.ZoneOffset;
18 import java.time.format.DateTimeFormatter;
19
20 import static java.lang.Integer.valueOf;
21
22 public class LogFieldsMdcHandler implements ILogFieldsHandler {
23
24   private static LogFieldsMdcHandler instanceMdcWrapper = new LogFieldsMdcHandler();
25
26   public static LogFieldsMdcHandler getInstance() {
27     return instanceMdcWrapper;
28   }
29
30   private final static String dateFormatPattern = "yyyy-MM-dd'T'HH:mm:ss.SSSz";
31   private final DateTimeFormatter dateTimeFormatter = DateTimeFormatter
32       .ofPattern(dateFormatPattern);
33   protected static Logger log = LoggerFactory.getLogger(LogFieldsMdcHandler.class.getName());
34   protected static String hostAddress;
35   protected static String fqdn;
36
37   static {
38     try {
39       hostAddress = InetAddress.getLocalHost().getHostAddress();
40       fqdn = InetAddress.getByName(hostAddress).getCanonicalHostName();
41     } catch (Exception ex) {
42       log.error("failed to get machine parameters", ex);
43     }
44   }
45
46   @Override
47   public void startAuditTimer() {
48     if (StringUtils.isEmpty(MDC.get(ONAPLogConstants.MDCs.ENTRY_TIMESTAMP))) {
49       MDC.put(ONAPLogConstants.MDCs.ENTRY_TIMESTAMP, generatedTimeNow());
50     }
51   }
52
53   @Override
54   public void startMetricTimer() {
55     if (StringUtils.isEmpty(MDC.get(ONAPLogConstants.MDCs.INVOKE_TIMESTAMP))) {
56       MDC.put(ONAPLogConstants.MDCs.INVOKE_TIMESTAMP, generatedTimeNow());
57     }
58   }
59
60   @Override
61   public void stopAuditTimer() {
62     //set start time if it is not set yet
63     startAuditTimer();
64     MDC.put(ILogConfiguration.MDC_END_TIMESTAMP, generatedTimeNow());
65     setElapsedTime(MDC.get(ONAPLogConstants.MDCs.ENTRY_TIMESTAMP));
66   }
67
68   @Override
69   public void stopMetricTimer() {
70     //set start time if it is not set yet
71     startMetricTimer();
72     MDC.put(ILogConfiguration.MDC_END_TIMESTAMP, generatedTimeNow());
73     setElapsedTime(MDC.get(ONAPLogConstants.MDCs.INVOKE_TIMESTAMP));
74   }
75
76   @Override
77   public void setClassName(String className) {
78     MDC.put(ILogConfiguration.MDC_CLASS_NAME, className);
79   }
80
81   @Override
82   public void setServerFQDN(String serverFQDN) {
83     MDC.put(ONAPLogConstants.MDCs.SERVER_FQDN, serverFQDN);
84   }
85
86   @Override
87   public void setServerIPAddress(String serverIPAddress) {
88     MDC.put(ILogConfiguration.MDC_SERVER_IP_ADDRESS, serverIPAddress);
89   }
90
91   @Override
92   public void setServerFQDNInternally() {
93     setServerFQDN(fqdn);
94   }
95
96   @Override
97   public void setServerIPAddressInternally() {
98     setServerIPAddress(hostAddress);
99   }
100
101   @Override
102   public void setInstanceUUID(String instanceUUID) {
103     MDC.put(ONAPLogConstants.MDCs.INSTANCE_UUID, instanceUUID);
104   }
105
106   @Override
107   public void setProcessKey(String processKey) {
108     MDC.put(ILogConfiguration.MDC_PROCESS_KEY, processKey);
109   }
110
111   @Override
112   public void setAlertSeverity(Severity alertSeverity) {
113     MDC.put(ONAPLogConstants.MDCs.RESPONSE_SEVERITY, String.valueOf(alertSeverity.getSeverityType()));
114   }
115
116   @Override
117   public void setOptCustomField1(String customField1) {
118     MDC.put(ILogConfiguration.MDC_OPT_FIELD1, customField1);
119   }
120
121   @Override
122   public void setOutgoingInvocationId(String outgoingInvocationId) {
123     MDC.put(ILogConfiguration.MDC_OUTGOING_INVOCATION_ID, outgoingInvocationId);
124   }
125
126   @Override
127   public void setKeyRequestId(String keyRequestId) {
128     MDC.put(ONAPLogConstants.MDCs.REQUEST_ID,
129         keyRequestId); // eg. servletRequest.getSession().getId()
130   }
131
132   @Override
133   public void setKeyInvocationId(String invocationId ) {
134     MDC.put(ONAPLogConstants.MDCs.INVOCATION_ID,
135             invocationId);
136   }
137
138   @Override
139   public void setRemoteHost(String remoteHost) {
140     MDC.put(ILogConfiguration.MDC_REMOTE_HOST, remoteHost);
141   }
142
143   @Override
144   public void setServiceName(String serviceName) {
145     MDC.put(ONAPLogConstants.MDCs.SERVICE_NAME, serviceName);
146   }
147
148   @Override
149   public void setStatusCode(String statusCode) {
150     MDC.put(ONAPLogConstants.MDCs.RESPONSE_STATUS_CODE, statusCode);
151   }
152
153   @Override
154   public void setPartnerName(String partnerName) {
155     MDC.put(ONAPLogConstants.MDCs.PARTNER_NAME, partnerName);
156   }
157
158   @Override
159   public void setResponseCode(int responseCode) {
160     MDC.put(ONAPLogConstants.MDCs.RESPONSE_CODE, Integer.toString(responseCode));
161   }
162
163   @Override
164   public void setResponseDesc(String responseDesc) {
165     MDC.put(ONAPLogConstants.MDCs.RESPONSE_DESCRIPTION, responseDesc);
166   }
167
168   @Override
169   public void setServiceInstanceId(String serviceInstanceId) {
170     MDC.put(ILogConfiguration.MDC_SERVICE_INSTANCE_ID, serviceInstanceId);
171   }
172
173   @Override
174   public void setTargetEntity(String targetEntity) {
175     MDC.put(ONAPLogConstants.MDCs.TARGET_ENTITY, targetEntity);
176   }
177
178   @Override
179   public void setTargetServiceName(String targetServiceName) {
180     MDC.put(ONAPLogConstants.MDCs.TARGET_SERVICE_NAME, targetServiceName);
181   }
182
183   @Override
184   public void setTargetVirtualEntity(String targetVirtualEntity) {
185     MDC.put(ILogConfiguration.MDC_TARGET_VIRTUAL_ENTITY, targetVirtualEntity);
186   }
187
188   @Override
189   public void setErrorCode(int errorCode) {
190     MDC.put(ILogConfiguration.MDC_ERROR_CODE, valueOf(errorCode).toString());
191   }
192
193   @Override
194   public void setErrorCategory(String errorCategory) {
195     MDC.put(ILogConfiguration.MDC_ERROR_CATEGORY, errorCategory);
196   }
197
198   @Override
199   public String getErrorCode() {
200     return MDC.get(ILogConfiguration.MDC_ERROR_CODE);
201   }
202
203   @Override
204   public String getServiceName() {
205     return MDC.get(ONAPLogConstants.MDCs.SERVICE_NAME);
206   }
207
208   @Override
209   public String getErrorCategory() {
210     return MDC.get(ILogConfiguration.MDC_ERROR_CATEGORY);
211   }
212
213   @Override
214   public void clear() {
215     MDC.clear();
216   }
217
218   @Override
219   public boolean isMDCParamEmpty(String mdcKeyName) {
220     return StringUtils.isEmpty(MDC.get(mdcKeyName));
221   }
222
223   @Override
224   public String getFqdn() {
225     return fqdn;
226   }
227
228   @Override
229   public String getHostAddress() {
230     return hostAddress;
231   }
232
233   @Override
234   public String getKeyRequestId() {
235     return MDC.get(ONAPLogConstants.MDCs.REQUEST_ID);
236   }
237
238   @Override
239   public String getTargetEntity() {
240     return MDC.get(ONAPLogConstants.MDCs.TARGET_ENTITY);
241   }
242
243   @Override
244   public String getTargetServiceName() {
245     return MDC.get(ONAPLogConstants.MDCs.TARGET_SERVICE_NAME);
246   }
247
248   @Override
249   public void removeStatusCode() {
250     MDC.remove(ONAPLogConstants.MDCs.RESPONSE_STATUS_CODE);
251   }
252
253   @Override
254   public void removePartnerName() {
255     MDC.remove(ONAPLogConstants.MDCs.PARTNER_NAME);
256   }
257
258   @Override
259   public void removeResponseCode() {
260     MDC.remove(ONAPLogConstants.MDCs.RESPONSE_CODE);
261   }
262
263   @Override
264   public void removeResponseDesc() {
265     MDC.remove(ONAPLogConstants.MDCs.RESPONSE_DESCRIPTION);
266   }
267
268   @Override
269   public void removeServiceInstanceId() {
270     MDC.remove(ILogConfiguration.MDC_SERVICE_INSTANCE_ID);
271   }
272
273   @Override
274   public void removeTargetEntity() {
275     MDC.remove(ONAPLogConstants.MDCs.TARGET_ENTITY);
276   }
277
278   @Override
279   public void removeTargetServiceName() {
280     MDC.remove(ONAPLogConstants.MDCs.TARGET_SERVICE_NAME);
281   }
282
283   @Override
284   public void removeTargetVirtualEntity() {
285     MDC.remove(ILogConfiguration.MDC_TARGET_VIRTUAL_ENTITY);
286   }
287
288   @Override
289   public void removeErrorCode() {
290     MDC.remove(ILogConfiguration.MDC_ERROR_CODE);
291   }
292
293   @Override
294   public void removeErrorCategory() {
295     MDC.remove(ILogConfiguration.MDC_ERROR_CATEGORY);
296   }
297
298   @Override
299   public void removeErrorDescription() {
300     MDC.remove(ILogConfiguration.MDC_ERROR_DESC);
301   }
302
303   @Override
304   public void setAuditMessage(String message) {
305     MDC.put(ILogConfiguration.MDC_AUDIT_MESSAGE, message);
306   }
307
308   @Override
309   public String getAuditMessage() {
310     return MDC.get(ILogConfiguration.MDC_AUDIT_MESSAGE);
311   }
312
313
314   @Override
315   public String getSupportablityStatusCode() {
316     return MDC.get(ILogConfiguration.MDC_SUPPORTABLITY_STATUS_CODE);
317   }
318
319   @Override
320   public String getSupportablityAction() {
321     return MDC.get(ILogConfiguration.MDC_SUPPORTABLITY_ACTION);
322
323   }
324
325
326   @Override
327   public String getRemoteHost() {
328     return MDC.get(ILogConfiguration.MDC_REMOTE_HOST);
329   }
330
331   @Override
332   public String getServerIpAddress() {
333     return MDC.get(ILogConfiguration.MDC_SERVER_IP_ADDRESS);
334   }
335
336 //  @Override
337 //  public String getSupportablityCsarName() {
338 //    return MDC.get(ILogConfiguration.MDC_SUPPORTABLITY_CSAR_NAME);
339 //  }
340
341   @Override
342   public String getSupportablityCsarUUID() {
343     return MDC.get(ILogConfiguration.MDC_SUPPORTABLITY_CSAR_UUID);
344   }
345
346   @Override
347   public String getSupportablityCsarVersion() {
348     return MDC.get(ILogConfiguration.MDC_SUPPORTABLITY_CSAR_VERSION);
349
350   }
351
352   @Override
353   public String getSupportablityComponentName() {
354     return MDC.get(ILogConfiguration.MDC_SUPPORTABLITY_COMPONENT_NAME);
355   }
356
357   @Override
358   public String getSupportablityComponentUUID() {
359     return MDC.get(ILogConfiguration.MDC_SUPPORTABLITY_COMPONENT_UUID);
360
361   }
362
363   @Override
364   public String getSupportablityComponentVersion() {
365     return MDC.get(ILogConfiguration.MDC_SUPPORTABLITY_COMPONENT_VERSION);
366   }
367
368   @Override
369   public String getKeyInvocationId() {
370     return MDC.get(ONAPLogConstants.MDCs.INVOCATION_ID);
371   }
372
373   @Override
374   public void setSupportablityStatusCode(String statusCode) {
375     MDC.put(ILogConfiguration.MDC_SUPPORTABLITY_STATUS_CODE, statusCode);
376   }
377
378   @Override
379   public void setSupportablityAction(String action) {
380     MDC.put(ILogConfiguration.MDC_SUPPORTABLITY_ACTION, action);
381   }
382
383   @Override
384   public void setSupportablityCsarUUID(String uuid) {
385     MDC.put(ILogConfiguration.MDC_SUPPORTABLITY_CSAR_UUID, uuid);
386   }
387
388   @Override
389   public void setSupportablityCsarVersion(String version) {
390     MDC.put(ILogConfiguration.MDC_SUPPORTABLITY_CSAR_VERSION, version);
391   }
392
393   @Override
394   public void setSupportablityComponentName(String name) {
395     MDC.put(ILogConfiguration.MDC_SUPPORTABLITY_COMPONENT_NAME, name);
396   }
397
398   @Override
399   public void setSupportablityComponentUUID(String uuid) {
400     MDC.put(ILogConfiguration.MDC_SUPPORTABLITY_COMPONENT_UUID, uuid);
401   }
402
403   @Override
404   public void setSupportablityComponentVersion(String version) {
405     MDC.put(ILogConfiguration.MDC_SUPPORTABLITY_COMPONENT_VERSION, version);
406   }
407
408   @Override
409   public void removeSupportablityAction() {
410     MDC.remove(ILogConfiguration.MDC_SUPPORTABLITY_ACTION);
411   }
412
413   @Override
414   public void removeSupportablityComponentName() {
415     MDC.remove(ILogConfiguration.MDC_SUPPORTABLITY_COMPONENT_NAME);
416   }
417
418   @Override
419   public void removeSupportablityComponentUUID() {
420     MDC.remove(ILogConfiguration.MDC_SUPPORTABLITY_COMPONENT_UUID);
421   }
422
423   @Override
424   public void removeSupportablityComponentVersion() {
425     MDC.remove(ILogConfiguration.MDC_SUPPORTABLITY_COMPONENT_VERSION);
426   }
427
428 //  @Override
429 //  public void removeSupportablityCsarName() {
430 //    MDC.remove(ILogConfiguration.MDC_SUPPORTABLITY_CSAR_NAME);
431 //  }
432
433   @Override
434   public void removeSupportablityCsarUUID() {
435     MDC.remove(ILogConfiguration.MDC_SUPPORTABLITY_CSAR_UUID);
436   }
437
438   @Override
439   public void removeSupportablityCsarVersion() {
440     MDC.remove(ILogConfiguration.MDC_SUPPORTABLITY_CSAR_VERSION);
441   }
442
443   @Override
444   public void removeSupportablityStatusCode() {
445     MDC.remove(ILogConfiguration.MDC_SUPPORTABLITY_STATUS_CODE);
446   }
447
448   @Override
449   public String getPartnerName() {
450     return MDC.get(ONAPLogConstants.MDCs.PARTNER_NAME);
451   }
452
453   private void setElapsedTime(String beginTimestamp) {
454     try {
455       final LocalDateTime startTime = LocalDateTime.parse(beginTimestamp, dateTimeFormatter);
456       final LocalDateTime endTime = LocalDateTime
457           .parse(MDC.get(ILogConfiguration.MDC_END_TIMESTAMP), dateTimeFormatter);
458       final Duration timeDifference = Duration.between(startTime, endTime);
459
460       MDC.put(ILogConfiguration.MDC_ELAPSED_TIME, String.valueOf(timeDifference.toMillis()));
461
462     } catch (Exception ex) {
463       log.error("failed to calculate elapsed time", ex);
464     }
465   }
466
467   private String generatedTimeNow() {
468     return dateTimeFormatter
469         .withZone(ZoneOffset.UTC)
470         .format(Instant.now());
471   }
472
473   public void collectRequestInfoForErrorAndDebugLogging(HttpServletRequest httpRequest) {
474     LogFieldsMdcHandler.getInstance().clear();
475     String partnerName = LoggerBase.getPartnerName(httpRequest);
476     LogFieldsMdcHandler.getInstance().setPartnerName(partnerName);
477
478     String serviceInstanceID = httpRequest.getHeader(ConstantsLogging.X_ECOMP_SERVICE_ID_HEADER);
479     LogFieldsMdcHandler.getInstance().setServiceInstanceId(serviceInstanceID);
480
481     LogFieldsMdcHandler.getInstance().setRemoteHost(httpRequest.getRemoteHost());
482     LogFieldsMdcHandler.getInstance().setServerIPAddress(httpRequest.getLocalAddr());
483
484     String requestId = LoggerBase.getRequestId(httpRequest);
485     LogFieldsMdcHandler.getInstance().setKeyRequestId(requestId);
486
487     LogFieldsMdcHandler.getInstance().setServiceName(httpRequest.getRequestURI());
488   }
489
490   public void addInfoForErrorAndDebugLogging(String partnerName){
491     LogFieldsMdcHandler.getInstance().clear();
492     LogFieldsMdcHandler.getInstance().setPartnerName(partnerName);
493
494     String requestId = LoggerBase.generateKeyRequestId();
495     LogFieldsMdcHandler.getInstance().setKeyRequestId(requestId);
496   }
497 }