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/03/24 13:09:11 UTC

[39/51] [abbrv] ambari git commit: Fix for review comments: package refactor, javadoc, configuration

http://git-wip-us.apache.org/repos/asf/ambari/blob/565c2ea2/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/eventcreator/RecommendationIgnoreEventCreator.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/eventcreator/RecommendationIgnoreEventCreator.java b/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/eventcreator/RecommendationIgnoreEventCreator.java
deleted file mode 100644
index c569bd1..0000000
--- a/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/eventcreator/RecommendationIgnoreEventCreator.java
+++ /dev/null
@@ -1,77 +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.event.request.eventcreator;
-
-import java.util.Collections;
-import java.util.HashSet;
-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.audit.event.request.RequestAuditEventCreator;
-import org.apache.ambari.server.controller.spi.Resource;
-
-/**
- * This creator ignores recommendation post requests
- * For resource type {@link Resource.Type#Recommendation}
- * and request types {@link Request.Type#POST}
- */
-public class RecommendationIgnoreEventCreator implements RequestAuditEventCreator {
-
-  /**
-   * Set of {@link Request.Type}s that are handled by this plugin
-   */
-  private Set<Request.Type> requestTypes = new HashSet<Request.Type>();
-
-  {
-    requestTypes.add(Request.Type.POST);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public Set<Request.Type> getRequestTypes() {
-    return requestTypes;
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public Set<Resource.Type> getResourceTypes() {
-    return Collections.singleton(Resource.Type.Recommendation);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public Set<ResultStatus.STATUS> getResultStatuses() {
-    return null;
-  }
-
-  @Override
-  public AuditEvent createAuditEvent(Request request, Result result) {
-    // intentionally skipping this event
-    return null;
-  }
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/565c2ea2/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/eventcreator/RepositoryEventCreator.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/eventcreator/RepositoryEventCreator.java b/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/eventcreator/RepositoryEventCreator.java
deleted file mode 100644
index 379c58d..0000000
--- a/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/eventcreator/RepositoryEventCreator.java
+++ /dev/null
@@ -1,124 +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.event.request.eventcreator;
-
-import java.util.Collections;
-import java.util.HashSet;
-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.audit.event.request.RequestAuditEventCreator;
-import org.apache.ambari.server.audit.event.request.event.AddRepositoryRequestAuditEvent;
-import org.apache.ambari.server.audit.event.request.event.UpdateRepositoryRequestAuditEvent;
-import org.apache.ambari.server.controller.spi.Resource;
-import org.apache.ambari.server.controller.utilities.PropertyHelper;
-import org.joda.time.DateTime;
-import org.springframework.security.core.context.SecurityContextHolder;
-import org.springframework.security.core.userdetails.User;
-
-/**
- * This creator handles privilege requests
- * For resource type {@link Resource.Type#Repository}
- * and request types {@link Request.Type#POST} and {@link Request.Type#PUT}
- */
-public class RepositoryEventCreator implements RequestAuditEventCreator {
-
-  /**
-   * Set of {@link Request.Type}s that are handled by this plugin
-   */
-  private Set<Request.Type> requestTypes = new HashSet<Request.Type>();
-
-  {
-    requestTypes.add(Request.Type.POST);
-    requestTypes.add(Request.Type.PUT);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public Set<Request.Type> getRequestTypes() {
-    return requestTypes;
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public Set<Resource.Type> getResourceTypes() {
-    return Collections.singleton(Resource.Type.Repository);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public Set<ResultStatus.STATUS> getResultStatuses() {
-    return null;
-  }
-
-  @Override
-  public AuditEvent createAuditEvent(Request request, Result result) {
-    String username = ((User) SecurityContextHolder.getContext().getAuthentication().getPrincipal()).getUsername();
-
-    switch (request.getRequestType()) {
-      case POST:
-        return AddRepositoryRequestAuditEvent.builder()
-          .withTimestamp(DateTime.now())
-          .withRequestType(request.getRequestType())
-          .withResultStatus(result.getStatus())
-          .withUrl(request.getURI())
-          .withRemoteIp(request.getRemoteAddress())
-          .withUserName(username)
-          .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")))
-          .build();
-      case PUT:
-        return UpdateRepositoryRequestAuditEvent.builder()
-          .withTimestamp(DateTime.now())
-          .withRequestType(request.getRequestType())
-          .withResultStatus(result.getStatus())
-          .withUrl(request.getURI())
-          .withRemoteIp(request.getRemoteAddress())
-          .withUserName(username)
-          .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")))
-          .build();
-      default:
-        return null;
-    }
-  }
-
-  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/565c2ea2/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/eventcreator/RepositoryVersionEventCreator.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/eventcreator/RepositoryVersionEventCreator.java b/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/eventcreator/RepositoryVersionEventCreator.java
deleted file mode 100644
index 14145e4..0000000
--- a/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/eventcreator/RepositoryVersionEventCreator.java
+++ /dev/null
@@ -1,181 +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.event.request.eventcreator;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-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.audit.event.request.RequestAuditEventCreator;
-import org.apache.ambari.server.audit.event.request.event.AddRepositoryVersionRequestAuditEvent;
-import org.apache.ambari.server.audit.event.request.event.ChangeRepositoryVersionRequestAuditEvent;
-import org.apache.ambari.server.audit.event.request.event.DeleteRepositoryVersionRequestAuditEvent;
-import org.apache.ambari.server.controller.spi.Resource;
-import org.apache.ambari.server.controller.utilities.PropertyHelper;
-import org.joda.time.DateTime;
-import org.springframework.security.core.context.SecurityContextHolder;
-import org.springframework.security.core.userdetails.User;
-
-/**
- * This creator handles privilege requests
- * For resource type {@link Resource.Type#Repository}
- * and request types {@link Request.Type#POST}, {@link Request.Type#PUT} and {@link Request.Type#DELETE}
- */
-public class RepositoryVersionEventCreator implements RequestAuditEventCreator {
-
-  /**
-   * Set of {@link Request.Type}s that are handled by this plugin
-   */
-  private Set<Request.Type> requestTypes = new HashSet<Request.Type>();
-
-  {
-    requestTypes.add(Request.Type.POST);
-    requestTypes.add(Request.Type.PUT);
-    requestTypes.add(Request.Type.DELETE);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public Set<Request.Type> getRequestTypes() {
-    return requestTypes;
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public Set<Resource.Type> getResourceTypes() {
-    return Collections.singleton(Resource.Type.RepositoryVersion);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public Set<ResultStatus.STATUS> getResultStatuses() {
-    return null;
-  }
-
-  @Override
-  public AuditEvent createAuditEvent(Request request, Result result) {
-    String username = ((User) SecurityContextHolder.getContext().getAuthentication().getPrincipal()).getUsername();
-
-    switch (request.getRequestType()) {
-      case POST:
-        return AddRepositoryVersionRequestAuditEvent.builder()
-          .withTimestamp(DateTime.now())
-          .withRequestType(request.getRequestType())
-          .withResultStatus(result.getStatus())
-          .withUrl(request.getURI())
-          .withRemoteIp(request.getRemoteAddress())
-          .withUserName(username)
-          .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")))
-          .withRepos(getRepos(request))
-          .build();
-      case PUT:
-        return ChangeRepositoryVersionRequestAuditEvent.builder()
-          .withTimestamp(DateTime.now())
-          .withRequestType(request.getRequestType())
-          .withResultStatus(result.getStatus())
-          .withUrl(request.getURI())
-          .withRemoteIp(request.getRemoteAddress())
-          .withUserName(username)
-          .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")))
-          .withRepos(getRepos(request))
-          .build();
-      case DELETE:
-        return DeleteRepositoryVersionRequestAuditEvent.builder()
-          .withTimestamp(DateTime.now())
-          .withRequestType(request.getRequestType())
-          .withResultStatus(result.getStatus())
-          .withUrl(request.getURI())
-          .withRemoteIp(request.getRemoteAddress())
-          .withUserName(username)
-          .withStackName(request.getResource().getKeyValueMap().get(Resource.Type.Stack))
-          .withStackVersion(request.getResource().getKeyValueMap().get(Resource.Type.StackVersion))
-          .withRepoVersion(request.getResource().getKeyValueMap().get(Resource.Type.RepositoryVersion))
-          .build();
-      default:
-        return null;
-    }
-  }
-
-  private Map<String, List<Map<String, String>>> getRepos(Request request) {
-
-    Map<String, List<Map<String, String>>> result = new HashMap<String, List<Map<String, String>>>();
-
-    if (!request.getBody().getPropertySets().isEmpty()) {
-      if (request.getBody().getPropertySets().iterator().next().get("operating_systems") instanceof Set) {
-        Set<Object> set = (Set<Object>) request.getBody().getPropertySets().iterator().next().get("operating_systems");
-
-        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"));
-            if (!result.containsKey(osType)) {
-              result.put(osType, new LinkedList<Map<String, String>>());
-            }
-            if (map.get("repositories") instanceof Set) {
-              Set<Object> repos = (Set<Object>) map.get("repositories");
-              for (Object repo : repos) {
-                if (repo instanceof Map) {
-                  Map<String, String> m = (Map<String, String>) 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"));
-                  Map<String, String> resultMap = new HashMap<>();
-                  resultMap.put("repo_id", repoId);
-                  resultMap.put("repo_name", repo_name);
-                  resultMap.put("base_url", baseUrl);
-                  result.get(osType).add(resultMap);
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-    return result;
-  }
-
-  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/565c2ea2/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/eventcreator/RequestEventCreator.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/eventcreator/RequestEventCreator.java b/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/eventcreator/RequestEventCreator.java
deleted file mode 100644
index 6053b13..0000000
--- a/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/eventcreator/RequestEventCreator.java
+++ /dev/null
@@ -1,103 +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.event.request.eventcreator;
-
-import java.util.HashSet;
-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.audit.event.request.RequestAuditEventCreator;
-import org.apache.ambari.server.audit.event.request.event.AddRequestRequestAuditEvent;
-import org.apache.ambari.server.controller.internal.RequestOperationLevel;
-import org.apache.ambari.server.controller.spi.Resource;
-import org.joda.time.DateTime;
-import org.springframework.security.core.context.SecurityContextHolder;
-import org.springframework.security.core.userdetails.User;
-
-/**
- * This creator handles request type requests
- * For resource type {@link Resource.Type#Request}
- * and request types {@link Request.Type#POST}
- */
-public class RequestEventCreator implements RequestAuditEventCreator {
-
-  /**
-   * Set of {@link Request.Type}s that are handled by this plugin
-   */
-  private Set<Request.Type> requestTypes = new HashSet<Request.Type>();
-
-  {
-    requestTypes.add(Request.Type.POST);
-  }
-
-  private Set<Resource.Type> resourceTypes = new HashSet<Resource.Type>();
-
-  {
-    resourceTypes.add(Resource.Type.Request);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public Set<Request.Type> getRequestTypes() {
-    return requestTypes;
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public Set<Resource.Type> getResourceTypes() {
-    return resourceTypes;
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public Set<ResultStatus.STATUS> getResultStatuses() {
-    // null makes this default
-    return null;
-  }
-
-  @Override
-  public AuditEvent createAuditEvent(Request request, Result result) {
-    String username = ((User) SecurityContextHolder.getContext().getAuthentication().getPrincipal()).getUsername();
-
-    switch (request.getRequestType()) {
-      case POST:
-        return AddRequestRequestAuditEvent.builder()
-          .withTimestamp(DateTime.now())
-          .withRequestType(request.getRequestType())
-          .withResultStatus(result.getStatus())
-          .withUrl(request.getURI())
-          .withRemoteIp(request.getRemoteAddress())
-          .withUserName(username)
-          .withCommand(request.getBody().getRequestInfoProperties().get("command"))
-          .withClusterName(request.getBody().getRequestInfoProperties().get(RequestOperationLevel.OPERATION_CLUSTER_ID))
-          .build();
-      default:
-        return null;
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/565c2ea2/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/eventcreator/ServiceConfigDownloadEventCreator.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/eventcreator/ServiceConfigDownloadEventCreator.java b/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/eventcreator/ServiceConfigDownloadEventCreator.java
deleted file mode 100644
index 6f9a769..0000000
--- a/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/eventcreator/ServiceConfigDownloadEventCreator.java
+++ /dev/null
@@ -1,90 +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.event.request.eventcreator;
-
-import java.util.Collections;
-import java.util.HashSet;
-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.audit.event.request.RequestAuditEventCreator;
-import org.apache.ambari.server.audit.event.request.event.ClientConfigDownloadRequestAuditEvent;
-import org.apache.ambari.server.controller.spi.Resource;
-import org.joda.time.DateTime;
-import org.springframework.security.core.context.SecurityContextHolder;
-import org.springframework.security.core.userdetails.User;
-
-/**
- * This creator handles service config download requests
- * For resource type {@link Resource.Type#Service}
- * and request types {@link Request.Type#GET}
- */
-public class ServiceConfigDownloadEventCreator implements RequestAuditEventCreator {
-
-  /**
-   * Set of {@link Request.Type}s that are handled by this plugin
-   */
-  private Set<Request.Type> requestTypes = new HashSet<Request.Type>();
-
-  {
-    requestTypes.add(Request.Type.GET);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public Set<Request.Type> getRequestTypes() {
-    return requestTypes;
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public Set<Resource.Type> getResourceTypes() {
-    return Collections.singleton(Resource.Type.ClientConfig);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public Set<ResultStatus.STATUS> getResultStatuses() {
-    return null;
-  }
-
-  @Override
-  public AuditEvent createAuditEvent(Request request, Result result) {
-    String username = ((User) SecurityContextHolder.getContext().getAuthentication().getPrincipal()).getUsername();
-    return ClientConfigDownloadRequestAuditEvent.builder()
-      .withTimestamp(DateTime.now())
-      .withRequestType(request.getRequestType())
-      .withResultStatus(result.getStatus())
-      .withUrl(request.getURI())
-      .withRemoteIp(request.getRemoteAddress())
-      .withUserName(username)
-      .withService(request.getResource().getKeyValueMap().get(Resource.Type.Service))
-      .withComponent(request.getResource().getKeyValueMap().get(Resource.Type.Component))
-      .build();
-  }
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/565c2ea2/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/eventcreator/ServiceEventCreator.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/eventcreator/ServiceEventCreator.java b/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/eventcreator/ServiceEventCreator.java
deleted file mode 100644
index 1a5fd3c..0000000
--- a/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/eventcreator/ServiceEventCreator.java
+++ /dev/null
@@ -1,167 +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.event.request.eventcreator;
-
-import java.util.HashSet;
-import java.util.Map;
-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.audit.event.request.event.StartOperationRequestAuditEvent;
-import org.apache.ambari.server.audit.event.request.RequestAuditEventCreator;
-import org.apache.ambari.server.audit.event.request.event.DeleteServiceRequestAuditEvent;
-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 org.joda.time.DateTime;
-import org.springframework.security.core.context.SecurityContextHolder;
-import org.springframework.security.core.userdetails.User;
-
-/**
- * This creator handles operation requests (start, stop, install, etc)
- * For resource type {@link Resource.Type#Service}
- * and request types {@link Request.Type#POST}, {@link Request.Type#PUT} and {@link Request.Type#DELETE}
- */
-public class ServiceEventCreator implements RequestAuditEventCreator {
-
-  /**
-   * Set of {@link Request.Type}s that are handled by this plugin
-   */
-  private Set<Request.Type> requestTypes = new HashSet<Request.Type>();
-
-  {
-    requestTypes.add(Request.Type.POST);
-    requestTypes.add(Request.Type.PUT);
-    requestTypes.add(Request.Type.DELETE);
-  }
-
-  private Set<Resource.Type> resourceTypes = new HashSet<Resource.Type>();
-
-  {
-    resourceTypes.add(Resource.Type.Service);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public Set<Request.Type> getRequestTypes() {
-    return requestTypes;
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public Set<Resource.Type> getResourceTypes() {
-    return resourceTypes;
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public Set<ResultStatus.STATUS> getResultStatuses() {
-    // null makes this default
-    return null;
-  }
-
-  @Override
-  public AuditEvent createAuditEvent(Request request, Result result) {
-    String username = ((User) SecurityContextHolder.getContext().getAuthentication().getPrincipal()).getUsername();
-
-    if (request.getRequestType() == Request.Type.DELETE) {
-      return DeleteServiceRequestAuditEvent.builder()
-        .withTimestamp(DateTime.now())
-        .withRequestType(request.getRequestType())
-        .withResultStatus(result.getStatus())
-        .withUrl(request.getURI())
-        .withRemoteIp(request.getRemoteAddress())
-        .withUserName(username)
-        .withService(request.getResource().getKeyValueMap().get(Resource.Type.Service))
-        .build();
-    }
-
-    String operation = getOperation(request);
-
-    Long requestId = null;
-    if (containsRequestId(result)) {
-      requestId = getRequestId(result);
-    }
-
-    StartOperationRequestAuditEvent.StartOperationAuditEventBuilder auditEventBuilder = StartOperationRequestAuditEvent.builder()
-      .withOperation(operation)
-      .withUserName(username)
-      .withRemoteIp(request.getRemoteAddress())
-      .withTimestamp(DateTime.now())
-      .withRequestId(String.valueOf(requestId));
-
-    if (result.getStatus().isErrorState()) {
-      auditEventBuilder.withReasonOfFailure(result.getStatus().getMessage());
-    }
-
-    return auditEventBuilder.build();
-  }
-
-  private String getOperation(Request request) {
-    if (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"
-              + " (" + request.getBody().getRequestInfoProperties().get(RequestOperationLevel.OPERATION_CLUSTER_ID) + ")";
-            break;
-          }
-        }
-      }
-      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"))
-              + " (" + request.getBody().getRequestInfoProperties().get(RequestOperationLevel.OPERATION_CLUSTER_ID) + ")";
-            break;
-          }
-        }
-      }
-      return operation;
-    }
-
-    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"));
-      }
-    }
-    return null;
-  }
-
-  private Long getRequestId(Result result) {
-    return (Long) result.getResultTree().getChild("request").getObject().getPropertiesMap().get("Requests").get("id");
-  }
-
-  private boolean containsRequestId(Result result) {
-    return result.getResultTree().getChild("request") != null
-      && result.getResultTree().getChild("request").getObject() != null
-      && result.getResultTree().getChild("request").getObject().getPropertiesMap().get("Requests") != null
-      && result.getResultTree().getChild("request").getObject().getPropertiesMap().get("Requests").get("id") != null;
-  }
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/565c2ea2/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/eventcreator/UnauthorizedEventCreator.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/eventcreator/UnauthorizedEventCreator.java b/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/eventcreator/UnauthorizedEventCreator.java
deleted file mode 100644
index e83d3cb..0000000
--- a/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/eventcreator/UnauthorizedEventCreator.java
+++ /dev/null
@@ -1,72 +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.event.request.eventcreator;
-
-import java.util.HashSet;
-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.AccessUnauthorizedAuditEvent;
-import org.apache.ambari.server.audit.event.AuditEvent;
-import org.apache.ambari.server.audit.event.request.RequestAuditEventCreator;
-import org.apache.ambari.server.controller.spi.Resource;
-import org.joda.time.DateTime;
-import org.springframework.security.core.context.SecurityContextHolder;
-import org.springframework.security.core.userdetails.User;
-
-public class UnauthorizedEventCreator implements RequestAuditEventCreator {
-
-  @Override
-  public Set<Request.Type> getRequestTypes() {
-    return null;
-  }
-
-  @Override
-  public Set<Resource.Type> getResourceTypes() {
-    return null;
-  }
-
-  private Set<ResultStatus.STATUS> statuses = new HashSet<>();
-
-  {
-    statuses.add(ResultStatus.STATUS.UNAUTHORIZED);
-    statuses.add(ResultStatus.STATUS.FORBIDDEN);
-  }
-
-  @Override
-  public Set<ResultStatus.STATUS> getResultStatuses() {
-    return statuses;
-  }
-
-  @Override
-  public AuditEvent createAuditEvent(Request request, Result result) {
-
-    String username = ((User) SecurityContextHolder.getContext().getAuthentication().getPrincipal()).getUsername();
-    AccessUnauthorizedAuditEvent ae = AccessUnauthorizedAuditEvent.builder()
-      .withRemoteIp(request.getRemoteAddress())
-      .withResourcePath(request.getURI())
-      .withTimestamp(DateTime.now())
-      .withUserName(username)
-      .build();
-
-    return ae;
-  }
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/565c2ea2/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/eventcreator/UpgradeEventCreator.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/eventcreator/UpgradeEventCreator.java b/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/eventcreator/UpgradeEventCreator.java
deleted file mode 100644
index 2ca64cc..0000000
--- a/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/eventcreator/UpgradeEventCreator.java
+++ /dev/null
@@ -1,101 +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.event.request.eventcreator;
-
-import java.util.Collections;
-import java.util.HashSet;
-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.audit.event.request.RequestAuditEventCreator;
-import org.apache.ambari.server.audit.event.request.event.AddUpgradeRequestAuditEvent;
-import org.apache.ambari.server.controller.spi.Resource;
-import org.apache.ambari.server.controller.utilities.PropertyHelper;
-import org.joda.time.DateTime;
-import org.springframework.security.core.context.SecurityContextHolder;
-import org.springframework.security.core.userdetails.User;
-
-/**
- * This creator handles upgrade requests
- * For resource type {@link Resource.Type#Upgrade}
- * and request types {@link Request.Type#POST}
- */
-public class UpgradeEventCreator implements RequestAuditEventCreator {
-
-  /**
-   * Set of {@link Request.Type}s that are handled by this plugin
-   */
-  private Set<Request.Type> requestTypes = new HashSet<Request.Type>();
-
-  {
-    requestTypes.add(Request.Type.POST);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public Set<Request.Type> getRequestTypes() {
-    return requestTypes;
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public Set<Resource.Type> getResourceTypes() {
-    return Collections.singleton(Resource.Type.Upgrade);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public Set<ResultStatus.STATUS> getResultStatuses() {
-    return null;
-  }
-
-  @Override
-  public AuditEvent createAuditEvent(Request request, Result result) {
-    String username = ((User) SecurityContextHolder.getContext().getAuthentication().getPrincipal()).getUsername();
-
-    return AddUpgradeRequestAuditEvent.builder()
-      .withTimestamp(DateTime.now())
-      .withRequestType(request.getRequestType())
-      .withResultStatus(result.getStatus())
-      .withUrl(request.getURI())
-      .withRemoteIp(request.getRemoteAddress())
-      .withUserName(username)
-      .withRepositoryVersion(getProperty(request, "repository_version"))
-      .withUpgradeType(getProperty(request, "upgrade_type"))
-      .withClusterName(getProperty(request, "cluster_name"))
-      .build();
-
-  }
-
-  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/565c2ea2/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/eventcreator/UpgradeItemEventCreator.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/eventcreator/UpgradeItemEventCreator.java b/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/eventcreator/UpgradeItemEventCreator.java
deleted file mode 100644
index 5583e71..0000000
--- a/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/eventcreator/UpgradeItemEventCreator.java
+++ /dev/null
@@ -1,101 +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.event.request.eventcreator;
-
-import java.util.Collections;
-import java.util.HashSet;
-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.audit.event.request.RequestAuditEventCreator;
-import org.apache.ambari.server.audit.event.request.event.UpdateUpgradeItemRequestAuditEvent;
-import org.apache.ambari.server.controller.spi.Resource;
-import org.apache.ambari.server.controller.utilities.PropertyHelper;
-import org.joda.time.DateTime;
-import org.springframework.security.core.context.SecurityContextHolder;
-import org.springframework.security.core.userdetails.User;
-
-/**
- * This creator handles upgrade requests
- * For resource type {@link Resource.Type#Upgrade}
- * and request types {@link Request.Type#PUT}
- */
-public class UpgradeItemEventCreator implements RequestAuditEventCreator {
-
-  /**
-   * Set of {@link Request.Type}s that are handled by this plugin
-   */
-  private Set<Request.Type> requestTypes = new HashSet<Request.Type>();
-
-  {
-    requestTypes.add(Request.Type.PUT);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public Set<Request.Type> getRequestTypes() {
-    return requestTypes;
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public Set<Resource.Type> getResourceTypes() {
-    return Collections.singleton(Resource.Type.UpgradeItem);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public Set<ResultStatus.STATUS> getResultStatuses() {
-    return null;
-  }
-
-  @Override
-  public AuditEvent createAuditEvent(Request request, Result result) {
-    String username = ((User) SecurityContextHolder.getContext().getAuthentication().getPrincipal()).getUsername();
-
-    return UpdateUpgradeItemRequestAuditEvent.builder()
-      .withTimestamp(DateTime.now())
-      .withRequestType(request.getRequestType())
-      .withResultStatus(result.getStatus())
-      .withUrl(request.getURI())
-      .withRemoteIp(request.getRemoteAddress())
-      .withUserName(username)
-      .withStatus(getProperty(request, "status"))
-      .withStageId(getProperty(request, "stage_id"))
-      .withRequestId(getProperty(request, "request_id"))
-      .build();
-
-  }
-
-  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/565c2ea2/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/eventcreator/UserEventCreator.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/eventcreator/UserEventCreator.java b/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/eventcreator/UserEventCreator.java
deleted file mode 100644
index 09b9efb..0000000
--- a/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/eventcreator/UserEventCreator.java
+++ /dev/null
@@ -1,180 +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.event.request.eventcreator;
-
-import java.util.Collections;
-import java.util.HashSet;
-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.audit.event.request.RequestAuditEventCreator;
-import org.apache.ambari.server.audit.event.request.event.ActivateUserRequestAuditEvent;
-import org.apache.ambari.server.audit.event.request.event.AdminUserRequestAuditEvent;
-import org.apache.ambari.server.audit.event.request.event.CreateUserRequestAuditEvent;
-import org.apache.ambari.server.audit.event.request.event.DeleteUserRequestAuditEvent;
-import org.apache.ambari.server.audit.event.request.event.UserPasswordChangeRequestAuditEvent;
-import org.apache.ambari.server.controller.spi.Resource;
-import org.apache.ambari.server.controller.utilities.PropertyHelper;
-import org.joda.time.DateTime;
-import org.springframework.security.core.context.SecurityContextHolder;
-import org.springframework.security.core.userdetails.User;
-
-/**
- * This creator handles user requests
- * For resource type {@link Resource.Type#User}
- * and request types {@link Request.Type#POST}, {@link Request.Type#PUT} and {@link Request.Type#DELETE}
- */
-public class UserEventCreator implements RequestAuditEventCreator {
-
-  /**
-   * Set of {@link Request.Type}s that are handled by this plugin
-   */
-  private Set<Request.Type> requestTypes = new HashSet<Request.Type>();
-
-  {
-    requestTypes.add(Request.Type.POST);
-    requestTypes.add(Request.Type.PUT);
-    requestTypes.add(Request.Type.DELETE);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public Set<Request.Type> getRequestTypes() {
-    return requestTypes;
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public Set<Resource.Type> getResourceTypes() {
-    return Collections.singleton(Resource.Type.User);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public Set<ResultStatus.STATUS> getResultStatuses() {
-    return null;
-  }
-
-  @Override
-  public AuditEvent createAuditEvent(Request request, Result result) {
-    String username = ((User) SecurityContextHolder.getContext().getAuthentication().getPrincipal()).getUsername();
-
-    switch (request.getRequestType()) {
-      case POST:
-        return CreateUserRequestAuditEvent.builder()
-          .withTimestamp(DateTime.now())
-          .withRequestType(request.getRequestType())
-          .withResultStatus(result.getStatus())
-          .withUrl(request.getURI())
-          .withRemoteIp(request.getRemoteAddress())
-          .withUserName(username)
-          .withCreatedUsername(getUsername(request))
-          .withActive(isActive(request))
-          .withAdmin(isAdmin(request))
-          .build();
-      case DELETE:
-        return DeleteUserRequestAuditEvent.builder()
-          .withTimestamp(DateTime.now())
-          .withRequestType(request.getRequestType())
-          .withResultStatus(result.getStatus())
-          .withUrl(request.getURI())
-          .withRemoteIp(request.getRemoteAddress())
-          .withUserName(username)
-          .withDeletedUsername(request.getResource().getKeyValueMap().get(Resource.Type.User))
-          .build();
-      case PUT:
-        if (hasActive(request)) {
-          return ActivateUserRequestAuditEvent.builder()
-            .withTimestamp(DateTime.now())
-            .withRequestType(request.getRequestType())
-            .withResultStatus(result.getStatus())
-            .withUrl(request.getURI())
-            .withRemoteIp(request.getRemoteAddress())
-            .withUserName(username)
-            .withAffectedUsername(getUsername(request))
-            .withActive(isActive(request))
-            .build();
-        }
-        if (hasAdmin(request)) {
-          return AdminUserRequestAuditEvent.builder()
-            .withTimestamp(DateTime.now())
-            .withRequestType(request.getRequestType())
-            .withResultStatus(result.getStatus())
-            .withUrl(request.getURI())
-            .withRemoteIp(request.getRemoteAddress())
-            .withUserName(username)
-            .withAffectedUsername(getUsername(request))
-            .withAdmin(isAdmin(request))
-            .build();
-        }
-        if (hasOldPassword(request)) {
-          return UserPasswordChangeRequestAuditEvent.builder()
-            .withTimestamp(DateTime.now())
-            .withRequestType(request.getRequestType())
-            .withResultStatus(result.getStatus())
-            .withUrl(request.getURI())
-            .withRemoteIp(request.getRemoteAddress())
-            .withUserName(username)
-            .withAffectedUsername(getUsername(request))
-            .build();
-        }
-      default:
-        break;
-    }
-    return null;
-  }
-
-
-  private boolean isAdmin(Request request) {
-    return hasAdmin(request) && "true".equals(request.getBody().getPropertySets().iterator().next().get(PropertyHelper.getPropertyId("Users", "admin")));
-  }
-
-  private boolean isActive(Request request) {
-    return hasActive(request) && "true".equals(request.getBody().getPropertySets().iterator().next().get(PropertyHelper.getPropertyId("Users", "active")));
-  }
-
-  private boolean hasAdmin(Request request) {
-    return !request.getBody().getPropertySets().isEmpty() && request.getBody().getPropertySets().iterator().next().containsKey(PropertyHelper.getPropertyId("Users", "admin"));
-  }
-
-  private boolean hasActive(Request request) {
-    return !request.getBody().getPropertySets().isEmpty() && request.getBody().getPropertySets().iterator().next().containsKey(PropertyHelper.getPropertyId("Users", "active"));
-  }
-
-  private boolean hasOldPassword(Request request) {
-    return !request.getBody().getPropertySets().isEmpty() && request.getBody().getPropertySets().iterator().next().containsKey(PropertyHelper.getPropertyId("Users", "old_password"));
-  }
-
-  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 null;
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/565c2ea2/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/eventcreator/ValidationIgnoreEventCreator.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/eventcreator/ValidationIgnoreEventCreator.java b/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/eventcreator/ValidationIgnoreEventCreator.java
deleted file mode 100644
index b00a9d9..0000000
--- a/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/eventcreator/ValidationIgnoreEventCreator.java
+++ /dev/null
@@ -1,77 +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.event.request.eventcreator;
-
-import java.util.Collections;
-import java.util.HashSet;
-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.audit.event.request.RequestAuditEventCreator;
-import org.apache.ambari.server.controller.spi.Resource;
-
-/**
- * This creator ignores validation post requests
- * For resource type {@link Resource.Type#Validation}
- * and request types {@link Request.Type#POST}
- */
-public class ValidationIgnoreEventCreator implements RequestAuditEventCreator {
-
-  /**
-   * Set of {@link Request.Type}s that are handled by this plugin
-   */
-  private Set<Request.Type> requestTypes = new HashSet<Request.Type>();
-
-  {
-    requestTypes.add(Request.Type.POST);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public Set<Request.Type> getRequestTypes() {
-    return requestTypes;
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public Set<Resource.Type> getResourceTypes() {
-    return Collections.singleton(Resource.Type.Validation);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public Set<ResultStatus.STATUS> getResultStatuses() {
-    return null;
-  }
-
-  @Override
-  public AuditEvent createAuditEvent(Request request, Result result) {
-    // intentionally skipping this event
-    return null;
-  }
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/565c2ea2/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/eventcreator/ViewInstanceEventCreator.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/eventcreator/ViewInstanceEventCreator.java b/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/eventcreator/ViewInstanceEventCreator.java
deleted file mode 100644
index 00aa1ce..0000000
--- a/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/eventcreator/ViewInstanceEventCreator.java
+++ /dev/null
@@ -1,142 +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.event.request.eventcreator;
-
-import java.util.Collections;
-import java.util.HashSet;
-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.audit.event.request.RequestAuditEventCreator;
-import org.apache.ambari.server.audit.event.request.event.AddViewInstanceRequestAuditEvent;
-import org.apache.ambari.server.audit.event.request.event.ChangeViewInstanceRequestAuditEvent;
-import org.apache.ambari.server.audit.event.request.event.DeleteViewInstanceRequestAuditEvent;
-import org.apache.ambari.server.controller.spi.Resource;
-import org.apache.ambari.server.controller.utilities.PropertyHelper;
-import org.joda.time.DateTime;
-import org.springframework.security.core.context.SecurityContextHolder;
-import org.springframework.security.core.userdetails.User;
-
-/**
- * This creator handles view instance requests
- * For resource type {@link Resource.Type#ViewInstance}
- * and request types {@link Request.Type#POST}, {@link Request.Type#PUT} and {@link Request.Type#DELETE}
- */
-public class ViewInstanceEventCreator implements RequestAuditEventCreator {
-
-  /**
-   * Set of {@link Request.Type}s that are handled by this plugin
-   */
-  private Set<Request.Type> requestTypes = new HashSet<Request.Type>();
-
-  {
-    requestTypes.add(Request.Type.POST);
-    requestTypes.add(Request.Type.PUT);
-    requestTypes.add(Request.Type.DELETE);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public Set<Request.Type> getRequestTypes() {
-    return requestTypes;
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public Set<Resource.Type> getResourceTypes() {
-    return Collections.singleton(Resource.Type.ViewInstance);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public Set<ResultStatus.STATUS> getResultStatuses() {
-    return null;
-  }
-
-  @Override
-  public AuditEvent createAuditEvent(Request request, Result result) {
-    String username = ((User) SecurityContextHolder.getContext().getAuthentication().getPrincipal()).getUsername();
-
-    switch (request.getRequestType()) {
-
-      case POST:
-        return AddViewInstanceRequestAuditEvent.builder()
-          .withTimestamp(DateTime.now())
-          .withRequestType(request.getRequestType())
-          .withResultStatus(result.getStatus())
-          .withUrl(request.getURI())
-          .withRemoteIp(request.getRemoteAddress())
-          .withUserName(username)
-          .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")))
-          .build();
-
-      case PUT:
-        return ChangeViewInstanceRequestAuditEvent.builder()
-          .withTimestamp(DateTime.now())
-          .withRequestType(request.getRequestType())
-          .withResultStatus(result.getStatus())
-          .withUrl(request.getURI())
-          .withRemoteIp(request.getRemoteAddress())
-          .withUserName(username)
-          .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")))
-          .build();
-
-      case DELETE:
-        return DeleteViewInstanceRequestAuditEvent.builder()
-          .withTimestamp(DateTime.now())
-          .withRequestType(request.getRequestType())
-          .withResultStatus(result.getStatus())
-          .withUrl(request.getURI())
-          .withRemoteIp(request.getRemoteAddress())
-          .withUserName(username)
-          .withType(request.getResource().getKeyValueMap().get(Resource.Type.View))
-          .withVersion(request.getResource().getKeyValueMap().get(Resource.Type.ViewVersion))
-          .withName(request.getResource().getKeyValueMap().get(Resource.Type.ViewInstance))
-          .build();
-
-      default:
-        return null;
-    }
-  }
-
-  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/565c2ea2/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/eventcreator/ViewPrivilegeEventCreator.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/eventcreator/ViewPrivilegeEventCreator.java b/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/eventcreator/ViewPrivilegeEventCreator.java
deleted file mode 100644
index 9c5ba1b..0000000
--- a/ambari-server/src/main/java/org/apache/ambari/server/audit/event/request/eventcreator/ViewPrivilegeEventCreator.java
+++ /dev/null
@@ -1,130 +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.event.request.eventcreator;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-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.audit.event.request.RequestAuditEventCreator;
-import org.apache.ambari.server.audit.event.request.event.ViewPrivilegeChangeRequestAuditEvent;
-import org.apache.ambari.server.controller.spi.Resource;
-import org.apache.ambari.server.controller.utilities.PropertyHelper;
-import org.joda.time.DateTime;
-import org.springframework.security.core.context.SecurityContextHolder;
-import org.springframework.security.core.userdetails.User;
-
-/**
- * This creator handles view privilege requests
- * For resource type {@link Resource.Type#ViewInstance}
- * and request types {@link Request.Type#PUT}
- */
-public class ViewPrivilegeEventCreator implements RequestAuditEventCreator {
-
-  /**
-   * Set of {@link Request.Type}s that are handled by this plugin
-   */
-  private Set<Request.Type> requestTypes = new HashSet<Request.Type>();
-
-  {
-    requestTypes.add(Request.Type.PUT);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public Set<Request.Type> getRequestTypes() {
-    return requestTypes;
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public Set<Resource.Type> getResourceTypes() {
-    return Collections.singleton(Resource.Type.ViewPrivilege);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public Set<ResultStatus.STATUS> getResultStatuses() {
-    return null;
-  }
-
-  @Override
-  public AuditEvent createAuditEvent(Request request, Result result) {
-    String username = ((User) SecurityContextHolder.getContext().getAuthentication().getPrincipal()).getUsername();
-
-
-    Map<String, List<String>> users = getEntities(request, "USER");
-    Map<String, List<String>> groups = getEntities(request, "GROUP");
-
-    return ViewPrivilegeChangeRequestAuditEvent.builder()
-      .withTimestamp(DateTime.now())
-      .withRequestType(request.getRequestType())
-      .withResultStatus(result.getStatus())
-      .withUrl(request.getURI())
-      .withRemoteIp(request.getRemoteAddress())
-      .withUserName(username)
-      .withType(getProperty(request, PropertyHelper.getPropertyId("PrivilegeInfo", "view_name")))
-      .withVersion(getProperty(request, PropertyHelper.getPropertyId("PrivilegeInfo", "version")))
-      .withName(getProperty(request, PropertyHelper.getPropertyId("PrivilegeInfo", "instance_name")))
-      .withUsers(users)
-      .withGroups(groups)
-      .build();
-
-  }
-
-  private String getProperty(Request request, String properyId) {
-    if (!request.getBody().getPropertySets().isEmpty()) {
-      return String.valueOf(request.getBody().getPropertySets().iterator().next().get(properyId));
-    }
-    return null;
-  }
-
-  private Map<String, List<String>> getEntities(final Request request, final String type) {
-    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")));
-      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")));
-        if (!entities.containsKey(role)) {
-          entities.put(role, new LinkedList<String>());
-        }
-
-        entities.get(role).add(name);
-      }
-    }
-    return entities;
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/565c2ea2/ambari-server/src/main/java/org/apache/ambari/server/audit/request/RequestAuditEvent.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/RequestAuditEvent.java b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/RequestAuditEvent.java
new file mode 100644
index 0000000..200ecfa
--- /dev/null
+++ b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/RequestAuditEvent.java
@@ -0,0 +1,161 @@
+/*
+ * 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 org.apache.ambari.server.api.services.Request;
+import org.apache.ambari.server.api.services.ResultStatus;
+import org.apache.ambari.server.audit.event.AbstractUserAuditEvent;
+
+/**
+ * Base class for start operation audit events.
+ */
+public class RequestAuditEvent extends AbstractUserAuditEvent {
+
+  public static class RequestAuditEventBuilder<T extends RequestAuditEvent, TBuilder extends RequestAuditEventBuilder<T, TBuilder>> extends AbstractUserAuditEventBuilder<T, TBuilder> {
+
+    /**
+     * Request type (PUT, POST, DELETE, etc...)
+     */
+    private Request.Type requestType;
+
+    /**
+     * Result status, that contains http statuses (OK, ACCEPTED, FORBIDDEN, etc...)
+     */
+    private ResultStatus resultStatus;
+
+    /**
+     * The url that is called
+     */
+    private String url;
+
+    /**
+     * Description of the operation
+     */
+    private String operation;
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    protected T newAuditEvent() {
+      return (T) new RequestAuditEvent(this);
+    }
+
+    /**
+     * Appends to the event the details of the incoming request.
+     *
+     * @param builder builder for the audit event details.
+     */
+    @Override
+    protected void buildAuditMessage(StringBuilder builder) {
+      super.buildAuditMessage(builder);
+      if (operation != null) {
+        builder
+          .append(", Operation(")
+          .append(operation)
+          .append(")");
+      }
+      builder
+        .append(", RequestType(")
+        .append(requestType)
+        .append("), ")
+        .append("url(")
+        .append(url)
+        .append("), ResultStatus(")
+        .append(resultStatus.getStatusCode())
+        .append(" ")
+        .append(resultStatus.getStatus())
+        .append(")");
+
+      if (resultStatus.isErrorState()) {
+        builder.append(", Reason(")
+          .append(resultStatus.getMessage())
+          .append(")");
+      }
+    }
+
+    /**
+     * Sets the request type to be added to the audit event.
+     *
+     * @param requestType request type to be added to the audit event.
+     * @return this builder
+     */
+    public TBuilder withRequestType(Request.Type requestType) {
+      this.requestType = requestType;
+
+      return (TBuilder) this;
+    }
+
+    /**
+     * Sets the url to be added to the audit event.
+     *
+     * @param url url to be added to the audit event.
+     * @return this builder
+     */
+    public TBuilder withUrl(String url) {
+      this.url = url;
+
+      return (TBuilder) this;
+    }
+
+    /**
+     * Sets the result status to be added to the audit event.
+     *
+     * @param resultStatus result status to be added to the audit event.
+     * @return this builder
+     */
+    public TBuilder withResultStatus(ResultStatus resultStatus) {
+      this.resultStatus = resultStatus;
+
+      return (TBuilder) this;
+    }
+
+    /**
+     * Sets the operation to be added to the audit event.
+     *
+     * @param operation operation to be added to the audit event.
+     * @return this builder
+     */
+    public TBuilder withOperation(String operation) {
+      this.operation = operation;
+
+      return (TBuilder) this;
+    }
+  }
+
+  protected RequestAuditEvent() {
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  protected RequestAuditEvent(RequestAuditEventBuilder<?, ?> builder) {
+    super(builder);
+  }
+
+  /**
+   * Returns an builder for {@link RequestAuditEvent}
+   *
+   * @return a builder instance
+   */
+  public static RequestAuditEventBuilder<?, ?> builder() {
+    return new RequestAuditEventBuilder();
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/565c2ea2/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
new file mode 100644
index 0000000..ccb39de
--- /dev/null
+++ b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/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;
+
+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/565c2ea2/ambari-server/src/main/java/org/apache/ambari/server/audit/request/RequestAuditLogger.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/RequestAuditLogger.java b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/RequestAuditLogger.java
new file mode 100644
index 0000000..c132139
--- /dev/null
+++ b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/RequestAuditLogger.java
@@ -0,0 +1,36 @@
+/*
+ * 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 org.apache.ambari.server.api.services.Request;
+import org.apache.ambari.server.api.services.Result;
+
+/**
+ * Audit logger interface for logging requests
+ */
+public interface RequestAuditLogger {
+
+  /**
+   * Logs an audit event based on the http request and result
+   * @param request
+   * @param result
+   */
+  void log(Request request, Result result);
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/565c2ea2/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
new file mode 100644
index 0000000..4124921
--- /dev/null
+++ b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/RequestAuditLoggerImpl.java
@@ -0,0 +1,146 @@
+/*
+ * 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.AuditLogger;
+import org.apache.ambari.server.audit.event.AuditEvent;
+import org.apache.ambari.server.controller.spi.Resource;
+
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+
+/**
+ * The purpose of this class is to create audit log entries for the HTTP requests
+ */
+@Singleton
+public class RequestAuditLoggerImpl implements RequestAuditLogger {
+
+  /**
+   * Priorities for searching the proper creator
+   */
+  private static final int REQUEST_TYPE_PRIORITY = 1;
+  private static final int RESULT_STATUS_PRIORITY = 2;
+  private static final int RESOURCE_TYPE_PRIORITY = 4;
+
+  /**
+   * Container for the {@link RequestAuditEventCreator}
+   */
+  private Set<RequestAuditEventCreator> creators;
+
+  /**
+   * Audit logger that receives {@link AuditEvent}s and does the actual logging
+   */
+  private AuditLogger auditLogger;
+
+  /**
+   * Injecting dependencies through the constructor
+   * @param auditLogger Audit Logger
+   * @param creatorSet Set of plugins that are registered for requests
+   */
+  @Inject
+  public RequestAuditLoggerImpl(AuditLogger auditLogger, Set<RequestAuditEventCreator> creatorSet) {
+    this.auditLogger = auditLogger;
+    this.creators = creatorSet;
+  }
+
+  /**
+   * Finds the proper creator, then creates and logs and {@link AuditEvent}
+   * @param request
+   * @param result
+   */
+  @Override
+  public void log(Request request, Result result) {
+    Resource.Type resourceType = request.getResource().getResourceDefinition().getType();
+    Request.Type requestType = request.getRequestType();
+    ResultStatus resultStatus = result.getStatus();
+
+    RequestAuditEventCreator creator = selectCreator(resourceType, resultStatus, requestType);
+    if (creator != null) {
+      AuditEvent ae = creator.createAuditEvent(request, result);
+      if (ae != null) {
+        auditLogger.log(ae);
+      }
+    }
+  }
+
+  /**
+   * Select the proper creator. Priority order: resourceType > resultStatus > requestType
+   * The most matching creator is returned
+   * If there is no creator found, then null is returned.
+   * @param resourceType
+   * @param requestType
+   * @param resultStatus
+   * @return
+   */
+  private RequestAuditEventCreator selectCreator(Resource.Type resourceType, ResultStatus resultStatus, Request.Type requestType) {
+
+    RequestAuditEventCreator selected = null;
+    Integer priority = -1;
+
+    for (RequestAuditEventCreator creator : creators) {
+      Integer creatorPriority = getPriority(creator, resourceType, resultStatus, requestType);
+      if (creatorPriority != null && priority < creatorPriority) {
+        priority = creatorPriority;
+        selected = creator;
+      }
+    }
+    return selected;
+  }
+
+  /**
+   * Calculates the creator priority for the actual resouce type, result status and request type
+   * @param creator
+   * @param resourceType
+   * @param resultStatus
+   * @param requestType
+   * @return
+   */
+  private Integer getPriority(RequestAuditEventCreator creator, Resource.Type resourceType, ResultStatus resultStatus, Request.Type requestType) {
+    Integer priority = 0;
+
+    if (isIncompatible(creator, resourceType, resultStatus, requestType)) {
+      return null;
+    }
+
+    priority += creator.getRequestTypes() != null && creator.getRequestTypes().contains(requestType) ? REQUEST_TYPE_PRIORITY : 0;
+    priority += creator.getResultStatuses() != null && creator.getResultStatuses().contains(resultStatus.getStatus()) ? RESULT_STATUS_PRIORITY : 0;
+    priority += creator.getResourceTypes() != null && creator.getResourceTypes().contains(resourceType) ? RESOURCE_TYPE_PRIORITY : 0;
+    return priority;
+  }
+
+  /**
+   * Checks if the creator is a possible candidate for creating audit log event for the request
+   * @param creator
+   * @param resourceType
+   * @param resultStatus
+   * @param requestType
+   * @return
+   */
+  private boolean isIncompatible(RequestAuditEventCreator creator, Resource.Type resourceType, ResultStatus resultStatus, Request.Type requestType) {
+    return creator.getRequestTypes() != null && !creator.getRequestTypes().contains(requestType) ||
+      creator.getResultStatuses() != null && !creator.getResultStatuses().contains(resultStatus.getStatus()) ||
+      creator.getResourceTypes() != null && !creator.getResourceTypes().contains(resourceType);
+  }
+}