You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by st...@apache.org on 2016/04/07 20:11:46 UTC

[1/3] ambari git commit: AMBARI-15646. Audit Log Code Cleanup & Safety. (Daniel Gergely via stoader)

Repository: ambari
Updated Branches:
  refs/heads/trunk f0645b68a -> 6320d589f


http://git-wip-us.apache.org/repos/asf/ambari/blob/6320d589/ambari-server/src/test/java/org/apache/ambari/server/security/authorization/AmbariAuthorizationFilterTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/security/authorization/AmbariAuthorizationFilterTest.java b/ambari-server/src/test/java/org/apache/ambari/server/security/authorization/AmbariAuthorizationFilterTest.java
index 3dd6b0a..ff47ac2 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/security/authorization/AmbariAuthorizationFilterTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/security/authorization/AmbariAuthorizationFilterTest.java
@@ -363,6 +363,8 @@ public class AmbariAuthorizationFilterTest {
   private void injectMembers(AmbariAuthorizationFilter filter) {
     final Configuration configuration = EasyMock.createMock(Configuration.class);
     expect(configuration.getDefaultApiAuthenticatedUser()).andReturn(null).anyTimes();
+    final AuditLogger auditLogger = EasyMock.createNiceMock(AuditLogger.class);
+    expect(auditLogger.isEnabled()).andReturn(false).anyTimes();
     Injector injector = Guice.createInjector(new AbstractModule() {
       @Override
       protected void configure() {
@@ -373,10 +375,10 @@ public class AmbariAuthorizationFilterTest {
         bind(DBAccessor.class).toInstance(EasyMock.createMock(DBAccessor.class));
         bind(PasswordEncoder.class).toInstance(EasyMock.createMock(PasswordEncoder.class));
         bind(OsFamily.class).toInstance(EasyMock.createMock(OsFamily.class));
-        bind(AuditLogger.class).toInstance(EasyMock.createNiceMock(AuditLogger.class));
+        bind(AuditLogger.class).toInstance(auditLogger);
       }
     });
     injector.injectMembers(filter);
-    replay(configuration);
+    replay(configuration, auditLogger);
   }
 }


[2/3] ambari git commit: AMBARI-15646. Audit Log Code Cleanup & Safety. (Daniel Gergely via stoader)

Posted by st...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/6320d589/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/RepositoryVersionEventCreator.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/RepositoryVersionEventCreator.java b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/RepositoryVersionEventCreator.java
index 3f5e2d0..30fd377 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/RepositoryVersionEventCreator.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/RepositoryVersionEventCreator.java
@@ -31,9 +31,10 @@ import org.apache.ambari.server.audit.event.AuditEvent;
 import org.apache.ambari.server.audit.event.request.AddRepositoryVersionRequestAuditEvent;
 import org.apache.ambari.server.audit.event.request.ChangeRepositoryVersionRequestAuditEvent;
 import org.apache.ambari.server.audit.event.request.DeleteRepositoryVersionRequestAuditEvent;
-import org.apache.ambari.server.audit.request.RequestAuditEventCreator;
+import org.apache.ambari.server.controller.internal.OperatingSystemResourceProvider;
+import org.apache.ambari.server.controller.internal.RepositoryResourceProvider;
+import org.apache.ambari.server.controller.internal.RepositoryVersionResourceProvider;
 import org.apache.ambari.server.controller.spi.Resource;
-import org.apache.ambari.server.controller.utilities.PropertyHelper;
 
 import com.google.common.collect.ImmutableSet;
 
@@ -92,10 +93,10 @@ public class RepositoryVersionEventCreator implements RequestAuditEventCreator {
           .withResultStatus(result.getStatus())
           .withUrl(request.getURI())
           .withRemoteIp(request.getRemoteAddress())
-          .withStackName(getProperty(request, PropertyHelper.getPropertyId("RepositoryVersions", "stack_name")))
-          .withStackVersion(getProperty(request, PropertyHelper.getPropertyId("RepositoryVersions", "stack_version")))
-          .withDisplayName(getProperty(request, PropertyHelper.getPropertyId("RepositoryVersions", "display_name")))
-          .withRepoVersion(getProperty(request, PropertyHelper.getPropertyId("RepositoryVersions", "repository_version")))
+          .withStackName(RequestAuditEventCreatorHelper.getProperty(request, RepositoryVersionResourceProvider.REPOSITORY_VERSION_STACK_NAME_PROPERTY_ID))
+          .withStackVersion(RequestAuditEventCreatorHelper.getProperty(request, RepositoryVersionResourceProvider.REPOSITORY_VERSION_STACK_VERSION_PROPERTY_ID))
+          .withDisplayName(RequestAuditEventCreatorHelper.getProperty(request, RepositoryVersionResourceProvider.REPOSITORY_VERSION_DISPLAY_NAME_PROPERTY_ID))
+          .withRepoVersion(RequestAuditEventCreatorHelper.getProperty(request, RepositoryVersionResourceProvider.REPOSITORY_VERSION_REPOSITORY_VERSION_PROPERTY_ID))
           .withRepos(getRepos(request))
           .build();
       case PUT:
@@ -105,10 +106,10 @@ public class RepositoryVersionEventCreator implements RequestAuditEventCreator {
           .withResultStatus(result.getStatus())
           .withUrl(request.getURI())
           .withRemoteIp(request.getRemoteAddress())
-          .withStackName(getProperty(request, PropertyHelper.getPropertyId("RepositoryVersions", "stack_name")))
-          .withStackVersion(getProperty(request, PropertyHelper.getPropertyId("RepositoryVersions", "stack_version")))
-          .withDisplayName(getProperty(request, PropertyHelper.getPropertyId("RepositoryVersions", "display_name")))
-          .withRepoVersion(getProperty(request, PropertyHelper.getPropertyId("RepositoryVersions", "repository_version")))
+          .withStackName(RequestAuditEventCreatorHelper.getProperty(request, RepositoryVersionResourceProvider.REPOSITORY_VERSION_STACK_NAME_PROPERTY_ID))
+          .withStackVersion(RequestAuditEventCreatorHelper.getProperty(request, RepositoryVersionResourceProvider.REPOSITORY_VERSION_STACK_VERSION_PROPERTY_ID))
+          .withDisplayName(RequestAuditEventCreatorHelper.getProperty(request, RepositoryVersionResourceProvider.REPOSITORY_VERSION_DISPLAY_NAME_PROPERTY_ID))
+          .withRepoVersion(RequestAuditEventCreatorHelper.getProperty(request, RepositoryVersionResourceProvider.REPOSITORY_VERSION_REPOSITORY_VERSION_PROPERTY_ID))
           .withRepos(getRepos(request))
           .build();
       case DELETE:
@@ -157,7 +158,7 @@ public class RepositoryVersionEventCreator implements RequestAuditEventCreator {
     for (Object entry : set) {
       if (entry instanceof Map) {
         Map<String, Object> map = (Map<String, Object>) entry;
-        String osType = (String) map.get(PropertyHelper.getPropertyId("OperatingSystems", "os_type"));
+        String osType = (String) map.get(OperatingSystemResourceProvider.OPERATING_SYSTEM_OS_TYPE_PROPERTY_ID);
         if (!result.containsKey(osType)) {
           result.put(osType, new LinkedList<Map<String, String>>());
         }
@@ -182,28 +183,13 @@ public class RepositoryVersionEventCreator implements RequestAuditEventCreator {
    */
   private Map<String, String> buildResultRepo(Map<String, String> repo) {
     Map<String, String> m = repo;
-    String repoId = m.get(PropertyHelper.getPropertyId("Repositories", "repo_id"));
-    String repo_name = m.get(PropertyHelper.getPropertyId("Repositories", "repo_name"));
-    String baseUrl = m.get(PropertyHelper.getPropertyId("Repositories", "base_url"));
+    String repoId = m.get(RepositoryResourceProvider.REPOSITORY_REPO_ID_PROPERTY_ID);
+    String repo_name = m.get(RepositoryResourceProvider.REPOSITORY_REPO_NAME_PROPERTY_ID);
+    String baseUrl = m.get(RepositoryResourceProvider.REPOSITORY_BASE_URL_PROPERTY_ID);
     Map<String, String> resultMap = new HashMap<>();
     resultMap.put("repo_id", repoId);
     resultMap.put("repo_name", repo_name);
     resultMap.put("base_url", baseUrl);
     return resultMap;
   }
-
-  /**
-   * Returns 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;
-  }
-
-
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/6320d589/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/RequestAuditEventCreator.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/RequestAuditEventCreator.java b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/RequestAuditEventCreator.java
new file mode 100644
index 0000000..5c3ea65
--- /dev/null
+++ b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/RequestAuditEventCreator.java
@@ -0,0 +1,59 @@
+/*
+ * 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.eventcreator;
+
+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/eventcreator/RequestAuditEventCreatorHelper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/RequestAuditEventCreatorHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/RequestAuditEventCreatorHelper.java
new file mode 100644
index 0000000..a02428f
--- /dev/null
+++ b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/RequestAuditEventCreatorHelper.java
@@ -0,0 +1,112 @@
+/*
+ * 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.eventcreator;
+
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.ambari.server.api.services.Request;
+
+/**
+ * The purpose of this class is to retrieve information from {@link Request} objects.
+ * This information can be a single value or a list of values.
+ */
+public class RequestAuditEventCreatorHelper {
+
+  /**
+   * Returns a named property from a request
+   * @param request
+   * @param propertyName
+   * @return
+   */
+  public static String getNamedProperty(Request request, String propertyName) {
+    if (isValid(request, propertyName)) {
+      return String.valueOf(request.getBody().getNamedPropertySets().iterator().next().getProperties().get(propertyName));
+    }
+    return null;
+  }
+
+  /**
+   * Returns a list of named properties from a request
+   * @param request
+   * @param propertyName
+   * @return
+   */
+  public static List<String> getNamedPropertyList(Request request, String propertyName) {
+    if (isValidList(request, propertyName)) {
+      List<String> list = (List<String>) request.getBody().getNamedPropertySets().iterator().next().getProperties().get(propertyName);
+      if (list != null) {
+        return list;
+      }
+    }
+    return Collections.emptyList();
+  }
+
+  /**
+   * Checks if the property is valid: can be found and has correct type
+   * @param request
+   * @param propertyName
+   * @return
+   */
+  private static boolean isValid(Request request, String propertyName) {
+    return !request.getBody().getNamedPropertySets().isEmpty() &&
+      request.getBody().getNamedPropertySets().iterator().next().getProperties() != null &&
+      request.getBody().getNamedPropertySets().iterator().next().getProperties().get(propertyName) instanceof String;
+  }
+
+  /**
+   * Checks if the property is a valid list: can be found and has correct type
+   * @param request
+   * @param propertyName
+   * @return
+   */
+  private static boolean isValidList(Request request, String propertyName) {
+    return !request.getBody().getNamedPropertySets().isEmpty() &&
+      request.getBody().getNamedPropertySets().iterator().next().getProperties() != null &&
+      request.getBody().getNamedPropertySets().iterator().next().getProperties().get(propertyName) instanceof List;
+  }
+
+  /**
+   * Returns a property from a request
+   * @param request
+   * @param propertyName
+   * @return
+   */
+  public static String getProperty(Request request, String propertyName) {
+    List<String> list = getPropertyList(request, propertyName);
+    return list.isEmpty() ? null : list.get(0);
+  }
+
+  /**
+   * Returns a list of properties from a request
+   * @param request
+   * @param propertyName
+   * @return
+   */
+  public static List<String> getPropertyList(Request request, String propertyName) {
+    List<String> list = new LinkedList<String>();
+    for (Map<String, Object> propertyMap : request.getBody().getPropertySets()) {
+      String userName = String.valueOf(propertyMap.get(propertyName));
+      list.add(userName);
+    }
+    return list;
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/6320d589/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/RequestEventCreator.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/RequestEventCreator.java b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/RequestEventCreator.java
index 3a33114..075e328 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/RequestEventCreator.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/RequestEventCreator.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.AddRequestRequestAuditEvent;
-import org.apache.ambari.server.audit.request.RequestAuditEventCreator;
 import org.apache.ambari.server.controller.internal.RequestOperationLevel;
 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/ServiceConfigDownloadEventCreator.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/ServiceConfigDownloadEventCreator.java b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/ServiceConfigDownloadEventCreator.java
index 0999010..7da45c2 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/ServiceConfigDownloadEventCreator.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/ServiceConfigDownloadEventCreator.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.ClientConfigDownloadRequestAuditEvent;
-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/ServiceEventCreator.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/ServiceEventCreator.java b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/ServiceEventCreator.java
index 65d94f9..0a49e6f 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/ServiceEventCreator.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/ServiceEventCreator.java
@@ -27,10 +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.DeleteServiceRequestAuditEvent;
 import org.apache.ambari.server.audit.event.request.StartOperationRequestAuditEvent;
-import org.apache.ambari.server.audit.request.RequestAuditEventCreator;
 import org.apache.ambari.server.controller.internal.RequestOperationLevel;
+import org.apache.ambari.server.controller.internal.ServiceResourceProvider;
 import org.apache.ambari.server.controller.spi.Resource;
-import org.apache.ambari.server.controller.utilities.PropertyHelper;
 
 import com.google.common.collect.ImmutableSet;
 
@@ -120,12 +119,12 @@ public class ServiceEventCreator implements RequestAuditEventCreator {
    * @return
    */
   private String getOperation(Request request) {
-    if (request.getBody().getRequestInfoProperties().containsKey(RequestOperationLevel.OPERATION_LEVEL_ID)) {
+    if (request.getBody().getRequestInfoProperties() != null && request.getBody().getRequestInfoProperties().containsKey(RequestOperationLevel.OPERATION_LEVEL_ID)) {
       String operation = "";
       if ("CLUSTER".equals(request.getBody().getRequestInfoProperties().get(RequestOperationLevel.OPERATION_LEVEL_ID))) {
         for (Map<String, Object> map : request.getBody().getPropertySets()) {
-          if (map.containsKey(PropertyHelper.getPropertyId("ServiceInfo", "state"))) {
-            operation = String.valueOf(map.get(PropertyHelper.getPropertyId("ServiceInfo", "state"))) + ": all services"
+          if (map.containsKey(ServiceResourceProvider.SERVICE_SERVICE_STATE_PROPERTY_ID)) {
+            operation = String.valueOf(map.get(ServiceResourceProvider.SERVICE_SERVICE_STATE_PROPERTY_ID)) + ": all services"
               + " (" + request.getBody().getRequestInfoProperties().get(RequestOperationLevel.OPERATION_CLUSTER_ID) + ")";
             break;
           }
@@ -133,8 +132,8 @@ public class ServiceEventCreator implements RequestAuditEventCreator {
       }
       if ("SERVICE".equals(request.getBody().getRequestInfoProperties().get(RequestOperationLevel.OPERATION_LEVEL_ID))) {
         for (Map<String, Object> map : request.getBody().getPropertySets()) {
-          if (map.containsKey(PropertyHelper.getPropertyId("ServiceInfo", "state"))) {
-            operation = String.valueOf(map.get(PropertyHelper.getPropertyId("ServiceInfo", "state"))) + ": " + map.get(PropertyHelper.getPropertyId("ServiceInfo", "service_name"))
+          if (map.containsKey(ServiceResourceProvider.SERVICE_SERVICE_STATE_PROPERTY_ID)) {
+            operation = String.valueOf(map.get(ServiceResourceProvider.SERVICE_SERVICE_STATE_PROPERTY_ID)) + ": " + map.get(ServiceResourceProvider.SERVICE_SERVICE_NAME_PROPERTY_ID)
               + " (" + request.getBody().getRequestInfoProperties().get(RequestOperationLevel.OPERATION_CLUSTER_ID) + ")";
             break;
           }
@@ -144,8 +143,8 @@ public class ServiceEventCreator implements RequestAuditEventCreator {
     }
 
     for (Map<String, Object> map : request.getBody().getPropertySets()) {
-      if (map.containsKey(PropertyHelper.getPropertyId("ServiceInfo", "maintenance_state"))) {
-        return "Turn " + map.get(PropertyHelper.getPropertyId("ServiceInfo", "maintenance_state")) + " Maintenance Mode for " + map.get(PropertyHelper.getPropertyId("ServiceInfo", "service_name"));
+      if (map.containsKey(ServiceResourceProvider.SERVICE_MAINTENANCE_STATE_PROPERTY_ID)) {
+        return "Turn " + map.get(ServiceResourceProvider.SERVICE_MAINTENANCE_STATE_PROPERTY_ID) + " Maintenance Mode for " + map.get(ServiceResourceProvider.SERVICE_SERVICE_NAME_PROPERTY_ID);
       }
     }
     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/UnauthorizedEventCreator.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/UnauthorizedEventCreator.java b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/UnauthorizedEventCreator.java
index db3c934..64644fb 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/UnauthorizedEventCreator.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/UnauthorizedEventCreator.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.AccessUnauthorizedAuditEvent;
 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/UpgradeEventCreator.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/UpgradeEventCreator.java b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/UpgradeEventCreator.java
index f9f4152..456aa00 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/UpgradeEventCreator.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/UpgradeEventCreator.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.AddUpgradeRequestAuditEvent;
-import org.apache.ambari.server.audit.request.RequestAuditEventCreator;
+import org.apache.ambari.server.controller.internal.UpgradeResourceProvider;
 import org.apache.ambari.server.controller.spi.Resource;
-import org.apache.ambari.server.controller.utilities.PropertyHelper;
 
 import com.google.common.collect.ImmutableSet;
 
@@ -84,23 +83,10 @@ public class UpgradeEventCreator implements RequestAuditEventCreator {
       .withResultStatus(result.getStatus())
       .withUrl(request.getURI())
       .withRemoteIp(request.getRemoteAddress())
-      .withRepositoryVersion(getProperty(request, "repository_version"))
-      .withUpgradeType(getProperty(request, "upgrade_type"))
-      .withClusterName(getProperty(request, "cluster_name"))
+      .withRepositoryVersion(RequestAuditEventCreatorHelper.getProperty(request, UpgradeResourceProvider.UPGRADE_VERSION))
+      .withUpgradeType(RequestAuditEventCreatorHelper.getProperty(request, UpgradeResourceProvider.UPGRADE_TYPE))
+      .withClusterName(RequestAuditEventCreatorHelper.getProperty(request, UpgradeResourceProvider.UPGRADE_CLUSTER_NAME))
       .build();
 
   }
-
-  /**
-   * Returns property from the request based on the propertyName parameter
-   * @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("Upgrade", 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/UpgradeItemEventCreator.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/UpgradeItemEventCreator.java b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/UpgradeItemEventCreator.java
index 1869909..2919388 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/UpgradeItemEventCreator.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/UpgradeItemEventCreator.java
@@ -25,7 +25,7 @@ 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.UpdateUpgradeItemRequestAuditEvent;
-import org.apache.ambari.server.audit.request.RequestAuditEventCreator;
+import org.apache.ambari.server.controller.internal.UpgradeItemResourceProvider;
 import org.apache.ambari.server.controller.spi.Resource;
 import org.apache.ambari.server.controller.utilities.PropertyHelper;
 
@@ -84,23 +84,9 @@ public class UpgradeItemEventCreator implements RequestAuditEventCreator {
       .withResultStatus(result.getStatus())
       .withUrl(request.getURI())
       .withRemoteIp(request.getRemoteAddress())
-      .withStatus(getProperty(request, "status"))
-      .withStageId(getProperty(request, "stage_id"))
-      .withRequestId(getProperty(request, "request_id"))
+      .withStatus(RequestAuditEventCreatorHelper.getProperty(request, PropertyHelper.getPropertyId("UpgradeItem", "status")))
+      .withStageId(RequestAuditEventCreatorHelper.getProperty(request, UpgradeItemResourceProvider.UPGRADE_ITEM_STAGE_ID))
+      .withRequestId(RequestAuditEventCreatorHelper.getProperty(request, UpgradeItemResourceProvider.UPGRADE_REQUEST_ID))
       .build();
-
-  }
-
-  /**
-   * Returns property from the request based on the propertyName parameter
-   * @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("UpgradeItem", 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/UserEventCreator.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/UserEventCreator.java b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/UserEventCreator.java
index 89f0755..54d02a7 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/UserEventCreator.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/UserEventCreator.java
@@ -29,9 +29,8 @@ import org.apache.ambari.server.audit.event.request.AdminUserRequestAuditEvent;
 import org.apache.ambari.server.audit.event.request.CreateUserRequestAuditEvent;
 import org.apache.ambari.server.audit.event.request.DeleteUserRequestAuditEvent;
 import org.apache.ambari.server.audit.event.request.UserPasswordChangeRequestAuditEvent;
-import org.apache.ambari.server.audit.request.RequestAuditEventCreator;
+import org.apache.ambari.server.controller.internal.UserResourceProvider;
 import org.apache.ambari.server.controller.spi.Resource;
-import org.apache.ambari.server.controller.utilities.PropertyHelper;
 
 import com.google.common.collect.ImmutableSet;
 
@@ -149,7 +148,7 @@ public class UserEventCreator implements RequestAuditEventCreator {
    * @return
    */
   private boolean isAdmin(Request request) {
-    return hasAdmin(request) && "true".equals(request.getBody().getPropertySets().iterator().next().get(PropertyHelper.getPropertyId("Users", "admin")));
+    return hasAdmin(request) && "true".equals(RequestAuditEventCreatorHelper.getProperty(request, UserResourceProvider.USER_ADMIN_PROPERTY_ID));
   }
 
   /**
@@ -158,7 +157,7 @@ public class UserEventCreator implements RequestAuditEventCreator {
    * @return
    */
   private boolean isActive(Request request) {
-    return hasActive(request) && "true".equals(request.getBody().getPropertySets().iterator().next().get(PropertyHelper.getPropertyId("Users", "active")));
+    return hasActive(request) && "true".equals(RequestAuditEventCreatorHelper.getProperty(request, UserResourceProvider.USER_ACTIVE_PROPERTY_ID));
   }
 
   /**
@@ -167,7 +166,7 @@ public class UserEventCreator implements RequestAuditEventCreator {
    * @return
    */
   private boolean hasAdmin(Request request) {
-    return !request.getBody().getPropertySets().isEmpty() && request.getBody().getPropertySets().iterator().next().containsKey(PropertyHelper.getPropertyId("Users", "admin"));
+    return !request.getBody().getPropertySets().isEmpty() && request.getBody().getPropertySets().iterator().next().containsKey(UserResourceProvider.USER_ADMIN_PROPERTY_ID);
   }
 
   /**
@@ -176,7 +175,7 @@ public class UserEventCreator implements RequestAuditEventCreator {
    * @return
    */
   private boolean hasActive(Request request) {
-    return !request.getBody().getPropertySets().isEmpty() && request.getBody().getPropertySets().iterator().next().containsKey(PropertyHelper.getPropertyId("Users", "active"));
+    return !request.getBody().getPropertySets().isEmpty() && request.getBody().getPropertySets().iterator().next().containsKey(UserResourceProvider.USER_ACTIVE_PROPERTY_ID);
   }
 
   /**
@@ -185,7 +184,7 @@ public class UserEventCreator implements RequestAuditEventCreator {
    * @return
    */
   private boolean hasOldPassword(Request request) {
-    return !request.getBody().getPropertySets().isEmpty() && request.getBody().getPropertySets().iterator().next().containsKey(PropertyHelper.getPropertyId("Users", "old_password"));
+    return !request.getBody().getPropertySets().isEmpty() && request.getBody().getPropertySets().iterator().next().containsKey(UserResourceProvider.USER_OLD_PASSWORD_PROPERTY_ID);
   }
 
   /**
@@ -195,7 +194,7 @@ public class UserEventCreator implements RequestAuditEventCreator {
    */
   private String getUsername(Request request) {
     if (!request.getBody().getPropertySets().isEmpty()) {
-      return String.valueOf(request.getBody().getPropertySets().iterator().next().get(PropertyHelper.getPropertyId("Users", "user_name")));
+      return String.valueOf(request.getBody().getPropertySets().iterator().next().get(UserResourceProvider.USER_USERNAME_PROPERTY_ID));
     }
     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/ValidationIgnoreEventCreator.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/ValidationIgnoreEventCreator.java b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/ValidationIgnoreEventCreator.java
index 081f3d3..73277cd 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/ValidationIgnoreEventCreator.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/ValidationIgnoreEventCreator.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/ViewInstanceEventCreator.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/ViewInstanceEventCreator.java b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/ViewInstanceEventCreator.java
index a9a3fcd..2197380 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/ViewInstanceEventCreator.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/ViewInstanceEventCreator.java
@@ -27,9 +27,8 @@ import org.apache.ambari.server.audit.event.AuditEvent;
 import org.apache.ambari.server.audit.event.request.AddViewInstanceRequestAuditEvent;
 import org.apache.ambari.server.audit.event.request.ChangeViewInstanceRequestAuditEvent;
 import org.apache.ambari.server.audit.event.request.DeleteViewInstanceRequestAuditEvent;
-import org.apache.ambari.server.audit.request.RequestAuditEventCreator;
+import org.apache.ambari.server.controller.internal.ViewInstanceResourceProvider;
 import org.apache.ambari.server.controller.spi.Resource;
-import org.apache.ambari.server.controller.utilities.PropertyHelper;
 
 import com.google.common.collect.ImmutableSet;
 
@@ -89,11 +88,11 @@ public class ViewInstanceEventCreator implements RequestAuditEventCreator {
           .withResultStatus(result.getStatus())
           .withUrl(request.getURI())
           .withRemoteIp(request.getRemoteAddress())
-          .withType(getProperty(request, PropertyHelper.getPropertyId("ViewInstanceInfo", "view_name")))
-          .withVersion(getProperty(request, PropertyHelper.getPropertyId("ViewInstanceInfo", "version")))
-          .withName(getProperty(request, PropertyHelper.getPropertyId("ViewInstanceInfo", "instance_name")))
-          .withDisplayName(getProperty(request, PropertyHelper.getPropertyId("ViewInstanceInfo", "label")))
-          .withDescription(getProperty(request, PropertyHelper.getPropertyId("ViewInstanceInfo", "description")))
+          .withType(RequestAuditEventCreatorHelper.getProperty(request, ViewInstanceResourceProvider.VIEW_NAME_PROPERTY_ID))
+          .withVersion(RequestAuditEventCreatorHelper.getProperty(request, ViewInstanceResourceProvider.VIEW_VERSION_PROPERTY_ID))
+          .withName(RequestAuditEventCreatorHelper.getProperty(request, ViewInstanceResourceProvider.INSTANCE_NAME_PROPERTY_ID))
+          .withDisplayName(RequestAuditEventCreatorHelper.getProperty(request, ViewInstanceResourceProvider.LABEL_PROPERTY_ID))
+          .withDescription(RequestAuditEventCreatorHelper.getProperty(request, ViewInstanceResourceProvider.DESCRIPTION_PROPERTY_ID))
           .build();
 
       case PUT:
@@ -103,11 +102,11 @@ public class ViewInstanceEventCreator implements RequestAuditEventCreator {
           .withResultStatus(result.getStatus())
           .withUrl(request.getURI())
           .withRemoteIp(request.getRemoteAddress())
-          .withType(getProperty(request, PropertyHelper.getPropertyId("ViewInstanceInfo", "view_name")))
-          .withVersion(getProperty(request, PropertyHelper.getPropertyId("ViewInstanceInfo", "version")))
-          .withName(getProperty(request, PropertyHelper.getPropertyId("ViewInstanceInfo", "instance_name")))
-          .withDisplayName(getProperty(request, PropertyHelper.getPropertyId("ViewInstanceInfo", "label")))
-          .withDescription(getProperty(request, PropertyHelper.getPropertyId("ViewInstanceInfo", "description")))
+          .withType(RequestAuditEventCreatorHelper.getProperty(request, ViewInstanceResourceProvider.VIEW_NAME_PROPERTY_ID))
+          .withVersion(RequestAuditEventCreatorHelper.getProperty(request, ViewInstanceResourceProvider.VIEW_VERSION_PROPERTY_ID))
+          .withName(RequestAuditEventCreatorHelper.getProperty(request, ViewInstanceResourceProvider.INSTANCE_NAME_PROPERTY_ID))
+          .withDisplayName(RequestAuditEventCreatorHelper.getProperty(request, ViewInstanceResourceProvider.LABEL_PROPERTY_ID))
+          .withDescription(RequestAuditEventCreatorHelper.getProperty(request, ViewInstanceResourceProvider.DESCRIPTION_PROPERTY_ID))
           .build();
 
       case DELETE:
@@ -126,18 +125,4 @@ public class ViewInstanceEventCreator implements RequestAuditEventCreator {
         return null;
     }
   }
-
-  /**
-   * Returns property from the requet 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;
-  }
-
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/6320d589/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/ViewPrivilegeEventCreator.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/ViewPrivilegeEventCreator.java b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/ViewPrivilegeEventCreator.java
index d2d7bd9..56d35c0 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/ViewPrivilegeEventCreator.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/ViewPrivilegeEventCreator.java
@@ -29,9 +29,11 @@ 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.ViewPrivilegeChangeRequestAuditEvent;
-import org.apache.ambari.server.audit.request.RequestAuditEventCreator;
+import org.apache.ambari.server.controller.internal.ViewPrivilegeResourceProvider;
 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 ViewPrivilegeEventCreator implements RequestAuditEventCreator {
   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);
 
     return ViewPrivilegeChangeRequestAuditEvent.builder()
       .withTimestamp(System.currentTimeMillis())
@@ -92,9 +94,9 @@ public class ViewPrivilegeEventCreator implements RequestAuditEventCreator {
       .withResultStatus(result.getStatus())
       .withUrl(request.getURI())
       .withRemoteIp(request.getRemoteAddress())
-      .withType(getProperty(request, PropertyHelper.getPropertyId("PrivilegeInfo", "view_name")))
-      .withVersion(getProperty(request, PropertyHelper.getPropertyId("PrivilegeInfo", "version")))
-      .withName(getProperty(request, PropertyHelper.getPropertyId("PrivilegeInfo", "instance_name")))
+      .withType(RequestAuditEventCreatorHelper.getProperty(request, ViewPrivilegeResourceProvider.PRIVILEGE_VIEW_NAME_PROPERTY_ID))
+      .withVersion(RequestAuditEventCreatorHelper.getProperty(request, ViewPrivilegeResourceProvider.PRIVILEGE_VIEW_VERSION_PROPERTY_ID))
+      .withName(RequestAuditEventCreatorHelper.getProperty(request, ViewPrivilegeResourceProvider.PRIVILEGE_INSTANCE_NAME_PROPERTY_ID))
       .withUsers(users)
       .withGroups(groups)
       .build();
@@ -102,19 +104,6 @@ public class ViewPrivilegeEventCreator implements RequestAuditEventCreator {
   }
 
   /**
-   * Returns 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;
-  }
-
-  /**
    * Assembles entities from the request. The result can contain users or groups based on the value of type parameter
    * @param request
    * @param type
@@ -124,10 +113,10 @@ public class ViewPrivilegeEventCreator 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(ViewPrivilegeResourceProvider.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(ViewPrivilegeResourceProvider.PERMISSION_NAME_PROPERTY_ID));
+        String name = String.valueOf(propertyMap.get(ViewPrivilegeResourceProvider.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/cleanup/ClasspathScannerUtils.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/cleanup/ClasspathScannerUtils.java b/ambari-server/src/main/java/org/apache/ambari/server/cleanup/ClasspathScannerUtils.java
index 4c12a62..01487f0 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/cleanup/ClasspathScannerUtils.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/cleanup/ClasspathScannerUtils.java
@@ -20,11 +20,11 @@ package org.apache.ambari.server.cleanup;
 
 import java.io.IOException;
 import java.lang.annotation.Annotation;
-import java.util.Arrays;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 
+import org.apache.commons.lang.ClassUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -113,7 +113,7 @@ public class ClasspathScannerUtils {
   private static boolean checkSubClasses(Class candidate, List<Class> selectors) {
     boolean ret = false;
     LOGGER.debug("Checking interfaces for: [{}]", candidate);
-    List<Class> interfaces = Arrays.asList(candidate.getInterfaces());
+    List interfaces = ClassUtils.getAllInterfaces(candidate);
 
     for (Class selectorItf : selectors) {
       if (interfaces.contains(selectorItf)) {

http://git-wip-us.apache.org/repos/asf/ambari/blob/6320d589/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertGroupResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertGroupResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertGroupResourceProvider.java
index 36469c1..dafd194 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertGroupResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertGroupResourceProvider.java
@@ -61,13 +61,13 @@ import com.google.inject.Inject;
 public class AlertGroupResourceProvider extends
     AbstractControllerResourceProvider {
 
-  protected static final String ALERT_GROUP = "AlertGroup";
-  protected static final String ALERT_GROUP_ID = "AlertGroup/id";
-  protected static final String ALERT_GROUP_CLUSTER_NAME = "AlertGroup/cluster_name";
-  protected static final String ALERT_GROUP_NAME = "AlertGroup/name";
-  protected static final String ALERT_GROUP_DEFAULT = "AlertGroup/default";
-  protected static final String ALERT_GROUP_DEFINITIONS = "AlertGroup/definitions";
-  protected static final String ALERT_GROUP_TARGETS = "AlertGroup/targets";
+  public static final String ALERT_GROUP = "AlertGroup";
+  public static final String ALERT_GROUP_ID = "AlertGroup/id";
+  public static final String ALERT_GROUP_CLUSTER_NAME = "AlertGroup/cluster_name";
+  public static final String ALERT_GROUP_NAME = "AlertGroup/name";
+  public static final String ALERT_GROUP_DEFAULT = "AlertGroup/default";
+  public static final String ALERT_GROUP_DEFINITIONS = "AlertGroup/definitions";
+  public static final String ALERT_GROUP_TARGETS = "AlertGroup/targets";
 
   private static final Set<String> PK_PROPERTY_IDS = new HashSet<String>(
       Arrays.asList(ALERT_GROUP_ID, ALERT_GROUP_CLUSTER_NAME));

http://git-wip-us.apache.org/repos/asf/ambari/blob/6320d589/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertTargetResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertTargetResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertTargetResourceProvider.java
index 992d33f..3b749d9 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertTargetResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertTargetResourceProvider.java
@@ -67,15 +67,15 @@ import com.google.inject.Inject;
 public class AlertTargetResourceProvider extends
  AbstractAuthorizedResourceProvider {
 
-  protected static final String ALERT_TARGET = "AlertTarget";
-  protected static final String ALERT_TARGET_ID = "AlertTarget/id";
-  protected static final String ALERT_TARGET_NAME = "AlertTarget/name";
-  protected static final String ALERT_TARGET_DESCRIPTION = "AlertTarget/description";
-  protected static final String ALERT_TARGET_NOTIFICATION_TYPE = "AlertTarget/notification_type";
-  protected static final String ALERT_TARGET_PROPERTIES = "AlertTarget/properties";
-  protected static final String ALERT_TARGET_GROUPS = "AlertTarget/groups";
-  protected static final String ALERT_TARGET_STATES = "AlertTarget/alert_states";
-  protected static final String ALERT_TARGET_GLOBAL = "AlertTarget/global";
+  public static final String ALERT_TARGET = "AlertTarget";
+  public static final String ALERT_TARGET_ID = "AlertTarget/id";
+  public static final String ALERT_TARGET_NAME = "AlertTarget/name";
+  public static final String ALERT_TARGET_DESCRIPTION = "AlertTarget/description";
+  public static final String ALERT_TARGET_NOTIFICATION_TYPE = "AlertTarget/notification_type";
+  public static final String ALERT_TARGET_PROPERTIES = "AlertTarget/properties";
+  public static final String ALERT_TARGET_GROUPS = "AlertTarget/groups";
+  public static final String ALERT_TARGET_STATES = "AlertTarget/alert_states";
+  public static final String ALERT_TARGET_GLOBAL = "AlertTarget/global";
 
   private static final Set<String> PK_PROPERTY_IDS = new HashSet<String>(
       Arrays.asList(ALERT_TARGET_ID, ALERT_TARGET_NAME));

http://git-wip-us.apache.org/repos/asf/ambari/blob/6320d589/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/GroupResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/GroupResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/GroupResourceProvider.java
index 1678931..0d215ae 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/GroupResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/GroupResourceProvider.java
@@ -42,13 +42,13 @@ import org.apache.ambari.server.security.authorization.RoleAuthorization;
 /**
  * Resource provider for group resources.
  */
-class GroupResourceProvider extends AbstractControllerResourceProvider {
+public class GroupResourceProvider extends AbstractControllerResourceProvider {
 
   // ----- Property ID constants ---------------------------------------------
 
   // Groups
-  protected static final String GROUP_GROUPNAME_PROPERTY_ID  = PropertyHelper.getPropertyId("Groups", "group_name");
-  protected static final String GROUP_LDAP_GROUP_PROPERTY_ID = PropertyHelper.getPropertyId("Groups", "ldap_group");
+  public static final String GROUP_GROUPNAME_PROPERTY_ID  = PropertyHelper.getPropertyId("Groups", "group_name");
+  public static final String GROUP_LDAP_GROUP_PROPERTY_ID = PropertyHelper.getPropertyId("Groups", "ldap_group");
 
   private static Set<String> pkPropertyIds =
       new HashSet<String>(Arrays.asList(new String[]{

http://git-wip-us.apache.org/repos/asf/ambari/blob/6320d589/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostComponentResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostComponentResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostComponentResourceProvider.java
index 3c33a23..11db913 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostComponentResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostComponentResourceProvider.java
@@ -81,35 +81,35 @@ public class HostComponentResourceProvider extends AbstractControllerResourcePro
   // ----- Property ID constants ---------------------------------------------
 
   // Host Components
-  protected static final String HOST_COMPONENT_CLUSTER_NAME_PROPERTY_ID
+  public static final String HOST_COMPONENT_CLUSTER_NAME_PROPERTY_ID
       = PropertyHelper.getPropertyId("HostRoles", "cluster_name");
-  protected static final String HOST_COMPONENT_SERVICE_NAME_PROPERTY_ID
+  public static final String HOST_COMPONENT_SERVICE_NAME_PROPERTY_ID
       = PropertyHelper.getPropertyId("HostRoles", "service_name");
-  protected static final String HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID
+  public static final String HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID
       = PropertyHelper.getPropertyId("HostRoles", "component_name");
-  protected static final String HOST_COMPONENT_DISPLAY_NAME_PROPERTY_ID
+  public static final String HOST_COMPONENT_DISPLAY_NAME_PROPERTY_ID
       = PropertyHelper.getPropertyId("HostRoles", "display_name");
-  protected static final String HOST_COMPONENT_HOST_NAME_PROPERTY_ID
+  public static final String HOST_COMPONENT_HOST_NAME_PROPERTY_ID
       = PropertyHelper.getPropertyId("HostRoles", "host_name");
-  protected static final String HOST_COMPONENT_STATE_PROPERTY_ID
+  public static final String HOST_COMPONENT_STATE_PROPERTY_ID
       = PropertyHelper.getPropertyId("HostRoles", "state");
-  protected static final String HOST_COMPONENT_DESIRED_STATE_PROPERTY_ID
+  public static final String HOST_COMPONENT_DESIRED_STATE_PROPERTY_ID
       = PropertyHelper.getPropertyId("HostRoles", "desired_state");
-  protected static final String HOST_COMPONENT_STACK_ID_PROPERTY_ID
+  public static final String HOST_COMPONENT_STACK_ID_PROPERTY_ID
       = PropertyHelper.getPropertyId("HostRoles", "stack_id");
-  protected static final String HOST_COMPONENT_DESIRED_STACK_ID_PROPERTY_ID
+  public static final String HOST_COMPONENT_DESIRED_STACK_ID_PROPERTY_ID
       = PropertyHelper.getPropertyId("HostRoles", "desired_stack_id");
-  protected static final String HOST_COMPONENT_ACTUAL_CONFIGS_PROPERTY_ID
+  public static final String HOST_COMPONENT_ACTUAL_CONFIGS_PROPERTY_ID
       = PropertyHelper.getPropertyId("HostRoles", "actual_configs");
-  protected static final String HOST_COMPONENT_STALE_CONFIGS_PROPERTY_ID
+  public static final String HOST_COMPONENT_STALE_CONFIGS_PROPERTY_ID
       = PropertyHelper.getPropertyId("HostRoles", "stale_configs");
-  protected static final String HOST_COMPONENT_DESIRED_ADMIN_STATE_PROPERTY_ID
+  public static final String HOST_COMPONENT_DESIRED_ADMIN_STATE_PROPERTY_ID
       = PropertyHelper.getPropertyId("HostRoles", "desired_admin_state");
-  protected static final String HOST_COMPONENT_MAINTENANCE_STATE_PROPERTY_ID
+  public static final String HOST_COMPONENT_MAINTENANCE_STATE_PROPERTY_ID
       = "HostRoles/maintenance_state";
-  protected static final String HOST_COMPONENT_HDP_VERSION_PROPERTY_ID
+  public static final String HOST_COMPONENT_HDP_VERSION_PROPERTY_ID
       = PropertyHelper.getPropertyId("HostRoles", "hdp_version");
-  protected static final String HOST_COMPONENT_UPGRADE_STATE_PROPERTY_ID = "HostRoles/upgrade_state";
+  public static final String HOST_COMPONENT_UPGRADE_STATE_PROPERTY_ID = "HostRoles/upgrade_state";
 
   //Component name mappings
   private final Map<String, PropertyProvider> HOST_COMPONENT_PROPERTIES_PROVIDER = new HashMap<String, PropertyProvider>();

http://git-wip-us.apache.org/repos/asf/ambari/blob/6320d589/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/MemberResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/MemberResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/MemberResourceProvider.java
index 04e5f67..307ed3f 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/MemberResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/MemberResourceProvider.java
@@ -52,8 +52,8 @@ public class MemberResourceProvider extends AbstractControllerResourceProvider {
   // ----- Property ID constants ---------------------------------------------
 
   // Members
-  protected static final String MEMBER_GROUP_NAME_PROPERTY_ID = PropertyHelper.getPropertyId("MemberInfo", "group_name");
-  protected static final String MEMBER_USER_NAME_PROPERTY_ID  = PropertyHelper.getPropertyId("MemberInfo", "user_name");
+  public static final String MEMBER_GROUP_NAME_PROPERTY_ID = PropertyHelper.getPropertyId("MemberInfo", "group_name");
+  public static final String MEMBER_USER_NAME_PROPERTY_ID  = PropertyHelper.getPropertyId("MemberInfo", "user_name");
 
   private static Set<String> pkPropertyIds =
       new HashSet<String>(Arrays.asList(new String[]{

http://git-wip-us.apache.org/repos/asf/ambari/blob/6320d589/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeItemResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeItemResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeItemResourceProvider.java
index a45b1ac..8518593 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeItemResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeItemResourceProvider.java
@@ -56,11 +56,11 @@ import com.google.inject.Inject;
 @StaticallyInject
 public class UpgradeItemResourceProvider extends ReadOnlyResourceProvider {
 
-  protected static final String UPGRADE_CLUSTER_NAME = "UpgradeItem/cluster_name";
-  protected static final String UPGRADE_REQUEST_ID = "UpgradeItem/request_id";
-  protected static final String UPGRADE_GROUP_ID = "UpgradeItem/group_id";
-  protected static final String UPGRADE_ITEM_STAGE_ID = "UpgradeItem/stage_id";
-  protected static final String UPGRADE_ITEM_TEXT = "UpgradeItem/text";
+  public static final String UPGRADE_CLUSTER_NAME = "UpgradeItem/cluster_name";
+  public static final String UPGRADE_REQUEST_ID = "UpgradeItem/request_id";
+  public static final String UPGRADE_GROUP_ID = "UpgradeItem/group_id";
+  public static final String UPGRADE_ITEM_STAGE_ID = "UpgradeItem/stage_id";
+  public static final String UPGRADE_ITEM_TEXT = "UpgradeItem/text";
 
   private static final Set<String> PK_PROPERTY_IDS = new HashSet<String>(
       Arrays.asList(UPGRADE_REQUEST_ID, UPGRADE_ITEM_STAGE_ID));

http://git-wip-us.apache.org/repos/asf/ambari/blob/6320d589/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java
index 0384f6c..4cd0419 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java
@@ -128,20 +128,20 @@ import com.google.inject.persist.Transactional;
 @StaticallyInject
 public class UpgradeResourceProvider extends AbstractControllerResourceProvider {
 
-  protected static final String UPGRADE_CLUSTER_NAME = "Upgrade/cluster_name";
-  protected static final String UPGRADE_VERSION = "Upgrade/repository_version";
-  protected static final String UPGRADE_TYPE = "Upgrade/upgrade_type";
-  protected static final String UPGRADE_PACK = "Upgrade/pack";
-  protected static final String UPGRADE_REQUEST_ID = "Upgrade/request_id";
-  protected static final String UPGRADE_FROM_VERSION = "Upgrade/from_version";
-  protected static final String UPGRADE_TO_VERSION = "Upgrade/to_version";
-  protected static final String UPGRADE_DIRECTION = "Upgrade/direction";
-  protected static final String UPGRADE_DOWNGRADE_ALLOWED = "Upgrade/downgrade_allowed";
-  protected static final String UPGRADE_REQUEST_STATUS = "Upgrade/request_status";
-  protected static final String UPGRADE_SUSPENDED = "Upgrade/suspended";
-  protected static final String UPGRADE_ABORT_REASON = "Upgrade/abort_reason";
-  protected static final String UPGRADE_SKIP_PREREQUISITE_CHECKS = "Upgrade/skip_prerequisite_checks";
-  protected static final String UPGRADE_FAIL_ON_CHECK_WARNINGS = "Upgrade/fail_on_check_warnings";
+  public static final String UPGRADE_CLUSTER_NAME = "Upgrade/cluster_name";
+  public static final String UPGRADE_VERSION = "Upgrade/repository_version";
+  public static final String UPGRADE_TYPE = "Upgrade/upgrade_type";
+  public static final String UPGRADE_PACK = "Upgrade/pack";
+  public static final String UPGRADE_REQUEST_ID = "Upgrade/request_id";
+  public static final String UPGRADE_FROM_VERSION = "Upgrade/from_version";
+  public static final String UPGRADE_TO_VERSION = "Upgrade/to_version";
+  public static final String UPGRADE_DIRECTION = "Upgrade/direction";
+  public static final String UPGRADE_DOWNGRADE_ALLOWED = "Upgrade/downgrade_allowed";
+  public static final String UPGRADE_REQUEST_STATUS = "Upgrade/request_status";
+  public static final String UPGRADE_SUSPENDED = "Upgrade/suspended";
+  public static final String UPGRADE_ABORT_REASON = "Upgrade/abort_reason";
+  public static final String UPGRADE_SKIP_PREREQUISITE_CHECKS = "Upgrade/skip_prerequisite_checks";
+  public static final String UPGRADE_FAIL_ON_CHECK_WARNINGS = "Upgrade/fail_on_check_warnings";
 
 
   /**

http://git-wip-us.apache.org/repos/asf/ambari/blob/6320d589/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UserResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UserResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UserResourceProvider.java
index fee1826..099cfd4 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UserResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UserResourceProvider.java
@@ -35,19 +35,19 @@ import java.util.Set;
 /**
  * Resource provider for user resources.
  */
-class UserResourceProvider extends AbstractControllerResourceProvider {
+public class UserResourceProvider extends AbstractControllerResourceProvider {
 
   // ----- Property ID constants ---------------------------------------------
 
   // Users
-  protected static final String USER_USERNAME_PROPERTY_ID     = PropertyHelper.getPropertyId("Users", "user_name");
-  protected static final String USER_PASSWORD_PROPERTY_ID     = PropertyHelper.getPropertyId("Users", "password");
-  protected static final String USER_OLD_PASSWORD_PROPERTY_ID = PropertyHelper.getPropertyId("Users", "old_password");
-  protected static final String USER_LDAP_USER_PROPERTY_ID    = PropertyHelper.getPropertyId("Users", "ldap_user");
-  protected static final String USER_TYPE_PROPERTY_ID         = PropertyHelper.getPropertyId("Users", "user_type");
-  protected static final String USER_ACTIVE_PROPERTY_ID       = PropertyHelper.getPropertyId("Users", "active");
-  protected static final String USER_GROUPS_PROPERTY_ID       = PropertyHelper.getPropertyId("Users", "groups");
-  protected static final String USER_ADMIN_PROPERTY_ID        = PropertyHelper.getPropertyId("Users", "admin");
+  public static final String USER_USERNAME_PROPERTY_ID     = PropertyHelper.getPropertyId("Users", "user_name");
+  public static final String USER_PASSWORD_PROPERTY_ID     = PropertyHelper.getPropertyId("Users", "password");
+  public static final String USER_OLD_PASSWORD_PROPERTY_ID = PropertyHelper.getPropertyId("Users", "old_password");
+  public static final String USER_LDAP_USER_PROPERTY_ID    = PropertyHelper.getPropertyId("Users", "ldap_user");
+  public static final String USER_TYPE_PROPERTY_ID         = PropertyHelper.getPropertyId("Users", "user_type");
+  public static final String USER_ACTIVE_PROPERTY_ID       = PropertyHelper.getPropertyId("Users", "active");
+  public static final String USER_GROUPS_PROPERTY_ID       = PropertyHelper.getPropertyId("Users", "groups");
+  public static final String USER_ADMIN_PROPERTY_ID        = PropertyHelper.getPropertyId("Users", "admin");
 
   private static Set<String> pkPropertyIds =
       new HashSet<String>(Arrays.asList(new String[]{

http://git-wip-us.apache.org/repos/asf/ambari/blob/6320d589/ambari-server/src/main/java/org/apache/ambari/server/notifications/dispatchers/EmailDispatcher.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/notifications/dispatchers/EmailDispatcher.java b/ambari-server/src/main/java/org/apache/ambari/server/notifications/dispatchers/EmailDispatcher.java
index 9c2b42b..e9009c3 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/notifications/dispatchers/EmailDispatcher.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/notifications/dispatchers/EmailDispatcher.java
@@ -68,7 +68,7 @@ public class EmailDispatcher implements NotificationDispatcher {
   /**
    * The JavaMail property for the {@code From:} header.
    */
-  private static final String JAVAMAIL_FROM_PROPERTY = "mail.smtp.from";
+  public static final String JAVAMAIL_FROM_PROPERTY = "mail.smtp.from";
 
   /**
    * {@inheritDoc}

http://git-wip-us.apache.org/repos/asf/ambari/blob/6320d589/ambari-server/src/main/java/org/apache/ambari/server/security/authentication/AmbariAuthenticationFilter.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/security/authentication/AmbariAuthenticationFilter.java b/ambari-server/src/main/java/org/apache/ambari/server/security/authentication/AmbariAuthenticationFilter.java
index 5663ed2..0a312f3 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/security/authentication/AmbariAuthenticationFilter.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/security/authentication/AmbariAuthenticationFilter.java
@@ -76,7 +76,7 @@ public class AmbariAuthenticationFilter extends BasicAuthenticationFilter {
   public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
     HttpServletRequest request = (HttpServletRequest) req;
     String header = request.getHeader("Authorization");
-    if (AuthorizationHelper.getAuthenticatedName() == null && (header == null || !header.startsWith("Basic "))) {
+    if (auditLogger.isEnabled() && AuthorizationHelper.getAuthenticatedName() == null && (header == null || !header.startsWith("Basic "))) {
       AuditEvent loginFailedAuditEvent = LoginAuditEvent.builder()
         .withRemoteIp(RequestUtils.getRemoteAddress(request))
         .withTimestamp(System.currentTimeMillis())
@@ -97,6 +97,9 @@ public class AmbariAuthenticationFilter extends BasicAuthenticationFilter {
    */
   @Override
   protected void onSuccessfulAuthentication(HttpServletRequest request, HttpServletResponse response, Authentication authResult) throws IOException {
+    if(!auditLogger.isEnabled()) {
+      return;
+    }
     AuditEvent loginSucceededAuditEvent = LoginAuditEvent.builder()
       .withRemoteIp(RequestUtils.getRemoteAddress(request))
       .withUserName(authResult.getName())
@@ -123,13 +126,15 @@ public class AmbariAuthenticationFilter extends BasicAuthenticationFilter {
     } catch (Exception e) {
       LOG.warn("Error occurred during decoding authorization header.",e);
     }
-    AuditEvent loginFailedAuditEvent = LoginAuditEvent.builder()
-      .withRemoteIp(RequestUtils.getRemoteAddress(request))
-      .withTimestamp(System.currentTimeMillis())
-      .withReasonOfFailure("Invalid username/password combination")
-      .withUserName(username)
-      .build();
-    auditLogger.log(loginFailedAuditEvent);
+    if(auditLogger.isEnabled()) {
+      AuditEvent loginFailedAuditEvent = LoginAuditEvent.builder()
+        .withRemoteIp(RequestUtils.getRemoteAddress(request))
+        .withTimestamp(System.currentTimeMillis())
+        .withReasonOfFailure("Invalid username/password combination")
+        .withUserName(username)
+        .build();
+      auditLogger.log(loginFailedAuditEvent);
+    }
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/ambari/blob/6320d589/ambari-server/src/main/java/org/apache/ambari/server/security/authorization/AmbariAuthorizationFilter.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/security/authorization/AmbariAuthorizationFilter.java b/ambari-server/src/main/java/org/apache/ambari/server/security/authorization/AmbariAuthorizationFilter.java
index 96d6131..5c74f07 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/security/authorization/AmbariAuthorizationFilter.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/security/authorization/AmbariAuthorizationFilter.java
@@ -137,12 +137,14 @@ public class AmbariAuthorizationFilter implements Filter {
       if (token != null) {
         InternalAuthenticationToken internalAuthenticationToken = new InternalAuthenticationToken(token);
         context.setAuthentication(internalAuthenticationToken);
-        LoginAuditEvent loginAuditEvent = LoginAuditEvent.builder()
-          .withUserName(internalAuthenticationToken.getName())
-          .withRemoteIp(RequestUtils.getRemoteAddress(httpRequest))
-          .withRoles(permissionHelper.getPermissionLabels(authentication))
-          .withTimestamp(System.currentTimeMillis()).build();
-        auditLogger.log(loginAuditEvent);
+        if(auditLogger.isEnabled()) {
+          LoginAuditEvent loginAuditEvent = LoginAuditEvent.builder()
+            .withUserName(internalAuthenticationToken.getName())
+            .withRemoteIp(RequestUtils.getRemoteAddress(httpRequest))
+            .withRoles(permissionHelper.getPermissionLabels(authentication))
+            .withTimestamp(System.currentTimeMillis()).build();
+          auditLogger.log(loginAuditEvent);
+        }
       } else {
         // for view access, we should redirect to the Ambari login
         if (requestURI.matches(VIEWS_CONTEXT_ALL_PATTERN)) {
@@ -207,14 +209,17 @@ public class AmbariAuthorizationFilter implements Filter {
       if (!authorized &&
           (!httpRequest.getMethod().equals("GET")
               || requestURI.matches(API_LDAP_SYNC_EVENTS_ALL_PATTERN))) {
-        auditEvent = AccessUnauthorizedAuditEvent.builder()
-          .withHttpMethodName(httpRequest.getMethod())
-          .withRemoteIp(RequestUtils.getRemoteAddress(httpRequest))
-          .withResourcePath(httpRequest.getRequestURI())
-          .withUserName(AuthorizationHelper.getAuthenticatedName())
-          .withTimestamp(System.currentTimeMillis())
-          .build();
-        auditLogger.log(auditEvent);
+
+        if(auditLogger.isEnabled()) {
+          auditEvent = AccessUnauthorizedAuditEvent.builder()
+            .withHttpMethodName(httpRequest.getMethod())
+            .withRemoteIp(RequestUtils.getRemoteAddress(httpRequest))
+            .withResourcePath(httpRequest.getRequestURI())
+            .withUserName(AuthorizationHelper.getAuthenticatedName())
+            .withTimestamp(System.currentTimeMillis())
+            .build();
+          auditLogger.log(auditEvent);
+        }
 
         httpResponse.setHeader("WWW-Authenticate", "Basic realm=\"" + realm + "\"");
         httpResponse.sendError(HttpServletResponse.SC_FORBIDDEN, "You do not have permissions to access this resource.");
@@ -224,7 +229,7 @@ public class AmbariAuthorizationFilter implements Filter {
     }
     if (AuthorizationHelper.getAuthenticatedName() != null) {
       httpResponse.setHeader("User", AuthorizationHelper.getAuthenticatedName());
-      if (httpResponse.getStatus() == HttpServletResponse.SC_FORBIDDEN) {
+      if (auditLogger.isEnabled() && httpResponse.getStatus() == HttpServletResponse.SC_FORBIDDEN) {
         auditEvent = AccessUnauthorizedAuditEvent.builder()
           .withHttpMethodName(httpRequest.getMethod())
           .withRemoteIp(RequestUtils.getRemoteAddress(httpRequest))

http://git-wip-us.apache.org/repos/asf/ambari/blob/6320d589/ambari-server/src/main/java/org/apache/ambari/server/security/authorization/PermissionHelper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/security/authorization/PermissionHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/security/authorization/PermissionHelper.java
index ecf2d7a..3531fda 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/security/authorization/PermissionHelper.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/security/authorization/PermissionHelper.java
@@ -54,6 +54,9 @@ public class PermissionHelper {
     Map<String,List<String>> permissionLabels = new HashMap<>();
     if (authentication.getAuthorities() != null) {
       for (GrantedAuthority grantedAuthority : authentication.getAuthorities()) {
+        if(!(grantedAuthority instanceof AmbariGrantedAuthority)) {
+          continue;
+        }
         AmbariGrantedAuthority ambariGrantedAuthority = (AmbariGrantedAuthority) grantedAuthority;
 
         PrivilegeEntity privilegeEntity = ambariGrantedAuthority.getPrivilegeEntity();

http://git-wip-us.apache.org/repos/asf/ambari/blob/6320d589/ambari-server/src/main/java/org/apache/ambari/server/state/services/AlertNoticeDispatchService.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/services/AlertNoticeDispatchService.java b/ambari-server/src/main/java/org/apache/ambari/server/state/services/AlertNoticeDispatchService.java
index 0b84568..9e424f7 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/services/AlertNoticeDispatchService.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/services/AlertNoticeDispatchService.java
@@ -129,7 +129,7 @@ public class AlertNoticeDispatchService extends AbstractScheduledService {
   /**
    * The property containing the dispatch recipients
    */
-  private static final String AMBARI_DISPATCH_RECIPIENTS = "ambari.dispatch.recipients";
+  public static final String AMBARI_DISPATCH_RECIPIENTS = "ambari.dispatch.recipients";
 
   /**
    * The context key for Ambari information to be passed to Velocity.

http://git-wip-us.apache.org/repos/asf/ambari/blob/6320d589/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java b/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java
index 3976c03..17c5513 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java
@@ -68,6 +68,7 @@ import org.apache.ambari.server.actionmanager.Stage;
 import org.apache.ambari.server.actionmanager.StageFactory;
 import org.apache.ambari.server.agent.HostStatus.Status;
 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.orm.GuiceJpaInitializer;
 import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
@@ -92,6 +93,7 @@ import org.apache.ambari.server.utils.StageUtils;
 import org.apache.commons.codec.binary.Base64;
 import org.apache.commons.codec.digest.DigestUtils;
 import org.codehaus.jackson.JsonGenerationException;
+import org.easymock.EasyMock;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Rule;
@@ -135,6 +137,9 @@ public class TestHeartbeatHandler {
   @Inject
   HeartbeatTestHelper heartbeatTestHelper;
 
+  @Inject
+  AuditLogger auditLogger;
+
   private UnitOfWork unitOfWork;
 
   @Rule
@@ -152,11 +157,13 @@ public class TestHeartbeatHandler {
     injector.injectMembers(this);
     log.debug("Using server os type=" + config.getServerOsType());
     unitOfWork = injector.getInstance(UnitOfWork.class);
+    EasyMock.replay(auditLogger);
   }
 
   @After
   public void teardown() throws AmbariException {
     injector.getInstance(PersistService.class).stop();
+    EasyMock.reset(auditLogger);
   }
 
   @Test

http://git-wip-us.apache.org/repos/asf/ambari/blob/6320d589/ambari-server/src/test/java/org/apache/ambari/server/audit/ActionDBAAccessorAuditlogTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/audit/ActionDBAAccessorAuditlogTest.java b/ambari-server/src/test/java/org/apache/ambari/server/audit/ActionDBAAccessorAuditlogTest.java
new file mode 100644
index 0000000..2fcf9d5
--- /dev/null
+++ b/ambari-server/src/test/java/org/apache/ambari/server/audit/ActionDBAAccessorAuditlogTest.java
@@ -0,0 +1,45 @@
+/*
+ * 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;
+
+import nl.jqno.equalsverifier.EqualsVerifier;
+
+import org.apache.ambari.server.actionmanager.ActionDBAccessorImpl;
+import org.junit.Test;
+
+public class ActionDBAAccessorAuditlogTest {
+
+  @Test
+  public void equalsVerifierTest() {
+
+    Class<?>[] innerClasses = ActionDBAccessorImpl.class.getDeclaredClasses();
+
+    for(Class<?> clazz : innerClasses) {
+      if(clazz.getSimpleName().contains("RequestDetails")) {
+        Class<?>[] innerClasses2 = clazz.getDeclaredClasses();
+        for(Class<?> clazz2 : innerClasses2) {
+          if (clazz2.getSimpleName().contains("Component")) {
+            EqualsVerifier.forClass(clazz2).verify();
+          }
+        }
+      }
+    }
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/6320d589/ambari-server/src/test/java/org/apache/ambari/server/audit/OperationStatusAuditEventTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/audit/OperationStatusAuditEventTest.java b/ambari-server/src/test/java/org/apache/ambari/server/audit/OperationStatusAuditEventTest.java
index 0d2e710..038cebc 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/audit/OperationStatusAuditEventTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/audit/OperationStatusAuditEventTest.java
@@ -38,6 +38,7 @@ public class OperationStatusAuditEventTest {
       .withTimestamp(System.currentTimeMillis())
       .withRequestId(testRequestId.toString())
       .withStatus(testStatus)
+      .withUserName("testuser")
       .withRequestContext("Start Service")
       .build();
 
@@ -45,7 +46,7 @@ public class OperationStatusAuditEventTest {
     String actualAuditMessage = evnt.getAuditMessage();
 
     // Then
-    String expectedAuditMessage = String.format("Operation(Start Service), Status(%s), RequestId(%s)", testStatus, testRequestId);
+    String expectedAuditMessage = String.format("User(testuser), Operation(Start Service), Status(%s), RequestId(%s)", testStatus, testRequestId);
 
     assertThat(actualAuditMessage, equalTo(expectedAuditMessage));
   }

http://git-wip-us.apache.org/repos/asf/ambari/blob/6320d589/ambari-server/src/test/java/org/apache/ambari/server/audit/request/AbstractBaseCreator.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/audit/request/AbstractBaseCreator.java b/ambari-server/src/test/java/org/apache/ambari/server/audit/request/AbstractBaseCreator.java
index 02ecb00..c405668 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/audit/request/AbstractBaseCreator.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/audit/request/AbstractBaseCreator.java
@@ -21,6 +21,7 @@ package org.apache.ambari.server.audit.request;
 import org.apache.ambari.server.api.services.Request;
 import org.apache.ambari.server.api.services.Result;
 import org.apache.ambari.server.audit.event.AuditEvent;
+import org.apache.ambari.server.audit.request.eventcreator.RequestAuditEventCreator;
 
 public abstract class AbstractBaseCreator implements RequestAuditEventCreator {
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/6320d589/ambari-server/src/test/java/org/apache/ambari/server/audit/request/RequestAuditLogModule.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/audit/request/RequestAuditLogModule.java b/ambari-server/src/test/java/org/apache/ambari/server/audit/request/RequestAuditLogModule.java
index 52ad44c..175e539 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/audit/request/RequestAuditLogModule.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/audit/request/RequestAuditLogModule.java
@@ -20,6 +20,7 @@ package org.apache.ambari.server.audit.request;
 
 import org.apache.ambari.server.audit.AuditLogger;
 import org.apache.ambari.server.audit.AuditLoggerDefaultImpl;
+import org.apache.ambari.server.audit.request.eventcreator.RequestAuditEventCreator;
 import org.easymock.EasyMock;
 
 import com.google.inject.AbstractModule;

http://git-wip-us.apache.org/repos/asf/ambari/blob/6320d589/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
index 05f3dcf..c79f9d2 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
@@ -72,6 +72,7 @@ import org.apache.ambari.server.actionmanager.StageFactory;
 import org.apache.ambari.server.actionmanager.TargetHostType;
 import org.apache.ambari.server.agent.ExecutionCommand;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
+import org.apache.ambari.server.audit.AuditLogger;
 import org.apache.ambari.server.audit.AuditLoggerModule;
 import org.apache.ambari.server.configuration.Configuration;
 import org.apache.ambari.server.controller.internal.ClusterStackVersionResourceProviderTest;
@@ -263,12 +264,14 @@ public class AmbariManagementControllerTest {
     topologyManager = injector.getInstance(TopologyManager.class);
     StageUtils.setTopologyManager(topologyManager);
     ActionManager.setTopologyManager(topologyManager);
+    EasyMock.replay(injector.getInstance(AuditLogger.class));
   }
 
   @After
   public void teardown() {
     injector.getInstance(PersistService.class).stop();
     actionDB = null;
+    EasyMock.reset(injector.getInstance(AuditLogger.class));
   }
 
   private void setOsFamily(Host host, String osFamily, String osVersion) {

http://git-wip-us.apache.org/repos/asf/ambari/blob/6320d589/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
index 4a474bf..92043f0 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
@@ -43,6 +43,7 @@ import org.apache.ambari.server.actionmanager.HostRoleStatus;
 import org.apache.ambari.server.actionmanager.Stage;
 import org.apache.ambari.server.api.resources.UpgradeResourceDefinition;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
+import org.apache.ambari.server.audit.AuditLogger;
 import org.apache.ambari.server.controller.AmbariManagementController;
 import org.apache.ambari.server.controller.AmbariServer;
 import org.apache.ambari.server.controller.spi.Predicate;
@@ -237,11 +238,13 @@ public class UpgradeResourceProviderTest {
     topologyManager = injector.getInstance(TopologyManager.class);
     StageUtils.setTopologyManager(topologyManager);
     ActionManager.setTopologyManager(topologyManager);
+    EasyMock.replay(injector.getInstance(AuditLogger.class));
   }
 
   @After
   public void after() {
     injector.getInstance(PersistService.class).stop();
+    EasyMock.reset(injector.getInstance(AuditLogger.class));
     injector = null;
   }
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/6320d589/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 b1336de..771f830 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,9 @@ public class InMemoryDefaultTestModule extends AbstractModule {
 
     try {
       install(new BeanDefinitionsCachingTestControllerModule(properties));
-      bind(AuditLogger.class).toInstance(EasyMock.createNiceMock(AuditLoggerDefaultImpl.class));
+      AuditLogger al = EasyMock.createNiceMock(AuditLogger.class);
+      EasyMock.expect(al.isEnabled()).andReturn(false).anyTimes();
+      bind(AuditLogger.class).toInstance(al);
     } catch (Exception e) {
       throw new RuntimeException(e);
     }

http://git-wip-us.apache.org/repos/asf/ambari/blob/6320d589/ambari-server/src/test/java/org/apache/ambari/server/security/authentication/AmbariAuthenticationFilterTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/security/authentication/AmbariAuthenticationFilterTest.java b/ambari-server/src/test/java/org/apache/ambari/server/security/authentication/AmbariAuthenticationFilterTest.java
index f6a885d..0f2b104 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/security/authentication/AmbariAuthenticationFilterTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/security/authentication/AmbariAuthenticationFilterTest.java
@@ -78,6 +78,7 @@ public class AmbariAuthenticationFilterTest {
     FilterChain filterChain = createMock(FilterChain.class);
     expect(request.getHeader("Authorization")).andReturn("header").andReturn(null);
     expect(request.getHeader("X-Forwarded-For")).andReturn("1.2.3.4");
+    expect(mockedAuditLogger.isEnabled()).andReturn(true);
     mockedAuditLogger.log(anyObject(AuditEvent.class));
     expectLastCall().times(1);
     filterChain.doFilter(request, response);
@@ -106,6 +107,7 @@ public class AmbariAuthenticationFilterTest {
     expect(AuthorizationHelper.getAuthenticatedName()).andReturn("perm1");
     expect(request.getHeader("X-Forwarded-For")).andReturn("1.2.3.4");
     expect(authentication.getName()).andReturn("admin");
+    expect(mockedAuditLogger.isEnabled()).andReturn(true);
     mockedAuditLogger.log(anyObject(AuditEvent.class));
     expectLastCall().times(1);
     replay(mockedAuditLogger, request, authentication, permissionHelper);
@@ -125,6 +127,7 @@ public class AmbariAuthenticationFilterTest {
     expect(request.getHeader("X-Forwarded-For")).andReturn("1.2.3.4");
     expect(request.getHeader("Authorization")).andReturn(
       "Basic " + new String(Base64.encode("admin:admin".getBytes("UTF-8"))));
+    expect(mockedAuditLogger.isEnabled()).andReturn(true);
     mockedAuditLogger.log(anyObject(AuditEvent.class));
     expectLastCall().times(1);
     replay(mockedAuditLogger, request, authEx);


[3/3] ambari git commit: AMBARI-15646. Audit Log Code Cleanup & Safety. (Daniel Gergely via stoader)

Posted by st...@apache.org.
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 <dg...@hortonworks.com>
Authored: Thu Apr 7 18:48:43 2016 +0200
Committer: Toader, Sebastian <st...@hortonworks.com>
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;
-  }
-
 }