From 5ad15107613e7aa41af1a0c1e61c3be2e608e4c4 Mon Sep 17 00:00:00 2001 From: egernug Date: Wed, 17 Jul 2019 09:00:04 +0000 Subject: [PATCH] Logging changes and unit tests Change-Id: Ic4644e7c4899b4b1261a8113679b531af1739c84 Issue-ID: DMAAP-1227 Signed-off-by: egernug --- .../org/onap/dmaap/datarouter/node/Delivery.java | 8 +- .../onap/dmaap/datarouter/node/DeliveryQueue.java | 12 +- .../org/onap/dmaap/datarouter/node/IsFrom.java | 2 +- .../dmaap/datarouter/node/NodeConfigManager.java | 20 +- .../org/onap/dmaap/datarouter/node/NodeMain.java | 22 +- .../onap/dmaap/datarouter/node/NodeServlet.java | 20 +- .../org/onap/dmaap/datarouter/node/StatusLog.java | 9 + .../dmaap/datarouter/node/eelf/DebugFilter.java | 37 +++ .../dmaap/datarouter/node/eelf/ErrorFilter.java | 37 +++ .../dmaap/datarouter/node/eelf/JettyFilter.java | 2 +- .../dmaap/datarouter/node/eelf/MetricsFilter.java | 2 +- datarouter-node/src/main/resources/logback.xml | 26 +- .../dmaap/datarouter/node/LogbackFilterTest.java | 308 +++++++++++++++++++++ .../provisioning/eelf/LogbackFilterTest.java | 104 +++++++ 14 files changed, 549 insertions(+), 60 deletions(-) create mode 100644 datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/eelf/DebugFilter.java create mode 100644 datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/eelf/ErrorFilter.java create mode 100644 datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/LogbackFilterTest.java create mode 100644 datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/eelf/LogbackFilterTest.java diff --git a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/Delivery.java b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/Delivery.java index 150d2aa2..82a4e9f0 100644 --- a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/Delivery.java +++ b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/Delivery.java @@ -126,14 +126,14 @@ public class Delivery { DelItem[] items = cv.toArray(new DelItem[cv.size()]); Arrays.sort(items); long stop = (long) (tspace * fdstop); - logger.info( + logger.warn( "NODE0501 Free disk space below red threshold. current=" + cur + " red=" + start + TOTAL + tspace); if (determineFreeDiskSpace(spoolfile, tspace, stop, cur, items)) { return; } cur = spoolfile.getUsableSpace(); if (cur >= stop) { - logger.info("NODE0503 Free disk space at or above yellow threshold. current=" + cur + YELLOW + stop + logger.warn("NODE0503 Free disk space at or above yellow threshold. current=" + cur + YELLOW + stop + TOTAL + tspace); return; } @@ -248,7 +248,7 @@ public class Delivery { private boolean determineFreeDiskSpace(File spoolfile, long tspace, long stop, long cur, DelItem[] items) { for (DelItem item : items) { long amount = dqs.get(item.getSpool()).cancelTask(item.getPublishId()); - logger.info("NODE0502 Attempting to discard " + item.getSpool() + "/" + item.getPublishId() + logger.debug("NODE0502 Attempting to discard " + item.getSpool() + "/" + item.getPublishId() + " to free up disk"); if (amount > 0) { cur += amount; @@ -256,7 +256,7 @@ public class Delivery { cur = spoolfile.getUsableSpace(); } if (cur >= stop) { - logger.info( + logger.warn( "NODE0503 Free disk space at or above yellow threshold. current=" + cur + YELLOW + stop + TOTAL + tspace); return true; diff --git a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/DeliveryQueue.java b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/DeliveryQueue.java index 0ba9ecfd..a3df26ac 100644 --- a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/DeliveryQueue.java +++ b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/DeliveryQueue.java @@ -117,7 +117,7 @@ public class DeliveryQueue implements Runnable, DeliveryTaskHelper { */ private synchronized void markSuccess(DeliveryTask task) { working.remove(task.getPublishId()); - logger.debug(task.getPublishId() + " marked as success."); + logger.info(task.getPublishId() + " marked as success."); task.clean(); failed = false; failduration = 0; @@ -127,7 +127,7 @@ public class DeliveryQueue implements Runnable, DeliveryTaskHelper { * Mark that a delivery task has expired. */ private synchronized void markExpired(DeliveryTask task) { - logger.debug(task.getPublishId() + " marked as expired."); + logger.info(task.getPublishId() + " marked as expired."); task.clean(); } @@ -136,7 +136,7 @@ public class DeliveryQueue implements Runnable, DeliveryTaskHelper { */ private synchronized void markFailNoRetry(DeliveryTask task) { working.remove(task.getPublishId()); - logger.debug(task.getPublishId() + " marked as failed permanently"); + logger.info(task.getPublishId() + " marked as failed permanently"); task.clean(); failed = false; failduration = 0; @@ -166,7 +166,7 @@ public class DeliveryQueue implements Runnable, DeliveryTaskHelper { */ private synchronized void markRedirect(DeliveryTask task) { working.remove(task.getPublishId()); - logger.debug(task.getPublishId() + " marked as redirected."); + logger.info(task.getPublishId() + " marked as redirected."); retry.put(task.getPublishId(), task); } @@ -175,7 +175,7 @@ public class DeliveryQueue implements Runnable, DeliveryTaskHelper { */ private synchronized void markFailWithRetry(DeliveryTask task) { working.remove(task.getPublishId()); - logger.debug(task.getPublishId() + " marked as temporarily failed."); + logger.info(task.getPublishId() + " marked as temporarily failed."); retry.put(task.getPublishId(), task); fdupdate(); } @@ -334,7 +334,7 @@ public class DeliveryQueue implements Runnable, DeliveryTaskHelper { long endtime = System.currentTimeMillis() + deliveryQueueHelper.getFairTimeLimit(); int filestogo = deliveryQueueHelper.getFairFileLimit(); while ((task = getNext()) != null) { - logger.debug("Processing file: " + task.getPublishId()); + logger.info("Processing file: " + task.getPublishId()); task.run(); if (--filestogo <= 0 || System.currentTimeMillis() > endtime) { break; diff --git a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/IsFrom.java b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/IsFrom.java index 49852680..91622b3c 100644 --- a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/IsFrom.java +++ b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/IsFrom.java @@ -75,7 +75,7 @@ public class IsFrom { logger.error("IsFrom: UnknownHostEx: " + e.toString(), e); } ips = hostAddrArray.toArray(new String[0]); - logger.info("IsFrom: DNS ENTRIES FOR FQDN " + fqdn + " : " + Arrays.toString(ips)); + logger.debug("IsFrom: DNS ENTRIES FOR FQDN " + fqdn + " : " + Arrays.toString(ips)); } for (String ipAddr : ips) { if (ipAddr.equals(ip)) { diff --git a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/NodeConfigManager.java b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/NodeConfigManager.java index 9ffc8ae8..90aaf0a1 100644 --- a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/NodeConfigManager.java +++ b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/NodeConfigManager.java @@ -109,7 +109,7 @@ public class NodeConfigManager implements DeliveryQueueHelper { Properties drNodeProperties = new Properties(); try { - eelfLogger.info("NODE0301 Loading local config file node.properties"); + eelfLogger.debug("NODE0301 Loading local config file node.properties"); drNodeProperties.load(new FileInputStream(System .getProperty("org.onap.dmaap.datarouter.node.properties", "/opt/app/datartr/etc/node.properties"))); } catch (Exception e) { @@ -142,7 +142,7 @@ public class NodeConfigManager implements DeliveryQueueHelper { eelfLogger.error(EelfMsgs.MESSAGE_BAD_PROV_URL, e, provurl); System.exit(1); } - eelfLogger.info("NODE0303 Provisioning server is " + provhost); + eelfLogger.debug("NODE0303 Provisioning server is " + provhost); eventlogurl = drNodeProperties.getProperty("LogUploadURL", "https://feeds-drtr.web.att.com/internal/logs"); provcheck = new IsFrom(provhost); gfport = Integer.parseInt(drNodeProperties.getProperty("IntHttpPort", "8080")); @@ -183,7 +183,7 @@ public class NodeConfigManager implements DeliveryQueueHelper { eelfLogger.error("NODE0309 Unable to fetch canonical name from keystore file " + ksfile); System.exit(1); } - eelfLogger.info("NODE0304 My certificate says my name is " + myname); + eelfLogger.debug("NODE0304 My certificate says my name is " + myname); pid = new PublishId(myname); long minrsinterval = Long.parseLong(drNodeProperties.getProperty("MinRedirSaveInterval", "10000")); long minpfinterval = Long.parseLong(drNodeProperties.getProperty("MinProvFetchInterval", "10000")); @@ -193,7 +193,7 @@ public class NodeConfigManager implements DeliveryQueueHelper { fetchconfig(); } }; - eelfLogger.info("NODE0305 Attempting to fetch configuration at " + provurl); + eelfLogger.debug("NODE0305 Attempting to fetch configuration at " + provurl); pfetcher.request(); } @@ -284,7 +284,7 @@ public class NodeConfigManager implements DeliveryQueueHelper { private void fetchconfig() { try { - eelfLogger.info("NodeConfigMan.fetchConfig: provurl:: " + provurl); + eelfLogger.debug("NodeConfigMan.fetchConfig: provurl:: " + provurl); Reader reader = new InputStreamReader((new URL(provurl)).openStream()); config = new NodeConfig(new ProvData(reader), myname, spooldir, port, nak); localconfig(); @@ -316,10 +316,10 @@ public class NodeConfigManager implements DeliveryQueueHelper { */ public synchronized void gofetch(String remoteAddr) { if (provcheck.isReachable(remoteAddr)) { - eelfLogger.info("NODE0307 Received configuration fetch request from provisioning server " + remoteAddr); + eelfLogger.debug("NODE0307 Received configuration fetch request from provisioning server " + remoteAddr); pfetcher.request(); } else { - eelfLogger.info("NODE0308 Received configuration fetch request from unexpected server " + remoteAddr); + eelfLogger.debug("NODE0308 Received configuration fetch request from unexpected server " + remoteAddr); } } @@ -630,15 +630,15 @@ public class NodeConfigManager implements DeliveryQueueHelper { if (provcheck.isFrom(remoteaddr)) { String sdir = config.getSpoolDir(subid); if (sdir != null) { - eelfLogger.info("NODE0310 Received subscription reset request for subscription " + subid + eelfLogger.debug("NODE0310 Received subscription reset request for subscription " + subid + " from provisioning server " + remoteaddr); } else { - eelfLogger.info("NODE0311 Received subscription reset request for unknown subscription " + subid + eelfLogger.debug("NODE0311 Received subscription reset request for unknown subscription " + subid + " from provisioning server " + remoteaddr); } return (sdir); } else { - eelfLogger.info("NODE0312 Received subscription reset request from unexpected server " + remoteaddr); + eelfLogger.debug("NODE0312 Received subscription reset request from unexpected server " + remoteaddr); return (null); } } diff --git a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/NodeMain.java b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/NodeMain.java index abec7393..6086168b 100644 --- a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/NodeMain.java +++ b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/NodeMain.java @@ -71,10 +71,10 @@ public class NodeMain { * system property. By default, it is "/opt/app/datartr/etc/node.properties". */ public static void main(String[] args) throws Exception { - nodeMainLogger.info("NODE0001 Data Router Node Starting"); + nodeMainLogger.debug("NODE0001 Data Router Node Starting"); IsFrom.setDNSCache(); nodeConfigManager = NodeConfigManager.getInstance(); - nodeMainLogger.info("NODE0002 I am " + nodeConfigManager.getMyName()); + nodeMainLogger.debug("NODE0002 I am " + nodeConfigManager.getMyName()); (new WaitForConfig(nodeConfigManager)).waitForConfig(); delivery = new Delivery(nodeConfigManager); new LogManager(nodeConfigManager); @@ -112,11 +112,11 @@ public class NodeMain { sslContextFactory.addExcludeProtocols("SSLv3"); sslContextFactory.setIncludeProtocols(nodeConfigManager.getEnabledprotocols()); - nodeMainLogger.info("NODE00004 Unsupported protocols node server:-" + nodeMainLogger.debug("NODE00004 Unsupported protocols node server:-" + String.join(",", sslContextFactory.getExcludeProtocols())); - nodeMainLogger.info("NODE00004 Supported protocols node server:-" + nodeMainLogger.debug("NODE00004 Supported protocols node server:-" + String.join(",", sslContextFactory.getIncludeProtocols())); - nodeMainLogger.info("NODE00004 Unsupported ciphers node server:-" + nodeMainLogger.debug("NODE00004 Unsupported ciphers node server:-" + String.join(",", sslContextFactory.getExcludeCipherSuites())); HttpConfiguration httpsConfiguration = new HttpConfiguration(httpConfiguration); @@ -153,12 +153,12 @@ public class NodeMain { try { server.start(); - nodeMainLogger.info("NODE00006 Node Server started-" + server.getState()); + nodeMainLogger.debug("NODE00006 Node Server started-" + server.getState()); } catch (Exception e) { - nodeMainLogger.info("NODE00006 Jetty failed to start. Reporting will we unavailable: " + e.getMessage(), e); + nodeMainLogger.error("NODE00006 Jetty failed to start. Reporting will we unavailable: " + e.getMessage(), e); } server.join(); - nodeMainLogger.info("NODE00007 Node Server joined - " + server.getState()); + nodeMainLogger.debug("NODE00007 Node Server joined - " + server.getState()); } private static void enableCadi(ServletContextHandler servletContextHandler) throws ServletException { @@ -172,7 +172,7 @@ public class NodeMain { .error("NODE00005 Exception in NodeMain.Main() loading CADI properties " + e1.getMessage(), e1); } cadiProperties.setProperty("aaf_locate_url", nodeConfigManager.getAafURL()); - nodeMainLogger.info("NODE00005 aaf_url set to - " + cadiProperties.getProperty("aaf_url")); + nodeMainLogger.debug("NODE00005 aaf_url set to - " + cadiProperties.getProperty("aaf_url")); PropAccess access = new PropAccess(cadiProperties); servletContextHandler.addFilter(new FilterHolder(new DRNodeCadiFilter(true, access)), "/*", EnumSet @@ -194,7 +194,7 @@ public class NodeMain { synchronized void waitForConfig() { localNodeConfigManager.registerConfigTask(this); while (!localNodeConfigManager.isConfigured()) { - nodeMainLogger.info("NODE0003 Waiting for Node Configuration"); + nodeMainLogger.debug("NODE0003 Waiting for Node Configuration"); try { wait(); } catch (Exception exception) { @@ -204,7 +204,7 @@ public class NodeMain { } } localNodeConfigManager.deregisterConfigTask(this); - nodeMainLogger.info("NODE0004 Node Configuration Data Received"); + nodeMainLogger.debug("NODE0004 Node Configuration Data Received"); } } diff --git a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/NodeServlet.java b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/NodeServlet.java index 3b82484a..163b59ea 100644 --- a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/NodeServlet.java +++ b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/NodeServlet.java @@ -91,13 +91,13 @@ public class NodeServlet extends HttpServlet { @Override public void init() { config = NodeConfigManager.getInstance(); - eelfLogger.info("NODE0101 Node Servlet Configured"); + eelfLogger.debug("NODE0101 Node Servlet Configured"); } private boolean down(HttpServletResponse resp) { if (config.isShutdown() || !config.isConfigured()) { sendResponseError(resp, HttpServletResponse.SC_SERVICE_UNAVAILABLE, eelfLogger); - eelfLogger.info("NODE0102 Rejecting request: Service is being quiesced"); + eelfLogger.error("NODE0102 Rejecting request: Service is being quiesced"); return true; } return false; @@ -112,7 +112,7 @@ public class NodeServlet extends HttpServlet { NodeUtils.setRequestIdAndInvocationId(req); eelfLogger.info(EelfMsgs.ENTRY); try { - eelfLogger.info(EelfMsgs.MESSAGE_WITH_BEHALF_AND_FEEDID, req.getHeader(ON_BEHALF_OF), + eelfLogger.debug(EelfMsgs.MESSAGE_WITH_BEHALF_AND_FEEDID, req.getHeader(ON_BEHALF_OF), getIdFromPath(req) + ""); if (down(resp)) { return; @@ -136,7 +136,7 @@ public class NodeServlet extends HttpServlet { } } - eelfLogger.info("NODE0103 Rejecting invalid GET of " + path + FROM + ip); + eelfLogger.debug("NODE0103 Rejecting invalid GET of " + path + FROM + ip); sendResponseError(resp, HttpServletResponse.SC_NOT_FOUND, eelfLogger); } finally { eelfLogger.info(EelfMsgs.EXIT); @@ -151,7 +151,7 @@ public class NodeServlet extends HttpServlet { NodeUtils.setIpAndFqdnForEelf("doPut"); NodeUtils.setRequestIdAndInvocationId(req); eelfLogger.info(EelfMsgs.ENTRY); - eelfLogger.info(EelfMsgs.MESSAGE_WITH_BEHALF_AND_FEEDID, req.getHeader(ON_BEHALF_OF), + eelfLogger.debug(EelfMsgs.MESSAGE_WITH_BEHALF_AND_FEEDID, req.getHeader(ON_BEHALF_OF), getIdFromPath(req) + ""); try { common(req, resp, true); @@ -169,7 +169,7 @@ public class NodeServlet extends HttpServlet { NodeUtils.setIpAndFqdnForEelf("doDelete"); NodeUtils.setRequestIdAndInvocationId(req); eelfLogger.info(EelfMsgs.ENTRY); - eelfLogger.info(EelfMsgs.MESSAGE_WITH_BEHALF_AND_FEEDID, req.getHeader(ON_BEHALF_OF), + eelfLogger.debug(EelfMsgs.MESSAGE_WITH_BEHALF_AND_FEEDID, req.getHeader(ON_BEHALF_OF), getIdFromPath(req) + ""); try { common(req, resp, false); @@ -228,7 +228,7 @@ public class NodeServlet extends HttpServlet { if (!("legacy".equalsIgnoreCase(aafInstance))) { isAAFFeed = true; String permission = config.getPermission(aafInstance); - eelfLogger.info("NodeServlet.common() permission string - " + permission); + eelfLogger.debug("NodeServlet.common() permission string - " + permission); //Check in CADI Framework API if user has AAF permission or not if (!req.isUserInRole(permission)) { String message = "AAF disallows access to permission string - " + permission; @@ -303,7 +303,7 @@ public class NodeServlet extends HttpServlet { .cleanString(feedid) + " fileid " + PathUtil.cleanString(fileid) + FROM + PathUtil .cleanString(ip) + " reason Invalid AAF user- " + PathUtil.cleanString(reason)); String message = "Invalid AAF user- " + PathUtil.cleanString(reason); - eelfLogger.info("NODE0308 Rejecting unauthenticated PUT or DELETE of " + PathUtil + eelfLogger.debug("NODE0308 Rejecting unauthenticated PUT or DELETE of " + PathUtil .cleanString(req.getPathInfo()) + FROM + PathUtil.cleanString(req.getRemoteAddr())); resp.sendError(HttpServletResponse.SC_FORBIDDEN, message); return; @@ -326,7 +326,7 @@ public class NodeServlet extends HttpServlet { } String redirto = HTTPS + newnode + port + PUBLISH + feedid + "/" + fileid; eelfLogger - .info("NODE0108 Redirecting publish attempt for feed " + PathUtil.cleanString(feedid) + USER + .debug("NODE0108 Redirecting publish attempt for feed " + PathUtil.cleanString(feedid) + USER + PathUtil.cleanString(user) + " ip " + PathUtil.cleanString(ip) + " to " + PathUtil .cleanString(redirto)); //Fortify scan fixes - log forging resp.sendRedirect(PathUtil.cleanString(redirto)); //Fortify scan fixes-open redirect - 2 issues @@ -517,7 +517,7 @@ public class NodeServlet extends HttpServlet { } boolean result = delivery.markTaskSuccess(config.getSpoolBase() + "/s/" + subIdDir + "/" + subId, pubid); if (result) { - eelfLogger.info("NODE0115 Successfully deleted files (" + pubid + ", " + pubid + FROM_DR_MESSAGE + eelfLogger.debug("NODE0115 Successfully deleted files (" + pubid + ", " + pubid + FROM_DR_MESSAGE + config.getMyName()); resp.setStatus(HttpServletResponse.SC_OK); eelfLogger.info(EelfMsgs.EXIT); diff --git a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/StatusLog.java b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/StatusLog.java index 53e53145..a9a48ade 100644 --- a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/StatusLog.java +++ b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/StatusLog.java @@ -158,6 +158,8 @@ public class StatusLog { instance.log( "PUB|" + pubid + "|" + feedid + "|" + requrl + "|" + method + "|" + ctype + "|" + clen + "|" + srcip + "|" + user + "|" + status); + eelfLogger.info("PUB|" + pubid + "|" + feedid + "|" + requrl + "|" + method + "|" + ctype + "|" + clen + "|" + srcip + + "|" + user + "|" + status); } /** @@ -178,6 +180,8 @@ public class StatusLog { long rcvd, String srcip, String user, String error) { instance.log("PBF|" + pubid + "|" + feedid + "|" + requrl + "|" + method + "|" + ctype + "|" + clen + "|" + rcvd + "|" + srcip + "|" + user + "|" + error); + eelfLogger.info("PBF|" + pubid + "|" + feedid + "|" + requrl + "|" + method + "|" + ctype + "|" + clen + "|" + rcvd + + "|" + srcip + "|" + user + "|" + error); } /** @@ -202,6 +206,8 @@ public class StatusLog { instance.log( "DEL|" + pubid + "|" + feedid + "|" + subid + "|" + requrl + "|" + method + "|" + ctype + "|" + clen + "|" + user + "|" + status + "|" + xpubid); + eelfLogger.info("DEL|" + pubid + "|" + feedid + "|" + subid + "|" + requrl + "|" + method + "|" + ctype + "|" + clen + + "|" + user + "|" + status + "|" + xpubid); } /** @@ -225,6 +231,8 @@ public class StatusLog { instance.log( "EXP|" + pubid + "|" + feedid + "|" + subid + "|" + requrl + "|" + method + "|" + ctype + "|" + clen + "|" + reason + "|" + attempts); + eelfLogger.info("EXP|" + pubid + "|" + feedid + "|" + subid + "|" + requrl + "|" + method + "|" + ctype + "|" + clen + + "|" + reason + "|" + attempts); } /** @@ -242,6 +250,7 @@ public class StatusLog { return; } instance.log("DLX|" + pubid + "|" + feedid + "|" + subid + "|" + clen + "|" + sent); + eelfLogger.info("DLX|" + pubid + "|" + feedid + "|" + subid + "|" + clen + "|" + sent); } private synchronized void checkRoll(long now) throws IOException { diff --git a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/eelf/DebugFilter.java b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/eelf/DebugFilter.java new file mode 100644 index 00000000..58cd1706 --- /dev/null +++ b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/eelf/DebugFilter.java @@ -0,0 +1,37 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2019 Nordix Foundation. + * ================================================================================ + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ +package org.onap.dmaap.datarouter.node.eelf; + +import ch.qos.logback.classic.Level; +import ch.qos.logback.classic.spi.ILoggingEvent; +import ch.qos.logback.core.filter.Filter; +import ch.qos.logback.core.spi.FilterReply; + + +public class DebugFilter extends Filter { + @Override + public FilterReply decide(ILoggingEvent event) { + if (event.getLevel().equals(Level.DEBUG) && !event.getMessage().contains("org.eclipse.jetty")) { + return FilterReply.ACCEPT; + } else { + return FilterReply.DENY; + } + } +} diff --git a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/eelf/ErrorFilter.java b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/eelf/ErrorFilter.java new file mode 100644 index 00000000..84f71cf5 --- /dev/null +++ b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/eelf/ErrorFilter.java @@ -0,0 +1,37 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2019 Nordix Foundation. + * ================================================================================ + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ +package org.onap.dmaap.datarouter.node.eelf; + +import ch.qos.logback.classic.Level; +import ch.qos.logback.classic.spi.ILoggingEvent; +import ch.qos.logback.core.filter.Filter; +import ch.qos.logback.core.spi.FilterReply; + + +public class ErrorFilter extends Filter { + @Override + public FilterReply decide(ILoggingEvent event) { + if ((event.getLevel().equals(Level.ERROR) || event.getLevel().equals(Level.WARN)) && !event.getMessage().contains("org.eclipse.jetty")) { + return FilterReply.ACCEPT; + } else { + return FilterReply.DENY; + } + } +} diff --git a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/eelf/JettyFilter.java b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/eelf/JettyFilter.java index 39b7d8e2..8b5f2a6f 100644 --- a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/eelf/JettyFilter.java +++ b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/eelf/JettyFilter.java @@ -27,7 +27,7 @@ import ch.qos.logback.core.spi.FilterReply; public class JettyFilter extends Filter { @Override public FilterReply decide(ILoggingEvent event) { - if (event.getMessage().contains("org.eclipse.jetty")) { + if (event.getMessage().contains("org.eclipse.jetty") || event.getLoggerName().contains("org.eclipse.jetty")) { return FilterReply.ACCEPT; } else { return FilterReply.DENY; diff --git a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/eelf/MetricsFilter.java b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/eelf/MetricsFilter.java index 235dcb2d..890d56be 100644 --- a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/eelf/MetricsFilter.java +++ b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/eelf/MetricsFilter.java @@ -28,7 +28,7 @@ import ch.qos.logback.core.spi.FilterReply; public class MetricsFilter extends Filter { @Override public FilterReply decide(ILoggingEvent event) { - if (event.getLevel().equals(Level.INFO) && !event.getMessage().contains("jetty")) { + if (event.getLevel().equals(Level.INFO) && !event.getMessage().contains("org.eclipse.jetty") && !event.getLoggerName().contains("org.eclipse.jetty")) { if (!event.getMessage().contains("DEL|") && !event.getMessage().contains("PUB|") && !event.getMessage().contains( "PBF|") && !event.getMessage().contains("EXP|") && !event.getMessage().contains("DLX|")) { return FilterReply.ACCEPT; diff --git a/datarouter-node/src/main/resources/logback.xml b/datarouter-node/src/main/resources/logback.xml index dc19cb6f..3c564f4a 100644 --- a/datarouter-node/src/main/resources/logback.xml +++ b/datarouter-node/src/main/resources/logback.xml @@ -110,10 +110,7 @@ ${logDirectory}/${debugLog}.log - - DEBUG - ACCEPT - DENY + @@ -141,10 +138,7 @@ ${logDirectory}/${errorLog}.log - - WARN - ACCEPT - DENY + @@ -204,21 +198,21 @@ - + - + - - - + + + - - - + + + diff --git a/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/LogbackFilterTest.java b/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/LogbackFilterTest.java new file mode 100644 index 00000000..4a5d07ad --- /dev/null +++ b/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/LogbackFilterTest.java @@ -0,0 +1,308 @@ +/******************************************************************************* + * ============LICENSE_START================================================== + * * org.onap.dmaap + * * =========================================================================== + * * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * * =========================================================================== + * * 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. + * * ============LICENSE_END==================================================== + * * + * * ECOMP is a trademark and service mark of AT&T Intellectual Property. + * * + ******************************************************************************/ + +package org.onap.dmaap.datarouter.node; + +import static java.util.Arrays.asList; +import static org.junit.Assert.assertEquals; +import static org.onap.dmaap.datarouter.node.eelf.EelfMsgs.MESSAGE_WITH_BEHALF; + +import ch.qos.logback.classic.Level; +import ch.qos.logback.classic.spi.LoggingEvent; +import ch.qos.logback.core.spi.FilterReply; +import java.util.List; +import org.junit.Test; +import org.onap.dmaap.datarouter.node.eelf.AuditFilter; +import org.onap.dmaap.datarouter.node.eelf.DebugFilter; +import org.onap.dmaap.datarouter.node.eelf.ErrorFilter; +import org.onap.dmaap.datarouter.node.eelf.JettyFilter; +import org.onap.dmaap.datarouter.node.eelf.MetricsFilter; + +public class LogbackFilterTest { + + @Test + public void Given_Event_with_valid_status_then_audit_Filter_ACCEPT() { + final List validStatus = asList("DEL|", "PUB|", "PBF|", "EXP|", "DLX|"); + final AuditFilter filter = new AuditFilter(); + filter.start(); + + for (final String status : validStatus) { + final LoggingEvent event = new LoggingEvent(); + event.setMessage("Test " + status); + assertEquals(FilterReply.ACCEPT, filter.decide(event)); + } + } + + @Test + public void Given_Event_with_invalid_status_then_audit_Filter_DENY() { + final AuditFilter filter = new AuditFilter(); + filter.start(); + final LoggingEvent event = new LoggingEvent(); + event.setMessage("Invalid status"); + assertEquals(FilterReply.DENY, filter.decide(event)); + } + + @Test + public void Given_Event_with_valid_jetty_string_and_invalid_logger_then_jetty_Filter_ACCEPT() { + final JettyFilter filter = new JettyFilter(); + filter.start(); + final LoggingEvent event = new LoggingEvent(); + event.setMessage("org.eclipse.jetty"); + event.setLoggerName("org.invalid.jetty"); + assertEquals(FilterReply.ACCEPT, filter.decide(event)); + } + + @Test + public void Given_Event_with_valid_jetty_string_and_valid_logger_then_jetty_Filter_ACCEPT() { + final JettyFilter filter = new JettyFilter(); + filter.start(); + final LoggingEvent event = new LoggingEvent(); + event.setMessage("org.eclipse.jetty"); + event.setLoggerName("org.eclipse.jetty"); + assertEquals(FilterReply.ACCEPT, filter.decide(event)); + } + + @Test + public void Given_Event_with_invalid_jetty_string_and_valid_logger_then_jetty_Filter_DENY() { + final JettyFilter filter = new JettyFilter(); + filter.start(); + final LoggingEvent event = new LoggingEvent(); + event.setMessage("org.invalid.jetty"); + event.setLoggerName("org.invalid.jetty"); + assertEquals(FilterReply.DENY, filter.decide(event)); + } + + @Test + public void Given_Event_with_level_info_and_valid_jetty_string_then_metrics_filter_DENY() { + final MetricsFilter filter = new MetricsFilter(); + filter.start(); + final LoggingEvent event = new LoggingEvent(); + event.setLevel(Level.INFO); + event.setMessage("org.eclipse.jetty"); + assertEquals(FilterReply.DENY, filter.decide(event)); + + } + + @Test + public void Given_Event_with_level_not_info_and_valid_jetty_string_then_metrics_filter_DENY() { + final MetricsFilter filter = new MetricsFilter(); + filter.start(); + final LoggingEvent event = new LoggingEvent(); + event.setLevel(Level.DEBUG); + event.setMessage("org.eclipse.jetty"); + assertEquals(FilterReply.DENY, filter.decide(event)); + + } + + @Test + public void Given_Event_with_level_not_info_and_invalid_jetty_string_and_valid_logger_then_metrics_filter_DENY() { + final MetricsFilter filter = new MetricsFilter(); + filter.start(); + final LoggingEvent event = new LoggingEvent(); + event.setLevel(Level.DEBUG); + event.setMessage("org.invalid.jetty"); + event.setLoggerName("org.eclipse.jetty"); + assertEquals(FilterReply.DENY, filter.decide(event)); + } + + @Test + public void Given_Event_with_level_not_info_and_invalid_jetty_string_and_invalid_logger_then_metrics_filter_DENY() { + final MetricsFilter filter = new MetricsFilter(); + filter.start(); + final LoggingEvent event = new LoggingEvent(); + event.setLevel(Level.DEBUG); + event.setMessage("org.invalid.jetty"); + event.setLoggerName("org.eclipse.jetty"); + event.setLoggerName("org.invalid.jetty"); + assertEquals(FilterReply.DENY, filter.decide(event)); + } + + @Test + public void Given_Event_with_level_info_and_invalid_jetty_string_and_status_in_status_list_and_valid_logger_then_metrics_filter_DENY() { + final List validStatus = asList("DEL|", "PUB|", "PBF|", "EXP|", "DLX|"); + final MetricsFilter filter = new MetricsFilter(); + filter.start(); + + for (final String status : validStatus) { + final LoggingEvent event = new LoggingEvent(); + event.setLevel(Level.INFO); + event.setMessage(status); + event.setLoggerName("org.eclipse.jetty"); + assertEquals(FilterReply.DENY, filter.decide(event)); + } + } + + @Test + public void Given_Event_with_level_info_and_invalid_jetty_string_and_status_in_status_list_and_invalid_logger_then_metrics_filter_DENY() { + final List validStatus = asList("DEL|", "PUB|", "PBF|", "EXP|", "DLX|"); + final MetricsFilter filter = new MetricsFilter(); + filter.start(); + + for (final String status : validStatus) { + final LoggingEvent event = new LoggingEvent(); + event.setLevel(Level.INFO); + event.setMessage(status); + event.setLoggerName("org.invalid.jetty"); + assertEquals(FilterReply.DENY, filter.decide(event)); + } + } + + @Test + public void Given_Event_with_level_info_and_invalid_jetty_string_and_status_not_in_status_list_and_valid_logger_then_metrics_filter_DENY() { + final MetricsFilter filter = new MetricsFilter(); + filter.start(); + final LoggingEvent event = new LoggingEvent(); + event.setLevel(Level.INFO); + event.setMessage("Invalid status"); + event.setLoggerName("org.eclipse.jetty"); + assertEquals(FilterReply.DENY, filter.decide(event)); + } + + @Test + public void Given_Event_with_level_info_and_invalid_jetty_string_and_status_not_in_status_list_and_invalid_logger_then_metrics_filter_ACCEPT() { + final MetricsFilter filter = new MetricsFilter(); + filter.start(); + final LoggingEvent event = new LoggingEvent(); + event.setLevel(Level.INFO); + event.setMessage("Invalid status"); + event.setLoggerName("org.invalid.jetty"); + assertEquals(FilterReply.ACCEPT, filter.decide(event)); + } + + @Test + public void Given_Event_with_level_debug_and_valid_jetty_string_then_debug_filter_DENY() { + final DebugFilter filter = new DebugFilter(); + filter.start(); + final LoggingEvent event = new LoggingEvent(); + event.setLevel(Level.DEBUG); + event.setMessage("org.eclipse.jetty"); + assertEquals(FilterReply.DENY, filter.decide(event)); + + } + + @Test + public void Given_Event_with_level_not_debug_and_valid_jetty_string_then_debug_filter_DENY() { + final DebugFilter filter = new DebugFilter(); + filter.start(); + final LoggingEvent event = new LoggingEvent(); + event.setLevel(Level.INFO); + event.setMessage("org.eclipse.jetty"); + assertEquals(FilterReply.DENY, filter.decide(event)); + + } + + @Test + public void Given_Event_with_level_not_debug_and_not_valid_jetty_string_then_debug_filter_DENY() { + final DebugFilter filter = new DebugFilter(); + filter.start(); + final LoggingEvent event = new LoggingEvent(); + event.setLevel(Level.INFO); + event.setMessage("org.invalid.jetty"); + assertEquals(FilterReply.DENY, filter.decide(event)); + + } + + @Test + public void Given_Event_with_level_debug_and_not_valid_jetty_string_then_debug_filter_ACCEPT() { + final DebugFilter filter = new DebugFilter(); + filter.start(); + final LoggingEvent event = new LoggingEvent(); + event.setLevel(Level.DEBUG); + event.setMessage("org.invalid.jetty"); + assertEquals(FilterReply.ACCEPT, filter.decide(event)); + + } + + @Test + public void Given_Event_with_level_error_and_valid_jetty_string_then_error_filter_DENY() { + final ErrorFilter filter = new ErrorFilter(); + filter.start(); + final LoggingEvent event = new LoggingEvent(); + event.setLevel(Level.ERROR); + event.setMessage("org.eclipse.jetty"); + assertEquals(FilterReply.DENY, filter.decide(event)); + + } + + @Test + public void Given_Event_with_level_warn_and_valid_jetty_string_then_error_filter_DENY() { + final ErrorFilter filter = new ErrorFilter(); + filter.start(); + final LoggingEvent event = new LoggingEvent(); + event.setLevel(Level.WARN); + event.setMessage("org.eclipse.jetty"); + assertEquals(FilterReply.DENY, filter.decide(event)); + + } + + @Test + public void Given_Event_with_level_not_warn_or_error_and_valid_jetty_string_then_error_filter_DENY() { + final ErrorFilter filter = new ErrorFilter(); + filter.start(); + final LoggingEvent event = new LoggingEvent(); + event.setLevel(Level.INFO); + event.setMessage("org.eclipse.jetty"); + assertEquals(FilterReply.DENY, filter.decide(event)); + + } + + @Test + public void Given_Event_with_level_not_warn_or_error_and_invalid_jetty_string_then_error_filter_DENY() { + final ErrorFilter filter = new ErrorFilter(); + filter.start(); + final LoggingEvent event = new LoggingEvent(); + event.setLevel(Level.INFO); + event.setMessage("org.invalid.jetty"); + assertEquals(FilterReply.DENY, filter.decide(event)); + + } + + @Test + public void Given_Event_with_level_warn_and_invalid_jetty_string_then_error_filter_ACCEPT() { + final ErrorFilter filter = new ErrorFilter(); + filter.start(); + final LoggingEvent event = new LoggingEvent(); + event.setLevel(Level.WARN); + event.setMessage("org.invalid.jetty"); + assertEquals(FilterReply.ACCEPT, filter.decide(event)); + + } + + @Test + public void Given_Event_with_level_error_and_invalid_jetty_string_then_error_filter_ACCEPT() { + final ErrorFilter filter = new ErrorFilter(); + filter.start(); + final LoggingEvent event = new LoggingEvent(); + event.setLevel(Level.ERROR); + event.setMessage("org.invalid.jetty"); + assertEquals(FilterReply.ACCEPT, filter.decide(event)); + + } + + + @Test + public void Given_call_to_EelfMsgs_return_the_correct_enum(){ + assertEquals(MESSAGE_WITH_BEHALF.toString(), "MESSAGE_WITH_BEHALF"); + } + +} diff --git a/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/eelf/LogbackFilterTest.java b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/eelf/LogbackFilterTest.java new file mode 100644 index 00000000..79e68a68 --- /dev/null +++ b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/eelf/LogbackFilterTest.java @@ -0,0 +1,104 @@ +/******************************************************************************* + * ============LICENSE_START================================================== + * * org.onap.dmaap + * * =========================================================================== + * * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * * =========================================================================== + * * 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. + * * ============LICENSE_END==================================================== + * * + * * ECOMP is a trademark and service mark of AT&T Intellectual Property. + * * + ******************************************************************************/ + +package org.onap.dmaap.datarouter.provisioning.eelf; + +import static org.junit.Assert.assertEquals; +import static org.onap.dmaap.datarouter.provisioning.eelf.EelfMsgs.MESSAGE_WITH_BEHALF; + +import ch.qos.logback.classic.Level; +import ch.qos.logback.classic.spi.LoggingEvent; +import ch.qos.logback.core.spi.FilterReply; +import org.junit.Test; + + + +public class LogbackFilterTest { + + @Test + public void Given_Event_with_invalid_logger_name_and_debug_level_then_debugtracefilter_DENY(){ + final DebugTraceFilter filter = new DebugTraceFilter(); + filter.start(); + final LoggingEvent event = new LoggingEvent(); + event.setLoggerName("InvalidLogger"); + event.setLevel(Level.DEBUG); + assertEquals(FilterReply.DENY, filter.decide(event)); + + } + + @Test + public void Given_Event_with_valid_logger_name_and_info_level_then_debugtracefilter_DENY(){ + final DebugTraceFilter filter = new DebugTraceFilter(); + filter.start(); + final LoggingEvent event = new LoggingEvent(); + event.setLoggerName("InternalLog"); + event.setLevel(Level.INFO); + assertEquals(FilterReply.DENY, filter.decide(event)); + + } + + @Test + public void Given_Event_with_valid_logger_name_and_debug_level_then_debugtracefilter_ACCEPT(){ + final DebugTraceFilter filter = new DebugTraceFilter(); + filter.start(); + final LoggingEvent event = new LoggingEvent(); + event.setLoggerName("InternalLog"); + event.setLevel(Level.DEBUG); + assertEquals(FilterReply.ACCEPT, filter.decide(event)); + + } + + @Test + public void Given_Event_with_valid_logger_name_and_trace_level_then_debugtracefilter_ACCEPT(){ + final DebugTraceFilter filter = new DebugTraceFilter(); + filter.start(); + final LoggingEvent event = new LoggingEvent(); + event.setLoggerName("InternalLog"); + event.setLevel(Level.TRACE); + assertEquals(FilterReply.ACCEPT, filter.decide(event)); + + } + + @Test + public void Given_Event_with_valid_jetty_string_then_jettyfilter_ACCEPT(){ + final JettyFilter filter = new JettyFilter(); + filter.start(); + final LoggingEvent event = new LoggingEvent(); + event.setLoggerName("org.eclipse.jetty"); + assertEquals(FilterReply.ACCEPT, filter.decide(event)); + } + + @Test + public void Given_Event_with_invalid_jetty_string_then_jettyfilter_DENY(){ + final JettyFilter filter = new JettyFilter(); + filter.start(); + final LoggingEvent event = new LoggingEvent(); + event.setLoggerName("org.invalid.jetty"); + assertEquals(FilterReply.DENY, filter.decide(event)); + } + + @Test + public void Given_Call_to_EelfMsgs_return_the_correct_enum(){ + assertEquals(MESSAGE_WITH_BEHALF.toString(), "MESSAGE_WITH_BEHALF"); + } +} -- 2.16.6