From c93746f09c38562d25e51b8274d6385eaaf07a00 Mon Sep 17 00:00:00 2001
From: YiLi
Date: Thu, 15 Mar 2018 10:59:09 +0800
Subject: Add log filter
Change-Id: I07a51e3675f7ff99936c5788d56243934a083791
Issue-ID: HOLMES-112
Signed-off-by: YiLi
---
.../AddHeadersHttpServletRequestWrapper.java | 40 +++++++++
.../utils/transactionid/TransactionIdFilter.java | 99 ++++++++++++++++++++++
.../utils/transactionid/TransactionIdUtils.java | 28 ++++++
3 files changed, 167 insertions(+)
create mode 100644 holmes-actions/src/main/java/org/onap/holmes/common/utils/transactionid/AddHeadersHttpServletRequestWrapper.java
create mode 100644 holmes-actions/src/main/java/org/onap/holmes/common/utils/transactionid/TransactionIdFilter.java
create mode 100644 holmes-actions/src/main/java/org/onap/holmes/common/utils/transactionid/TransactionIdUtils.java
(limited to 'holmes-actions/src/main')
diff --git a/holmes-actions/src/main/java/org/onap/holmes/common/utils/transactionid/AddHeadersHttpServletRequestWrapper.java b/holmes-actions/src/main/java/org/onap/holmes/common/utils/transactionid/AddHeadersHttpServletRequestWrapper.java
new file mode 100644
index 0000000..d61797b
--- /dev/null
+++ b/holmes-actions/src/main/java/org/onap/holmes/common/utils/transactionid/AddHeadersHttpServletRequestWrapper.java
@@ -0,0 +1,40 @@
+/**
+ * Copyright 2018 ZTE Corporation.
+ *
+ * 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.
+ */
+package org.onap.holmes.common.utils.transactionid;
+
+import java.util.HashMap;
+import java.util.Map;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
+
+public class AddHeadersHttpServletRequestWrapper extends HttpServletRequestWrapper {
+ final private Map additionalHeaders = new HashMap<>();
+
+ public AddHeadersHttpServletRequestWrapper(HttpServletRequest request) {
+ super(request);
+ }
+
+ public void addHeader(String name, String value) {
+ additionalHeaders.put(name, value);
+ }
+
+ @Override
+ public String getHeader(String name) {
+ String header = additionalHeaders.get(name);
+ return (header != null) ? header : super.getHeader(name);
+ }
+
+}
diff --git a/holmes-actions/src/main/java/org/onap/holmes/common/utils/transactionid/TransactionIdFilter.java b/holmes-actions/src/main/java/org/onap/holmes/common/utils/transactionid/TransactionIdFilter.java
new file mode 100644
index 0000000..3b12399
--- /dev/null
+++ b/holmes-actions/src/main/java/org/onap/holmes/common/utils/transactionid/TransactionIdFilter.java
@@ -0,0 +1,99 @@
+/**
+ * Copyright 2018 ZTE Corporation.
+ *
+ * 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.
+ */
+package org.onap.holmes.common.utils.transactionid;
+
+import java.io.IOException;
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.jvnet.hk2.annotations.Service;
+import org.slf4j.MDC;
+import org.slf4j.Marker;
+import org.slf4j.MarkerFactory;
+
+
+@Service
+@Slf4j
+public class TransactionIdFilter implements Filter {
+
+ public static final Marker INVOKE_SYNCHRONOUS;
+ public static final Marker ENTRY = MarkerFactory.getMarker("ENTRY");
+ public static final Marker EXIT = MarkerFactory.getMarker("EXIT");
+
+ static {
+ INVOKE_SYNCHRONOUS = MarkerFactory.getMarker("INVOKE");
+ INVOKE_SYNCHRONOUS.add(MarkerFactory.getMarker("SYNCHRONOUS"));
+ }
+
+ @Override
+ public void init(FilterConfig filterConfig) throws ServletException {
+
+ }
+
+ @Override
+ public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
+ FilterChain filterChain) throws IOException, ServletException {
+ HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
+ AddHeadersHttpServletRequestWrapper requestWithTransactionId = new AddHeadersHttpServletRequestWrapper(
+ httpServletRequest);
+ log.warn(ENTRY, "Entering.");
+
+ String requestID = ensureTransactionIdIsPresent(requestWithTransactionId);
+ HttpServletResponse httpServletResponse = (HttpServletResponse) servletResponse;
+ httpServletResponse.setHeader(TransactionIdUtils.REQUEST_ID_HEADER, requestID);
+
+ String invocationID = TransactionIdUtils.getUUID();
+ httpServletResponse.setHeader(TransactionIdUtils.INVOCATIONIDID_HEADER,invocationID);
+
+ MDC.put("RequestID", requestID);
+ MDC.put("InvocationID", invocationID);
+
+ log.warn(INVOKE_SYNCHRONOUS, "Invoking synchronously ... ");
+ try {
+ filterChain.doFilter(requestWithTransactionId, httpServletResponse);
+ } finally {
+ log.debug(EXIT, "Exiting.");
+ MDC.remove("RequestID");
+ MDC.remove("InvocationID");
+ }
+ }
+
+ @Override
+ public void destroy() {
+
+ }
+
+ public String ensureTransactionIdIsPresent(
+ AddHeadersHttpServletRequestWrapper request) {
+ String requestId = request.getHeader(TransactionIdUtils.REQUEST_ID_HEADER);
+
+ if (StringUtils.isBlank(requestId)) {
+ requestId = TransactionIdUtils.getUUID();
+ log.info(INVOKE_SYNCHRONOUS, "This warning has a 'MY_MARKER' annotation.");
+ log.info("Request ID ({} header) not exist. It was generated: {}",
+ TransactionIdUtils.REQUEST_ID_HEADER, requestId);
+ request.addHeader(TransactionIdUtils.REQUEST_ID_HEADER, requestId);
+ }
+ return requestId;
+ }
+}
diff --git a/holmes-actions/src/main/java/org/onap/holmes/common/utils/transactionid/TransactionIdUtils.java b/holmes-actions/src/main/java/org/onap/holmes/common/utils/transactionid/TransactionIdUtils.java
new file mode 100644
index 0000000..be61b92
--- /dev/null
+++ b/holmes-actions/src/main/java/org/onap/holmes/common/utils/transactionid/TransactionIdUtils.java
@@ -0,0 +1,28 @@
+/**
+ * Copyright 2018 ZTE Corporation.
+ *
+ * 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.
+ */
+package org.onap.holmes.common.utils.transactionid;
+
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+public class TransactionIdUtils {
+ public static final String REQUEST_ID_HEADER = "X-TransactionID";
+ public static final String INVOCATIONIDID_HEADER = "X-InvocationID";
+
+ public static String getUUID() {
+ return java.util.UUID.randomUUID().toString();
+ }
+}
--
cgit 1.2.3-korg