Add ambari property to switch auditlog

Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/716b45ca
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/716b45ca
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/716b45ca

Branch: refs/heads/audit_logging
Commit: 716b45ca87244e9f30fc8dff5261afd002722fc5
Parents: 0a1e572
Author: Daniel Gergely <[email protected]>
Authored: Thu Mar 24 09:44:19 2016 +0100
Committer: Toader, Sebastian <[email protected]>
Committed: Thu Mar 24 13:06:50 2016 +0100

----------------------------------------------------------------------
 .../actionmanager/ActionDBAccessorImpl.java     |  5 +++-
 .../ambari/server/audit/AsyncAuditLogger.java   | 28 +++++++++++++++-----
 .../apache/ambari/server/audit/AuditLogger.java |  5 ++++
 .../server/audit/AuditLoggerDefaultImpl.java    | 21 +++++++++++++++
 .../audit/request/RequestAuditLoggerImpl.java   |  4 +++
 .../server/configuration/Configuration.java     | 15 +++--------
 .../actionmanager/TestActionDBAccessorImpl.java |  4 +++
 .../server/actionmanager/TestActionManager.java |  4 +++
 .../server/agent/HeartbeatProcessorTest.java    |  4 +++
 .../audit/request/RequestAuditLoggerTest.java   |  1 +
 .../server/orm/InMemoryDefaultTestModule.java   |  2 +-
 11 files changed, 74 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/716b45ca/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionDBAccessorImpl.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionDBAccessorImpl.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionDBAccessorImpl.java
index 9ebe543..1519d4d 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionDBAccessorImpl.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionDBAccessorImpl.java
@@ -814,12 +814,15 @@ public class ActionDBAccessorImpl implements 
ActionDBAccessor {
    * @param requestId
    */
   private void auditLog(HostRoleCommandEntity commandEntity, Long requestId) {
+    if(!auditLogger.isEnabled()) {
+      return;
+    }
+
     if(requestId != null) {
 
       CalculatedStatus cs = calculateStatus(commandEntity, requestId);
 
       if (!temporaryStatusCache.containsKey(requestId) || 
temporaryStatusCache.get(requestId) != cs.getStatus()) {
-
         RequestEntity request = requestDAO.findByPK(requestId);
         String context = request != null ? request.getRequestContext() : null;
         AuditEvent auditEvent = OperationStatusAuditEvent.builder()

http://git-wip-us.apache.org/repos/asf/ambari/blob/716b45ca/ambari-server/src/main/java/org/apache/ambari/server/audit/AsyncAuditLogger.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/audit/AsyncAuditLogger.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/audit/AsyncAuditLogger.java
index ac96391..11d0301 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/audit/AsyncAuditLogger.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/audit/AsyncAuditLogger.java
@@ -25,6 +25,7 @@ import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicInteger;
 
 import org.apache.ambari.server.audit.event.AuditEvent;
+import org.apache.ambari.server.configuration.Configuration;
 
 import com.google.common.eventbus.AsyncEventBus;
 import com.google.common.eventbus.EventBus;
@@ -48,21 +49,36 @@ class AsyncAuditLogger implements AuditLogger {
   private EventBus eventBus;
 
   /**
+   * Indicates if audit log feature is enabled
+   */
+  private final boolean isEnabled;
+
+  /**
    * Constructor.
    *
    * @param auditLogger the audit logger to use
    */
   @Inject
-  public AsyncAuditLogger(@Named(InnerLogger) AuditLogger auditLogger) {
-    eventBus = new AsyncEventBus("AuditLoggerEventBus", new 
ThreadPoolExecutor(0, 1, 5L, TimeUnit.MINUTES,
-      new LinkedBlockingQueue<Runnable>(), new AuditLogThreadFactory(),
-      new ThreadPoolExecutor.CallerRunsPolicy()));
-    eventBus.register(auditLogger);
+  public AsyncAuditLogger(@Named(InnerLogger) AuditLogger auditLogger, 
Configuration configuration) {
+    isEnabled = configuration.isAuditLogEnabled();
+    if(isEnabled) {
+      eventBus = new AsyncEventBus("AuditLoggerEventBus", new 
ThreadPoolExecutor(0, 1, 5L, TimeUnit.MINUTES,
+        new LinkedBlockingQueue<Runnable>(), new AuditLogThreadFactory(),
+        new ThreadPoolExecutor.CallerRunsPolicy()));
+      eventBus.register(auditLogger);
+    }
   }
 
   @Override
   public void log(AuditEvent event) {
-    eventBus.post(event);
+    if(isEnabled) {
+      eventBus.post(event);
+    }
+  }
+
+  @Override
+  public boolean isEnabled() {
+    return isEnabled;
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/ambari/blob/716b45ca/ambari-server/src/main/java/org/apache/ambari/server/audit/AuditLogger.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/audit/AuditLogger.java 
b/ambari-server/src/main/java/org/apache/ambari/server/audit/AuditLogger.java
index 77a97ad..8c68e3e 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/audit/AuditLogger.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/audit/AuditLogger.java
@@ -31,4 +31,9 @@ public interface AuditLogger {
    */
   void log(final AuditEvent event);
 
+  /**
+   * Returns if the feature is enabled
+   */
+  boolean isEnabled();
+
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/716b45ca/ambari-server/src/main/java/org/apache/ambari/server/audit/AuditLoggerDefaultImpl.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/audit/AuditLoggerDefaultImpl.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/audit/AuditLoggerDefaultImpl.java
index 16d568d..70ff5a3 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/audit/AuditLoggerDefaultImpl.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/audit/AuditLoggerDefaultImpl.java
@@ -23,10 +23,12 @@ import java.text.SimpleDateFormat;
 import java.util.Date;
 
 import org.apache.ambari.server.audit.event.AuditEvent;
+import org.apache.ambari.server.configuration.Configuration;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.google.common.eventbus.Subscribe;
+import com.google.inject.Inject;
 import com.google.inject.Singleton;
 
 /**
@@ -38,15 +40,34 @@ public class AuditLoggerDefaultImpl implements AuditLogger {
   private static final Logger LOG = LoggerFactory.getLogger("audit");
 
   /**
+   * Indicates if audit log feature is enabled
+   */
+  private final boolean isEnabled;
+
+  @Inject
+  public AuditLoggerDefaultImpl(Configuration configuration) {
+    isEnabled = configuration.isAuditLogEnabled();
+  }
+
+  /**
    * {@inheritDoc}
    */
   @Override
   @Subscribe
   public void log(AuditEvent event) {
+    if(!isEnabled) {
+      return;
+    }
+
     Date date = new Date(event.getTimestamp());
     //2016-03-11T10:42:36.376Z
     DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSX");
 
     LOG.info("{}, {}", dateFormat.format(date), event.getAuditMessage());
   }
+
+  @Override
+  public boolean isEnabled() {
+    return isEnabled;
+  }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/716b45ca/ambari-server/src/main/java/org/apache/ambari/server/audit/request/RequestAuditLoggerImpl.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/RequestAuditLoggerImpl.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/RequestAuditLoggerImpl.java
index 4124921..56efd18 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/RequestAuditLoggerImpl.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/RequestAuditLoggerImpl.java
@@ -72,6 +72,10 @@ public class RequestAuditLoggerImpl implements 
RequestAuditLogger {
    */
   @Override
   public void log(Request request, Result result) {
+    if(!auditLogger.isEnabled()) {
+      return;
+    }
+
     Resource.Type resourceType = 
request.getResource().getResourceDefinition().getType();
     Request.Type requestType = request.getRequestType();
     ResultStatus resultStatus = result.getStatus();

http://git-wip-us.apache.org/repos/asf/ambari/blob/716b45ca/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java
index c4f731c..5d182d3 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java
@@ -632,14 +632,9 @@ public class Configuration {
           "custom.sqlanywhere.jdbc.name"));
 
   /**
-   * Capacity for buffered audit logger
+   * Main switch for audit log feature
    */
-  private static final String BUFFERED_AUDIT_LOGGER_CAPACITY_KEY = 
"auditlog.bufferedlogger.capacity";
-  /**
-   * Default value for buffered audit logger capacity
-   */
-  private static final int BUFFERED_AUDIT_LOGGER_CAPACITY_DEFAULT = 10000;
-
+  private static final String AUDIT_LOG_ENABLED = "auditlog.enabled";
 
   private static final Logger LOG = LoggerFactory.getLogger(
     Configuration.class);
@@ -2802,9 +2797,7 @@ public class Configuration {
     return 
properties.getProperty(AGENT_STACK_RETRY_ON_REPO_UNAVAILABILITY_KEY, 
AGENT_STACK_RETRY_ON_REPO_UNAVAILABILITY_DEFAULT);
   }
 
-  public int getBufferedAuditLoggerCapacity() {
-    return NumberUtils.toInt(
-      properties.getProperty(BUFFERED_AUDIT_LOGGER_CAPACITY_KEY),
-        BUFFERED_AUDIT_LOGGER_CAPACITY_DEFAULT);
+  public boolean isAuditLogEnabled() {
+    return 
Boolean.parseBoolean(properties.getProperty(AUDIT_LOG_ENABLED,Boolean.TRUE.toString()));
   }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/716b45ca/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionDBAccessorImpl.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionDBAccessorImpl.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionDBAccessorImpl.java
index f88cf8e..50021c2 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionDBAccessorImpl.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionDBAccessorImpl.java
@@ -35,6 +35,7 @@ import org.apache.ambari.server.agent.ActionQueue;
 import org.apache.ambari.server.agent.CommandReport;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
 import org.apache.ambari.server.api.services.BaseRequest;
+import org.apache.ambari.server.audit.AuditLogger;
 import org.apache.ambari.server.configuration.Configuration;
 import org.apache.ambari.server.controller.HostsMap;
 import org.apache.ambari.server.controller.internal.RequestResourceFilter;
@@ -50,6 +51,7 @@ import org.apache.ambari.server.state.Clusters;
 import org.apache.ambari.server.state.StackId;
 import 
org.apache.ambari.server.state.svccomphost.ServiceComponentHostStartEvent;
 import org.apache.ambari.server.utils.StageUtils;
+import org.easymock.EasyMock;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -124,6 +126,8 @@ public class TestActionDBAccessorImpl {
         new HostsMap((String) null), injector.getInstance(UnitOfWork.class),
 
                injector.getInstance(RequestFactory.class), null, null);
+
+    EasyMock.replay(injector.getInstance(AuditLogger.class));
   }
 
   @After

http://git-wip-us.apache.org/repos/asf/ambari/blob/716b45ca/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionManager.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionManager.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionManager.java
index d7d08b1..baee0d8 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionManager.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionManager.java
@@ -37,6 +37,7 @@ import org.apache.ambari.server.Role;
 import org.apache.ambari.server.RoleCommand;
 import org.apache.ambari.server.agent.ActionQueue;
 import org.apache.ambari.server.agent.CommandReport;
+import org.apache.ambari.server.audit.AuditLogger;
 import org.apache.ambari.server.controller.HostsMap;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
 import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
@@ -44,6 +45,7 @@ import org.apache.ambari.server.state.Clusters;
 import org.apache.ambari.server.state.StackId;
 import 
org.apache.ambari.server.state.svccomphost.ServiceComponentHostStartEvent;
 import org.apache.ambari.server.utils.StageUtils;
+import org.easymock.EasyMock;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Ignore;
@@ -79,6 +81,8 @@ public class TestActionManager {
     StackId stackId = new StackId("HDP-0.1");
     clusters.addCluster(clusterName, stackId);
     unitOfWork = injector.getInstance(UnitOfWork.class);
+
+    EasyMock.replay(injector.getInstance(AuditLogger.class));
   }
 
   @After

http://git-wip-us.apache.org/repos/asf/ambari/blob/716b45ca/ambari-server/src/test/java/org/apache/ambari/server/agent/HeartbeatProcessorTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/agent/HeartbeatProcessorTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/agent/HeartbeatProcessorTest.java
index 7f3d763..bdbb9ab 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/agent/HeartbeatProcessorTest.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/agent/HeartbeatProcessorTest.java
@@ -38,6 +38,7 @@ import org.apache.ambari.server.actionmanager.RequestFactory;
 import org.apache.ambari.server.actionmanager.Stage;
 import org.apache.ambari.server.actionmanager.StageFactory;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
+import org.apache.ambari.server.audit.AuditLogger;
 import org.apache.ambari.server.configuration.Configuration;
 import org.apache.ambari.server.controller.HostsMap;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
@@ -62,6 +63,7 @@ import 
org.apache.ambari.server.state.svccomphost.ServiceComponentHostInstallEve
 import 
org.apache.ambari.server.state.svccomphost.ServiceComponentHostUpgradeEvent;
 import org.apache.ambari.server.utils.EventBusSynchronizer;
 import org.apache.ambari.server.utils.StageUtils;
+import org.easymock.EasyMock;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -134,6 +136,8 @@ public class HeartbeatProcessorTest {
     clusters = injector.getInstance(Clusters.class);
     injector.injectMembers(this);
     unitOfWork = injector.getInstance(UnitOfWork.class);
+
+    EasyMock.replay(injector.getInstance(AuditLogger.class));
   }
 
   @After

http://git-wip-us.apache.org/repos/asf/ambari/blob/716b45ca/ambari-server/src/test/java/org/apache/ambari/server/audit/request/RequestAuditLoggerTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/audit/request/RequestAuditLoggerTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/audit/request/RequestAuditLoggerTest.java
index 55c1d24..580fd61 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/audit/request/RequestAuditLoggerTest.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/audit/request/RequestAuditLoggerTest.java
@@ -133,6 +133,7 @@ public class RequestAuditLoggerTest {
   }
 
   private Capture<AuditEvent> createCapture() {
+    EasyMock.expect(mockAuditLogger.isEnabled()).andReturn(true).anyTimes();
     Capture<AuditEvent> capture = EasyMock.newCapture();
     mockAuditLogger.log(EasyMock.capture(capture));
     EasyMock.expectLastCall();

http://git-wip-us.apache.org/repos/asf/ambari/blob/716b45ca/ambari-server/src/test/java/org/apache/ambari/server/orm/InMemoryDefaultTestModule.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/orm/InMemoryDefaultTestModule.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/orm/InMemoryDefaultTestModule.java
index 8ea378c..b1336de 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/orm/InMemoryDefaultTestModule.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/orm/InMemoryDefaultTestModule.java
@@ -80,7 +80,7 @@ public class InMemoryDefaultTestModule extends AbstractModule 
{
 
     try {
       install(new BeanDefinitionsCachingTestControllerModule(properties));
-      
bind(AuditLogger.class).toInstance(EasyMock.createStrictMock(AuditLoggerDefaultImpl.class));
+      
bind(AuditLogger.class).toInstance(EasyMock.createNiceMock(AuditLoggerDefaultImpl.class));
     } catch (Exception e) {
       throw new RuntimeException(e);
     }

Reply via email to