From 843ee7458534a98d6b718b0c42aee25a0019fc9c Mon Sep 17 00:00:00 2001 From: Yuan Hu Date: Wed, 4 May 2016 14:34:05 +0800 Subject: [PATCH] NTA-89: Add a keyword filter https://issues.jboss.org/browse/NTA-89 --- .../java/io/narayana/nta/Configuration.java | 2 + .../as8/filters/GetFilterKeywords.java | 57 +++++++++++++++++++ .../logparsing/as8/filters/KeywordFilter.java | 51 +++++++++++++++++ core/src/main/resources/filter.properties | 4 ++ .../narayana/nta/test/HandlerServiceTest.java | 1 + core/src/test/resources/filter.properties | 4 ++ 6 files changed, 119 insertions(+) create mode 100644 core/src/main/java/io/narayana/nta/logparsing/as8/filters/GetFilterKeywords.java create mode 100644 core/src/main/java/io/narayana/nta/logparsing/as8/filters/KeywordFilter.java create mode 100644 core/src/main/resources/filter.properties create mode 100644 core/src/test/resources/filter.properties diff --git a/core/src/main/java/io/narayana/nta/Configuration.java b/core/src/main/java/io/narayana/nta/Configuration.java index 8d75a4e..99ba3b3 100644 --- a/core/src/main/java/io/narayana/nta/Configuration.java +++ b/core/src/main/java/io/narayana/nta/Configuration.java @@ -23,6 +23,7 @@ package io.narayana.nta; import io.narayana.nta.logparsing.as8.filters.PackageFilter; +import io.narayana.nta.logparsing.as8.filters.KeywordFilter; import io.narayana.nta.logparsing.as8.handlers.*; import java.io.File; @@ -80,6 +81,7 @@ public final class Configuration { public static final Class[] LOG_FILTERS = new Class[]{ PackageFilter.class, + KeywordFilter.class, }; /** diff --git a/core/src/main/java/io/narayana/nta/logparsing/as8/filters/GetFilterKeywords.java b/core/src/main/java/io/narayana/nta/logparsing/as8/filters/GetFilterKeywords.java new file mode 100644 index 0000000..73c2f27 --- /dev/null +++ b/core/src/main/java/io/narayana/nta/logparsing/as8/filters/GetFilterKeywords.java @@ -0,0 +1,57 @@ +package io.narayana.nta.logparsing.as8.filters; + +import org.apache.log4j.Logger; + +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; +import java.util.Properties; + +public class GetFilterKeywords { + private List filterKeywords; + private static final Logger logger = Logger.getLogger(GetFilterKeywords.class.getName()); + + private static class GetFilterKeywordsHolder { + private static final GetFilterKeywords INSTANCE = new GetFilterKeywords(); + } + + public static final GetFilterKeywords getInstance() { + return GetFilterKeywordsHolder.INSTANCE; + } + + private GetFilterKeywords() { + InputStream inputStream = null; + try { + Properties prop = new Properties(); + filterKeywords = new ArrayList<>(); + + String propFileName = "filter.properties"; + logger.warn(getClass().getClassLoader().getResource()); + inputStream = getClass().getClassLoader().getResourceAsStream(propFileName); + if (inputStream != null) { + prop.load(inputStream); + } else { + throw new FileNotFoundException("property file '" + propFileName + "' not found in the classpath"); + } + + for (String name : prop.stringPropertyNames()) { + if (name.contains("keywords")) + filterKeywords.add(prop.getProperty(name)); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + inputStream.close(); + } catch (IOException ignored) { + } + } + } + + public List getFilterKeywords() { + return filterKeywords; + } +} + diff --git a/core/src/main/java/io/narayana/nta/logparsing/as8/filters/KeywordFilter.java b/core/src/main/java/io/narayana/nta/logparsing/as8/filters/KeywordFilter.java new file mode 100644 index 0000000..cfab986 --- /dev/null +++ b/core/src/main/java/io/narayana/nta/logparsing/as8/filters/KeywordFilter.java @@ -0,0 +1,51 @@ +/* + * JBoss, Home of Professional Open Source. + * Copyright 2016, Red Hat, Inc., and individual contributors + * as indicated by the @author tags. See the copyright.txt file in the + * distribution for a full listing of individual contributors. + * + * This is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this software; if not, write to the Free + * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA, or see the FSF site: http://www.fsf.org. + */ + +package io.narayana.nta.logparsing.as8.filters; + +import io.narayana.nta.logparsing.common.Filter; + +import java.util.List; + +/** + * @author huyuan + */ +public class KeywordFilter implements Filter { + + + @Override + public boolean matches(String line) throws IndexOutOfBoundsException { + + List keywordList = GetFilterKeywords.getInstance().getFilterKeywords(); + + try { + for (String s : keywordList) { + if (line.contains(s)) { // if black list use !line.contains(s) + return true; + } + } + return false; + } catch (IndexOutOfBoundsException e) { + return false; + } + } +} diff --git a/core/src/main/resources/filter.properties b/core/src/main/resources/filter.properties new file mode 100644 index 0000000..4089d78 --- /dev/null +++ b/core/src/main/resources/filter.properties @@ -0,0 +1,4 @@ +keywords.1=TransactionImple +keywords.2=Periodic Recovery +keywords.3=TransactionSynchronizationRegistryImple + diff --git a/core/src/test/java/io/narayana/nta/test/HandlerServiceTest.java b/core/src/test/java/io/narayana/nta/test/HandlerServiceTest.java index 0c0c583..86ad6a1 100644 --- a/core/src/test/java/io/narayana/nta/test/HandlerServiceTest.java +++ b/core/src/test/java/io/narayana/nta/test/HandlerServiceTest.java @@ -79,6 +79,7 @@ public static WebArchive createDeployment() { .addAsWebInfResource(new FileAsset(new File("src/test/resources/persistence.xml")), "classes/META-INF/persistence.xml") .addAsManifestResource(new FileAsset(new File("src/test/resources/nta-test-ds.xml")), "nta-test-ds.xml") + .addAsManifestResource(new FileAsset(new File("src/test/resources/filter.properties")), "filter.properties") .addAsLibraries(libs) .setManifest(new StringAsset(ManifestMF)); } diff --git a/core/src/test/resources/filter.properties b/core/src/test/resources/filter.properties new file mode 100644 index 0000000..4089d78 --- /dev/null +++ b/core/src/test/resources/filter.properties @@ -0,0 +1,4 @@ +keywords.1=TransactionImple +keywords.2=Periodic Recovery +keywords.3=TransactionSynchronizationRegistryImple +