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); }
