diff options
Diffstat (limited to 'cmso-service/src/main/java/org/onap/observations/Mdc.java')
-rw-r--r-- | cmso-service/src/main/java/org/onap/observations/Mdc.java | 483 |
1 files changed, 275 insertions, 208 deletions
diff --git a/cmso-service/src/main/java/org/onap/observations/Mdc.java b/cmso-service/src/main/java/org/onap/observations/Mdc.java index b00bed3..b9b30ea 100644 --- a/cmso-service/src/main/java/org/onap/observations/Mdc.java +++ b/cmso-service/src/main/java/org/onap/observations/Mdc.java @@ -1,32 +1,29 @@ /* * Copyright © 2019 AT&T Intellectual Property. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + * + * + * Unless otherwise specified, all documentation contained herein is licensed under the Creative + * Commons License, Attribution 4.0 Intl. (the "License"); you may not use this documentation except + * in compliance with the License. You may obtain a copy of the License at + * + * https://creativecommons.org/licenses/by/4.0/ + * + * Unless required by applicable law or agreed to in writing, documentation distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing permissions and * limitations under the License. - * - * - * Unless otherwise specified, all documentation contained herein is licensed - * under the Creative Commons License, Attribution 4.0 Intl. (the "License"); - * you may not use this documentation except in compliance with the License. - * You may obtain a copy of the License at - * - * https://creativecommons.org/licenses/by/4.0/ - * - * Unless required by applicable law or agreed to in writing, documentation - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -*/ + */ + package org.onap.observations; import static com.att.eelf.configuration.Configuration.MDC_BEGIN_TIMESTAMP; @@ -45,12 +42,12 @@ import static com.att.eelf.configuration.Configuration.MDC_STATUS_CODE; import static com.att.eelf.configuration.Configuration.MDC_TARGET_ENTITY; import static com.att.eelf.configuration.Configuration.MDC_TARGET_SERVICE_NAME; +import com.att.eelf.utils.Stopwatch; import java.net.InetAddress; import java.net.URI; import java.util.Date; import java.util.Map; import java.util.UUID; - import javax.servlet.http.HttpServletRequest; import javax.ws.rs.client.ClientRequestContext; import javax.ws.rs.client.ClientResponseContext; @@ -58,191 +55,261 @@ import javax.ws.rs.container.ContainerRequestContext; import javax.ws.rs.container.ContainerResponseContext; import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.core.Response.StatusType; - import org.onap.optf.cmso.filters.MessageHeaders.HeadersEnum; import org.quartz.JobExecutionContext; import org.slf4j.MDC; -import com.att.eelf.utils.Stopwatch; - /** - * ECOMP EELF logging MDC fields not defined in the MDC Configuration (i.e. - * MDC_ALERT_SEVERITY) + * ECOMP EELF logging MDC fields not defined in the MDC Configuration (i.e. MDC_ALERT_SEVERITY) **/ public class Mdc { - public static final String SERVICE_NAME = "CSS-Scheduler"; - public enum Enum { - // BeginTimestamp, - // EndTimeStamp, - // RequestId, - // ServiceInstanceId, - VirtualServerName, - // ServiceName, - // PartnerName, - // StatusCOde, - // ResponseCode, - // ResponseDescription, - // InstanceUUID, - // AlertSeverity, - // ServerIPAddress, - // ElapsedTime, - // ServerFQDN, - // RemoteHost, - ClassName, Unused, - // ProcessKey, - CustomField1, CustomField2, CustomField3, CustomField4, - // TargetVirtualEntity, - // TargetEntity, - // TargetServiceName, - ErrorCode, ErrorDescription, Timer, - } - - public static String getCaller(int back) - { - StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace(); - return stackTraceElements[back].getClassName() + "." + stackTraceElements[back].getMethodName(); - } - - public static void setCaller(int back) - { - String caller = MDC.get(Enum.ClassName.name()); - if (caller == null) - MDC.put(Enum.ClassName.name(), getCaller(back)); - } - - public static void setObservation(ObservationInterface o) - { - MDC.put(Enum.CustomField4.name(), o.name()); - } - - public static void clearCaller() - { - MDC.remove(Enum.ClassName.name()); - } - - public static void quartzJobBegin(JobExecutionContext context) - { - MDC.clear(); - MDC.put(MDC_BEGIN_TIMESTAMP, Stopwatch.isoFormatter.format(new Date())); - MDC.put(MDC_INSTANCE_UUID, UUID.randomUUID().toString()); - try{ MDC.put(MDC_SERVER_FQDN, InetAddress.getLocalHost().getHostName()); } catch (Exception e){ MDC.put(MDC_SERVER_FQDN, e.getMessage());} - try{ MDC.put(MDC_SERVER_IP_ADDRESS, InetAddress.getLocalHost().getHostAddress()); } catch (Exception e){ MDC.put(MDC_SERVER_FQDN, e.getMessage());} - MDC.put(MDC_SERVICE_INSTANCE_ID, "UNKNOWN"); - MDC.put(MDC_SERVICE_NAME, SERVICE_NAME); - MDC.put(Enum.ClassName.name(), getCaller(3)); - } - - public static void quartzJobEnd(JobExecutionContext context) - { - MDC.put(MDC_END_TIMESTAMP, Stopwatch.isoFormatter.format(new Date())); - MDC.put(Enum.ClassName.name(), getCaller(3)); - } - - public static Map<String, String> save() - { - Map<String, String> save = MDC.getCopyOfContextMap(); - return save; - } - - public static void restore(Map<String, String> mdcSave) - { - MDC.clear(); - for (String name : mdcSave.keySet()) - MDC.put(name, mdcSave.get(name)); - } - - - - public static void setRequestIdIfNotSet(String requestId) { - if (MDC.get(MDC_KEY_REQUEST_ID) == null || MDC.get(MDC_KEY_REQUEST_ID).equals("")) - { - setRequestId(requestId); - } - } - - public static void setRequestId(String requestId) { - MDC.put(MDC_KEY_REQUEST_ID, requestId); - } - - public static void metricStart(ClientRequestContext requestContext) { - MDC.put(MDC_BEGIN_TIMESTAMP, Stopwatch.isoFormatter.format(new Date())); - MDC.put(MDC_END_TIMESTAMP, MDC.get(MDC_BEGIN_TIMESTAMP)); - setPartnerTargetFromUri(requestContext.getUri()); - } - - public static void metricEnd(ClientResponseContext response) - { - - Date now = new Date(); - //MDC.put(MDC_BEGIN_TIMESTAMP, Stopwatch.isoFormatter.format(now)); - MDC.put(MDC_END_TIMESTAMP, Stopwatch.isoFormatter.format(now)); - setResponseInfo(response.getStatusInfo()); - - } - public static void auditStart(ContainerRequestContext requestContext, HttpServletRequest servletRequest) - { - MDC.put(MDC_BEGIN_TIMESTAMP, Stopwatch.isoFormatter.format(new Date())); - MDC.put(MDC_END_TIMESTAMP, MDC.get(MDC_BEGIN_TIMESTAMP)); - MDC.put(MDC_REMOTE_HOST, servletRequest.getRemoteHost()); - MDC.put(Enum.ClassName.name(), getCaller(4)); - MultivaluedMap<String, String> headers = requestContext.getHeaders(); - String transactionId = (String) headers.getFirst(HeadersEnum.TransactionID.toString()); - if (transactionId != null) - { - setRequestId(transactionId); - } - else - { - setRequestId(UUID.randomUUID().toString()); - } - - } - - public static void auditEnd(ContainerRequestContext requestContext, ContainerResponseContext response) - { - Date now = new Date(); - //MDC.put(MDC_BEGIN_TIMESTAMP, Stopwatch.isoFormatter.format(now)); - MDC.put(MDC_END_TIMESTAMP, Stopwatch.isoFormatter.format(now)); - MDC.put(Enum.ClassName.name(), getCaller(4)); - - setResponseInfo(response.getStatusInfo()); - - } - - private static void setResponseInfo(StatusType statusInfo) - { - Integer status = statusInfo.getStatusCode(); - String completed = "ERROR"; - if (status >=200 && status < 300) - { - completed = "COMPLETE"; - } - MDC.put(MDC_RESPONSE_CODE, status.toString()); - MDC.put(MDC_RESPONSE_DESC, statusInfo.getReasonPhrase()); - MDC.put(MDC_STATUS_CODE, completed); - } - - public static void setEvent(String requestID) { - MDC.put(MDC_BEGIN_TIMESTAMP, Stopwatch.isoFormatter.format(new Date())); - MDC.put(MDC_END_TIMESTAMP, MDC.get(MDC_BEGIN_TIMESTAMP)); - setRequestId(requestID); - } - - private static void setPartnerTargetFromUri(URI uri) - { - try - { - MDC.put(MDC_PARTNER_NAME, uri.getHost()); - MDC.put(MDC_TARGET_ENTITY, uri.getScheme() + "://" + uri.getHost() + ":" + uri.getPort()); - MDC.put(MDC_TARGET_SERVICE_NAME, uri.getPath()); - } - catch (Exception e) - { - MDC.put(MDC_PARTNER_NAME, "UNKNOWN"); - MDC.put(MDC_TARGET_ENTITY, "UNKNOWN"); - MDC.put(MDC_TARGET_SERVICE_NAME, "UNKNOWN"); - } - } - - -}
\ No newline at end of file + + /** The Constant SERVICE_NAME. */ + public static final String SERVICE_NAME = "CSS-Scheduler"; + + /** + * The Enum Enum. + */ + public enum Enum { + // BeginTimestamp, + // EndTimeStamp, + // RequestId, + // ServiceInstanceId, + VirtualServerName, + // ServiceName, + // PartnerName, + // StatusCOde, + // ResponseCode, + // ResponseDescription, + // InstanceUUID, + // AlertSeverity, + // ServerIPAddress, + // ElapsedTime, + // ServerFQDN, + // RemoteHost, + ClassName, Unused, + // ProcessKey, + CustomField1, CustomField2, CustomField3, CustomField4, + // TargetVirtualEntity, + // TargetEntity, + // TargetServiceName, + ErrorCode, ErrorDescription, Timer, + } + + /** + * Gets the caller. + * + * @param back the back + * @return the caller + */ + public static String getCaller(int back) { + StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace(); + return stackTraceElements[back].getClassName() + "." + stackTraceElements[back].getMethodName(); + } + + /** + * Sets the caller. + * + * @param back the new caller + */ + public static void setCaller(int back) { + String caller = MDC.get(Enum.ClassName.name()); + if (caller == null) + { + MDC.put(Enum.ClassName.name(), getCaller(back)); + } + } + + /** + * Sets the observation. + * + * @param obs the new observation + */ + public static void setObservation(ObservationInterface obs) { + MDC.put(Enum.CustomField4.name(), obs.name()); + } + + /** + * Clear caller. + */ + public static void clearCaller() { + MDC.remove(Enum.ClassName.name()); + } + + /** + * Quartz job begin. + * + * @param context the context + */ + public static void quartzJobBegin(JobExecutionContext context) { + MDC.clear(); + MDC.put(MDC_BEGIN_TIMESTAMP, Stopwatch.isoFormatter.format(new Date())); + MDC.put(MDC_INSTANCE_UUID, UUID.randomUUID().toString()); + try { + MDC.put(MDC_SERVER_FQDN, InetAddress.getLocalHost().getHostName()); + } catch (Exception e) { + MDC.put(MDC_SERVER_FQDN, e.getMessage()); + } + try { + MDC.put(MDC_SERVER_IP_ADDRESS, InetAddress.getLocalHost().getHostAddress()); + } catch (Exception e) { + MDC.put(MDC_SERVER_FQDN, e.getMessage()); + } + MDC.put(MDC_SERVICE_INSTANCE_ID, "UNKNOWN"); + MDC.put(MDC_SERVICE_NAME, SERVICE_NAME); + MDC.put(Enum.ClassName.name(), getCaller(3)); + } + + /** + * Quartz job end. + * + * @param context the context + */ + public static void quartzJobEnd(JobExecutionContext context) { + MDC.put(MDC_END_TIMESTAMP, Stopwatch.isoFormatter.format(new Date())); + MDC.put(Enum.ClassName.name(), getCaller(3)); + } + + /** + * Save. + * + * @return the map + */ + public static Map<String, String> save() { + Map<String, String> save = MDC.getCopyOfContextMap(); + return save; + } + + /** + * Restore. + * + * @param mdcSave the mdc save + */ + public static void restore(Map<String, String> mdcSave) { + MDC.clear(); + for (String name : mdcSave.keySet()) + { + MDC.put(name, mdcSave.get(name)); + } + } + + + + /** + * Sets the request id if not set. + * + * @param requestId the new request id if not set + */ + public static void setRequestIdIfNotSet(String requestId) { + if (MDC.get(MDC_KEY_REQUEST_ID) == null || MDC.get(MDC_KEY_REQUEST_ID).equals("")) { + setRequestId(requestId); + } + } + + /** + * Sets the request id. + * + * @param requestId the new request id + */ + public static void setRequestId(String requestId) { + MDC.put(MDC_KEY_REQUEST_ID, requestId); + } + + /** + * Metric start. + * + * @param requestContext the request context + */ + public static void metricStart(ClientRequestContext requestContext) { + MDC.put(MDC_BEGIN_TIMESTAMP, Stopwatch.isoFormatter.format(new Date())); + MDC.put(MDC_END_TIMESTAMP, MDC.get(MDC_BEGIN_TIMESTAMP)); + setPartnerTargetFromUri(requestContext.getUri()); + } + + /** + * Metric end. + * + * @param response the response + */ + public static void metricEnd(ClientResponseContext response) { + + Date now = new Date(); + // MDC.put(MDC_BEGIN_TIMESTAMP, Stopwatch.isoFormatter.format(now)); + MDC.put(MDC_END_TIMESTAMP, Stopwatch.isoFormatter.format(now)); + setResponseInfo(response.getStatusInfo()); + + } + + /** + * Audit start. + * + * @param requestContext the request context + * @param servletRequest the servlet request + */ + public static void auditStart(ContainerRequestContext requestContext, HttpServletRequest servletRequest) { + MDC.put(MDC_BEGIN_TIMESTAMP, Stopwatch.isoFormatter.format(new Date())); + MDC.put(MDC_END_TIMESTAMP, MDC.get(MDC_BEGIN_TIMESTAMP)); + MDC.put(MDC_REMOTE_HOST, servletRequest.getRemoteHost()); + MDC.put(Enum.ClassName.name(), getCaller(4)); + MultivaluedMap<String, String> headers = requestContext.getHeaders(); + String transactionId = headers.getFirst(HeadersEnum.TransactionID.toString()); + if (transactionId != null) { + setRequestId(transactionId); + } else { + setRequestId(UUID.randomUUID().toString()); + } + + } + + /** + * Audit end. + * + * @param requestContext the request context + * @param response the response + */ + public static void auditEnd(ContainerRequestContext requestContext, ContainerResponseContext response) { + Date now = new Date(); + // MDC.put(MDC_BEGIN_TIMESTAMP, Stopwatch.isoFormatter.format(now)); + MDC.put(MDC_END_TIMESTAMP, Stopwatch.isoFormatter.format(now)); + MDC.put(Enum.ClassName.name(), getCaller(4)); + + setResponseInfo(response.getStatusInfo()); + + } + + private static void setResponseInfo(StatusType statusInfo) { + Integer status = statusInfo.getStatusCode(); + String completed = "ERROR"; + if (status >= 200 && status < 300) { + completed = "COMPLETE"; + } + MDC.put(MDC_RESPONSE_CODE, status.toString()); + MDC.put(MDC_RESPONSE_DESC, statusInfo.getReasonPhrase()); + MDC.put(MDC_STATUS_CODE, completed); + } + + /** + * Sets the event. + * + * @param requestId the new event + */ + public static void setEvent(String requestId) { + MDC.put(MDC_BEGIN_TIMESTAMP, Stopwatch.isoFormatter.format(new Date())); + MDC.put(MDC_END_TIMESTAMP, MDC.get(MDC_BEGIN_TIMESTAMP)); + setRequestId(requestId); + } + + private static void setPartnerTargetFromUri(URI uri) { + try { + MDC.put(MDC_PARTNER_NAME, uri.getHost()); + MDC.put(MDC_TARGET_ENTITY, uri.getScheme() + "://" + uri.getHost() + ":" + uri.getPort()); + MDC.put(MDC_TARGET_SERVICE_NAME, uri.getPath()); + } catch (Exception e) { + MDC.put(MDC_PARTNER_NAME, "UNKNOWN"); + MDC.put(MDC_TARGET_ENTITY, "UNKNOWN"); + MDC.put(MDC_TARGET_SERVICE_NAME, "UNKNOWN"); + } + } + + +} |