re base code
[sdc.git] / common-app-api / 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.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;
9 import org.slf4j.MDC;
10
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;
17
18 import static java.lang.Integer.valueOf;
19
20 public class LogFieldsMdcHandler implements ILogFieldsHandler {
21
22     private static LogFieldsMdcHandler instanceMdcWrapper = new LogFieldsMdcHandler();
23
24     public static LogFieldsMdcHandler getInstance() {
25         return instanceMdcWrapper;
26     }
27
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;
33
34     static {
35         try {
36             hostAddress = InetAddress.getLocalHost().getHostAddress();
37             fqdn = InetAddress.getByName(hostAddress).getCanonicalHostName();
38         } catch (Exception ex) {
39             log.error("failed to get machine parameters", ex);
40         }
41     }
42
43     @Override
44     public void startAuditTimer() {
45         if (StringUtils.isEmpty(MDC.get(ILogConfiguration.MDC_AUDIT_BEGIN_TIMESTAMP))) {
46             MDC.put(ILogConfiguration.MDC_AUDIT_BEGIN_TIMESTAMP, generatedTimeNow());
47         }
48     }
49
50     @Override
51     public void startMetricTimer() {
52         if (StringUtils.isEmpty(MDC.get(ILogConfiguration.MDC_METRIC_BEGIN_TIMESTAMP))) {
53             MDC.put(ILogConfiguration.MDC_METRIC_BEGIN_TIMESTAMP, generatedTimeNow());
54         }
55     }
56
57     @Override
58     public void stopAuditTimer() {
59         //set start time if it is not set yet
60         startAuditTimer();
61         MDC.put(ILogConfiguration.MDC_END_TIMESTAMP, generatedTimeNow());
62         setElapsedTime(MDC.get(ILogConfiguration.MDC_AUDIT_BEGIN_TIMESTAMP));
63     }
64
65     @Override
66     public void stopMetricTimer() {
67         //set start time if it is not set yet
68         startMetricTimer();
69         MDC.put(ILogConfiguration.MDC_END_TIMESTAMP, generatedTimeNow());
70         setElapsedTime(MDC.get(ILogConfiguration.MDC_METRIC_BEGIN_TIMESTAMP));
71     }
72
73     @Override
74     public void setClassName(String className) {
75         MDC.put(ILogConfiguration.MDC_CLASS_NAME, className);
76     }
77
78     @Override
79     public void setServerFQDN(String serverFQDN) {
80         MDC.put(ILogConfiguration.MDC_SERVER_FQDN, serverFQDN);
81     }
82
83     @Override
84     public void setServerIPAddress(String serverIPAddress) {
85         MDC.put(ILogConfiguration.MDC_SERVER_IP_ADDRESS, serverIPAddress);
86     }
87
88     @Override
89     public void setServerFQDNInternally() {
90         setServerFQDN(fqdn);
91     }
92
93     @Override
94     public void setServerIPAddressInternally() {
95         setServerIPAddress(hostAddress);
96     }
97
98     @Override
99     public void setInstanceUUID(String instanceUUID) {
100         MDC.put(ILogConfiguration.MDC_INSTANCE_UUID, instanceUUID);
101     }
102
103     @Override
104     public void setProcessKey(String processKey) {
105         MDC.put(ILogConfiguration.MDC_PROCESS_KEY, processKey);
106     }
107
108     @Override
109     public void setAlertSeverity(Severity alertSeverity) {
110         MDC.put(ILogConfiguration.MDC_ALERT_SEVERITY, String.valueOf(alertSeverity.getSeverityType()));
111     }
112
113     @Override
114     public void setOptCustomField1(String customField1) {
115         MDC.put(ILogConfiguration.MDC_OPT_FIELD1, customField1);
116     }
117
118     @Override
119     public void setOptCustomField2(String customField2) {
120         MDC.put(ILogConfiguration.MDC_OPT_FIELD2, customField2);
121     }
122
123     @Override
124     public void setOptCustomField3(String customField3) {
125         MDC.put(ILogConfiguration.MDC_OPT_FIELD3, customField3);
126     }
127
128     @Override
129     public void setOptCustomField4(String customField4) {
130         MDC.put(ILogConfiguration.MDC_OPT_FIELD4, customField4);
131     }
132
133     @Override
134     public void setKeyRequestId(String keyRequestId) {
135         MDC.put(ILogConfiguration.MDC_KEY_REQUEST_ID, keyRequestId); // eg. servletRequest.getSession().getId()
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(ILogConfiguration.MDC_SERVICE_NAME, serviceName);
146     }
147
148     @Override
149     public void setStatusCode(String statusCode) {
150         MDC.put(ILogConfiguration.MDC_STATUS_CODE, statusCode);
151     }
152
153     @Override
154     public void setPartnerName(String partnerName) {
155         MDC.put(ILogConfiguration.MDC_PARTNER_NAME, partnerName);
156     }
157
158     @Override
159     public void setResponseCode(int responseCode) {
160         MDC.put(ILogConfiguration.MDC_RESPONSE_CODE, Integer.toString(responseCode));
161     }
162
163     @Override
164     public void setResponseDesc(String responseDesc) {
165         MDC.put(ILogConfiguration.MDC_RESPONSE_DESC, 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(ILogConfiguration.MDC_TARGET_ENTITY, targetEntity);
176     }
177
178     @Override
179     public void setTargetServiceName(String targetServiceName) {
180         MDC.put(ILogConfiguration.MDC_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(ILogConfiguration.MDC_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(ILogConfiguration.MDC_KEY_REQUEST_ID);
236     }
237
238     @Override
239     public void removeStatusCode() {
240         MDC.remove(ILogConfiguration.MDC_STATUS_CODE);
241     }
242
243     @Override
244     public void removePartnerName(){
245         MDC.remove(ILogConfiguration.MDC_PARTNER_NAME);
246     }
247
248     @Override
249     public void removeResponseCode(){
250         MDC.remove(ILogConfiguration.MDC_RESPONSE_CODE);
251     }
252
253     @Override
254     public void removeResponseDesc(){
255         MDC.remove(ILogConfiguration.MDC_RESPONSE_DESC);
256     }
257
258     @Override
259     public void removeServiceInstanceId(){
260         MDC.remove(ILogConfiguration.MDC_SERVICE_INSTANCE_ID);
261     }
262
263     @Override
264     public void removeTargetEntity(){
265         MDC.remove(ILogConfiguration.MDC_TARGET_ENTITY);
266     }
267
268     @Override
269     public void removeTargetServiceName(){
270         MDC.remove(ILogConfiguration.MDC_TARGET_SERVICE_NAME);
271     }
272
273     @Override
274     public void removeTargetVirtualEntity(){
275         MDC.remove(ILogConfiguration.MDC_TARGET_VIRTUAL_ENTITY);
276     }
277
278     @Override
279     public void removeErrorCode(){
280         MDC.remove(ILogConfiguration.MDC_ERROR_CODE);
281     }
282
283     @Override
284     public void removeErrorCategory(){
285         MDC.remove(ILogConfiguration.MDC_ERROR_CATEGORY);
286     }
287
288     @Override
289     public void removeErrorDescription(){
290         MDC.remove(ILogConfiguration.MDC_ERROR_DESC);
291     }
292
293     @Override
294     public void setAuditMessage(String message) {
295         MDC.put(ILogConfiguration.MDC_AUDIT_MESSAGE, message);
296     }
297
298     @Override
299     public String getAuditMessage() {
300         return MDC.get(ILogConfiguration.MDC_AUDIT_MESSAGE);
301     }
302
303     private void setElapsedTime(String beginTimestamp) {
304         try {
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);
308
309             MDC.put(ILogConfiguration.MDC_ELAPSED_TIME, String.valueOf(timeDifference.toMillis()));
310
311         } catch(Exception ex) {
312             log.error("failed to calculate elapsed time",ex);
313         }
314     }
315
316     private String generatedTimeNow() {
317         return dateTimeFormatter
318                 .withZone(ZoneOffset.UTC)
319                 .format(Instant.now());
320     }
321
322 }