98513cabca95d1ca70c56446abe8f9bdf2bd18eb
[sdnc/core.git] / sli / common / src / main / java / org / openecomp / sdnc / sli / MetricLogger.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * openECOMP : SDN-C
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights
6  *                                              reserved.
7  * ================================================================================
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  * 
12  *      http://www.apache.org/licenses/LICENSE-2.0
13  * 
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  * ============LICENSE_END=========================================================
20  */
21
22 /**
23  *
24  */
25 package org.openecomp.sdnc.sli;
26
27 import java.net.InetAddress;
28 import java.text.DateFormat;
29 import java.text.SimpleDateFormat;
30 import java.util.Date;
31 import java.util.TimeZone;
32
33 import org.slf4j.Logger;
34 import org.slf4j.LoggerFactory;
35 import org.slf4j.MDC;
36
37 /**
38  * @author dt5972
39  *
40  */
41 public class MetricLogger {
42
43     private static final Logger KARAF = LoggerFactory.getLogger(MetricLogger.class);
44     private static final Logger METRIC = LoggerFactory.getLogger("org.openecomp.sdnc.filters.metric");
45
46     public static final String BEGIN_TIMESTAMP = "X-ECOMP-BeginTimestamp";
47     public static final String END_TIMESTAMP = "X-ECOMP-EndTimestamp";
48     public static final String REQUEST_ID = "X-ECOMP-RequestID";
49     public static final String SERVICE_INSTANCE_ID = "X-ECOMP-ServiceInstanceID";
50     public static final String SERVICE_NAME = "X-ECOMP-ServiceName";
51     public static final String PARTNER_NAME = "X-ECOMP-PartnerName";
52     public static final String TARGET_ENTITY = "X-ECOMP-TargetEntity";
53     public static final String TARGET_SERVICE_NAME = "X-ECOMP-TargetServiceName";
54     public static final String STATUS_CODE = "X-ECOMP-StatusCode";
55     public static final String RESPONSE_CODE = "X-ECOMP-ResponseCode";
56     public static final String RESPONSE_DESCRIPTION = "X-ECOMP-ResponseDescription";
57     public static final String SEVERITY = "X-ECOMP-Severity";
58     public static final String SERVER_IP_ADDRESS = "X-ECOMP-ServerIpAddress";
59     public static final String ELAPSED_TIME = "X-ECOMP-ElapsedTime";
60     public static final String SERVER = "X-ECOMP-Server";
61     public static final String CLIENT_IP = "X-ECOMP-ClientIp";
62     public static final String CLASS_NAME = "X-ECOMP-ClassName";
63     public static final String TARGET_VIRTUAL_ENTITY =  "X-ECOMP-TargetVirtualEntity";
64
65     private long beginTimestamp;
66     private String lastMsg = null;
67
68     public MetricLogger() {
69         beginTimestamp = System.currentTimeMillis();
70
71         try {
72             InetAddress localhost = InetAddress.getLocalHost();
73             setServerIpAddress(localhost.getHostAddress());
74             setServer(localhost.getCanonicalHostName());
75         } catch (Exception e) {
76             KARAF.error("Could not get localhost", e);
77         }
78
79     }
80
81
82     public String getBeginTimestamp() {
83         return MDC.get(BEGIN_TIMESTAMP);
84     }
85
86     private void setBeginTimestamp(long beginTimestamp) {
87         this.beginTimestamp = beginTimestamp;
88         MDC.put(BEGIN_TIMESTAMP, MetricLogger.asIso8601(beginTimestamp));
89     }
90
91     public String getEndTimestamp() {
92         return MDC.get(END_TIMESTAMP);
93     }
94
95     private void setEndTimestamp(long endTimestamp) {
96         // Set MDC with formatted time stamp
97         MDC.put(END_TIMESTAMP, MetricLogger.asIso8601(endTimestamp));
98
99         // Set elapsed time
100         setElapsedTime(endTimestamp - beginTimestamp);
101
102     }
103
104     public String getRequestID() {
105         return MDC.get(REQUEST_ID);
106     }
107
108
109     public String getServiceInstanceID() {
110         return MDC.get(SERVICE_INSTANCE_ID);
111     }
112
113     private void setServiceInstanceID(String svcInstanceId) {
114         MDC.put(SERVICE_INSTANCE_ID, svcInstanceId);
115     }
116
117     public String getServiceName() {
118         return MDC.get(SERVICE_NAME);
119     }
120
121     private void setServiceName(String svcName) {
122         MDC.put(SERVICE_NAME, svcName);
123     }
124
125     public String getPartnerName() {
126         return MDC.get(PARTNER_NAME);
127     }
128
129     private void setPartnerName(String partnerName) {
130         MDC.put(PARTNER_NAME, partnerName);
131     }
132
133     public String getTargetEntity() {
134         return MDC.get(TARGET_ENTITY);
135     }
136
137     private void setTargetEntity(String targetEntity) {
138         MDC.put(TARGET_ENTITY, targetEntity);
139     }
140
141     public String getTargetServiceName() {
142         return MDC.get(TARGET_SERVICE_NAME);
143     }
144
145     private void setTargetServiceName(String targetServiceName) {
146         MDC.put(TARGET_SERVICE_NAME, targetServiceName);
147     }
148
149     public String getStatusCode() {
150         return MDC.get(STATUS_CODE);
151     }
152
153     private void setStatusCode(String statusCode) {
154         MDC.put(STATUS_CODE, statusCode);
155     }
156
157     public String getResponseCode() {
158         return MDC.get(RESPONSE_CODE);
159     }
160
161     private void setResponseCode(String responseCode) {
162         MDC.put(RESPONSE_CODE, responseCode);
163     }
164
165     public String getResponseDescription() {
166         return MDC.get(RESPONSE_DESCRIPTION);
167     }
168
169     private void setResponseDescription(String responseDesc) {
170         MDC.put(RESPONSE_DESCRIPTION, responseDesc);
171     }
172
173     public String getSeverity() {
174         return MDC.get(SEVERITY);
175     }
176
177     private void setSeverity(String severity) {
178         MDC.put(SEVERITY, severity);
179     }
180
181     public String getServerIpAddress() {
182         return MDC.get(SERVER_IP_ADDRESS);
183     }
184
185     private void setServerIpAddress(String serverIpAddress) {
186         MDC.put(SERVER_IP_ADDRESS, serverIpAddress);
187     }
188
189     public String getElapsedTime() {
190         return MDC.get(ELAPSED_TIME);
191     }
192
193     private void setElapsedTime(long elapsedTime) {
194         MDC.put(ELAPSED_TIME, ""+elapsedTime);
195     }
196
197     public String getServer() {
198         return MDC.get(SERVER);
199     }
200
201     private void setServer(String server) {
202         MDC.put(SERVER, server);
203     }
204
205     public String getClientIp() {
206         return MDC.get(CLIENT_IP);
207     }
208
209     private void setClientIp(String clientIp) {
210         MDC.put(CLIENT_IP, clientIp);
211     }
212
213     public String getClassName() {
214         return MDC.get(CLASS_NAME);
215     }
216
217     private void setClassName(String className) {
218         MDC.put(CLASS_NAME, className);
219     }
220
221     public String getTargetVirtualEntity() {
222         return MDC.get(TARGET_VIRTUAL_ENTITY);
223     }
224
225     private void setTargetVirtualEntity(String targetVirtualEntity) {
226         MDC.put(TARGET_VIRTUAL_ENTITY, targetVirtualEntity);
227     }
228
229     public static String asIso8601(Date date) {
230         TimeZone tz = TimeZone.getTimeZone("UTC");
231         DateFormat df = new SimpleDateFormat("yyy-MM-dd'T'HH:mm:ss:SS'+00:00'");
232         df.setTimeZone(tz);
233         return df.format(date);
234     }
235
236     public static String asIso8601(long tsInMillis) {
237         return MetricLogger.asIso8601(new Date(tsInMillis));
238     }
239
240     public void logRequest(String svcInstanceId, String svcName, String partnerName, String targetEntity, String targetServiceName,  String targetVirtualEntity, String msg) {
241
242         setBeginTimestamp(System.currentTimeMillis());
243
244         if (svcInstanceId != null) {
245             setServiceInstanceID(svcInstanceId);
246         }
247
248         if (svcName != null) {
249             setServiceName(svcName);
250         }
251
252         if (partnerName != null) {
253             setPartnerName(partnerName);
254         }
255
256         if (targetEntity != null) {
257             setTargetEntity(targetEntity);
258         }
259
260         if (targetServiceName != null) {
261             setTargetServiceName(targetServiceName);
262         }
263
264         if (targetVirtualEntity != null) {
265             setTargetVirtualEntity(targetVirtualEntity);
266         }
267
268         this.lastMsg = msg;
269
270
271     }
272
273     public void logResponse(String statusCode, String responseCode, String responseDescription) {
274         setEndTimestamp(System.currentTimeMillis());
275
276         setStatusCode(statusCode);
277         setResponseCode(responseCode);
278         setResponseDescription(responseDescription);
279
280         METRIC.info(lastMsg);
281
282     }
283 }