You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by rn...@apache.org on 2016/04/27 17:40:38 UTC

ambari git commit: AMBARI-16129. LogSearch Integration using incorrect query parameters for LogSearch. (rnettleton)

Repository: ambari
Updated Branches:
  refs/heads/trunk bff239c08 -> 025b3446f


AMBARI-16129. LogSearch Integration using incorrect query parameters for LogSearch. (rnettleton)


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

Branch: refs/heads/trunk
Commit: 025b3446ffe4c3389654932e5b9b619432c25d36
Parents: bff239c
Author: Bob Nettleton <rn...@hortonworks.com>
Authored: Wed Apr 27 11:39:45 2016 -0400
Committer: Bob Nettleton <rn...@hortonworks.com>
Committed: Wed Apr 27 11:40:14 2016 -0400

----------------------------------------------------------------------
 .../logging/LoggingRequestHelper.java           | 42 +++++++++++++++++
 .../logging/LoggingRequestHelperImpl.java       | 34 ++++++++++++--
 .../logging/LoggingSearchPropertyProvider.java  | 17 +------
 .../logging/LoggingRequestHelperImplTest.java   | 48 ++++++++++++++++++--
 .../LoggingSearchPropertyProviderTest.java      |  3 +-
 5 files changed, 118 insertions(+), 26 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/025b3446/ambari-server/src/main/java/org/apache/ambari/server/controller/logging/LoggingRequestHelper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/logging/LoggingRequestHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/logging/LoggingRequestHelper.java
index eb45c9e..7833e01 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/logging/LoggingRequestHelper.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/logging/LoggingRequestHelper.java
@@ -22,10 +22,52 @@ import java.util.Set;
  */
 public interface LoggingRequestHelper {
 
+  /**
+   * Sends a search query request to the LogSearch server
+   *
+   * @param queryParameters the query parameters to pass to LogSearch
+   *
+   * @return a LogQueryResponse, containing the results of the search
+   */
   public LogQueryResponse sendQueryRequest(Map<String, String> queryParameters);
 
+  /**
+   * Sends a request to obtain the log file name for a given component, on
+   *   a given host
+   *
+   * @param componentName the component name
+   * @param hostName the host name
+   *
+   * @return a Set of Strings that include the log file names associated
+   *         with this component/host combination
+   */
   public Set<String> sendGetLogFileNamesRequest(String componentName, String hostName);
 
+  /**
+   * Sends a request to obtain the log level counts for a given component on
+   *   a given host
+   *
+   * @param componentName the component name
+   * @param hostName the host name
+   *
+   * @return a LogLevelQueryResponse, containing the log level counts for this
+   *         component/host combination
+   */
   public LogLevelQueryResponse sendLogLevelQueryRequest(String componentName, String hostName);
 
+  /**
+   * Appends the required LogSearch query parameters to a base URI
+   *
+   * @param baseURI the base URI for this request, typically the URI to the
+   *                Ambari Integration searchEngine component
+   *
+   * @param componentName the component name
+   * @param hostName the host name
+   *
+   * @return a URI String that refers to the tail results of
+   *         the log file associated with this component/host
+   *         combination
+   */
+  public String createLogFileTailURI(String baseURI, String componentName, String hostName);
+
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/025b3446/ambari-server/src/main/java/org/apache/ambari/server/controller/logging/LoggingRequestHelperImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/logging/LoggingRequestHelperImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/logging/LoggingRequestHelperImpl.java
index c1afce0..d8c71e2 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/logging/LoggingRequestHelperImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/logging/LoggingRequestHelperImpl.java
@@ -68,6 +68,14 @@ public class LoggingRequestHelperImpl implements LoggingRequestHelper {
 
   private static final String LOGSEARCH_ADMIN_CREDENTIAL_NAME = "logsearch.admin.credential";
 
+  private static final String COMPONENT_QUERY_PARAMETER_NAME = "component_name";
+
+  private static final String HOST_QUERY_PARAMETER_NAME = "host_name";
+
+  private static final String DEFAULT_PAGE_SIZE = "50";
+
+  private static final String PAGE_SIZE_QUERY_PARAMETER_NAME = "pageSize";
+
   private static AtomicInteger errorLogCounterForLogSearchConnectionExceptions = new AtomicInteger(0);
 
   private final String hostName;
@@ -180,8 +188,8 @@ public class LoggingRequestHelperImpl implements LoggingRequestHelper {
     // TODO, this current method will be a temporary workaround
     // TODO, until the new LogSearch API method is available to handle this request
 
-    queryParameters.put("host", hostName);
-    queryParameters.put("components_name",componentName);
+    queryParameters.put(HOST_QUERY_PARAMETER_NAME, hostName);
+    queryParameters.put(COMPONENT_QUERY_PARAMETER_NAME,componentName);
     // ask for page size of 1, since we really only want a single entry to
     // get the file path name
     queryParameters.put("pageSize", "1");
@@ -229,6 +237,24 @@ public class LoggingRequestHelperImpl implements LoggingRequestHelper {
     return null;
   }
 
+  /**
+   * Generates the log file tail URI, using the LogSearch server's
+   * query parameters.
+   *
+   * @param baseURI the base URI for this request, typically the URI to the
+   *                Ambari Integration searchEngine component
+   *
+   * @param componentName the component name
+   * @param hostName the host name
+   *
+   * @return
+   */
+  @Override
+  public String createLogFileTailURI(String baseURI, String componentName, String hostName) {
+    return baseURI + "?" + COMPONENT_QUERY_PARAMETER_NAME + "=" + componentName + "&" + HOST_QUERY_PARAMETER_NAME + "=" + hostName
+      + "&" + PAGE_SIZE_QUERY_PARAMETER_NAME + "=" + DEFAULT_PAGE_SIZE;
+  }
+
   private static ObjectReader createObjectReader(Class type) {
     // setup the Jackson mapper/reader to read in the data structure
     ObjectMapper mapper = createJSONObjectMapper();
@@ -263,8 +289,8 @@ public class LoggingRequestHelperImpl implements LoggingRequestHelper {
     Map<String, String> queryParameters = new HashMap<String, String>();
     // set the query parameters to limit this level count
     // request to the specific component on the specified host
-    queryParameters.put("host", hostName);
-    queryParameters.put("components_name",componentName);
+    queryParameters.put(HOST_QUERY_PARAMETER_NAME, hostName);
+    queryParameters.put(COMPONENT_QUERY_PARAMETER_NAME,componentName);
 
     // add any query strings specified
     for (String key : queryParameters.keySet()) {

http://git-wip-us.apache.org/repos/asf/ambari/blob/025b3446/ambari-server/src/main/java/org/apache/ambari/server/controller/logging/LoggingSearchPropertyProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/logging/LoggingSearchPropertyProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/logging/LoggingSearchPropertyProvider.java
index f80bc6d..ff7e7f5 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/logging/LoggingSearchPropertyProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/logging/LoggingSearchPropertyProvider.java
@@ -46,14 +46,6 @@ public class LoggingSearchPropertyProvider implements PropertyProvider {
 
   private static final String PATH_TO_SEARCH_ENGINE = "/logging/searchEngine";
 
-  private static final String DEFAULT_PAGE_SIZE = "50";
-
-  private static final String COMPONENT_QUERY_PARAMETER_NAME = "components_name";
-
-  private static final String HOST_QUERY_PARAMETER_NAME = "host";
-
-  private static final String PAGE_SIZE_QUERY_PARAMETER_NAME = "pageSize";
-
   private static AtomicInteger errorLogCounterForLogSearchConnectionExceptions = new AtomicInteger(0);
 
   private final LoggingRequestHelperFactory requestHelperFactory;
@@ -69,8 +61,6 @@ public class LoggingSearchPropertyProvider implements PropertyProvider {
     this.controllerFactory = controllerFactory;
   }
 
-
-
   @Override
   public Set<Resource> populateResources(Set<Resource> resources, Request request, Predicate predicate) throws SystemException {
 
@@ -113,7 +103,7 @@ public class LoggingSearchPropertyProvider implements PropertyProvider {
             for (String fileName : logFileNames) {
               // generate the URIs that can be used by clients to obtain search results/tail log results/etc
               final String searchEngineURI = controller.getAmbariServerURI(getFullPathToSearchEngine(clusterName));
-              final String logFileTailURI = createLogFileTailURI(searchEngineURI, mappedComponentNameForLogSearch, hostName);
+              final String logFileTailURI = requestHelper.createLogFileTailURI(searchEngineURI, mappedComponentNameForLogSearch, hostName);
               // all log files are assumed to be service types for now
               listOfFileDefinitions.add(new LogFileDefinitionInfo(fileName, LogFileType.SERVICE, searchEngineURI, logFileTailURI));
             }
@@ -175,11 +165,6 @@ public class LoggingSearchPropertyProvider implements PropertyProvider {
     return CLUSTERS_PATH + "/" + clusterName + PATH_TO_SEARCH_ENGINE;
   }
 
-  protected static String createLogFileTailURI(String searchEngineURI, String componentName, String hostName) {
-    return searchEngineURI + "?" + COMPONENT_QUERY_PARAMETER_NAME + "=" + componentName + "&" + HOST_QUERY_PARAMETER_NAME + "=" + hostName
-      + "&" + PAGE_SIZE_QUERY_PARAMETER_NAME + "=" + DEFAULT_PAGE_SIZE;
-  }
-
   @Override
   public Set<String> checkPropertyIds(Set<String> propertyIds) {
     return Collections.emptySet();

http://git-wip-us.apache.org/repos/asf/ambari/blob/025b3446/ambari-server/src/test/java/org/apache/ambari/server/controller/logging/LoggingRequestHelperImplTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/logging/LoggingRequestHelperImplTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/logging/LoggingRequestHelperImplTest.java
index 0a7e8f2..b839b64 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/logging/LoggingRequestHelperImplTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/logging/LoggingRequestHelperImplTest.java
@@ -453,10 +453,10 @@ public class LoggingRequestHelperImplTest {
       httpURLConnection.getURL().getQuery();
 
     // verify that the query contains the three required parameters
-    assertTrue("host parameter was not included in query",
-      resultQuery.contains("host=c6401.ambari.apache.org"));
-    assertTrue("components_name parameter was not included in the query",
-      resultQuery.contains("components_name=" + expectedComponentName));
+    assertTrue("host_name parameter was not included in query",
+      resultQuery.contains("host_name=c6401.ambari.apache.org"));
+    assertTrue("component_name parameter was not included in the query",
+      resultQuery.contains("component_name=" + expectedComponentName));
     assertTrue("pageSize parameter was not included in query",
       resultQuery.contains("pageSize=1"));
 
@@ -654,6 +654,46 @@ public class LoggingRequestHelperImplTest {
     mockSupport.verifyAll();
   }
 
+  @Test
+  public void testCreateLogFileTailURI() throws Exception {
+    final String expectedHostName = "c6401.ambari.apache.org";
+    final String expectedPort = "61888";
+    final String expectedComponentName = "hdfs_namenode";
+
+    final String expectedBaseURI =
+      "http://" + expectedHostName + ":" + expectedPort + "/api/v1/clusters/clusterone/logging/searchEngine";
+
+    final String expectedTailFileURI = expectedBaseURI + "?component_name=" + expectedComponentName
+      + "&host_name=" + expectedHostName + "&pageSize=50";
+
+
+    EasyMockSupport mockSupport =
+      new EasyMockSupport();
+
+    CredentialStoreService credentialStoreServiceMock =
+      mockSupport.createMock(CredentialStoreService.class);
+    Cluster clusterMock =
+      mockSupport.createMock(Cluster.class);
+    LoggingRequestHelperImpl.NetworkConnection networkConnectionMock =
+      mockSupport.createMock(LoggingRequestHelperImpl.NetworkConnection.class);
+
+    mockSupport.replayAll();
+
+    LoggingRequestHelper helper =
+      new LoggingRequestHelperImpl("c6401.ambari.apache.org", "61888", credentialStoreServiceMock, clusterMock, networkConnectionMock);
+
+    String result = helper.createLogFileTailURI(expectedBaseURI, expectedComponentName, expectedHostName);
+
+    // verify that the URI contains the expected LogSearch query parameters,
+    // including the correct default page size
+    assertEquals("LogFile Tail URI was not generated as expected",
+      expectedTailFileURI,
+      result);
+
+
+    mockSupport.verifyAll();
+  }
+
 
   /**
    * Convenience method for asserting on the values of NameValuePair instances

http://git-wip-us.apache.org/repos/asf/ambari/blob/025b3446/ambari-server/src/test/java/org/apache/ambari/server/controller/logging/LoggingSearchPropertyProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/logging/LoggingSearchPropertyProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/logging/LoggingSearchPropertyProviderTest.java
index 0d61984..593f660 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/logging/LoggingSearchPropertyProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/logging/LoggingSearchPropertyProviderTest.java
@@ -123,6 +123,7 @@ public class LoggingSearchPropertyProviderTest {
 
     expect(helperMock.sendGetLogFileNamesRequest(expectedLogSearchComponentName, "c6401.ambari.apache.org")).andReturn(Collections.singleton(expectedLogFilePath));
     expect(helperMock.sendLogLevelQueryRequest(expectedLogSearchComponentName,"c6401.ambari.apache.org")).andReturn(levelQueryResponse).atLeastOnce();
+    expect(helperMock.createLogFileTailURI(expectedAmbariURL + expectedSearchEnginePath, expectedLogSearchComponentName, "c6401.ambari.apache.org")).andReturn("").atLeastOnce();
 
     Request requestMock =
       mockSupport.createMock(Request.class);
@@ -208,8 +209,6 @@ public class LoggingSearchPropertyProviderTest {
       expectedLogFilePath, definitionInfo.getLogFileName());
     assertEquals("Incorrect URL path to searchEngine",
       expectedAmbariURL + expectedSearchEnginePath, definitionInfo.getSearchEngineURL());
-    assertEquals("Incorrect URL path to log file tail",
-      expectedAmbariURL + expectedSearchEnginePath + expectedTailFileQueryString, definitionInfo.getLogFileTailURL());
 
 
     // verify that the log level count information