From e1aaf4b372cc3ee778ef3790f7f038c00a492f0f Mon Sep 17 00:00:00 2001 From: Yuan Hu Date: Wed, 4 May 2016 14:34:05 +0800 Subject: [PATCH 1/2] 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 ++ .../test/CentralisedAS8IntegrationTest.java | 1 + .../io/narayana/nta/test/GenericDAOTest.java | 1 + .../narayana/nta/test/HandlerServiceTest.java | 1 + .../narayana/nta/test/TransactionDAOTest.java | 1 + core/src/test/resources/filter.properties | 4 ++ 9 files changed, 122 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..3817241 --- /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/CentralisedAS8IntegrationTest.java b/core/src/test/java/io/narayana/nta/test/CentralisedAS8IntegrationTest.java index c05ff06..8837fb5 100644 --- a/core/src/test/java/io/narayana/nta/test/CentralisedAS8IntegrationTest.java +++ b/core/src/test/java/io/narayana/nta/test/CentralisedAS8IntegrationTest.java @@ -76,6 +76,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") //.addAsManifestResource(new FileAsset(new File("src/test/resources/nta-test-mysql-ds.xml")), "nta-test-mysql-ds.xml") .addAsLibraries(libs) .setManifest(new StringAsset(ManifestMF)); diff --git a/core/src/test/java/io/narayana/nta/test/GenericDAOTest.java b/core/src/test/java/io/narayana/nta/test/GenericDAOTest.java index db2ec6b..28bbfd1 100644 --- a/core/src/test/java/io/narayana/nta/test/GenericDAOTest.java +++ b/core/src/test/java/io/narayana/nta/test/GenericDAOTest.java @@ -63,6 +63,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") .setManifest(new StringAsset(ManifestMF)); } 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..a639f1c 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/java/io/narayana/nta/test/TransactionDAOTest.java b/core/src/test/java/io/narayana/nta/test/TransactionDAOTest.java index 6285b22..20fc8cb 100644 --- a/core/src/test/java/io/narayana/nta/test/TransactionDAOTest.java +++ b/core/src/test/java/io/narayana/nta/test/TransactionDAOTest.java @@ -63,6 +63,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") .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 + From 06faac20fb54feac4c5ed781295b7ef7d4f77e6b Mon Sep 17 00:00:00 2001 From: Yuan Hu Date: Fri, 6 May 2016 15:37:50 +0800 Subject: [PATCH 2/2] NTA-89: Add a keyword filter https://issues.jboss.org/browse/NTA-89 --- .../as8/filters/GetFilterKeywords.java | 38 +++++++------------ .../logparsing/as8/filters/KeywordFilter.java | 29 +++++++------- core/src/main/resources/filter.properties | 4 +- .../test/CentralisedAS8IntegrationTest.java | 2 +- .../io/narayana/nta/test/GenericDAOTest.java | 2 +- .../narayana/nta/test/HandlerServiceTest.java | 2 +- .../narayana/nta/test/TransactionDAOTest.java | 2 +- core/src/test/resources/filter.properties | 4 +- 8 files changed, 32 insertions(+), 51 deletions(-) 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 index 3817241..143aaef 100644 --- 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 @@ -2,15 +2,14 @@ import org.apache.log4j.Logger; +import java.io.File; 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 String filterKeywords; private static final Logger logger = Logger.getLogger(GetFilterKeywords.class.getName()); private static class GetFilterKeywordsHolder { @@ -22,36 +21,25 @@ public static final GetFilterKeywords getInstance() { } private GetFilterKeywords() { - InputStream inputStream = null; try { + InputStream in; 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); + in = getClass().getClassLoader().getResourceAsStream(File.separator + propFileName); + if (in != null) { + prop.load(in); + filterKeywords = prop.getProperty("keywords"); + in.close(); } 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) { + logger.error("Oops: the " + propFileName + " file does not exist!", new FileNotFoundException(propFileName + "not found!")); } + } catch (IOException ex) { + logger.error("the filter keyword list init error!", ex); } } - public List getFilterKeywords() { + public String getFilterKeywords() { return filterKeywords; } -} - +} \ No newline at end of file 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 index cfab986..9a8ed84 100644 --- 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 @@ -24,28 +24,25 @@ 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; + String keywordList = GetFilterKeywords.getInstance().getFilterKeywords(); + if (keywordList != null) { + if ("".equals(keywordList)) + return true; + } else { + return true; + } + String[] keywords = keywordList.split(","); + for (String keyword : keywords) { + if (line.contains(keyword)) + return true; } + return false; } -} +} \ No newline at end of file diff --git a/core/src/main/resources/filter.properties b/core/src/main/resources/filter.properties index 4089d78..b6490d6 100644 --- a/core/src/main/resources/filter.properties +++ b/core/src/main/resources/filter.properties @@ -1,4 +1,2 @@ -keywords.1=TransactionImple -keywords.2=Periodic Recovery -keywords.3=TransactionSynchronizationRegistryImple +keywords=TransactionImple,Periodic Recovery,TransactionSynchronizationRegistryImple diff --git a/core/src/test/java/io/narayana/nta/test/CentralisedAS8IntegrationTest.java b/core/src/test/java/io/narayana/nta/test/CentralisedAS8IntegrationTest.java index 8837fb5..2837787 100644 --- a/core/src/test/java/io/narayana/nta/test/CentralisedAS8IntegrationTest.java +++ b/core/src/test/java/io/narayana/nta/test/CentralisedAS8IntegrationTest.java @@ -76,7 +76,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") + .addAsManifestResource("filter.properties") //.addAsManifestResource(new FileAsset(new File("src/test/resources/nta-test-mysql-ds.xml")), "nta-test-mysql-ds.xml") .addAsLibraries(libs) .setManifest(new StringAsset(ManifestMF)); diff --git a/core/src/test/java/io/narayana/nta/test/GenericDAOTest.java b/core/src/test/java/io/narayana/nta/test/GenericDAOTest.java index 28bbfd1..a070fa9 100644 --- a/core/src/test/java/io/narayana/nta/test/GenericDAOTest.java +++ b/core/src/test/java/io/narayana/nta/test/GenericDAOTest.java @@ -63,7 +63,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") + .addAsManifestResource("filter.properties") .setManifest(new StringAsset(ManifestMF)); } 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 a639f1c..9110c4d 100644 --- a/core/src/test/java/io/narayana/nta/test/HandlerServiceTest.java +++ b/core/src/test/java/io/narayana/nta/test/HandlerServiceTest.java @@ -79,7 +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") + .addAsManifestResource("filter.properties") .addAsLibraries(libs) .setManifest(new StringAsset(ManifestMF)); } diff --git a/core/src/test/java/io/narayana/nta/test/TransactionDAOTest.java b/core/src/test/java/io/narayana/nta/test/TransactionDAOTest.java index 20fc8cb..46dc35a 100644 --- a/core/src/test/java/io/narayana/nta/test/TransactionDAOTest.java +++ b/core/src/test/java/io/narayana/nta/test/TransactionDAOTest.java @@ -63,7 +63,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") + .addAsManifestResource("filter.properties") .setManifest(new StringAsset(ManifestMF)); } diff --git a/core/src/test/resources/filter.properties b/core/src/test/resources/filter.properties index 4089d78..b6490d6 100644 --- a/core/src/test/resources/filter.properties +++ b/core/src/test/resources/filter.properties @@ -1,4 +1,2 @@ -keywords.1=TransactionImple -keywords.2=Periodic Recovery -keywords.3=TransactionSynchronizationRegistryImple +keywords=TransactionImple,Periodic Recovery,TransactionSynchronizationRegistryImple