AMBARI-18372. Audit logs should not be filtered by Log Feeder (Miklos Gergely via oleewere)
Change-Id: I636b5619e365e9a9f1271a0da4df545d459900cf Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/762abbce Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/762abbce Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/762abbce Branch: refs/heads/branch-dev-patch-upgrade Commit: 762abbce729243856116e7a76332c7d4189fdbe4 Parents: 8a13053 Author: Miklos Gergely <mgerg...@hortonworks.com> Authored: Mon Oct 3 16:13:42 2016 +0200 Committer: oleewere <oleew...@gmail.com> Committed: Sat Nov 5 16:08:55 2016 +0100 ---------------------------------------------------------------------- .../logfeeder/logconfig/FilterLogData.java | 10 ++-- .../ambari/logfeeder/output/OutputManager.java | 4 +- .../logconfig/LogConfigHandlerTest.java | 51 ++++++++++++++++---- .../logfeeder/output/OutputManagerTest.java | 2 + 4 files changed, 53 insertions(+), 14 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/762abbce/ambari-logsearch/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/logconfig/FilterLogData.java ---------------------------------------------------------------------- diff --git a/ambari-logsearch/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/logconfig/FilterLogData.java b/ambari-logsearch/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/logconfig/FilterLogData.java index 801a289..a05a916 100644 --- a/ambari-logsearch/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/logconfig/FilterLogData.java +++ b/ambari-logsearch/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/logconfig/FilterLogData.java @@ -23,6 +23,7 @@ import java.util.List; import java.util.Map; import org.apache.ambari.logfeeder.common.LogFeederConstants; +import org.apache.ambari.logfeeder.input.InputMarker; import org.apache.ambari.logfeeder.util.LogFeederUtil; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.MapUtils; @@ -39,15 +40,18 @@ public enum FilterLogData { private static final boolean DEFAULT_VALUE = true; - public boolean isAllowed(String jsonBlock) { + public boolean isAllowed(String jsonBlock, InputMarker inputMarker) { if (StringUtils.isEmpty(jsonBlock)) { return DEFAULT_VALUE; } Map<String, Object> jsonObj = LogFeederUtil.toJSONObject(jsonBlock); - return isAllowed(jsonObj); + return isAllowed(jsonObj, inputMarker); } - public boolean isAllowed(Map<String, Object> jsonObj) { + public boolean isAllowed(Map<String, Object> jsonObj, InputMarker inputMarker) { + if ("audit".equals(inputMarker.input.getConfigs().get(LogFeederConstants.ROW_TYPE))) + return true; + boolean isAllowed = applyFilter(jsonObj); if (!isAllowed) { LOG.trace("Filter block the content :" + LogFeederUtil.getGson().toJson(jsonObj)); http://git-wip-us.apache.org/repos/asf/ambari/blob/762abbce/ambari-logsearch/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/output/OutputManager.java ---------------------------------------------------------------------- diff --git a/ambari-logsearch/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/output/OutputManager.java b/ambari-logsearch/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/output/OutputManager.java index 2c81c19..86b5c57 100644 --- a/ambari-logsearch/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/output/OutputManager.java +++ b/ambari-logsearch/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/output/OutputManager.java @@ -139,7 +139,7 @@ public class OutputManager { } } - if (FilterLogData.INSTANCE.isAllowed(jsonObj)) { + if (FilterLogData.INSTANCE.isAllowed(jsonObj, inputMarker)) { for (Output output : input.getOutputList()) { try { output.write(jsonObj, inputMarker); @@ -171,7 +171,7 @@ public class OutputManager { } public void write(String jsonBlock, InputMarker inputMarker) { - if (FilterLogData.INSTANCE.isAllowed(jsonBlock)) { + if (FilterLogData.INSTANCE.isAllowed(jsonBlock, inputMarker)) { for (Output output : inputMarker.input.getOutputList()) { try { output.write(jsonBlock, inputMarker); http://git-wip-us.apache.org/repos/asf/ambari/blob/762abbce/ambari-logsearch/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/logconfig/LogConfigHandlerTest.java ---------------------------------------------------------------------- diff --git a/ambari-logsearch/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/logconfig/LogConfigHandlerTest.java b/ambari-logsearch/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/logconfig/LogConfigHandlerTest.java index 02ffd47..266108f 100644 --- a/ambari-logsearch/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/logconfig/LogConfigHandlerTest.java +++ b/ambari-logsearch/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/logconfig/LogConfigHandlerTest.java @@ -26,6 +26,9 @@ import java.util.Map; import static org.easymock.EasyMock.*; import static org.junit.Assert.*; +import org.apache.ambari.logfeeder.common.LogFeederConstants; +import org.apache.ambari.logfeeder.input.Input; +import org.apache.ambari.logfeeder.input.InputMarker; import org.apache.ambari.logfeeder.util.LogFeederUtil; import org.junit.AfterClass; import org.junit.BeforeClass; @@ -35,6 +38,24 @@ public class LogConfigHandlerTest { private static LogConfigFetcher mockFetcher; + private static InputMarker inputMarkerAudit; + private static InputMarker inputMarkerService; + static { + Map<String, Object> auditMap = new HashMap<String, Object>(); + auditMap.put(LogFeederConstants.ROW_TYPE, "audit"); + Input auditInput = strictMock(Input.class); + expect(auditInput.getConfigs()).andReturn(auditMap).anyTimes(); + inputMarkerAudit = new InputMarker(auditInput, null, 0); + + Map<String, Object> serviceMap = new HashMap<String, Object>(); + serviceMap.put(LogFeederConstants.ROW_TYPE, "service"); + Input serviceInput = strictMock(Input.class); + expect(serviceInput.getConfigs()).andReturn(serviceMap).anyTimes(); + inputMarkerService = new InputMarker(serviceInput, null, 0); + + replay(auditInput, serviceInput); + } + private static final Map<String, Object> CONFIG_MAP = new HashMap<>(); static { CONFIG_MAP.put("jsons", @@ -74,40 +95,52 @@ public class LogConfigHandlerTest { } @Test + public void testLogConfigHandler_auditAllowed() throws Exception { + assertTrue(FilterLogData.INSTANCE.isAllowed("{'host':'host1', 'type':'configured_log_file', 'level':'DEBUG'}", + inputMarkerAudit)); + } + + @Test public void testLogConfigHandler_emptyDataAllowed() throws Exception { - assertTrue(FilterLogData.INSTANCE.isAllowed((String)null)); - assertTrue(FilterLogData.INSTANCE.isAllowed("")); - assertTrue(FilterLogData.INSTANCE.isAllowed(Collections.<String, Object> emptyMap())); + assertTrue(FilterLogData.INSTANCE.isAllowed((String)null, inputMarkerService)); + assertTrue(FilterLogData.INSTANCE.isAllowed("", inputMarkerService)); + assertTrue(FilterLogData.INSTANCE.isAllowed(Collections.<String, Object> emptyMap(), inputMarkerService)); } @Test public void testLogConfigHandler_notConfiguredLogAllowed() throws Exception { - assertTrue(FilterLogData.INSTANCE.isAllowed("{'host':'host1', 'type':'not_configured_log_file', 'level':'INFO'}")); + assertTrue(FilterLogData.INSTANCE.isAllowed("{'host':'host1', 'type':'not_configured_log_file', 'level':'INFO'}", + inputMarkerService)); } @Test public void testLogConfigHandler_configuredDataAllow() throws Exception { - assertTrue(FilterLogData.INSTANCE.isAllowed("{'host':'host1', 'type':'configured_log_file', 'level':'INFO'}")); + assertTrue(FilterLogData.INSTANCE.isAllowed("{'host':'host1', 'type':'configured_log_file', 'level':'INFO'}", + inputMarkerService)); } @Test public void testLogConfigHandler_configuredDataDontAllow() throws Exception { - assertFalse(FilterLogData.INSTANCE.isAllowed("{'host':'host1', 'type':'configured_log_file', 'level':'DEBUG'}")); + assertFalse(FilterLogData.INSTANCE.isAllowed("{'host':'host1', 'type':'configured_log_file', 'level':'DEBUG'}", + inputMarkerService)); } @Test public void testLogConfigHandler_overridenConfiguredData() throws Exception { - assertTrue(FilterLogData.INSTANCE.isAllowed("{'host':'host1', 'type':'configured_log_file2', 'level':'DEBUG'}")); + assertTrue(FilterLogData.INSTANCE.isAllowed("{'host':'host1', 'type':'configured_log_file2', 'level':'DEBUG'}", + inputMarkerService)); } @Test public void testLogConfigHandler_overridenConfiguredDataDifferentHost() throws Exception { - assertFalse(FilterLogData.INSTANCE.isAllowed("{'host':'host2', 'type':'configured_log_file2', 'level':'DEBUG'}")); + assertFalse(FilterLogData.INSTANCE.isAllowed("{'host':'host2', 'type':'configured_log_file2', 'level':'DEBUG'}", + inputMarkerService)); } @Test public void testLogConfigHandler_overridenConfiguredDataExpired() throws Exception { - assertFalse(FilterLogData.INSTANCE.isAllowed("{'host':'host1', 'type':'configured_log_file3', 'level':'DEBUG'}")); + assertFalse(FilterLogData.INSTANCE.isAllowed("{'host':'host1', 'type':'configured_log_file3', 'level':'DEBUG'}", + inputMarkerService)); } @AfterClass http://git-wip-us.apache.org/repos/asf/ambari/blob/762abbce/ambari-logsearch/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/output/OutputManagerTest.java ---------------------------------------------------------------------- diff --git a/ambari-logsearch/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/output/OutputManagerTest.java b/ambari-logsearch/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/output/OutputManagerTest.java index e103346..a080fa8 100644 --- a/ambari-logsearch/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/output/OutputManagerTest.java +++ b/ambari-logsearch/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/output/OutputManagerTest.java @@ -102,6 +102,7 @@ public class OutputManagerTest { expect(mockInput.getContextFields()).andReturn(Collections.<String, String> emptyMap()); expect(mockInput.isUseEventMD5()).andReturn(false); expect(mockInput.isGenEventMD5()).andReturn(false); + expect(mockInput.getConfigs()).andReturn(Collections.<String, Object> emptyMap()); expect(mockInput.getOutputList()).andReturn(Arrays.asList(output1, output2, output3)); output1.write(jsonObj, inputMarker); expectLastCall(); @@ -131,6 +132,7 @@ public class OutputManagerTest { Output output2 = strictMock(Output.class); Output output3 = strictMock(Output.class); + expect(mockInput.getConfigs()).andReturn(Collections.<String, Object> emptyMap()); expect(mockInput.getOutputList()).andReturn(Arrays.asList(output1, output2, output3)); output1.write(jsonString, inputMarker); expectLastCall();