AMBARI-15646. Audit Log Code Cleanup & Safety. (Daniel Gergely via stoader)


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

Branch: refs/heads/trunk
Commit: 6320d589f942b41cdab34c1de241423ccb5b4752
Parents: f0645b6
Author: Daniel Gergely <[email protected]>
Authored: Thu Apr 7 18:48:43 2016 +0200
Committer: Toader, Sebastian <[email protected]>
Committed: Thu Apr 7 20:11:29 2016 +0200

----------------------------------------------------------------------
 .../actionmanager/ActionDBAccessorImpl.java     | 277 +++++++++++++++----
 .../ambari/server/api/services/BaseService.java |   5 +-
 .../server/api/services/LogoutService.java      |   3 +
 .../server/audit/AuditLoggerDefaultImpl.java    |  13 +-
 .../ambari/server/audit/AuditLoggerModule.java  |  95 +++----
 .../audit/event/OperationStatusAuditEvent.java  |  14 +-
 .../audit/event/TaskStatusAuditEvent.java       |  13 +-
 .../MembershipChangeRequestAuditEvent.java      |   4 +-
 .../StartOperationRequestAuditEvent.java        |  17 +-
 .../audit/request/RequestAuditEventCreator.java |  59 ----
 .../audit/request/RequestAuditLoggerImpl.java   |   1 +
 .../eventcreator/AlertGroupEventCreator.java    |  59 +---
 .../eventcreator/AlertTargetEventCreator.java   |  66 ++---
 .../eventcreator/BlueprintEventCreator.java     |   1 -
 .../BlueprintExportEventCreator.java            |   1 -
 .../eventcreator/ComponentEventCreator.java     |  28 +-
 .../ConfigurationChangeEventCreator.java        |  12 +-
 .../eventcreator/CredentialEventCreator.java    |  24 +-
 .../eventcreator/DefaultEventCreator.java       |   1 -
 .../request/eventcreator/GroupEventCreator.java |  18 +-
 .../request/eventcreator/HostEventCreator.java  |  22 +-
 .../eventcreator/MemberEventCreator.java        |  38 +--
 .../eventcreator/PrivilegeEventCreator.java     |  16 +-
 .../RecommendationIgnoreEventCreator.java       |   1 -
 .../eventcreator/RepositoryEventCreator.java    |  37 +--
 .../RepositoryVersionEventCreator.java          |  44 +--
 .../eventcreator/RequestAuditEventCreator.java  |  59 ++++
 .../RequestAuditEventCreatorHelper.java         | 112 ++++++++
 .../eventcreator/RequestEventCreator.java       |   1 -
 .../ServiceConfigDownloadEventCreator.java      |   1 -
 .../eventcreator/ServiceEventCreator.java       |  17 +-
 .../eventcreator/UnauthorizedEventCreator.java  |   1 -
 .../eventcreator/UpgradeEventCreator.java       |  22 +-
 .../eventcreator/UpgradeItemEventCreator.java   |  22 +-
 .../request/eventcreator/UserEventCreator.java  |  15 +-
 .../ValidationIgnoreEventCreator.java           |   1 -
 .../eventcreator/ViewInstanceEventCreator.java  |  37 +--
 .../eventcreator/ViewPrivilegeEventCreator.java |  35 +--
 .../server/cleanup/ClasspathScannerUtils.java   |   4 +-
 .../internal/AlertGroupResourceProvider.java    |  14 +-
 .../internal/AlertTargetResourceProvider.java   |  18 +-
 .../internal/GroupResourceProvider.java         |   6 +-
 .../internal/HostComponentResourceProvider.java |  30 +-
 .../internal/MemberResourceProvider.java        |   4 +-
 .../internal/UpgradeItemResourceProvider.java   |  10 +-
 .../internal/UpgradeResourceProvider.java       |  28 +-
 .../internal/UserResourceProvider.java          |  18 +-
 .../dispatchers/EmailDispatcher.java            |   2 +-
 .../AmbariAuthenticationFilter.java             |  21 +-
 .../AmbariAuthorizationFilter.java              |  35 ++-
 .../authorization/PermissionHelper.java         |   3 +
 .../services/AlertNoticeDispatchService.java    |   2 +-
 .../server/agent/TestHeartbeatHandler.java      |   7 +
 .../audit/ActionDBAAccessorAuditlogTest.java    |  45 +++
 .../audit/OperationStatusAuditEventTest.java    |   3 +-
 .../audit/request/AbstractBaseCreator.java      |   1 +
 .../audit/request/RequestAuditLogModule.java    |   1 +
 .../AmbariManagementControllerTest.java         |   3 +
 .../internal/UpgradeResourceProviderTest.java   |   3 +
 .../server/orm/InMemoryDefaultTestModule.java   |   4 +-
 .../AmbariAuthenticationFilterTest.java         |   3 +
 .../AmbariAuthorizationFilterTest.java          |   6 +-
 62 files changed, 806 insertions(+), 657 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/6320d589/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 79d3470..06311c2 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
@@ -23,13 +23,10 @@ import java.util.Collections;
 import java.util.Comparator;
 import java.util.EnumSet;
 import java.util.HashMap;
-import java.util.HashSet;
 import java.util.Iterator;
-import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
-import java.util.TreeSet;
+import java.util.Objects;
 import java.util.concurrent.TimeUnit;
 
 import org.apache.ambari.annotations.Experimental;
@@ -38,9 +35,9 @@ import org.apache.ambari.annotations.TransactionalLock;
 import org.apache.ambari.annotations.TransactionalLock.LockArea;
 import org.apache.ambari.annotations.TransactionalLock.LockType;
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.Role;
 import org.apache.ambari.server.agent.CommandReport;
 import org.apache.ambari.server.agent.ExecutionCommand;
-import org.apache.ambari.server.api.services.ResultStatus;
 import org.apache.ambari.server.audit.event.AuditEvent;
 import org.apache.ambari.server.audit.AuditLogger;
 import org.apache.ambari.server.audit.event.OperationStatusAuditEvent;
@@ -48,6 +45,7 @@ import 
org.apache.ambari.server.audit.event.TaskStatusAuditEvent;
 import org.apache.ambari.server.configuration.Configuration;
 import org.apache.ambari.server.controller.internal.CalculatedStatus;
 import org.apache.ambari.server.events.HostRemovedEvent;
+import org.apache.ambari.server.events.ServiceComponentUninstalledEvent;
 import org.apache.ambari.server.events.publishers.AmbariEventPublisher;
 import org.apache.ambari.server.orm.dao.ClusterDAO;
 import org.apache.ambari.server.orm.dao.ExecutionCommandDAO;
@@ -65,6 +63,7 @@ import org.apache.ambari.server.orm.entities.RequestEntity;
 import org.apache.ambari.server.orm.entities.RequestScheduleEntity;
 import org.apache.ambari.server.orm.entities.RoleSuccessCriteriaEntity;
 import org.apache.ambari.server.orm.entities.StageEntity;
+import org.apache.ambari.server.security.authorization.AuthorizationHelper;
 import org.apache.ambari.server.state.Clusters;
 import org.apache.ambari.server.state.Host;
 import org.apache.ambari.server.utils.LoopBody;
@@ -132,17 +131,12 @@ public class ActionDBAccessorImpl implements 
ActionDBAccessor {
   AuditLogger auditLogger;
 
   /**
-   * Caches to store current request and task statuses.
-   * It is used for avoiding audit log entry duplication
+   * Cache for auditlog. It stores a {@link RequestDetails} object for every 
requests.
+   * {@link RequestDetails} contains the previous status of the request and a 
map for tasks.
+   * A task has a {@link RequestDetails.Component} key and the value of that 
is the previous status of the task.
+   * {@link RequestDetails.Component} contains the component name and the host 
name
    */
-  private Map<Long, HostRoleStatus> temporaryStatusCache = new HashMap<Long, 
HostRoleStatus>();
-  private Map<Long, HostRoleStatus> temporaryTaskStatusCache = new 
HashMap<Long, HostRoleStatus>();
-
-  /**
-   * Stores the host role command entities that are not completed for a 
request id
-   * It is used to calculate the summary state of the request for audit logging
-   */
-  private Map<Long, Map<Long, HostRoleStatus>> tasksForRequest = new 
HashMap<>();
+  private Cache<Long,RequestDetails> auditlogRequestCache = 
CacheBuilder.newBuilder().expireAfterAccess(60, 
TimeUnit.MINUTES).concurrencyLevel(4).build();
 
   private Cache<Long, HostRoleCommand> hostRoleCommandCache;
   private long cacheLimit; //may be exceeded to store tasks from one request
@@ -333,6 +327,8 @@ public class ActionDBAccessorImpl implements 
ActionDBAccessor {
     //TODO wire request to cluster
     List<StageEntity> stageEntities = new 
ArrayList<StageEntity>(request.getStages().size());
 
+    addRequestToAuditlogCache(request);
+
     for (Stage stage : request.getStages()) {
       StageEntity stageEntity = stage.constructNewPersistenceEntity();
       stageEntities.add(stageEntity);
@@ -517,11 +513,11 @@ public class ActionDBAccessorImpl implements 
ActionDBAccessor {
         long[] requestStageIds = StageUtils.getRequestStage(actionId);
         long requestId = requestStageIds[0];
         long stageId = requestStageIds[1];
+        if(statusChanged) {
+          auditLog(commandEntity, requestId);
+        }
         if (requestDAO.getLastStageId(requestId).equals(stageId)) {
           requestsToCheck.add(requestId);
-          if(statusChanged) {
-            auditLog(commandEntity, requestId); // wrong requestId !!!
-          }
         }
       }
     }
@@ -810,74 +806,119 @@ public class ActionDBAccessorImpl implements 
ActionDBAccessor {
   }
 
   /**
-   * AuditLog operation status change
+   * Updates auditlog cache and returns the status of the latest task for the 
given component on the given host.
+   * @param commandEntity new entity with the new status. It also holds the 
component and the hostname
    * @param requestId
+   * @return
    */
-  private void auditLog(HostRoleCommandEntity commandEntity, Long requestId) {
-    if(!auditLogger.isEnabled()) {
-      return;
-    }
+  private HostRoleStatus updateAuditlogCache(HostRoleCommandEntity 
commandEntity, Long requestId) {
 
-    if(requestId != null) {
+    RequestDetails details = auditlogRequestCache.getIfPresent(requestId);
+    if(details == null) {
+      return null;
+    }
 
-      HostRoleStatus calculatedStatus = calculateStatus(commandEntity, 
requestId);
+    RequestDetails.Component component = new 
RequestDetails.Component(commandEntity.getRole(), commandEntity.getHostName());
 
-      if (!temporaryStatusCache.containsKey(requestId) || 
temporaryStatusCache.get(requestId) != calculatedStatus) {
-        RequestEntity request = requestDAO.findByPK(requestId);
-        String context = request != null ? request.getRequestContext() : null;
-        AuditEvent auditEvent = OperationStatusAuditEvent.builder()
-          .withRequestId(String.valueOf(requestId))
-          .withStatus(String.valueOf(calculatedStatus))
-          .withRequestContext(context)
-          .withTimestamp(System.currentTimeMillis())
-          .build();
-        auditLogger.log(auditEvent);
+    HostRoleStatus lastTaskStatus = null;
+    if(details.getTasks().containsKey(component)) {
+      lastTaskStatus = details.getTasks().get(component);
+    }
+    details.getTasks().put(component, commandEntity.getStatus());
+    return lastTaskStatus;
+  }
 
-        temporaryStatusCache.put(requestId, calculatedStatus);
+  /**
+   * Adds request to auditlog cache
+   * @param request
+   */
+  private void addRequestToAuditlogCache(Request request) {
+    if(!auditLogger.isEnabled()) {
+      return;
+    }
+    if(auditlogRequestCache.getIfPresent(request.getRequestId()) == null) {
+      int numberOfTasks = 0;
+      for (Stage stage : request.getStages()) {
+        numberOfTasks += stage.getOrderedHostRoleCommands().size();
       }
+      RequestDetails requestDetails = new RequestDetails();
+      requestDetails.setNumberOfTasks(numberOfTasks);
+      requestDetails.setUserName(AuthorizationHelper.getAuthenticatedName());
+      auditlogRequestCache.put(request.getRequestId(), requestDetails);
     }
-    logTask(commandEntity, requestId);
   }
 
   /**
-   * Calculates summary status for the given request id for the new command 
entity status
-   * @param commandEntity
+   * AuditLog operation status change
    * @param requestId
-   * @return
    */
-  private HostRoleStatus calculateStatus(HostRoleCommandEntity commandEntity, 
Long requestId) {
-    if(!tasksForRequest.containsKey(requestId)) {
-      tasksForRequest.put(requestId, new HashMap<Long, HostRoleStatus>());
+  private void auditLog(HostRoleCommandEntity commandEntity, Long requestId) {
+    if(!auditLogger.isEnabled()) {
+      return;
     }
 
-    tasksForRequest.get(requestId).put(commandEntity.getTaskId(), 
commandEntity.getStatus());
-
-    HostRoleStatus calculatedStatus = 
CalculatedStatus.calculateSummaryStatusOfStage(CalculatedStatus.calculateStatusCounts(tasksForRequest.get(requestId).values()),
 tasksForRequest.get(requestId).size(), false);
-
-    // if all task status is completed, we can remove it from the container
-    boolean hasInProgress = false;
-    for(HostRoleStatus hrcs : tasksForRequest.get(requestId).values()) {
-      if(!hrcs.isCompletedState()) {
-        hasInProgress = true;
-        break;
+    if(requestId != null) {
+      HostRoleStatus lastTaskStatus = updateAuditlogCache(commandEntity, 
requestId);
+
+      // details must not be null
+      RequestDetails details = auditlogRequestCache.getIfPresent(requestId);
+      if (details != null) {
+        HostRoleStatus calculatedStatus = calculateStatus(requestId, 
details.getNumberOfTasks());
+
+        if (details.getLastStatus() != calculatedStatus) {
+          RequestEntity request = requestDAO.findByPK(requestId);
+          String context = request != null ? request.getRequestContext() : 
null;
+          AuditEvent auditEvent = OperationStatusAuditEvent.builder()
+            .withRequestId(String.valueOf(requestId))
+            .withStatus(String.valueOf(calculatedStatus))
+            .withRequestContext(context)
+            .withUserName(details.getUserName())
+            .withTimestamp(System.currentTimeMillis())
+            .build();
+          auditLogger.log(auditEvent);
+
+          details.setLastStatus(calculatedStatus);
+        }
       }
+      logTask(commandEntity, requestId, lastTaskStatus);
     }
-    if(!hasInProgress) {
-      tasksForRequest.remove(requestId);
+  }
+
+  /**
+   * Calculates summary status for the given request
+   * @param requestId
+   * @return
+   */
+  private HostRoleStatus calculateStatus(Long requestId, int numberOfTasks) {
+    RequestDetails details = auditlogRequestCache.getIfPresent(requestId);
+    if(details == null) {
+      return HostRoleStatus.QUEUED;
     }
-    return calculatedStatus;
+    Collection<HostRoleStatus> taskStatuses = details.getTaskStatuses();
+    return 
CalculatedStatus.calculateSummaryStatusOfStage(CalculatedStatus.calculateStatusCounts(taskStatuses),
 numberOfTasks, false);
   }
 
   /**
    * Logs task status change
    * @param commandEntity
    * @param requestId
+   * @param lastTaskStatus
    */
-  private void logTask(HostRoleCommandEntity commandEntity, Long requestId) {
-    if(!temporaryTaskStatusCache.containsKey(commandEntity.getTaskId()) || 
temporaryTaskStatusCache.get(commandEntity.getTaskId()) != 
commandEntity.getStatus() ) {
+  private void logTask(HostRoleCommandEntity commandEntity, Long requestId, 
HostRoleStatus lastTaskStatus) {
+
+    RequestDetails.Component component = new 
RequestDetails.Component(commandEntity.getRole(), commandEntity.getHostName());
+    RequestDetails details = auditlogRequestCache.getIfPresent(requestId);
+    if(details == null) {
+      return;
+    }
+
+    HostRoleStatus cachedStatus = details.getTasks().get(component);
+
+    if(lastTaskStatus == null || cachedStatus != lastTaskStatus ) {
       AuditEvent taskEvent = TaskStatusAuditEvent.builder()
         .withTaskId(String.valueOf(commandEntity.getTaskId()))
         .withHostName(commandEntity.getHostName())
+        .withUserName(details.getUserName())
         .withOperation(commandEntity.getRoleCommand().toString() + " " + 
commandEntity.getRole().toString())
         .withDetails(commandEntity.getCommandDetail())
         .withStatus(commandEntity.getStatus().toString())
@@ -886,7 +927,125 @@ public class ActionDBAccessorImpl implements 
ActionDBAccessor {
         .build();
 
       auditLogger.log(taskEvent);
-      temporaryTaskStatusCache.put(commandEntity.getTaskId(), 
commandEntity.getStatus());
+    }
+  }
+
+  /**
+   * The purpose of this nested class is to store details about the request: 
lastStatus and the list of tasks
+   */
+  private static class RequestDetails {
+    /**
+     * Last summary status of the request
+     */
+    HostRoleStatus lastStatus = null;
+
+    /**
+     * The number of tasks that can be found in the request
+     */
+    int numberOfTasks = 0;
+
+    /**
+     * The user who issued the request
+     */
+    String userName;
+
+    /**
+     * Component and the status of the belonging task
+     * Size of this container might be less than {@link 
RequestDetails#numberOfTasks}
+     */
+    Map<Component, HostRoleStatus> tasks = new HashMap<>();
+
+    public HostRoleStatus getLastStatus() {
+      return lastStatus;
+    }
+
+    public void setLastStatus(HostRoleStatus lastStatus) {
+      this.lastStatus = lastStatus;
+    }
+
+    public int getNumberOfTasks() {
+      return numberOfTasks;
+    }
+
+    public void setNumberOfTasks(int numberOfTasks) {
+      this.numberOfTasks = numberOfTasks;
+    }
+
+    public String getUserName() {
+      return userName;
+    }
+
+    public void setUserName(String userName) {
+      this.userName = userName;
+    }
+
+    public Map<Component, HostRoleStatus> getTasks() {
+      return tasks;
+    }
+
+    /**
+     * Returns the list of statuses from {@link RequestDetails#tasks}
+     * @return
+     */
+    public Collection<HostRoleStatus> getTaskStatuses() {
+      return getTasks().values();
+    }
+
+    /**
+     * This nested class is the key for the {@link RequestDetails#tasks} map
+     */
+    static class Component {
+      /**
+       * Component name
+       */
+      private final Role role;
+      /**
+       * Host name
+       */
+      private final String hostName;
+      Component(Role role, String hostName) {
+        this.role = role;
+        this.hostName = hostName;
+      }
+
+      public Role getRole() {
+        return role;
+      }
+
+      public String getHostName() {
+        return hostName;
+      }
+
+      /**
+       * Hash code generation
+       * @return
+       */
+      @Override
+      public final int hashCode() {
+        int hash = 7;
+        String roleStr = role == null ? "null" : role.toString();
+        String hostNameStr = hostName == null ? "null" : hostName;
+        String str = roleStr.concat(hostNameStr);
+        for (int i = 0; i < str.length(); i++) {
+          hash = hash*31 + str.charAt(i);
+        }
+        return hash;
+      }
+
+      /**
+       * Two components are equal if their component name and host name are 
the same
+       * @param other
+       * @return
+       */
+      @Override
+      public final boolean equals(final Object other) {
+        if(other instanceof Component) {
+          Component comp = (Component) other;
+          return Objects.equals(comp.role, role) && 
Objects.equals(comp.hostName, hostName);
+        }
+
+        return false;
+      }
     }
   }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/6320d589/ambari-server/src/main/java/org/apache/ambari/server/api/services/BaseService.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/api/services/BaseService.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/api/services/BaseService.java
index 2e5b920..b7156bf 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/api/services/BaseService.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/api/services/BaseService.java
@@ -117,7 +117,10 @@ public abstract class BaseService {
             headers, requestBody, uriInfo, requestType, resource);
 
         result  = request.process();
-        requestAuditLogger.log(request, result);
+        // if it is not OK, then it is logged below
+        if(ResultStatus.STATUS.OK.equals(result.getStatus().getStatus())) {
+          requestAuditLogger.log(request, result);
+        }
       }
 
       if(requestBodySet.isEmpty() || 
!ResultStatus.STATUS.OK.equals(result.getStatus().getStatus())) {

http://git-wip-us.apache.org/repos/asf/ambari/blob/6320d589/ambari-server/src/main/java/org/apache/ambari/server/api/services/LogoutService.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/api/services/LogoutService.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/api/services/LogoutService.java
index 3b449ca..02403f9 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/api/services/LogoutService.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/api/services/LogoutService.java
@@ -57,6 +57,9 @@ public class LogoutService {
    * @param servletRequest
    */
   private void auditLog(HttpServletRequest servletRequest) {
+    if(!auditLogger.isEnabled()) {
+      return;
+    }
     LogoutAuditEvent logoutEvent = LogoutAuditEvent.builder()
       .withTimestamp(System.currentTimeMillis())
       .withRemoteIp(RequestUtils.getRemoteAddress(servletRequest))

http://git-wip-us.apache.org/repos/asf/ambari/blob/6320d589/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 1cfb740..ea6524f 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
@@ -44,7 +44,13 @@ public class AuditLoggerDefaultImpl implements AuditLogger {
    */
   private final boolean isEnabled;
 
-  private ThreadLocal<DateFormat> dateFormatThreadLocal = new ThreadLocal<>();
+  private ThreadLocal<DateFormat> dateFormatThreadLocal = new 
ThreadLocal<DateFormat>(){
+    @Override
+    protected DateFormat initialValue() {
+      //2016-03-11T10:42:36.376Z
+      return new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSX");
+    }
+  };
 
   @Inject
   public AuditLoggerDefaultImpl(Configuration configuration) {
@@ -61,11 +67,6 @@ public class AuditLoggerDefaultImpl implements AuditLogger {
       return;
     }
 
-    if(dateFormatThreadLocal.get() == null) {
-      //2016-03-11T10:42:36.376Z
-      dateFormatThreadLocal.set(new 
SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSX"));
-    }
-
     Date date = new Date(event.getTimestamp());
     LOG.info("{}, {}", dateFormatThreadLocal.get().format(date), 
event.getAuditMessage());
   }

http://git-wip-us.apache.org/repos/asf/ambari/blob/6320d589/ambari-server/src/main/java/org/apache/ambari/server/audit/AuditLoggerModule.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/audit/AuditLoggerModule.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/audit/AuditLoggerModule.java
index b20714b..1ab53a9 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/audit/AuditLoggerModule.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/audit/AuditLoggerModule.java
@@ -18,41 +18,52 @@
 
 package org.apache.ambari.server.audit;
 
-import org.apache.ambari.server.audit.request.RequestAuditEventCreator;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
+
+import 
org.apache.ambari.server.audit.request.eventcreator.RequestAuditEventCreator;
 import org.apache.ambari.server.audit.request.RequestAuditLogger;
 import org.apache.ambari.server.audit.request.RequestAuditLoggerImpl;
-import 
org.apache.ambari.server.audit.request.eventcreator.AlertGroupEventCreator;
-import 
org.apache.ambari.server.audit.request.eventcreator.AlertTargetEventCreator;
-import 
org.apache.ambari.server.audit.request.eventcreator.BlueprintEventCreator;
-import 
org.apache.ambari.server.audit.request.eventcreator.BlueprintExportEventCreator;
-import 
org.apache.ambari.server.audit.request.eventcreator.ComponentEventCreator;
-import 
org.apache.ambari.server.audit.request.eventcreator.ConfigurationChangeEventCreator;
-import 
org.apache.ambari.server.audit.request.eventcreator.CredentialEventCreator;
-import org.apache.ambari.server.audit.request.eventcreator.DefaultEventCreator;
-import org.apache.ambari.server.audit.request.eventcreator.GroupEventCreator;
-import org.apache.ambari.server.audit.request.eventcreator.HostEventCreator;
-import org.apache.ambari.server.audit.request.eventcreator.MemberEventCreator;
-import 
org.apache.ambari.server.audit.request.eventcreator.PrivilegeEventCreator;
-import 
org.apache.ambari.server.audit.request.eventcreator.RecommendationIgnoreEventCreator;
-import 
org.apache.ambari.server.audit.request.eventcreator.RepositoryEventCreator;
-import 
org.apache.ambari.server.audit.request.eventcreator.RepositoryVersionEventCreator;
-import org.apache.ambari.server.audit.request.eventcreator.RequestEventCreator;
-import 
org.apache.ambari.server.audit.request.eventcreator.ServiceConfigDownloadEventCreator;
-import org.apache.ambari.server.audit.request.eventcreator.ServiceEventCreator;
-import 
org.apache.ambari.server.audit.request.eventcreator.UnauthorizedEventCreator;
-import org.apache.ambari.server.audit.request.eventcreator.UpgradeEventCreator;
-import 
org.apache.ambari.server.audit.request.eventcreator.UpgradeItemEventCreator;
-import org.apache.ambari.server.audit.request.eventcreator.UserEventCreator;
-import 
org.apache.ambari.server.audit.request.eventcreator.ValidationIgnoreEventCreator;
-import 
org.apache.ambari.server.audit.request.eventcreator.ViewInstanceEventCreator;
-import 
org.apache.ambari.server.audit.request.eventcreator.ViewPrivilegeEventCreator;
+import org.apache.ambari.server.cleanup.ClasspathScannerUtils;
 
 import com.google.inject.AbstractModule;
+import com.google.inject.Scopes;
 import com.google.inject.multibindings.Multibinder;
 import com.google.inject.name.Names;
 
 public class AuditLoggerModule extends AbstractModule {
 
+  /**
+   * Selectors identifying objects to be bound.
+   *
+   * @return a list with interface and annotation types
+   */
+  protected List<Class> getSelectors() {
+    List<Class> selectorList = new ArrayList<>();
+    selectorList.add(RequestAuditEventCreator.class);
+    return selectorList;
+  }
+
+  /**
+   * Gets the list of types to be excluded from bindings.
+   *
+   * @return a list with types to be left out from dynamic bindings
+   */
+  protected List<Class> getExclusions() {
+    return Collections.emptyList();
+  }
+
+  /**
+   * Returns the package to be scanned for bindings of this module.
+   *
+   * @return the name of the package to be scanned
+   */
+  protected String getPackageToScan() {
+    return RequestAuditEventCreator.class.getPackage().getName();
+  }
+
   @Override
   protected void configure() {
     bind(AuditLogger.class).to(AsyncAuditLogger.class);
@@ -61,34 +72,12 @@ public class AuditLoggerModule extends AbstractModule {
     
bind(AuditLogger.class).annotatedWith(Names.named(AsyncAuditLogger.InnerLogger)).to(AuditLoggerDefaultImpl.class);
 
     // binding for audit event creators
-    Multibinder<RequestAuditEventCreator> auditLogEventCreatorBinder = 
Multibinder.newSetBinder(binder(), RequestAuditEventCreator.class);
-    auditLogEventCreatorBinder.addBinding().to(DefaultEventCreator.class);
-    auditLogEventCreatorBinder.addBinding().to(ComponentEventCreator.class);
-    auditLogEventCreatorBinder.addBinding().to(ServiceEventCreator.class);
-    auditLogEventCreatorBinder.addBinding().to(UnauthorizedEventCreator.class);
-    
auditLogEventCreatorBinder.addBinding().to(ConfigurationChangeEventCreator.class);
-    auditLogEventCreatorBinder.addBinding().to(UserEventCreator.class);
-    auditLogEventCreatorBinder.addBinding().to(GroupEventCreator.class);
-    auditLogEventCreatorBinder.addBinding().to(MemberEventCreator.class);
-    auditLogEventCreatorBinder.addBinding().to(PrivilegeEventCreator.class);
-    
auditLogEventCreatorBinder.addBinding().to(BlueprintExportEventCreator.class);
-    
auditLogEventCreatorBinder.addBinding().to(ServiceConfigDownloadEventCreator.class);
-    auditLogEventCreatorBinder.addBinding().to(BlueprintEventCreator.class);
-    auditLogEventCreatorBinder.addBinding().to(ViewInstanceEventCreator.class);
-    
auditLogEventCreatorBinder.addBinding().to(ViewPrivilegeEventCreator.class);
-    auditLogEventCreatorBinder.addBinding().to(RepositoryEventCreator.class);
-    
auditLogEventCreatorBinder.addBinding().to(RepositoryVersionEventCreator.class);
-    auditLogEventCreatorBinder.addBinding().to(AlertGroupEventCreator.class);
-    auditLogEventCreatorBinder.addBinding().to(AlertTargetEventCreator.class);
-    auditLogEventCreatorBinder.addBinding().to(HostEventCreator.class);
-    auditLogEventCreatorBinder.addBinding().to(UpgradeEventCreator.class);
-    auditLogEventCreatorBinder.addBinding().to(UpgradeItemEventCreator.class);
-    
auditLogEventCreatorBinder.addBinding().to(RecommendationIgnoreEventCreator.class);
-    
auditLogEventCreatorBinder.addBinding().to(ValidationIgnoreEventCreator.class);
-    auditLogEventCreatorBinder.addBinding().to(CredentialEventCreator.class);
-    auditLogEventCreatorBinder.addBinding().to(RequestEventCreator.class);
+    Multibinder<RequestAuditEventCreator> multiBinder = 
Multibinder.newSetBinder(binder(), RequestAuditEventCreator.class);
+    Set<Class> bindingSet = 
ClasspathScannerUtils.findOnClassPath(getPackageToScan(), getExclusions(), 
getSelectors());
+    for (Class clazz : bindingSet) {
+      multiBinder.addBinding().to(clazz).in(Scopes.SINGLETON);
+    }
 
     bind(RequestAuditLogger.class).to(RequestAuditLoggerImpl.class);
-
   }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/6320d589/ambari-server/src/main/java/org/apache/ambari/server/audit/event/OperationStatusAuditEvent.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/audit/event/OperationStatusAuditEvent.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/audit/event/OperationStatusAuditEvent.java
index 319d772..fd0068e 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/audit/event/OperationStatusAuditEvent.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/audit/event/OperationStatusAuditEvent.java
@@ -44,6 +44,11 @@ public class OperationStatusAuditEvent extends 
AbstractAuditEvent {
      */
     private String operation;
 
+    /**
+     * Name of the logged in user who sent the request
+     */
+    private String userName;
+
     private OperationStatusAuditEventBuilder() {
     }
 
@@ -60,7 +65,9 @@ public class OperationStatusAuditEvent extends 
AbstractAuditEvent {
     @Override
     protected void buildAuditMessage(StringBuilder builder) {
       builder
-        .append("Operation(")
+        .append("User(")
+        .append(this.userName)
+        .append("), Operation(")
         .append(this.operation)
         .append("), Status(")
         .append(this.status)
@@ -84,6 +91,11 @@ public class OperationStatusAuditEvent extends 
AbstractAuditEvent {
       this.operation = operation;
       return this;
     }
+
+    public OperationStatusAuditEventBuilder withUserName(String userName) {
+      this.userName = userName;
+      return this;
+    }
   }
 
   private OperationStatusAuditEvent() {

http://git-wip-us.apache.org/repos/asf/ambari/blob/6320d589/ambari-server/src/main/java/org/apache/ambari/server/audit/event/TaskStatusAuditEvent.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/audit/event/TaskStatusAuditEvent.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/audit/event/TaskStatusAuditEvent.java
index eaea058..1682e74 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/audit/event/TaskStatusAuditEvent.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/audit/event/TaskStatusAuditEvent.java
@@ -59,6 +59,11 @@ public class TaskStatusAuditEvent extends AbstractAuditEvent 
{
      */
     private String details;
 
+    /**
+     * User name
+     */
+    private String userName;
+
     private TaskStatusAuditEventBuilder() {
     }
 
@@ -75,7 +80,9 @@ public class TaskStatusAuditEvent extends AbstractAuditEvent {
     @Override
     protected void buildAuditMessage(StringBuilder builder) {
       builder
-        .append("Operation(")
+        .append("User(")
+        .append(this.userName)
+        .append("), Operation(")
         .append(this.operation);
 
       if (details != null) {
@@ -124,6 +131,10 @@ public class TaskStatusAuditEvent extends 
AbstractAuditEvent {
       this.details = details;
       return this;
     }
+    public TaskStatusAuditEventBuilder withUserName(String userName) {
+      this.userName = userName;
+      return this;
+    }
   }
 
   private TaskStatusAuditEvent() {

http://git-wip-us.apache.org/repos/asf/ambari/blob/6320d589/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/MembershipChangeRequestAuditEvent.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/MembershipChangeRequestAuditEvent.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/MembershipChangeRequestAuditEvent.java
index 040934e..8bfe9cd 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/MembershipChangeRequestAuditEvent.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/MembershipChangeRequestAuditEvent.java
@@ -67,10 +67,10 @@ public class MembershipChangeRequestAuditEvent extends 
RequestAuditEvent {
 
       if (userNameList.isEmpty()) {
         builder.append("<empty>");
+      } else {
+        builder.append(StringUtils.join(userNameList, ", "));
       }
 
-      StringUtils.join(userNameList, ", ");
-
       builder.append(")");
     }
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/6320d589/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/StartOperationRequestAuditEvent.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/StartOperationRequestAuditEvent.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/StartOperationRequestAuditEvent.java
index 66e37b8..eb92480 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/StartOperationRequestAuditEvent.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/StartOperationRequestAuditEvent.java
@@ -47,6 +47,11 @@ public class StartOperationRequestAuditEvent extends 
AbstractUserAuditEvent {
      */
     private String operation;
 
+    /**
+     * Target host of the request
+     */
+    private String hostname;
+
     private StartOperationAuditEventBuilder() {
     }
 
@@ -62,8 +67,11 @@ public class StartOperationRequestAuditEvent extends 
AbstractUserAuditEvent {
 
       builder
         .append(", Operation(")
-        .append(operation)
-        .append("), RequestId(")
+        .append(operation);
+      if(hostname != null) {
+        builder.append("), Host name(").append(hostname);
+      }
+      builder.append("), RequestId(")
         .append(requestId)
         .append("), Status(")
         .append(reasonOfFailure == null ? "Successfully queued" : "Failed to 
queue");
@@ -103,6 +111,11 @@ public class StartOperationRequestAuditEvent extends 
AbstractUserAuditEvent {
       this.operation = operation;
       return this;
     }
+
+    public StartOperationAuditEventBuilder withHostname(String hostname) {
+      this.hostname = hostname;
+      return this;
+    }
   }
 
   private StartOperationRequestAuditEvent() {

http://git-wip-us.apache.org/repos/asf/ambari/blob/6320d589/ambari-server/src/main/java/org/apache/ambari/server/audit/request/RequestAuditEventCreator.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/RequestAuditEventCreator.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/RequestAuditEventCreator.java
deleted file mode 100644
index ccb39de..0000000
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/RequestAuditEventCreator.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ambari.server.audit.request;
-
-import java.util.Set;
-
-import org.apache.ambari.server.api.services.Request;
-import org.apache.ambari.server.api.services.Result;
-import org.apache.ambari.server.api.services.ResultStatus;
-import org.apache.ambari.server.audit.event.AuditEvent;
-import org.apache.ambari.server.controller.spi.Resource;
-
-/**
- * This interface must be implemented by the plugins for the request audit 
logger
- * in order to make custom {@link AuditEvent}s based on {@link 
org.apache.ambari.server.api.services.Request.Type}s
- * and {@link org.apache.ambari.server.controller.spi.Resource.Type}
- */
-public interface RequestAuditEventCreator {
-
-  /**
-   * @return the set of {@link 
org.apache.ambari.server.api.services.Request.Type}s that are handled by this 
creator
-   */
-  Set<Request.Type> getRequestTypes();
-
-  /**
-   * @return the {@link 
org.apache.ambari.server.controller.spi.Resource.Type}s that is handled by this 
creator
-   */
-  Set<Resource.Type> getResourceTypes();
-
-  /**
-   * @return the {@link ResultStatus}es that is handled by this creator
-   */
-  Set<ResultStatus.STATUS> getResultStatuses();
-
-  /**
-   * Creates and {@link AuditEvent}
-   * @param request HTTP request object
-   * @param result HTTP result object
-   * @return an {@link AuditEvent}
-   */
-  AuditEvent createAuditEvent(Request request, Result result);
-
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/6320d589/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 56efd18..2cdedd9 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
@@ -26,6 +26,7 @@ import org.apache.ambari.server.api.services.Result;
 import org.apache.ambari.server.api.services.ResultStatus;
 import org.apache.ambari.server.audit.AuditLogger;
 import org.apache.ambari.server.audit.event.AuditEvent;
+import 
org.apache.ambari.server.audit.request.eventcreator.RequestAuditEventCreator;
 import org.apache.ambari.server.controller.spi.Resource;
 
 import com.google.inject.Inject;

http://git-wip-us.apache.org/repos/asf/ambari/blob/6320d589/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/AlertGroupEventCreator.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/AlertGroupEventCreator.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/AlertGroupEventCreator.java
index 366dfff..30b7357 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/AlertGroupEventCreator.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/AlertGroupEventCreator.java
@@ -18,8 +18,6 @@
 
 package org.apache.ambari.server.audit.request.eventcreator;
 
-import java.util.Collections;
-import java.util.List;
 import java.util.Set;
 
 import org.apache.ambari.server.api.services.Request;
@@ -29,9 +27,8 @@ import org.apache.ambari.server.audit.event.AuditEvent;
 import 
org.apache.ambari.server.audit.event.request.AddAlertGroupRequestAuditEvent;
 import 
org.apache.ambari.server.audit.event.request.ChangeAlertGroupRequestAuditEvent;
 import 
org.apache.ambari.server.audit.event.request.DeleteAlertGroupRequestAuditEvent;
-import org.apache.ambari.server.audit.request.RequestAuditEventCreator;
+import org.apache.ambari.server.controller.internal.AlertGroupResourceProvider;
 import org.apache.ambari.server.controller.spi.Resource;
-import org.apache.ambari.server.controller.utilities.PropertyHelper;
 
 import com.google.common.collect.ImmutableSet;
 
@@ -90,9 +87,9 @@ public class AlertGroupEventCreator implements 
RequestAuditEventCreator {
           .withResultStatus(result.getStatus())
           .withUrl(request.getURI())
           .withRemoteIp(request.getRemoteAddress())
-          .withName(getName(request))
-          .withDefinitionIds(getDefinitionIds(request))
-          .withNotificationIds(getNotificationIds(request))
+          .withName(RequestAuditEventCreatorHelper.getNamedProperty(request, 
AlertGroupResourceProvider.ALERT_GROUP_NAME))
+          
.withDefinitionIds(RequestAuditEventCreatorHelper.getNamedPropertyList(request, 
AlertGroupResourceProvider.ALERT_GROUP_DEFINITIONS))
+          
.withNotificationIds(RequestAuditEventCreatorHelper.getNamedPropertyList(request,
 AlertGroupResourceProvider.ALERT_GROUP_TARGETS))
           .build();
       case PUT:
         return ChangeAlertGroupRequestAuditEvent.builder()
@@ -101,9 +98,9 @@ public class AlertGroupEventCreator implements 
RequestAuditEventCreator {
           .withResultStatus(result.getStatus())
           .withUrl(request.getURI())
           .withRemoteIp(request.getRemoteAddress())
-          .withName(getName(request))
-          .withDefinitionIds(getDefinitionIds(request))
-          .withNotificationIds(getNotificationIds(request))
+          .withName(RequestAuditEventCreatorHelper.getNamedProperty(request, 
AlertGroupResourceProvider.ALERT_GROUP_NAME))
+          
.withDefinitionIds(RequestAuditEventCreatorHelper.getNamedPropertyList(request, 
AlertGroupResourceProvider.ALERT_GROUP_DEFINITIONS))
+          
.withNotificationIds(RequestAuditEventCreatorHelper.getNamedPropertyList(request,
 AlertGroupResourceProvider.ALERT_GROUP_TARGETS))
           .build();
       case DELETE:
         return DeleteAlertGroupRequestAuditEvent.builder()
@@ -118,46 +115,4 @@ public class AlertGroupEventCreator implements 
RequestAuditEventCreator {
         return null;
     }
   }
-
-  /**
-   * Returns the alert group name from the request
-   * @param request
-   * @return
-   */
-  private String getName(Request request) {
-    if (!request.getBody().getNamedPropertySets().isEmpty()) {
-      return 
String.valueOf(request.getBody().getNamedPropertySets().iterator().next().getProperties().get(PropertyHelper.getPropertyId("AlertGroup",
 "name")));
-    }
-    return null;
-  }
-
-  /**
-   * Returns definition ids from the request
-   * @param request
-   * @return
-   */
-  private List<String> getDefinitionIds(Request request) {
-    if (!request.getBody().getNamedPropertySets().isEmpty()) {
-      List<String> list = (List<String>) 
request.getBody().getNamedPropertySets().iterator().next().getProperties().get(PropertyHelper.getPropertyId("AlertGroup",
 "definitions"));
-      if (list != null) {
-        return list;
-      }
-    }
-    return Collections.emptyList();
-  }
-
-  /**
-   * Returns notification ids from the request
-   * @param request
-   * @return
-   */
-  private List<String> getNotificationIds(Request request) {
-    if (!request.getBody().getNamedPropertySets().isEmpty()) {
-      List<String> list = (List<String>) 
request.getBody().getNamedPropertySets().iterator().next().getProperties().get(PropertyHelper.getPropertyId("AlertGroup",
 "targets"));
-      if (list != null) {
-        return list;
-      }
-    }
-    return Collections.emptyList();
-  }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/6320d589/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/AlertTargetEventCreator.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/AlertTargetEventCreator.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/AlertTargetEventCreator.java
index abad559..26a856b 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/AlertTargetEventCreator.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/AlertTargetEventCreator.java
@@ -18,8 +18,6 @@
 
 package org.apache.ambari.server.audit.request.eventcreator;
 
-import java.util.Collections;
-import java.util.List;
 import java.util.Set;
 
 import org.apache.ambari.server.api.services.Request;
@@ -29,9 +27,12 @@ import org.apache.ambari.server.audit.event.AuditEvent;
 import 
org.apache.ambari.server.audit.event.request.AddAlertTargetRequestAuditEvent;
 import 
org.apache.ambari.server.audit.event.request.ChangeAlertTargetRequestAuditEvent;
 import 
org.apache.ambari.server.audit.event.request.DeleteAlertTargetRequestAuditEvent;
-import org.apache.ambari.server.audit.request.RequestAuditEventCreator;
+import 
org.apache.ambari.server.controller.internal.AlertTargetResourceProvider;
 import org.apache.ambari.server.controller.spi.Resource;
-import org.apache.ambari.server.controller.utilities.PropertyHelper;
+import org.apache.ambari.server.notifications.dispatchers.EmailDispatcher;
+import org.apache.ambari.server.state.services.AlertNoticeDispatchService;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.security.core.userdetails.User;
 
 import com.google.common.collect.ImmutableSet;
 
@@ -90,13 +91,13 @@ public class AlertTargetEventCreator implements 
RequestAuditEventCreator {
           .withResultStatus(result.getStatus())
           .withUrl(request.getURI())
           .withRemoteIp(request.getRemoteAddress())
-          .withName(getProperty(request, "name"))
-          .withDescription(getProperty(request, "description"))
-          .withAlertStates(getPropertyList(request, "alert_states"))
-          .withGroupIds(getPropertyList(request, "groups"))
-          .withNotificationType(getProperty(request, "notification_type"))
-          .withEmailFrom(getProperty(request, "properties/mail.smtp.from"))
-          .withEmailRecipients(getPropertyList(request, 
"properties/ambari.dispatch.recipients"))
+          .withName(RequestAuditEventCreatorHelper.getProperty(request, 
AlertTargetResourceProvider.ALERT_TARGET_NAME))
+          .withDescription(RequestAuditEventCreatorHelper.getProperty(request, 
AlertTargetResourceProvider.ALERT_TARGET_DESCRIPTION))
+          
.withAlertStates(RequestAuditEventCreatorHelper.getNamedPropertyList(request, 
AlertTargetResourceProvider.ALERT_TARGET_STATES))
+          
.withGroupIds(RequestAuditEventCreatorHelper.getNamedPropertyList(request, 
AlertTargetResourceProvider.ALERT_TARGET_GROUPS))
+          
.withNotificationType(RequestAuditEventCreatorHelper.getProperty(request, 
AlertTargetResourceProvider.ALERT_TARGET_NOTIFICATION_TYPE))
+          .withEmailFrom(RequestAuditEventCreatorHelper.getProperty(request, 
AlertTargetResourceProvider.ALERT_TARGET_PROPERTIES + "/" + 
EmailDispatcher.JAVAMAIL_FROM_PROPERTY))
+          
.withEmailRecipients(RequestAuditEventCreatorHelper.getNamedPropertyList(request,
 AlertTargetResourceProvider.ALERT_TARGET_PROPERTIES + "/" + 
AlertNoticeDispatchService.AMBARI_DISPATCH_RECIPIENTS))
           .build();
       case PUT:
         return ChangeAlertTargetRequestAuditEvent.builder()
@@ -105,13 +106,13 @@ public class AlertTargetEventCreator implements 
RequestAuditEventCreator {
           .withResultStatus(result.getStatus())
           .withUrl(request.getURI())
           .withRemoteIp(request.getRemoteAddress())
-          .withName(getProperty(request, "name"))
-          .withDescription(getProperty(request, "description"))
-          .withAlertStates(getPropertyList(request, "alert_states"))
-          .withGroupIds(getPropertyList(request, "groups"))
-          .withNotificationType(getProperty(request, "notification_type"))
-          .withEmailFrom(getProperty(request, "properties/mail.smtp.from"))
-          .withEmailRecipients(getPropertyList(request, 
"properties/ambari.dispatch.recipients"))
+          .withName(RequestAuditEventCreatorHelper.getProperty(request, 
AlertTargetResourceProvider.ALERT_TARGET_NAME))
+          .withDescription(RequestAuditEventCreatorHelper.getProperty(request, 
AlertTargetResourceProvider.ALERT_TARGET_DESCRIPTION))
+          
.withAlertStates(RequestAuditEventCreatorHelper.getNamedPropertyList(request, 
AlertTargetResourceProvider.ALERT_TARGET_STATES))
+          
.withGroupIds(RequestAuditEventCreatorHelper.getNamedPropertyList(request, 
AlertTargetResourceProvider.ALERT_TARGET_GROUPS))
+          
.withNotificationType(RequestAuditEventCreatorHelper.getProperty(request, 
AlertTargetResourceProvider.ALERT_TARGET_NOTIFICATION_TYPE))
+          .withEmailFrom(RequestAuditEventCreatorHelper.getProperty(request, 
AlertTargetResourceProvider.ALERT_TARGET_PROPERTIES + "/" + 
EmailDispatcher.JAVAMAIL_FROM_PROPERTY))
+          
.withEmailRecipients(RequestAuditEventCreatorHelper.getNamedPropertyList(request,
 AlertTargetResourceProvider.ALERT_TARGET_PROPERTIES + "/" + 
AlertNoticeDispatchService.AMBARI_DISPATCH_RECIPIENTS))
           .build();
       case DELETE:
         return DeleteAlertTargetRequestAuditEvent.builder()
@@ -126,33 +127,4 @@ public class AlertTargetEventCreator implements 
RequestAuditEventCreator {
         return null;
     }
   }
-
-  /**
-   * Returns a property list from the request, named by the parameter 
propertyName
-   * @param request
-   * @param propertyName
-   * @return
-   */
-  private List<String> getPropertyList(Request request, String propertyName) {
-    if (!request.getBody().getNamedPropertySets().isEmpty()) {
-      List<String> list = (List<String>) 
request.getBody().getNamedPropertySets().iterator().next().getProperties().get(PropertyHelper.getPropertyId("AlertTarget",
 propertyName));
-      if (list != null) {
-        return list;
-      }
-    }
-    return Collections.emptyList();
-  }
-
-  /**
-   * Returns a property from the request, named by the parameter propertyName
-   * @param request
-   * @param propertyName
-   * @return
-   */
-  private String getProperty(Request request, String propertyName) {
-    if (!request.getBody().getPropertySets().isEmpty()) {
-      return 
String.valueOf(request.getBody().getPropertySets().iterator().next().get(PropertyHelper.getPropertyId("AlertTarget",
 propertyName)));
-    }
-    return null;
-  }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/6320d589/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/BlueprintEventCreator.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/BlueprintEventCreator.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/BlueprintEventCreator.java
index a91a9c1..c7351ac 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/BlueprintEventCreator.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/BlueprintEventCreator.java
@@ -26,7 +26,6 @@ import org.apache.ambari.server.api.services.ResultStatus;
 import org.apache.ambari.server.audit.event.AuditEvent;
 import 
org.apache.ambari.server.audit.event.request.AddBlueprintRequestAuditEvent;
 import 
org.apache.ambari.server.audit.event.request.DeleteBlueprintRequestAuditEvent;
-import org.apache.ambari.server.audit.request.RequestAuditEventCreator;
 import org.apache.ambari.server.controller.spi.Resource;
 
 import com.google.common.collect.ImmutableSet;

http://git-wip-us.apache.org/repos/asf/ambari/blob/6320d589/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/BlueprintExportEventCreator.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/BlueprintExportEventCreator.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/BlueprintExportEventCreator.java
index 85379d8..fdca748 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/BlueprintExportEventCreator.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/BlueprintExportEventCreator.java
@@ -25,7 +25,6 @@ import org.apache.ambari.server.api.services.Result;
 import org.apache.ambari.server.api.services.ResultStatus;
 import org.apache.ambari.server.audit.event.AuditEvent;
 import 
org.apache.ambari.server.audit.event.request.BlueprintExportRequestAuditEvent;
-import org.apache.ambari.server.audit.request.RequestAuditEventCreator;
 import org.apache.ambari.server.controller.spi.Resource;
 
 import com.google.common.collect.ImmutableSet;

http://git-wip-us.apache.org/repos/asf/ambari/blob/6320d589/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/ComponentEventCreator.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/ComponentEventCreator.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/ComponentEventCreator.java
index 870a797..8c65a35 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/ComponentEventCreator.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/ComponentEventCreator.java
@@ -26,10 +26,9 @@ import org.apache.ambari.server.api.services.Result;
 import org.apache.ambari.server.api.services.ResultStatus;
 import org.apache.ambari.server.audit.event.AuditEvent;
 import 
org.apache.ambari.server.audit.event.request.StartOperationRequestAuditEvent;
-import org.apache.ambari.server.audit.request.RequestAuditEventCreator;
+import 
org.apache.ambari.server.controller.internal.HostComponentResourceProvider;
 import org.apache.ambari.server.controller.internal.RequestOperationLevel;
 import org.apache.ambari.server.controller.spi.Resource;
-import org.apache.ambari.server.controller.utilities.PropertyHelper;
 
 import com.google.common.collect.ImmutableSet;
 
@@ -92,6 +91,7 @@ public class ComponentEventCreator implements 
RequestAuditEventCreator {
       .withOperation(operation)
       .withRemoteIp(request.getRemoteAddress())
       .withTimestamp(System.currentTimeMillis())
+      .withHostname(RequestAuditEventCreatorHelper.getProperty(request, 
HostComponentResourceProvider.HOST_COMPONENT_HOST_NAME_PROPERTY_ID))
       .withRequestId(String.valueOf(requestId));
 
     if (result.getStatus().isErrorState()) {
@@ -112,15 +112,15 @@ public class ComponentEventCreator implements 
RequestAuditEventCreator {
       return "Delete component " + 
request.getResource().getKeyValueMap().get(Resource.Type.HostComponent);
     }
 
-    if 
(request.getBody().getRequestInfoProperties().containsKey(RequestOperationLevel.OPERATION_LEVEL_ID))
 {
+    if (request.getBody().getRequestInfoProperties() != null && 
request.getBody().getRequestInfoProperties().containsKey(RequestOperationLevel.OPERATION_LEVEL_ID))
 {
       String operation = "";
       switch 
(request.getBody().getRequestInfoProperties().get(RequestOperationLevel.OPERATION_LEVEL_ID))
 {
         case "CLUSTER":
           for (Map<String, Object> map : request.getBody().getPropertySets()) {
-            if (map.containsKey(PropertyHelper.getPropertyId("HostRoles", 
"cluster_name"))) {
-              operation = 
String.valueOf(map.get(PropertyHelper.getPropertyId("HostRoles", "state"))) + 
": all services"
+            if 
(map.containsKey(HostComponentResourceProvider.HOST_COMPONENT_CLUSTER_NAME_PROPERTY_ID))
 {
+              operation = 
String.valueOf(map.get(HostComponentResourceProvider.HOST_COMPONENT_STATE_PROPERTY_ID))
 + ": all services"
                 + " on all hosts"
-                + (request.getBody().getQueryString().length() > 0 ? " that 
matches " + request.getBody().getQueryString() : "")
+                + (request.getBody().getQueryString() != null && 
request.getBody().getQueryString().length() > 0 ? " that matches " + 
request.getBody().getQueryString() : "")
                 + " (" + 
request.getBody().getRequestInfoProperties().get(RequestOperationLevel.OPERATION_CLUSTER_ID)
 + ")";
               break;
             }
@@ -128,10 +128,10 @@ public class ComponentEventCreator implements 
RequestAuditEventCreator {
           break;
         case "HOST":
           for (Map<String, Object> map : request.getBody().getPropertySets()) {
-            if (map.containsKey(PropertyHelper.getPropertyId("HostRoles", 
"cluster_name"))) {
+            if 
(map.containsKey(HostComponentResourceProvider.HOST_COMPONENT_CLUSTER_NAME_PROPERTY_ID))
 {
               String query = 
request.getBody().getRequestInfoProperties().get("query");
-              operation = 
String.valueOf(map.get(PropertyHelper.getPropertyId("HostRoles", "state"))) + 
": " + query.substring(query.indexOf("(") + 1, query.length() - 1)
-                + " on " + 
request.getBody().getRequestInfoProperties().get("operation_level/host_names")
+              operation = 
String.valueOf(map.get(HostComponentResourceProvider.HOST_COMPONENT_STATE_PROPERTY_ID))
 + ": " + query.substring(query.indexOf("(") + 1, query.length() - 1)
+                + " on " + 
request.getBody().getRequestInfoProperties().get(RequestOperationLevel.OPERATION_HOST_NAME)
                 + " (" + 
request.getBody().getRequestInfoProperties().get(RequestOperationLevel.OPERATION_CLUSTER_ID)
 + ")";
               break;
             }
@@ -139,10 +139,10 @@ public class ComponentEventCreator implements 
RequestAuditEventCreator {
           break;
         case "HOST_COMPONENT":
           for (Map<String, Object> map : request.getBody().getPropertySets()) {
-            if (map.containsKey(PropertyHelper.getPropertyId("HostRoles", 
"component_name"))) {
-              operation = 
String.valueOf(map.get(PropertyHelper.getPropertyId("HostRoles", "state"))) + 
": " + String.valueOf(map.get(PropertyHelper.getPropertyId("HostRoles", 
"component_name")))
+            if 
(map.containsKey(HostComponentResourceProvider.HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID))
 {
+              operation = 
String.valueOf(map.get(HostComponentResourceProvider.HOST_COMPONENT_STATE_PROPERTY_ID))
 + ": " + 
String.valueOf(map.get(HostComponentResourceProvider.HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID))
                 + "/" + 
request.getBody().getRequestInfoProperties().get(RequestOperationLevel.OPERATION_SERVICE_ID)
-                + " on " + 
request.getBody().getRequestInfoProperties().get("operation_level/host_name")
+                + " on " + 
request.getBody().getRequestInfoProperties().get(RequestOperationLevel.OPERATION_HOST_NAME)
                 + " (" + 
request.getBody().getRequestInfoProperties().get(RequestOperationLevel.OPERATION_CLUSTER_ID)
 + ")";
               break;
             }
@@ -153,8 +153,8 @@ public class ComponentEventCreator implements 
RequestAuditEventCreator {
     }
 
     for (Map<String, Object> map : request.getBody().getPropertySets()) {
-      if (map.containsKey(PropertyHelper.getPropertyId("HostRoles", 
"maintenance_state"))) {
-        return "Turn " + map.get(PropertyHelper.getPropertyId("HostRoles", 
"maintenance_state")) + " Maintenance Mode for " + 
map.get(PropertyHelper.getPropertyId("HostRoles", "component_name"));
+      if 
(map.containsKey(HostComponentResourceProvider.HOST_COMPONENT_MAINTENANCE_STATE_PROPERTY_ID))
 {
+        return "Turn " + 
map.get(HostComponentResourceProvider.HOST_COMPONENT_MAINTENANCE_STATE_PROPERTY_ID)
 + " Maintenance Mode for " + 
map.get(HostComponentResourceProvider.HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID);
       }
     }
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/6320d589/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/ConfigurationChangeEventCreator.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/ConfigurationChangeEventCreator.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/ConfigurationChangeEventCreator.java
index b671138..139f6f6 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/ConfigurationChangeEventCreator.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/ConfigurationChangeEventCreator.java
@@ -27,9 +27,9 @@ import org.apache.ambari.server.api.services.ResultStatus;
 import org.apache.ambari.server.audit.event.AuditEvent;
 import 
org.apache.ambari.server.audit.event.request.ClusterNameChangeRequestAuditEvent;
 import 
org.apache.ambari.server.audit.event.request.ConfigurationChangeRequestAuditEvent;
-import org.apache.ambari.server.audit.request.RequestAuditEventCreator;
+import org.apache.ambari.server.controller.internal.ClusterResourceProvider;
+import 
org.apache.ambari.server.controller.internal.ServiceConfigVersionResourceProvider;
 import org.apache.ambari.server.controller.spi.Resource;
-import org.apache.ambari.server.controller.utilities.PropertyHelper;
 
 import com.google.common.collect.ImmutableSet;
 
@@ -82,8 +82,8 @@ public class ConfigurationChangeEventCreator implements 
RequestAuditEventCreator
 
     if (!request.getBody().getPropertySets().isEmpty()) {
       Map<String, Object> map = 
request.getBody().getPropertySets().iterator().next();
-      if (map.size() == 1 && 
map.containsKey(PropertyHelper.getPropertyId("Clusters", "cluster_name"))) {
-        String newName = 
String.valueOf(map.get(PropertyHelper.getPropertyId("Clusters", 
"cluster_name")));
+      if (map.size() == 1 && 
map.containsKey(ClusterResourceProvider.CLUSTER_NAME_PROPERTY_ID)) {
+        String newName = 
String.valueOf(map.get(ClusterResourceProvider.CLUSTER_NAME_PROPERTY_ID));
         String oldName = 
request.getResource().getKeyValueMap().get(Resource.Type.Cluster);
         return ClusterNameChangeRequestAuditEvent.builder()
           .withTimestamp(System.currentTimeMillis())
@@ -115,7 +115,7 @@ public class ConfigurationChangeEventCreator implements 
RequestAuditEventCreator
    */
   private String getServiceConfigVersion(Result result) {
     Map<String, Object> map = getServiceConfigMap(result);
-    return map == null ? null : 
String.valueOf(map.get("service_config_version"));
+    return map == null ? null : 
String.valueOf(map.get(ServiceConfigVersionResourceProvider.SERVICE_CONFIG_VERSION_PROPERTY_ID));
   }
 
   /**
@@ -125,7 +125,7 @@ public class ConfigurationChangeEventCreator implements 
RequestAuditEventCreator
    */
   private String getServiceConfigVersionNote(Result result) {
     Map<String, Object> map = getServiceConfigMap(result);
-    return map == null ? null : 
String.valueOf(map.get("service_config_version_note"));
+    return map == null ? null : 
String.valueOf(map.get(ServiceConfigVersionResourceProvider.SERVICE_CONFIG_VERSION_NOTE_PROPERTY_ID));
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/ambari/blob/6320d589/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/CredentialEventCreator.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/CredentialEventCreator.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/CredentialEventCreator.java
index 0647553..aca6885 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/CredentialEventCreator.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/CredentialEventCreator.java
@@ -25,9 +25,8 @@ import org.apache.ambari.server.api.services.Result;
 import org.apache.ambari.server.api.services.ResultStatus;
 import org.apache.ambari.server.audit.event.AuditEvent;
 import 
org.apache.ambari.server.audit.event.request.AddCredentialRequestAuditEvent;
-import org.apache.ambari.server.audit.request.RequestAuditEventCreator;
+import org.apache.ambari.server.controller.internal.CredentialResourceProvider;
 import org.apache.ambari.server.controller.spi.Resource;
-import org.apache.ambari.server.controller.utilities.PropertyHelper;
 
 import com.google.common.collect.ImmutableSet;
 
@@ -84,24 +83,11 @@ public class CredentialEventCreator implements 
RequestAuditEventCreator {
       .withResultStatus(result.getStatus())
       .withUrl(request.getURI())
       .withRemoteIp(request.getRemoteAddress())
-      .withClusterName(getProperty(request, "cluster_name"))
-      .withType(getProperty(request, "type"))
-      .withAlias(getProperty(request, "alias"))
-      .withPrincipal(getProperty(request, "principal"))
+      .withClusterName(RequestAuditEventCreatorHelper.getProperty(request, 
CredentialResourceProvider.CREDENTIAL_CLUSTER_NAME_PROPERTY_ID))
+      .withType(RequestAuditEventCreatorHelper.getProperty(request, 
CredentialResourceProvider.CREDENTIAL_TYPE_PROPERTY_ID))
+      .withAlias(RequestAuditEventCreatorHelper.getProperty(request, 
CredentialResourceProvider.CREDENTIAL_ALIAS_PROPERTY_ID))
+      .withPrincipal(RequestAuditEventCreatorHelper.getProperty(request, 
CredentialResourceProvider.CREDENTIAL_PRINCIPAL_PROPERTY_ID))
       .build();
 
   }
-
-  /**
-   * Returns a property from the resquest
-   * @param request
-   * @param propertyName
-   * @return
-   */
-  private String getProperty(Request request, String propertyName) {
-    if (!request.getBody().getPropertySets().isEmpty()) {
-      return 
String.valueOf(request.getBody().getPropertySets().iterator().next().get(PropertyHelper.getPropertyId("Credential",
 propertyName)));
-    }
-    return null;
-  }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/6320d589/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/DefaultEventCreator.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/DefaultEventCreator.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/DefaultEventCreator.java
index feda291..3ca2241 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/DefaultEventCreator.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/DefaultEventCreator.java
@@ -26,7 +26,6 @@ import org.apache.ambari.server.api.services.Result;
 import org.apache.ambari.server.api.services.ResultStatus;
 import org.apache.ambari.server.audit.event.AuditEvent;
 import org.apache.ambari.server.audit.request.RequestAuditEvent;
-import org.apache.ambari.server.audit.request.RequestAuditEventCreator;
 import org.apache.ambari.server.audit.request.RequestAuditLogger;
 import org.apache.ambari.server.controller.spi.Resource;
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/6320d589/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/GroupEventCreator.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/GroupEventCreator.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/GroupEventCreator.java
index 30fef98..335df46 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/GroupEventCreator.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/GroupEventCreator.java
@@ -26,9 +26,8 @@ import org.apache.ambari.server.api.services.ResultStatus;
 import org.apache.ambari.server.audit.event.AuditEvent;
 import 
org.apache.ambari.server.audit.event.request.CreateGroupRequestAuditEvent;
 import 
org.apache.ambari.server.audit.event.request.DeleteGroupRequestAuditEvent;
-import org.apache.ambari.server.audit.request.RequestAuditEventCreator;
+import org.apache.ambari.server.controller.internal.GroupResourceProvider;
 import org.apache.ambari.server.controller.spi.Resource;
-import org.apache.ambari.server.controller.utilities.PropertyHelper;
 
 import com.google.common.collect.ImmutableSet;
 
@@ -87,7 +86,7 @@ public class GroupEventCreator implements 
RequestAuditEventCreator {
           .withResultStatus(result.getStatus())
           .withUrl(request.getURI())
           .withRemoteIp(request.getRemoteAddress())
-          .withGroupName(getGroupName(request))
+          .withGroupName(RequestAuditEventCreatorHelper.getProperty(request, 
GroupResourceProvider.GROUP_GROUPNAME_PROPERTY_ID))
           .build();
       case DELETE:
         return DeleteGroupRequestAuditEvent.builder()
@@ -103,17 +102,4 @@ public class GroupEventCreator implements 
RequestAuditEventCreator {
     }
     return null;
   }
-
-  /**
-   * Returns group name from request
-   * @param request
-   * @return
-   */
-  private String getGroupName(Request request) {
-    if (!request.getBody().getPropertySets().isEmpty()) {
-      return 
String.valueOf(request.getBody().getPropertySets().iterator().next().get(PropertyHelper.getPropertyId("Groups",
 "group_name")));
-    }
-    return null;
-  }
-
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/6320d589/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/HostEventCreator.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/HostEventCreator.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/HostEventCreator.java
index 7bc0133..7c27d19 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/HostEventCreator.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/HostEventCreator.java
@@ -28,9 +28,9 @@ import org.apache.ambari.server.audit.event.AuditEvent;
 import 
org.apache.ambari.server.audit.event.request.AddComponentToHostRequestAuditEvent;
 import org.apache.ambari.server.audit.event.request.AddHostRequestAuditEvent;
 import 
org.apache.ambari.server.audit.event.request.DeleteHostRequestAuditEvent;
-import org.apache.ambari.server.audit.request.RequestAuditEventCreator;
+import 
org.apache.ambari.server.controller.internal.HostComponentResourceProvider;
+import org.apache.ambari.server.controller.internal.HostResourceProvider;
 import org.apache.ambari.server.controller.spi.Resource;
-import org.apache.ambari.server.controller.utilities.PropertyHelper;
 
 import com.google.common.collect.ImmutableSet;
 
@@ -99,7 +99,7 @@ public class HostEventCreator implements 
RequestAuditEventCreator {
           .withResultStatus(result.getStatus())
           .withUrl(request.getURI())
           .withRemoteIp(request.getRemoteAddress())
-          .withHostName(getHostName(request))
+          
.withHostName(RequestAuditEventCreatorHelper.getNamedProperty(request, 
HostResourceProvider.HOST_NAME_PROPERTY_ID))
           .build();
       case QUERY_POST:
         return AddComponentToHostRequestAuditEvent.builder()
@@ -117,18 +117,6 @@ public class HostEventCreator implements 
RequestAuditEventCreator {
   }
 
   /**
-   * Returns hostname from the request
-   * @param request
-   * @return
-   */
-  private String getHostName(Request request) {
-    if (!request.getBody().getNamedPropertySets().isEmpty()) {
-      return 
String.valueOf(request.getBody().getNamedPropertySets().iterator().next().getProperties().get(PropertyHelper.getPropertyId("Hosts",
 "host_name")));
-    }
-    return null;
-  }
-
-  /**
    * Returns component name from the request
    * @param request
    * @return
@@ -137,7 +125,7 @@ public class HostEventCreator implements 
RequestAuditEventCreator {
     if (!request.getBody().getNamedPropertySets().isEmpty()) {
       Set<Map<String, String>> set = (Set<Map<String, String>>) 
request.getBody().getNamedPropertySets().iterator().next().getProperties().get("host_components");
       if (set != null && !set.isEmpty()) {
-        return 
set.iterator().next().get(PropertyHelper.getPropertyId("HostRoles", 
"component_name"));
+        return 
set.iterator().next().get(HostComponentResourceProvider.HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID);
       }
     }
     return null;
@@ -149,7 +137,7 @@ public class HostEventCreator implements 
RequestAuditEventCreator {
    * @return
    */
   private String getHostNameFromQuery(Request request) {
-    final String key = PropertyHelper.getPropertyId("Hosts", "host_name");
+    final String key = HostResourceProvider.HOST_NAME_PROPERTY_ID;
     if (request.getBody().getQueryString().contains(key)) {
       String q = request.getBody().getQueryString();
       int startIndex = q.indexOf(key) + key.length() + 1;

http://git-wip-us.apache.org/repos/asf/ambari/blob/6320d589/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/MemberEventCreator.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/MemberEventCreator.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/MemberEventCreator.java
index f0158f5..d10991f 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/MemberEventCreator.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/MemberEventCreator.java
@@ -18,9 +18,6 @@
 
 package org.apache.ambari.server.audit.request.eventcreator;
 
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
 import java.util.Set;
 
 import org.apache.ambari.server.api.services.Request;
@@ -30,9 +27,8 @@ import org.apache.ambari.server.audit.event.AuditEvent;
 import 
org.apache.ambari.server.audit.event.request.AddUserToGroupRequestAuditEvent;
 import 
org.apache.ambari.server.audit.event.request.MembershipChangeRequestAuditEvent;
 import 
org.apache.ambari.server.audit.event.request.RemoveUserFromGroupRequestAuditEvent;
-import org.apache.ambari.server.audit.request.RequestAuditEventCreator;
+import org.apache.ambari.server.controller.internal.MemberResourceProvider;
 import org.apache.ambari.server.controller.spi.Resource;
-import org.apache.ambari.server.controller.utilities.PropertyHelper;
 
 import com.google.common.collect.ImmutableSet;
 
@@ -111,8 +107,8 @@ public class MemberEventCreator implements 
RequestAuditEventCreator {
           .withResultStatus(result.getStatus())
           .withUrl(request.getURI())
           .withRemoteIp(request.getRemoteAddress())
-          .withGroupName(getGroupNameForPut(request))
-          .withUserNameList(getUsers(request))
+          .withGroupName(RequestAuditEventCreatorHelper.getProperty(request, 
MemberResourceProvider.MEMBER_GROUP_NAME_PROPERTY_ID))
+          
.withUserNameList(RequestAuditEventCreatorHelper.getPropertyList(request, 
MemberResourceProvider.MEMBER_USER_NAME_PROPERTY_ID))
           .build();
       default:
         return null;
@@ -120,34 +116,6 @@ public class MemberEventCreator implements 
RequestAuditEventCreator {
   }
 
   /**
-   * Returns users from the request
-   * @param request
-   * @return
-   */
-  private List<String> getUsers(Request request) {
-    List<String> users = new LinkedList<String>();
-
-    for (Map<String, Object> propertyMap : 
request.getBody().getPropertySets()) {
-      String userName = 
String.valueOf(propertyMap.get(PropertyHelper.getPropertyId("MemberInfo", 
"user_name")));
-      users.add(userName);
-    }
-    return users;
-  }
-
-  /**
-   * Returns target group name from the request. This is called when PUT 
request type is used.
-   * @param request
-   * @return
-   */
-  private String getGroupNameForPut(Request request) {
-
-    for (Map<String, Object> propertyMap : 
request.getBody().getPropertySets()) {
-      return 
String.valueOf(propertyMap.get(PropertyHelper.getPropertyId("MemberInfo", 
"group_name")));
-    }
-    return null;
-  }
-
-  /**
    * Returns username from the request
    * @param request
    * @return

http://git-wip-us.apache.org/repos/asf/ambari/blob/6320d589/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/PrivilegeEventCreator.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/PrivilegeEventCreator.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/PrivilegeEventCreator.java
index 11168f1..cd14dd1 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/PrivilegeEventCreator.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/PrivilegeEventCreator.java
@@ -30,9 +30,11 @@ import org.apache.ambari.server.api.services.ResultStatus;
 import org.apache.ambari.server.audit.event.AuditEvent;
 import 
org.apache.ambari.server.audit.event.request.ClusterPrivilegeChangeRequestAuditEvent;
 import 
org.apache.ambari.server.audit.event.request.PrivilegeChangeRequestAuditEvent;
-import org.apache.ambari.server.audit.request.RequestAuditEventCreator;
+import org.apache.ambari.server.controller.internal.PrivilegeResourceProvider;
 import org.apache.ambari.server.controller.spi.Resource;
-import org.apache.ambari.server.controller.utilities.PropertyHelper;
+import org.apache.ambari.server.orm.entities.PrincipalTypeEntity;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.security.core.userdetails.User;
 
 import com.google.common.collect.ImmutableSet;
 
@@ -83,8 +85,8 @@ public class PrivilegeEventCreator implements 
RequestAuditEventCreator {
   @Override
   public AuditEvent createAuditEvent(Request request, Result result) {
 
-    Map<String, List<String>> users = getEntities(request, "USER");
-    Map<String, List<String>> groups = getEntities(request, "GROUP");
+    Map<String, List<String>> users = getEntities(request, 
PrincipalTypeEntity.USER_PRINCIPAL_TYPE_NAME);
+    Map<String, List<String>> groups = getEntities(request, 
PrincipalTypeEntity.GROUP_PRINCIPAL_TYPE_NAME);
 
     switch (request.getRequestType()) {
       case PUT:
@@ -125,10 +127,10 @@ public class PrivilegeEventCreator implements 
RequestAuditEventCreator {
     Map<String, List<String>> entities = new HashMap<String, List<String>>();
 
     for (Map<String, Object> propertyMap : 
request.getBody().getPropertySets()) {
-      String ptype = 
String.valueOf(propertyMap.get(PropertyHelper.getPropertyId("PrivilegeInfo", 
"principal_type")));
+      String ptype = 
String.valueOf(propertyMap.get(PrivilegeResourceProvider.PRINCIPAL_TYPE_PROPERTY_ID));
       if (type.equals(ptype)) {
-        String role = 
String.valueOf(propertyMap.get(PropertyHelper.getPropertyId("PrivilegeInfo", 
"permission_name")));
-        String name = 
String.valueOf(propertyMap.get(PropertyHelper.getPropertyId("PrivilegeInfo", 
"principal_name")));
+        String role = 
String.valueOf(propertyMap.get(PrivilegeResourceProvider.PERMISSION_NAME_PROPERTY_ID));
+        String name = 
String.valueOf(propertyMap.get(PrivilegeResourceProvider.PRINCIPAL_NAME_PROPERTY_ID));
         if (!entities.containsKey(role)) {
           entities.put(role, new LinkedList<String>());
         }

http://git-wip-us.apache.org/repos/asf/ambari/blob/6320d589/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/RecommendationIgnoreEventCreator.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/RecommendationIgnoreEventCreator.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/RecommendationIgnoreEventCreator.java
index 6b7bb2b..d41177e 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/RecommendationIgnoreEventCreator.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/RecommendationIgnoreEventCreator.java
@@ -24,7 +24,6 @@ import org.apache.ambari.server.api.services.Request;
 import org.apache.ambari.server.api.services.Result;
 import org.apache.ambari.server.api.services.ResultStatus;
 import org.apache.ambari.server.audit.event.AuditEvent;
-import org.apache.ambari.server.audit.request.RequestAuditEventCreator;
 import org.apache.ambari.server.controller.spi.Resource;
 
 import com.google.common.collect.ImmutableSet;

http://git-wip-us.apache.org/repos/asf/ambari/blob/6320d589/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/RepositoryEventCreator.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/RepositoryEventCreator.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/RepositoryEventCreator.java
index ca3bac4..aeb9320 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/RepositoryEventCreator.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/RepositoryEventCreator.java
@@ -26,9 +26,8 @@ import org.apache.ambari.server.api.services.ResultStatus;
 import org.apache.ambari.server.audit.event.AuditEvent;
 import 
org.apache.ambari.server.audit.event.request.AddRepositoryRequestAuditEvent;
 import 
org.apache.ambari.server.audit.event.request.UpdateRepositoryRequestAuditEvent;
-import org.apache.ambari.server.audit.request.RequestAuditEventCreator;
+import org.apache.ambari.server.controller.internal.RepositoryResourceProvider;
 import org.apache.ambari.server.controller.spi.Resource;
-import org.apache.ambari.server.controller.utilities.PropertyHelper;
 
 import com.google.common.collect.ImmutableSet;
 
@@ -87,11 +86,11 @@ public class RepositoryEventCreator implements 
RequestAuditEventCreator {
           .withResultStatus(result.getStatus())
           .withUrl(request.getURI())
           .withRemoteIp(request.getRemoteAddress())
-          .withRepo(getProperty(request, 
PropertyHelper.getPropertyId("Repositories", "repo_id")))
-          .withStackName(getProperty(request, 
PropertyHelper.getPropertyId("Repositories", "stack_name")))
-          .withStackVersion(getProperty(request, 
PropertyHelper.getPropertyId("Repositories", "stack_version")))
-          .withOsType(getProperty(request, 
PropertyHelper.getPropertyId("Repositories", "os_type")))
-          .withBaseUrl(getProperty(request, 
PropertyHelper.getPropertyId("Repositories", "base_url")))
+          .withRepo(RequestAuditEventCreatorHelper.getProperty(request, 
RepositoryResourceProvider.REPOSITORY_REPO_ID_PROPERTY_ID))
+          .withStackName(RequestAuditEventCreatorHelper.getProperty(request, 
RepositoryResourceProvider.REPOSITORY_STACK_NAME_PROPERTY_ID))
+          
.withStackVersion(RequestAuditEventCreatorHelper.getProperty(request, 
RepositoryResourceProvider.REPOSITORY_STACK_VERSION_PROPERTY_ID))
+          .withOsType(RequestAuditEventCreatorHelper.getProperty(request, 
RepositoryResourceProvider.REPOSITORY_OS_TYPE_PROPERTY_ID))
+          .withBaseUrl(RequestAuditEventCreatorHelper.getProperty(request, 
RepositoryResourceProvider.REPOSITORY_BASE_URL_PROPERTY_ID))
           .build();
       case PUT:
         return UpdateRepositoryRequestAuditEvent.builder()
@@ -100,28 +99,14 @@ public class RepositoryEventCreator implements 
RequestAuditEventCreator {
           .withResultStatus(result.getStatus())
           .withUrl(request.getURI())
           .withRemoteIp(request.getRemoteAddress())
-          .withRepo(getProperty(request, 
PropertyHelper.getPropertyId("Repositories", "repo_id")))
-          .withStackName(getProperty(request, 
PropertyHelper.getPropertyId("Repositories", "stack_name")))
-          .withStackVersion(getProperty(request, 
PropertyHelper.getPropertyId("Repositories", "stack_version")))
-          .withOsType(getProperty(request, 
PropertyHelper.getPropertyId("Repositories", "os_type")))
-          .withBaseUrl(getProperty(request, 
PropertyHelper.getPropertyId("Repositories", "base_url")))
+          .withRepo(RequestAuditEventCreatorHelper.getProperty(request, 
RepositoryResourceProvider.REPOSITORY_REPO_ID_PROPERTY_ID))
+          .withStackName(RequestAuditEventCreatorHelper.getProperty(request, 
RepositoryResourceProvider.REPOSITORY_STACK_NAME_PROPERTY_ID))
+          
.withStackVersion(RequestAuditEventCreatorHelper.getProperty(request, 
RepositoryResourceProvider.REPOSITORY_STACK_VERSION_PROPERTY_ID))
+          .withOsType(RequestAuditEventCreatorHelper.getProperty(request, 
RepositoryResourceProvider.REPOSITORY_OS_TYPE_PROPERTY_ID))
+          .withBaseUrl(RequestAuditEventCreatorHelper.getProperty(request, 
RepositoryResourceProvider.REPOSITORY_BASE_URL_PROPERTY_ID))
           .build();
       default:
         return null;
     }
   }
-
-  /**
-   * Returns a property from the request based on the propertyId parameter
-   * @param request
-   * @param properyId
-   * @return
-   */
-  private String getProperty(Request request, String properyId) {
-    if (!request.getBody().getPropertySets().isEmpty()) {
-      return 
String.valueOf(request.getBody().getPropertySets().iterator().next().get(properyId));
-    }
-    return null;
-  }
-
 }

Reply via email to