2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights
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
12 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
25 package org.openecomp.sdnc.sli;
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;
33 import org.slf4j.Logger;
34 import org.slf4j.LoggerFactory;
41 public class MetricLogger {
43 private static final Logger KARAF = LoggerFactory.getLogger(MetricLogger.class);
44 private static final Logger METRIC = LoggerFactory.getLogger("org.openecomp.sdnc.filters.metric");
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";
65 private long beginTimestamp;
66 private String lastMsg = null;
68 public MetricLogger() {
69 beginTimestamp = System.currentTimeMillis();
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);
82 public String getBeginTimestamp() {
83 return MDC.get(BEGIN_TIMESTAMP);
86 private void setBeginTimestamp(long beginTimestamp) {
87 this.beginTimestamp = beginTimestamp;
88 MDC.put(BEGIN_TIMESTAMP, MetricLogger.asIso8601(beginTimestamp));
91 public String getEndTimestamp() {
92 return MDC.get(END_TIMESTAMP);
95 private void setEndTimestamp(long endTimestamp) {
96 // Set MDC with formatted time stamp
97 MDC.put(END_TIMESTAMP, MetricLogger.asIso8601(endTimestamp));
100 setElapsedTime(endTimestamp - beginTimestamp);
104 public String getRequestID() {
105 return MDC.get(REQUEST_ID);
109 public String getServiceInstanceID() {
110 return MDC.get(SERVICE_INSTANCE_ID);
113 private void setServiceInstanceID(String svcInstanceId) {
114 MDC.put(SERVICE_INSTANCE_ID, svcInstanceId);
117 public String getServiceName() {
118 return MDC.get(SERVICE_NAME);
121 private void setServiceName(String svcName) {
122 MDC.put(SERVICE_NAME, svcName);
125 public String getPartnerName() {
126 return MDC.get(PARTNER_NAME);
129 private void setPartnerName(String partnerName) {
130 MDC.put(PARTNER_NAME, partnerName);
133 public String getTargetEntity() {
134 return MDC.get(TARGET_ENTITY);
137 private void setTargetEntity(String targetEntity) {
138 MDC.put(TARGET_ENTITY, targetEntity);
141 public String getTargetServiceName() {
142 return MDC.get(TARGET_SERVICE_NAME);
145 private void setTargetServiceName(String targetServiceName) {
146 MDC.put(TARGET_SERVICE_NAME, targetServiceName);
149 public String getStatusCode() {
150 return MDC.get(STATUS_CODE);
153 private void setStatusCode(String statusCode) {
154 MDC.put(STATUS_CODE, statusCode);
157 public String getResponseCode() {
158 return MDC.get(RESPONSE_CODE);
161 private void setResponseCode(String responseCode) {
162 MDC.put(RESPONSE_CODE, responseCode);
165 public String getResponseDescription() {
166 return MDC.get(RESPONSE_DESCRIPTION);
169 private void setResponseDescription(String responseDesc) {
170 MDC.put(RESPONSE_DESCRIPTION, responseDesc);
173 public String getSeverity() {
174 return MDC.get(SEVERITY);
177 private void setSeverity(String severity) {
178 MDC.put(SEVERITY, severity);
181 public String getServerIpAddress() {
182 return MDC.get(SERVER_IP_ADDRESS);
185 private void setServerIpAddress(String serverIpAddress) {
186 MDC.put(SERVER_IP_ADDRESS, serverIpAddress);
189 public String getElapsedTime() {
190 return MDC.get(ELAPSED_TIME);
193 private void setElapsedTime(long elapsedTime) {
194 MDC.put(ELAPSED_TIME, ""+elapsedTime);
197 public String getServer() {
198 return MDC.get(SERVER);
201 private void setServer(String server) {
202 MDC.put(SERVER, server);
205 public String getClientIp() {
206 return MDC.get(CLIENT_IP);
209 private void setClientIp(String clientIp) {
210 MDC.put(CLIENT_IP, clientIp);
213 public String getClassName() {
214 return MDC.get(CLASS_NAME);
217 private void setClassName(String className) {
218 MDC.put(CLASS_NAME, className);
221 public String getTargetVirtualEntity() {
222 return MDC.get(TARGET_VIRTUAL_ENTITY);
225 private void setTargetVirtualEntity(String targetVirtualEntity) {
226 MDC.put(TARGET_VIRTUAL_ENTITY, targetVirtualEntity);
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'");
233 return df.format(date);
236 public static String asIso8601(long tsInMillis) {
237 return MetricLogger.asIso8601(new Date(tsInMillis));
240 public void logRequest(String svcInstanceId, String svcName, String partnerName, String targetEntity, String targetServiceName, String targetVirtualEntity, String msg) {
242 setBeginTimestamp(System.currentTimeMillis());
244 if (svcInstanceId != null) {
245 setServiceInstanceID(svcInstanceId);
248 if (svcName != null) {
249 setServiceName(svcName);
252 if (partnerName != null) {
253 setPartnerName(partnerName);
256 if (targetEntity != null) {
257 setTargetEntity(targetEntity);
260 if (targetServiceName != null) {
261 setTargetServiceName(targetServiceName);
264 if (targetVirtualEntity != null) {
265 setTargetVirtualEntity(targetVirtualEntity);
273 public void logResponse(String statusCode, String responseCode, String responseDescription) {
274 setEndTimestamp(System.currentTimeMillis());
276 setStatusCode(statusCode);
277 setResponseCode(responseCode);
278 setResponseDescription(responseDescription);
280 METRIC.info(lastMsg);